커뮤니티

보내주신 수식대로 하니까 다르게 되네요... 확인 부탁드려요

프로필 이미지
이형지
2018-09-12 10:52:10
239
글번호 121987
답변완료

첨부 이미지

첨부 차트는 쿠르드오일입니다. 조건: 1.일봉 5<10<20(역배열)이 아닐때 유효 2.매수 조건 : RSI(14)<25 & 전일/전전일 보다 낮은 때마다 매수(총 10계약) 3.매수 청산 : RSI(14)>70 전량 청산 4.매도 조건 : RSI(14)>80 & 전일/전전일 보다 높을 때마다 매도(총 10계약) 5.매도 청산 : RSI(14)>20 전량 청산 해당 조건의 수식은 다음과 같습니다.(알려주신 식) input : P1(5),P2(10),P3(20); var : count(0); var : sumV1(0),sumV2(0),sumV3(0); var : mav1(0),mav2(0),mav3(0),T(0); sumV1 = 0; sumV2 = 0; sumV3 = 0; for count = 0 to P3{ if count < P1 Then sumV1 = sumV1+DayClose(count); if count < P2 Then sumV2 = sumV2+DayClose(count); if count < P3 Then sumV3 = sumV3+DayClose(count); } maV1 = sumV1 / P1; maV2 = sumV2 / P2; maV3 = sumV3 / P3; if mav1 > mav2 and mav2 > mav3 Then T = 1; Else if mav1 < mav2 and mav2 < mav3 Then T = -1; Else T = 0; var1 = RSI(14); if T >= 0 then { if var1 <= 25 and C < C[1] and C < C[2] and C < C[3] and (MarketPosition <= 0 or (MarketPosition == 1 and MaxContracts < 10)) Then buy("매수",OnClose,def,1); } if MarketPosition == 1 and var1 >= 70 Then exitlong("매수청산"); if T >= 0 then { if var1 >= 80 and C > C[1] and C > C[2] and C > C[3] and (MarketPosition <= 0 or (MarketPosition == -1 and MaxContracts < 10)) Then Sell("매도",OnClose,def,1); } if MarketPosition == -1 and var1 < 20 Then ExitShort("매도청산"); ======================================================================================= 조건: 1.일봉 5<10<20(역배열)이 아닐때 유효 2.매수 조건 : RSI(14)<25 & 전일/전전일 보다 낮은 때마다 건너뛰기 매수(총 10계약) 3.매수 청산 : RSI(14)>70 전량 청산 4.매도 조건 : RSI(14)>80 & 전일/전전일 보다 높을 때마다 건너뛰기 매도(총 10계약) 5.매도 청산 : RSI(14)>20 전량 청산 *건너뛰기: 최초신호:진입 두번째신호: skip 세번째신호:진입 네번째신호:skip 해당 조건의 수식은 다음과 같습니다.(알려주신 식) input : P1(5),P2(10),P3(20); var : count(0); var : sumV1(0),sumV2(0),sumV3(0); var : mav1(0),mav2(0),mav3(0),T(0); var : Bcnt(0),Scnt(0); sumV1 = 0; sumV2 = 0; sumV3 = 0; for count = 0 to P3 { if count < P1 Then sumV1 = sumV1+DayClose(count); if count < P2 Then sumV2 = sumV2+DayClose(count); if count < P3 Then sumV3 = sumV3+DayClose(count); } maV1 = sumV1 / P1; maV2 = sumV2 / P2; maV3 = sumV3 / P3; if mav1 > mav2 and mav2 > mav3 Then T = 1; Else if mav1 < mav2 and mav2 < mav3 Then T = -1; Else T = 0; var1 = RSI(14); if T >= 0 then { if var1 <= 25 and C < C[1] and C < C[2] and C < C[3] Then { if MarketPosition == 0 Then buy("B"); if MarketPosition == 1 Then { Bcnt = Bcnt+1; if Bcnt%2 == 0 and MaxContracts < 10 Then buy("BB",OnClose,def,1); } } } if MarketPosition != 1 Then Bcnt = 0; if MarketPosition == 1 and var1 >= 70 Then ExitLong("매수청산"); if T >= 0 then { if var1 >= 80 and C > C[1] and C > C[2] and C > C[3] then { if MarketPosition == 0 Then Sell("S1"); if MarketPosition == -1 Then { Scnt = Scnt +1; if Scnt%2 == 0 and MaxContracts < 10 Then Sell("SS",OnClose,def,1); } } } if MarketPosition == -1 and var1 < 20 Then ExitShort("매도청산"); if MarketPosition != -1 Then Scnt = 0; ===================================================================================== 이렇게 했는데 첨부화일을 보면 알겠지만 진입/청산이 다르게 나오네요... 저는 신호발생시마다 진입하는것이 부담되어서 건너뛰기 진입하려고 했던건데... 아에 매수 진입이 되지 않는 부분이 있어서 무슨 문제인지 알려주시면 감사하겠습니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2018-09-12 14:54:14

