커뮤니티

왜 로직이 적용이 안되죠?

프로필 이미지
도시군인
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
프로필 이미지

예스스탁 예스스탁 답변

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); }