커뮤니티

재문의 드립니다.

프로필 이미지
으쌰
2012-05-30 20:57:09
291
글번호 51502
답변완료
직전에 수식에 대해 재검토를 요청 드렸는데 다시한번 요청 드립니다. NetProfit > value1 조건이 만족할때만 주문이 들어가게 되어있는데 실제 적용해보니 두가지 문제점이 발생하는군요. (물론 우상향 수익이 나는 시스템으로 적용 했습니다.) 문제1. NetProfit 값이 value1 값을 하향 이탈시 마지막 포지션이 계속 보유중으로 마무리 되네요. => 최종포지션 청산하는식이 필요합니다. 문제2. 시스템 재개 문제 입니다. NetProfit 값이 value1 값을 상향 돌파시 시스템이 다시 돌아가는 조건인데요. 직전에 문제1.과 같은 상황이 나와 매매가 이루어 지지 않으면 레코드가 쌓이지 않아 재진입이 이루어 지질 않습니다. 실매매는 이루어 지지 않고 시뮬레이션처럼 시스템이 돌아가야 하는 상황처럼 뭔가 조치가 필요합니다! 정리하자면, NetProfit 값과 value1 값에 의해 중단과 재개가 이루어 졌음 합니다. 신경써 주심에 항상 감사드립니다. ^^ //----------------------------------------------------------- 안녕하세요 예스스탁입니다. 1. 수식이 이전 30개의 거래결과가 필요하므로 최초 진입부터 30번거래까지는 오실레이터 절대값 하락 조건만 추가해서 적용했습니다. 2. 현재 손익이 이전 30개의 최저 누적손익보다 작다면 매매가 중단되므로 더이상 거래가 없어 이후에 진입도 없도 없어 이에 따라 손익의 변화도 없게됩니다. 이에 대한 내용은 추가하셔야 합니다. 3. Input : Period1(12), Period2(26), Period3(9); Var : Ep1(0), EP2(0), EP3(0), JISU1(0), JISU2(0), PreJISU1(0), PreJISU2(0); Var : macdVal(0), preMacdVal(0), macdSig(0),macdOsc(0),PreMacdOsc(0); var : cnt(0); if (dayofweek(date) <= DayOfWeek(date[1]) and sdate > sdate[1]) then { PreJISU1 = JISU1[1]; PreJISU2 = JISU2[1]; PreMacdVal = macdSig[1]; PreMacdOsc = macdOsc[1]; } Ep1 = 2/(Period1+1); EP2 = 2/(Period2+1); EP3 = 2/(Period3+1); JISU1 = C * Ep1 + PreJISU1 * (1-Ep1); //단기지수이동평균 JISU2 = C * Ep2 + PreJISU2 * (1-Ep2); //장기지수이동평균 macdVal = JISU1 - JISU2; //macd macdSig = macdVal * Ep3 + PreMacdVal * (1-Ep3); //macd signal macdOsc = macdval-macdsig; var1 = abs(macdOsc); var2 = BarsSinceExit(1); var3 = BarsSinceEntry(30); var4 = NetProfit; value1 = var4[var2]; for cnt = var2 to var3{ if var4[cnt] < value1 Then value1 = var4[cnt]; } if TotalTrades >= 30 and var1 < var1[1] and NetProfit > value1 then { if crossup(ma(c,5),ma(c,20)) then buy("bb"); if crossdown(ma(c,5),ma(c,20)) then sell("ss"); } if TotalTrades < 30 and var1 < var1[1] then { if crossup(ma(c,5),ma(c,20)) then buy("b"); if crossdown(ma(c,5),ma(c,20)) then sell("s"); } 즐거운 하루되세요 > 으&#49968; 님이 쓴 글입니다. > 제목 : 수식 재문의 드립니다. > 24719 번 게시글 참조해 주세요! 작성해 주신 수식을 적용해보니 매매신호가 한번도 나오질 않습니다. 조건1을 제외하고 조건2만 적용해봐도 마찬가지네요~ 조건2부분의 수식부분을 재검토 부탁 드리겠습니다. 감사합니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2012-05-31 13:17:05