안녕하세요 예스스탁입니다. 식을 수정했습니다. 모든 첫진입이 무포지션에서만 동작하게 되어 있었습니다. 목표수익등 강제청산은 동일내용으로 설정되어 있어야 합니다. 첨부된 그림에서 상단이 기존수식, 하단이 수정한 식입니다. input : P1(5),P2(10),P3(20); var : count(0); var : sumV1(0),sumV2(0),sumV3(0); var : mav1(0),mav2(0),mav3(0),T(0); sumV1 = 0; sumV2 = 0; sumV3 = 0; for count = 0 to P3{ if count < P1 Then sumV1 = sumV1+DayClose(count); if count < P2 Then sumV2 = sumV2+DayClose(count); if count < P3 Then sumV3 = sumV3+DayClose(count); } maV1 = sumV1 / P1; maV2 = sumV2 / P2; maV3 = sumV3 / P3; if mav1 > mav2 and mav2 > mav3 Then T = 1; Else if mav1 < mav2 and mav2 < mav3 Then T = -1; Else T = 0; var1 = RSI(14); if T >= 0 then { if var1 <= 25 and C < C[1] and C < C[2] and C < C[3] and (MarketPosition <= 0 or (MarketPosition == 1 and MaxContracts < 10)) Then buy("B",OnClose,def,1); } if MarketPosition == 1 and var1 >= 70 Then exitlong("매수청산"); if T >= 0 then { if var1 >= 80 and C > C[1] and C > C[2] and C > C[3] and (MarketPosition <= 0 or (MarketPosition == -1 and MaxContracts < 10)) Then Sell("S",OnClose,def,1); } if MarketPosition == -1 and var1 < 20 Then ExitShort("매도청산"); 즐거운 하루되세요 > 이형지 님이 쓴 글입니다. > 제목 : 보내주신 수식대로 하니까 다르게 되네요... 확인 부탁드려요 > 첨부 차트는 쿠르드오일입니다. 조건: 1.일봉 5<10<20(역배열)이 아닐때 유효 2.매수 조건 : RSI(14)<25 & 전일/전전일 보다 낮은 때마다 매수(총 10계약) 3.매수 청산 : RSI(14)>70 전량 청산 4.매도 조건 : RSI(14)>80 & 전일/전전일 보다 높을 때마다 매도(총 10계약) 5.매도 청산 : RSI(14)>20 전량 청산 해당 조건의 수식은 다음과 같습니다.(알려주신 식) input : P1(5),P2(10),P3(20); var : count(0); var : sumV1(0),sumV2(0),sumV3(0); var : mav1(0),mav2(0),mav3(0),T(0); sumV1 = 0; sumV2 = 0; sumV3 = 0; for count = 0 to P3{ if count < P1 Then sumV1 = sumV1+DayClose(count); if count < P2 Then sumV2 = sumV2+DayClose(count); if count < P3 Then sumV3 = sumV3+DayClose(count); } maV1 = sumV1 / P1; maV2 = sumV2 / P2; maV3 = sumV3 / P3; if mav1 > mav2 and mav2 > mav3 Then T = 1; Else if mav1 < mav2 and mav2 < mav3 Then T = -1; Else T = 0; var1 = RSI(14); if T >= 0 then { if var1 <= 25 and C < C[1] and C < C[2] and C < C[3] and (MarketPosition <= 0 or (MarketPosition == 1 and MaxContracts < 10)) Then buy("매수",OnClose,def,1); } if MarketPosition == 1 and var1 >= 70 Then exitlong("매수청산"); if T >= 0 then { if var1 >= 80 and C > C[1] and C > C[2] and C > C[3] and (MarketPosition <= 0 or (MarketPosition == -1 and MaxContracts < 10)) Then Sell("매도",OnClose,def,1); } if MarketPosition == -1 and var1 < 20 Then ExitShort("매도청산"); ======================================================================================= 조건: 1.일봉 5<10<20(역배열)이 아닐때 유효 2.매수 조건 : RSI(14)<25 & 전일/전전일 보다 낮은 때마다 건너뛰기 매수(총 10계약) 3.매수 청산 : RSI(14)>70 전량 청산 4.매도 조건 : RSI(14)>80 & 전일/전전일 보다 높을 때마다 건너뛰기 매도(총 10계약) 5.매도 청산 : RSI(14)>20 전량 청산 *건너뛰기: 최초신호:진입 두번째신호: skip 세번째신호:진입 네번째신호:skip 해당 조건의 수식은 다음과 같습니다.(알려주신 식) input : P1(5),P2(10),P3(20); var : count(0); var : sumV1(0),sumV2(0),sumV3(0); var : mav1(0),mav2(0),mav3(0),T(0); var : Bcnt(0),Scnt(0); sumV1 = 0; sumV2 = 0; sumV3 = 0; for count = 0 to P3 { if count < P1 Then sumV1 = sumV1+DayClose(count); if count < P2 Then sumV2 = sumV2+DayClose(count); if count < P3 Then sumV3 = sumV3+DayClose(count); } maV1 = sumV1 / P1; maV2 = sumV2 / P2; maV3 = sumV3 / P3; if mav1 > mav2 and mav2 > mav3 Then T = 1; Else if mav1 < mav2 and mav2 < mav3 Then T = -1; Else T = 0; var1 = RSI(14); if T >= 0 then { if var1 <= 25 and C < C[1] and C < C[2] and C < C[3] Then { if MarketPosition == 0 Then buy("B"); if MarketPosition == 1 Then { Bcnt = Bcnt+1; if Bcnt%2 == 0 and MaxContracts < 10 Then buy("BB",OnClose,def,1); } } } if MarketPosition != 1 Then Bcnt = 0; if MarketPosition == 1 and var1 >= 70 Then ExitLong("매수청산"); if T >= 0 then { if var1 >= 80 and C > C[1] and C > C[2] and C > C[3] then { if MarketPosition == 0 Then Sell("S1"); if MarketPosition == -1 Then { Scnt = Scnt +1; if Scnt%2 == 0 and MaxContracts < 10 Then Sell("SS",OnClose,def,1); } } } if MarketPosition == -1 and var1 < 20 Then ExitShort("매도청산"); if MarketPosition != -1 Then Scnt = 0; ===================================================================================== 이렇게 했는데 첨부화일을 보면 알겠지만 진입/청산이 다르게 나오네요... 저는 신호발생시마다 진입하는것이 부담되어서 건너뛰기 진입하려고 했던건데... 아에 매수 진입이 되지 않는 부분이 있어서 무슨 문제인지 알려주시면 감사하겠습니다.