커뮤니티
왜 로직이 적용이 안되죠?
2011-05-17 22:43:16
800
글번호 38752
kodex리버리지 일봉을 대상으로 한 시스템 트레이딩인데..
과거는 신호가 제대로 나오는데..
가장 최근에 매수청산 신호가 안나오네요.
SAR 매도 신호 발생시 매도 인데.. 분명히 매도신호가 나와야 하는데
안나오네요.
이유가 무엇일까요?
아래는 로직이고, 화면 캡처 올립니다.
Input : EmaLen(13), macd1(12), macd2(26), macd3(9), stoploss(5), len(5), mult(8), DiV(25);
input: LongEmaLen(65), Longmacd1(60), Longmacd2(130), Longmacd3(45);
//내부입력 변수
var : emaV(0), MacdV(0), MacdS(0), MacdOsc(0);
var : mp(0), stopprice(0), LemaV(0), LmacdV(0), LmacdS(0), LmacdOsc(0);
# intermediate timeframe(기준 시간프레임)
emaV = ema(C,EmaLen);
// emaV는 13일 지수이동평균
MacdV = macd(macd1,macd2);
// MacdV는 macd(12,26)
MacdS = ema(MacdV,macd3);
//MacdS는 macd(12,26)의 9지수이평
MacdOsc = MacdV-MacdS;
//MacdOsc는 macd(12,26) - macd(12,26)의 9지수이평
//Ema(c,20) → 20 지수이동평균
# intermediate timeframe*5(주추세 시간프레임)
LemaV = ema(C,LongEmaLen);
//LemaV= 65 지수이평
LmacdV = macd(Longmacd1,Longmacd2);
// LmacdV=macd(60,130)
LmacdS = ema(LmacdV,Longmacd3);
// LmacdS = macd(60,130)의 45이평
LmacdOsc = LmacdV-LmacdS;
//LmacdOsc는 macd(60,130) - macd(60,130)의 45이평
# 매수진입
If LemaV > LemaV[1] and LmacdOsc > LmacdOsc[1] then {
// 65일 지수이동평균이 바로전 지수이동평균 보다 크고, macd(60,130) - macd(60,130)의 45이평
// 의 값이 바로전봉의 값보다 클때
if emaV > emaV[1] and macdOsc > MacdOsc[1] Then
buy();
// 13일 지수이동평균 이 전봉 13일 지수이동평균보다 크고, macd(12,26) - macd(12,26)의 9지수이평값이
// 전봉 가격보다 크면 매수진입
}
//ATR추적 청산
//If marketposition<>0 Then { //매수포지션이 있으면
// exitlong("매수청산",Atstop,highest(high,barssinceentry+1)-atr(20)*len);
// }
mp = marketposition;
#mp에 marketposition(포지션의 상태값) 저장 매수 : 1, 매도 : -1, 무포지션 : 0
if MP == 1 and MP[1] <> 1 then Begin
StopPrice = low - ma(range,4)*mult;
end;
# 만약 현재포지션이 매수상태이고 , 바로전봉이 매수상태가 아니면, 즉 이번봉이 매수의 첫시작이면
# StopPrice에 (저가 - 최근 4개봉의 range의 평균값에 mult값을 곱한값) =을 저장
If MP == 1 then begin
exitlong ("ExitLong", atstop,stopprice );
stopprice = stopprice +( low-stopprice )/Div;
end;
/* 매수포지션이면
stopprice보다 낮은 시세시 청산
청산조건에 맞지않으면 stopprice에 (해당봉의 저가와 stopprice의 차이)를 25로 나눈값만큼 추가
즉 현재봉에 stopprice보나 낮은 시세가 들어오지 않으면 (해당봉의 저가와 stopprice의 차이)를 25로 나눈값만큼을
추가하여 다음봉의 stopprice로 잡음(즉 진입이후에 봉갯수가 늘어날때마다 청산라인이 조금씩 올라가게 됨)
*/
input : af(0.0045), maxaf(0.1); //기본식 AF는 0.002지만 최적화 결과 0.0045에서 좋을결과를 나타내었다.
var : parabolic(0);
parabolic = sar(af, maxaf);
if MarketPosition <> 0 then {
if c > parabolic Then
exitlong("EL_파라볼릭청산", ATSTOP, PARABOLIC);
}
- 1. 39048_1.jpg (0.59 MB)
답변 1
예스스탁 예스스탁 답변
2011-05-18 10:13:56
안녕하세요
예스스탁입니다.
해당 봉구간에는 조건에 만족한 봉이 없습니다.
parabolic = sar(af, maxaf);
if MarketPosition <> 0 then {
if c > parabolic Then
exitlong("EL_파라볼릭청산", ATSTOP, PARABOLIC);
}
청산식의 내용을 보시면 현재봉의 종가가 파라볼릭보다 클때
현재봉의 파라볼릭값 이하의 시세가 다음봉에서 나오면 청산입니다.
첨부된 그림에서와 같이 ①->②구간이 if문이 만족한 구간이고
최종 ②번봉에서 if조건이 만족하여 ③번봉 까지가 신호가 발생할 수 있고
③이후에는 if문이 맞지 않아 조건성립이 되지 않습니다.
③번봉에 보시면 직전봉의 파라볼릭값은 16943이고
해당봉의 저가는 16975로 16943까지 내려가지 못했으므로
신호가 발생하지 못하고 atstop이 해제가 됩니다.
즐거운 하루되세요
> 도시군인 님이 쓴 글입니다.
> 제목 : 왜 로직이 적용이 안되죠?
>
kodex리버리지 일봉을 대상으로 한 시스템 트레이딩인데..
과거는 신호가 제대로 나오는데..
가장 최근에 매수청산 신호가 안나오네요.
SAR 매도 신호 발생시 매도 인데.. 분명히 매도신호가 나와야 하는데
안나오네요.
이유가 무엇일까요?
아래는 로직이고, 화면 캡처 올립니다.
Input : EmaLen(13), macd1(12), macd2(26), macd3(9), stoploss(5), len(5), mult(8), DiV(25);
input: LongEmaLen(65), Longmacd1(60), Longmacd2(130), Longmacd3(45);
//내부입력 변수
var : emaV(0), MacdV(0), MacdS(0), MacdOsc(0);
var : mp(0), stopprice(0), LemaV(0), LmacdV(0), LmacdS(0), LmacdOsc(0);
# intermediate timeframe(기준 시간프레임)
emaV = ema(C,EmaLen);
// emaV는 13일 지수이동평균
MacdV = macd(macd1,macd2);
// MacdV는 macd(12,26)
MacdS = ema(MacdV,macd3);
//MacdS는 macd(12,26)의 9지수이평
MacdOsc = MacdV-MacdS;
//MacdOsc는 macd(12,26) - macd(12,26)의 9지수이평
//Ema(c,20) → 20 지수이동평균
# intermediate timeframe*5(주추세 시간프레임)
LemaV = ema(C,LongEmaLen);
//LemaV= 65 지수이평
LmacdV = macd(Longmacd1,Longmacd2);
// LmacdV=macd(60,130)
LmacdS = ema(LmacdV,Longmacd3);
// LmacdS = macd(60,130)의 45이평
LmacdOsc = LmacdV-LmacdS;
//LmacdOsc는 macd(60,130) - macd(60,130)의 45이평
# 매수진입
If LemaV > LemaV[1] and LmacdOsc > LmacdOsc[1] then {
// 65일 지수이동평균이 바로전 지수이동평균 보다 크고, macd(60,130) - macd(60,130)의 45이평
// 의 값이 바로전봉의 값보다 클때
if emaV > emaV[1] and macdOsc > MacdOsc[1] Then
buy();
// 13일 지수이동평균 이 전봉 13일 지수이동평균보다 크고, macd(12,26) - macd(12,26)의 9지수이평값이
// 전봉 가격보다 크면 매수진입
}
//ATR추적 청산
//If marketposition<>0 Then { //매수포지션이 있으면
// exitlong("매수청산",Atstop,highest(high,barssinceentry+1)-atr(20)*len);
// }
mp = marketposition;
#mp에 marketposition(포지션의 상태값) 저장 매수 : 1, 매도 : -1, 무포지션 : 0
if MP == 1 and MP[1] <> 1 then Begin
StopPrice = low - ma(range,4)*mult;
end;
# 만약 현재포지션이 매수상태이고 , 바로전봉이 매수상태가 아니면, 즉 이번봉이 매수의 첫시작이면
# StopPrice에 (저가 - 최근 4개봉의 range의 평균값에 mult값을 곱한값) =을 저장
If MP == 1 then begin
exitlong ("ExitLong", atstop,stopprice );
stopprice = stopprice +( low-stopprice )/Div;
end;
/* 매수포지션이면
stopprice보다 낮은 시세시 청산
청산조건에 맞지않으면 stopprice에 (해당봉의 저가와 stopprice의 차이)를 25로 나눈값만큼 추가
즉 현재봉에 stopprice보나 낮은 시세가 들어오지 않으면 (해당봉의 저가와 stopprice의 차이)를 25로 나눈값만큼을
추가하여 다음봉의 stopprice로 잡음(즉 진입이후에 봉갯수가 늘어날때마다 청산라인이 조금씩 올라가게 됨)
*/
input : af(0.0045), maxaf(0.1); //기본식 AF는 0.002지만 최적화 결과 0.0045에서 좋을결과를 나타내었다.
var : parabolic(0);
parabolic = sar(af, maxaf);
if MarketPosition <> 0 then {
if c > parabolic Then
exitlong("EL_파라볼릭청산", ATSTOP, PARABOLIC);
}
다음글