커뮤니티

수식 수정

프로필 이미지
에구머니
2017-11-16 14:25:58
194
글번호 114249
답변완료
안녕하세요? 지난번에 비슷한 수식 2개를 부탁드렸었는데, 둘 다 잘 안되어서 여태 혼자 이모양 저모양으로 끙끙대다가 제 실력으로는 잘 안되어서 다시금 수식 수정을 부탁드립니다. 감사합니다.
시스템
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2017-11-17 11:52:24

안녕하세요 예스스탁입니다. 1 연속손실횟수 체크하는 수식에 문제가 있었습니다. 진입함수의 수량변수도 잘못 지정되어 있었습니다. 아래식으로 변경하시면 됩니다. Input: L1(1), L2(1), L3(1), L4(2), L5(2), L6(2), L7(3), L8(3), L9(3), L10(3); Input: TP1(3), TP2(3), TP3(3), TP4(3.5), TP5(3.5), TP6(3.5), TP7(4), TP8(4), TP9(4), TP10(4); Input: SL1(3), SL2(3), SL3(3), SL4(3.5), SL5(3.5), SL6(3.5), SL7(4), SL8(4), SL9(4), SL10(4); var: 매수조건(false), 매도조건(false),Atrv(0),cnt(0),연속손실횟수(0); Array : LV[11](0),TP[11](0),SL[11](0); // 익절과 손절의 기준은 Atrv = atr(50)임. Atrv = atr(50); Lv[0] = L1; Lv[1] = L2; Lv[2] = L3; Lv[3] = L4; Lv[4] = L5; Lv[5] = L6; Lv[6] = L7; Lv[7] = L8; Lv[8] = L9; Lv[9] = L10; TP[0] = TP1; TP[1] = TP2; TP[2] = TP3; TP[3] = TP4; TP[4] = TP5; TP[5] = TP6; TP[6] = TP7; TP[7] = TP8; TP[8] = TP9; TP[9] = TP10; SL[0] = SL1; SL[1] = SL2; SL[2] = SL3; SL[3] = SL4; SL[4] = SL5; SL[5] = SL6; SL[6] = SL7; SL[7] = SL8; SL[8] = SL9; SL[9] = SL10; 연속손실횟수 = 0; for cnt = 10 DownTo 1{ if IsExitName("bl",cnt) or IsExitName("sl",cnt) Then 연속손실횟수 = 연속손실횟수+1; Else 연속손실횟수 = 0; } if 매수조건 Then{ MessageLog("%.f",연속손실횟수); buy("b",OnClose,def,Lv[연속손실횟수]); } if 매도조건 Then{ MessageLog("%.f",연속손실횟수); sell("s",OnClose,def,Lv[연속손실횟수]); } if MarketPosition == 1 then { ExitLong("bp",AtLimit,EntryPrice+ATRV*TP[연속손실횟수]); ExitLong("bl",AtStop,EntryPrice-ATRV*SL[연속손실횟수]); } if MarketPosition == -1 then { ExitShort("sp",AtLimit,EntryPrice-ATRV*TP[연속손실횟수]); ExitShort("sl",AtStop,EntryPrice+ATRV*SL[연속손실횟수]); } 참고로 손실을 수식상 손절식(bl,sl)에 의한것만 연속체크합니다. 반대진입조건으로 청산하는 내용은 포함하지 않습니다. 해당 부분까지 포함해 포지션 자체의 손실로 체크하고자 하시면 아래와 같이 변경하시면 됩니다. 연속손실횟수 = 0; for cnt = 9 DownTo 0{ if PositionProfit(cnt) < 0 Then 연속손실횟수 = 연속손실횟수+1; Else 연속손실횟수 = 0; } 2 연속손실관련 계산부분은 삭제하시면 됩니다. 계산하고 수식에서 사용하지 않습니다. 수식 자체에 추가진입은 정상적으로 추가되고 있습니다. 추가진입폭이 상당히 큰폭이므로 해당부분은 조건만족여부 확인하시기 바랍니다. 청산식중 평단가 청산식에는 오류가 있어 수정했습니다. Input: L1(1), L2(1), L3(1), L4(2), L5(2), L6(2), L7(3), L8(3), L9(3), L10(3); input : TP1(3), TP2(3), TP3(3), TP4(3.5), TP5(3.5), TP6(3.5), TP7(4), TP8(4), TP9(4), TP10(4); input : Step2(3), Step3(3), Step4(3.5), Step5(3.5), Step6(3.5), Step7(4), Step8(4), Step9(4), Step10(4); input : Stopp(5); var: 매수조건(false), 매도조건(false),Atrv(0); Array : LV[11](0),TP[11](0),ST[11](0); // 익절과 손절의 기준은 Atrv = atr(50)임. Atrv = atr(50); Lv[0] = L1; Lv[1] = L2; Lv[2] = L3; Lv[3] = L4; Lv[4] = L5; Lv[5] = L6; Lv[6] = L7; Lv[7] = L8; Lv[8] = L9; Lv[9] = L10; TP[0] = TP1; TP[1] = TP2; TP[2] = TP3; TP[3] = TP4; TP[4] = TP5; TP[5] = TP6; TP[6] = TP7; TP[7] = TP8; TP[8] = TP9; TP[9] = TP10; ST[1] = Step2; ST[2] = Step3; ST[3] = Step4; ST[4] = Step5; ST[5] = Step6; ST[6] = Step7; ST[7] = Step8; ST[8] = Step9; St[9] = Step10; 매수조건 = crossup(c,ma(c,60)); 매도조건 = crossdown(c,ma(c,60)); if MarketPosition <= 0 and 매수조건 Then buy("b",OnClose,def,L1[0]); if MarketPosition >= 0 and 매도조건 Then sell("s",OnClose,def,L1[0]); if MarketPosition == 1 then { buy("bb",atlimit,LatestEntryPrice(0)-atrv*ST[MaxEntries],Lv[MaxEntries]); ExitLong("bp",AtLimit,avgEntryPrice+ATRV*TP[MaxEntries]); } if MarketPosition == -1 then { sell("ss",atlimit,LatestEntryPrice(0)+atrv*ST[MaxEntries],Lv[MaxEntries]); ExitShort("sp",AtLimit,avgEntryPrice-ATRV*TP[MaxEntries]); } 즐거운 하루되세요 > 에구머니 님이 쓴 글입니다. > 제목 : 수식 수정 > 안녕하세요? 지난번에 비슷한 수식 2개를 부탁드렸었는데, 둘 다 잘 안되어서 여태 혼자 이모양 저모양으로 끙끙대다가 제 실력으로는 잘 안되어서 다시금 수식 수정을 부탁드립니다. 감사합니다.
프로필 이미지

