커뮤니티
수식 수정
2017-11-16 14:25:58
194
글번호 114249
안녕하세요?
지난번에 비슷한 수식 2개를 부탁드렸었는데, 둘 다 잘 안되어서 여태 혼자 이모양 저모양으로 끙끙대다가 제 실력으로는 잘 안되어서 다시금 수식 수정을 부탁드립니다.
감사합니다.
- 1. 2017_11_16.zip (0.35 MB)
답변 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개를 부탁드렸었는데, 둘 다 잘 안되어서 여태 혼자 이모양 저모양으로 끙끙대다가 제 실력으로는 잘 안되어서 다시금 수식 수정을 부탁드립니다.
감사합니다.
다음글
이전글