안녕하세요 예스스탁입니다. 문의하신 내용 아래 정도로 작성할 수 있을 것 같습니다. Input : Period1(12), Period2(26), Period3(9); Var : Ep1(0), EP2(0), EP3(0), JISU1(0), JISU2(0), PreJISU1(0), PreJISU2(0); Var : macdVal(0), preMacdVal(0), macdSig(0),macdOsc(0),PreMacdOsc(0); var : cnt(0); if (dayofweek(date) <= DayOfWeek(date[1]) and sdate > sdate[1]) then { PreJISU1 = JISU1[1]; PreJISU2 = JISU2[1]; PreMacdVal = macdSig[1]; PreMacdOsc = macdOsc[1]; } Ep1 = 2/(Period1+1); EP2 = 2/(Period2+1); EP3 = 2/(Period3+1); JISU1 = C * Ep1 + PreJISU1 * (1-Ep1); //단기지수이동평균 JISU2 = C * Ep2 + PreJISU2 * (1-Ep2); //장기지수이동평균 macdVal = JISU1 - JISU2; //macd macdSig = macdVal * Ep3 + PreMacdVal * (1-Ep3); //macd signal macdOsc = macdval-macdsig; var1 = abs(macdOsc); if value1 <= 1 and var1 < var1[1] and crossup(ma(c,5),ma(c,20)) Then{ value1 = 1; if value1[1] == -1 then value4 = (value2-C); value2 = c; value3 = value3+value4; } if value1 >= 1 and var1 < var1[1] and CrossDown(ma(c,5),ma(c,20)) Then{ value1 = -1; if value1[1] == 1 Then value4 = (C-value2); value2 = c; value3 = value3+value4; } if value1 == 1 Then value4 = (C-value2); if value1 == -1 Then value4 = (value2-C); value5 = value3+value4; var2 = BarsSinceExit(1); var3 = BarsSinceEntry(30); value11 = value5[var2]; for cnt = var2 to var3{ if value5[cnt] < value11 Then value11 = value5[cnt]; } if TotalTrades >= 30 and var1 < var1[1] and value5 > value11 then { if crossup(ma(c,5),ma(c,20)) then buy("bb"); if crossdown(ma(c,5),ma(c,20)) then sell("ss"); } if TotalTrades < 30 and var1 < var1[1] then { if crossup(ma(c,5),ma(c,20)) then buy("b"); if crossdown(ma(c,5),ma(c,20)) then sell("s"); } if MarketPosition == 1 and var1 < var1[1] and crossup(ma(c,5),ma(c,20)) then ExitLong("bx"); if MarketPosition == -1 and var1 < var1[1] and CrossDown(ma(c,5),ma(c,20)) then Exitshort("sx"); 가상의 손익을 계산하시면 전략내용등에 맞춰 조절해 가시면서 작성하셔야 됩니다. 전략에 따라 해당 내용 많이 다르게 작성해야 할 여지가 많은 내용입니다. 즐거운 하루되세요 > 으&#49968; 님이 쓴 글입니다. > 제목 : 재문의 드립니다. > 직전에 수식에 대해 재검토를 요청 드렸는데 다시한번 요청 드립니다. NetProfit > value1 조건이 만족할때만 주문이 들어가게 되어있는데 실제 적용해보니 두가지 문제점이 발생하는군요. (물론 우상향 수익이 나는 시스템으로 적용 했습니다.) 문제1. NetProfit 값이 value1 값을 하향 이탈시 마지막 포지션이 계속 보유중으로 마무리 되네요. => 최종포지션 청산하는식이 필요합니다. 문제2. 시스템 재개 문제 입니다. NetProfit 값이 value1 값을 상향 돌파시 시스템이 다시 돌아가는 조건인데요. 직전에 문제1.과 같은 상황이 나와 매매가 이루어 지지 않으면 레코드가 쌓이지 않아 재진입이 이루어 지질 않습니다. 실매매는 이루어 지지 않고 시뮬레이션처럼 시스템이 돌아가야 하는 상황처럼 뭔가 조치가 필요합니다! 정리하자면, NetProfit 값과 value1 값에 의해 중단과 재개가 이루어 졌음 합니다. 신경써 주심에 항상 감사드립니다. ^^ //----------------------------------------------------------- 안녕하세요 예스스탁입니다. 1. 수식이 이전 30개의 거래결과가 필요하므로 최초 진입부터 30번거래까지는 오실레이터 절대값 하락 조건만 추가해서 적용했습니다. 2. 현재 손익이 이전 30개의 최저 누적손익보다 작다면 매매가 중단되므로 더이상 거래가 없어 이후에 진입도 없도 없어 이에 따라 손익의 변화도 없게됩니다. 이에 대한 내용은 추가하셔야 합니다. 3. Input : Period1(12), Period2(26), Period3(9); Var : Ep1(0), EP2(0), EP3(0), JISU1(0), JISU2(0), PreJISU1(0), PreJISU2(0); Var : macdVal(0), preMacdVal(0), macdSig(0),macdOsc(0),PreMacdOsc(0); var : cnt(0); if (dayofweek(date) <= DayOfWeek(date[1]) and sdate > sdate[1]) then { PreJISU1 = JISU1[1]; PreJISU2 = JISU2[1]; PreMacdVal = macdSig[1]; PreMacdOsc = macdOsc[1]; } Ep1 = 2/(Period1+1); EP2 = 2/(Period2+1); EP3 = 2/(Period3+1); JISU1 = C * Ep1 + PreJISU1 * (1-Ep1); //단기지수이동평균 JISU2 = C * Ep2 + PreJISU2 * (1-Ep2); //장기지수이동평균 macdVal = JISU1 - JISU2; //macd macdSig = macdVal * Ep3 + PreMacdVal * (1-Ep3); //macd signal macdOsc = macdval-macdsig; var1 = abs(macdOsc); var2 = BarsSinceExit(1); var3 = BarsSinceEntry(30); var4 = NetProfit; value1 = var4[var2]; for cnt = var2 to var3{ if var4[cnt] < value1 Then value1 = var4[cnt]; } if TotalTrades >= 30 and var1 < var1[1] and NetProfit > value1 then { if crossup(ma(c,5),ma(c,20)) then buy("bb"); if crossdown(ma(c,5),ma(c,20)) then sell("ss"); } if TotalTrades < 30 and var1 < var1[1] then { if crossup(ma(c,5),ma(c,20)) then buy("b"); if crossdown(ma(c,5),ma(c,20)) then sell("s"); } 즐거운 하루되세요 > 으&#49968; 님이 쓴 글입니다. > 제목 : 수식 재문의 드립니다. > 24719 번 게시글 참조해 주세요! 작성해 주신 수식을 적용해보니 매매신호가 한번도 나오질 않습니다. 조건1을 제외하고 조건2만 적용해봐도 마찬가지네요~ 조건2부분의 수식부분을 재검토 부탁 드리겠습니다. 감사합니다.