에구머니

2017-11-17 14:12:17

여전히, 잘 안됩니다. 그래서, 상황을 좀 더 구체화 시켰습니다. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 수식 수정 > 안녕하세요 예스스탁입니다. 1 연속손실횟수 체크하는 수식에 문제가 있었습니다. 진입함수의 수량변수도 잘못 지정되어 있었습니다. 아래식으로 변경하시면 됩니다. Input: L1(1), L2(1), L3(1), L4(2), L5(2), L6(2), L7(3), L8(3), L9(3), L10(3); Input: TP1(3), TP2(3), TP3(3), TP4(3.5), TP5(3.5), TP6(3.5), TP7(4), TP8(4), TP9(4), TP10(4); Input: SL1(3), SL2(3), SL3(3), SL4(3.5), SL5(3.5), SL6(3.5), SL7(4), SL8(4), SL9(4), SL10(4); var: 매수조건(false), 매도조건(false),Atrv(0),cnt(0),연속손실횟수(0); Array : LV[11](0),TP[11](0),SL[11](0); // 익절과 손절의 기준은 Atrv = atr(50)임. Atrv = atr(50); Lv[0] = L1; Lv[1] = L2; Lv[2] = L3; Lv[3] = L4; Lv[4] = L5; Lv[5] = L6; Lv[6] = L7; Lv[7] = L8; Lv[8] = L9; Lv[9] = L10; TP[0] = TP1; TP[1] = TP2; TP[2] = TP3; TP[3] = TP4; TP[4] = TP5; TP[5] = TP6; TP[6] = TP7; TP[7] = TP8; TP[8] = TP9; TP[9] = TP10; SL[0] = SL1; SL[1] = SL2; SL[2] = SL3; SL[3] = SL4; SL[4] = SL5; SL[5] = SL6; SL[6] = SL7; SL[7] = SL8; SL[8] = SL9; SL[9] = SL10; 연속손실횟수 = 0; for cnt = 10 DownTo 1{ if IsExitName("bl",cnt) or IsExitName("sl",cnt) Then 연속손실횟수 = 연속손실횟수+1; Else 연속손실횟수 = 0; } if 매수조건 Then{ MessageLog("%.f",연속손실횟수); buy("b",OnClose,def,Lv[연속손실횟수]); } if 매도조건 Then{ MessageLog("%.f",연속손실횟수); sell("s",OnClose,def,Lv[연속손실횟수]); } if MarketPosition == 1 then { ExitLong("bp",AtLimit,EntryPrice+ATRV*TP[연속손실횟수]); ExitLong("bl",AtStop,EntryPrice-ATRV*SL[연속손실횟수]); } if MarketPosition == -1 then { ExitShort("sp",AtLimit,EntryPrice-ATRV*TP[연속손실횟수]); ExitShort("sl",AtStop,EntryPrice+ATRV*SL[연속손실횟수]); } 참고로 손실을 수식상 손절식(bl,sl)에 의한것만 연속체크합니다. 반대진입조건으로 청산하는 내용은 포함하지 않습니다. 해당 부분까지 포함해 포지션 자체의 손실로 체크하고자 하시면 아래와 같이 변경하시면 됩니다. 연속손실횟수 = 0; for cnt = 9 DownTo 0{ if PositionProfit(cnt) < 0 Then 연속손실횟수 = 연속손실횟수+1; Else 연속손실횟수 = 0; } 2 연속손실관련 계산부분은 삭제하시면 됩니다. 계산하고 수식에서 사용하지 않습니다. 수식 자체에 추가진입은 정상적으로 추가되고 있습니다. 추가진입폭이 상당히 큰폭이므로 해당부분은 조건만족여부 확인하시기 바랍니다. 청산식중 평단가 청산식에는 오류가 있어 수정했습니다. Input: L1(1), L2(1), L3(1), L4(2), L5(2), L6(2), L7(3), L8(3), L9(3), L10(3); input : TP1(3), TP2(3), TP3(3), TP4(3.5), TP5(3.5), TP6(3.5), TP7(4), TP8(4), TP9(4), TP10(4); input : Step2(3), Step3(3), Step4(3.5), Step5(3.5), Step6(3.5), Step7(4), Step8(4), Step9(4), Step10(4); input : Stopp(5); var: 매수조건(false), 매도조건(false),Atrv(0); Array : LV[11](0),TP[11](0),ST[11](0); // 익절과 손절의 기준은 Atrv = atr(50)임. Atrv = atr(50); Lv[0] = L1; Lv[1] = L2; Lv[2] = L3; Lv[3] = L4; Lv[4] = L5; Lv[5] = L6; Lv[6] = L7; Lv[7] = L8; Lv[8] = L9; Lv[9] = L10; TP[0] = TP1; TP[1] = TP2; TP[2] = TP3; TP[3] = TP4; TP[4] = TP5; TP[5] = TP6; TP[6] = TP7; TP[7] = TP8; TP[8] = TP9; TP[9] = TP10; ST[1] = Step2; ST[2] = Step3; ST[3] = Step4; ST[4] = Step5; ST[5] = Step6; ST[6] = Step7; ST[7] = Step8; ST[8] = Step9; St[9] = Step10; 매수조건 = crossup(c,ma(c,60)); 매도조건 = crossdown(c,ma(c,60)); if MarketPosition <= 0 and 매수조건 Then buy("b",OnClose,def,L1[0]); if MarketPosition >= 0 and 매도조건 Then sell("s",OnClose,def,L1[0]); if MarketPosition == 1 then { buy("bb",atlimit,LatestEntryPrice(0)-atrv*ST[MaxEntries],Lv[MaxEntries]); ExitLong("bp",AtLimit,avgEntryPrice+ATRV*TP[MaxEntries]); } if MarketPosition == -1 then { sell("ss",atlimit,LatestEntryPrice(0)+atrv*ST[MaxEntries],Lv[MaxEntries]); ExitShort("sp",AtLimit,avgEntryPrice-ATRV*TP[MaxEntries]); } 즐거운 하루되세요 > 에구머니 님이 쓴 글입니다. > 제목 : 수식 수정 > 안녕하세요? 지난번에 비슷한 수식 2개를 부탁드렸었는데, 둘 다 잘 안되어서 여태 혼자 이모양 저모양으로 끙끙대다가 제 실력으로는 잘 안되어서 다시금 수식 수정을 부탁드립니다. 감사합니다.