답변완료
진입별 청산 재질문
아래 답변 감사합니다.
알려주신대로 VAR3, VAR9등을 초기화 했더니, 해당일에 반복적으로 진입하고 청산되는 현상을 사라졌습니다.
다만, 매도진입포지션을 청산하면서 진입하는 경우에는 여전히 해당 손절이 적용이 안되네요..
C매도 포지션상태에서 A_MT 매수신호가 발생되어 청산시키고 진입하는 경우에는
원하는 손절이 적용이 여전히 안되고 있습니다. 뭐가 문제일까요...
무포지션에서 A_MT매수진입건은 잘 적용이 되구요...
해당구간 전후로 VAR9 값을 찍어보았더니, 해당매수가 발생했어도 매도를 청산하고 진입해서 인지 진입가격(entryprice)이 아닌 계속 0으로 나옵니다. 버그같은게 아닌지요...
---------------------------------------------------
안녕하세요
예스스탁입니다.
수식의 var3,var9는 매수포지션이 아니면 0으로 초기화가 되게 하셔야 합니다.
새로 진입하고 지정한 이름의 진입이 발생하면 새로운 값을 저장하게 됩니다.
청산식에 var3 > 0, var9 > 0이라는 조건이 있는 이유도
매수진입후 지정한 이름의 진입이 발생해서 값이 저장되었다는 의미입니다.
초기화가 없으면 기존값이 유지가 되므로 다음 매수진입하게 되면 기존 저장된 값 대비로 신호가 발생하게 됩니다.
if Marketposition() == 1 then
{
if CurrentContracts > CurrentContracts[1] Then
{
if LatestEntryName(0) == "A" Then
var3 = LatestEntryPrice(0);
if LatestEntryName(0) == "A_MT" Then
var9 = LatestEntryPrice(0);
}
if var9 > 0 Then
{
ExitLong("A_MT손절",AtStop,var9*(1-cut1_l/100),"A_MT",2*k);
}
if var3 > 0 Then
{
ExitLong("B익절",Atlimit,var3*(1+gain_gl/100),"B",2*k);
ExitLong("B손절",AtStop,Var3*(1-cut_gl/100),"B",2*k);
}
}
Else
{
Var3 = 0;
Var9 = 0;
}
if Marketposition() == -1 then
{
if CurrentContracts > CurrentContracts[1] Then
{
if LatestEntryName(0) == "C" Then
var5 = LatestEntryPrice(0);
if LatestEntryName(0) == "D" Then
var6 = LatestEntryPrice(0);
}
if var5 > 0 Then
ExitShort("C익절",Atlimit,Var5*(1-gain_gs/100),"C",2*k);
if var6 > 0 Then
ExitShort("D손절",AtStop,var6*(1+cut_mt/100),"D",2*k);
}
Else
{
Var5 = 0;
Var6 = 0;
}
if MarketPosition == 0 Then
{
SetStopProfittarget(0);
setstoploss(0);
}
즐거운 하루되세요
> 건곤대 님이 쓴 글입니다.
> 제목 : 진입별 청산 오류
> 안녕하세요.
진입별로 청산이 정상작동하지 않아 문의드립니다.
약간 복잡할 수 있지만, 아래 식과 같이 손익절을 진입별로 구분해서 쓰고 있습니다.
다른 진입에 대한 익절과 손절은 다 잘 작동하는데, 유독 "A_MT"라는 진입에 대해서
특정한 날에 손절이 작동하지 않는것을 거래내역을 통해 알았습니다.
특정한 날이라 하면, 매수 "D" 진입이 A_MT라는 매수진입으로 청산되면서 진입되는 날에는
A_MT에 원하는 손절이 적용안되고, 1분후에 바로 청산되고, 매수되기를 반복하는 현상이
발생합니다.
다른 진입과 간섭이 문제가 되는거 같아서, 나머지 진입들과 청산조건을 모두 삭제하고
A_MT에 대한 진입과 청산만 남겨두고 테스트를 해보면 정상적으로 작동하는것을
확인했습니다. 따라서, 반대포지션과 바로 스위칭되었을때 원하는 손절이 안되고
있는것으로 보이는데요, 버그같기도 하구요.
(*아래는 대강의 구조만 작성했습니다. minor한 오류는 있을수 있습니다)
------------------------------------------
IF MT condition = true then
{
if ~ then
sell("D");
if ~ then
buy("A_MT");
}
Else {
if ~ then
buy("A");
if ~ then
buy("B");
if ~ then
Sell("C");
}
if Marketposition() == 1 then{
if CurrentContracts > CurrentContracts[1] Then
{
if LatestEntryName(0) == "A" Then
var3 = LatestEntryPrice(0);
if LatestEntryName(0) == "A_MT" Then
var9 = LatestEntryPrice(0);
}
if var9 > 0 Then
{
ExitLong("A_MT손절",AtStop,var9*(1-cut1_l/100),"A_MT",2*k);
}
if var3 > 0 Then {
ExitLong("B익절",Atlimit,var3*(1+gain_gl/100),"B",2*k);
ExitLong("B손절",AtStop,Var3*(1-cut_gl/100),"B",2*k);
}
}
else if Marketposition() == -1 then{
if CurrentContracts > CurrentContracts[1] Then
{
if LatestEntryName(0) == "C" Then
var5 = LatestEntryPrice(0);
if LatestEntryName(0) == "D" Then
var6 = LatestEntryPrice(0);
}
if var5 > 0 Then {
ExitShort("C익절",Atlimit,Var5*(1-gain_gs/100),"C",2*k);
}
if var6 > 0 Then
ExitShort("D손절",AtStop,var6*(1+cut_mt/100),"D",2*k);
}
else{
SetStopProfittarget(0);
setstoploss(0);
}
2022-10-22
1229
글번호 163201
시스템
답변완료
문의
이수식을 갭보정을하더라도 갭보정하지 않는 원래값으로 나타나게 부탁드립니다
Var : Pv(0),R1(0),R2(0),S1(0),S2(0);
var : dh(0),dh1(0),dl(0),dl1(0),dc(0),dc1(0);
if Bdate != Bdate[1] Then
{
dh = h;
dl = l;
dc1 = dc[1];
dh1 = dh[1];
dl1 = dl[1];
}
if h > dh Then
dh = h;
if l < dl Then
dl = l;
dc = c;
if dh1 > 0 and dl1 > 0 Then
{
Pv = (dh1+dl1+dc1)/3;
R1 = 2*Pv-dl1;
R2 = Pv+dh1-dl1;
S1 = 2*Pv-dh1;
S2 = Pv-dh1+dl1;
Plot1(Pv, "피봇포인트");
Plot2(R1, "1차저항");
Plot3(R2, "2차저항");
Plot4(S1, "1차지지");
Plot5(S2, "2차지지");
var : tx1(0),tx2(0),tx3(0),tx4(0),tx5(0);
Text_Delete(tx1);
Text_Delete(tx2);
Text_Delete(tx3);
Text_Delete(tx4);
Text_Delete(tx5);
tx1 = Text_New(NextBarSdate,NextBarStime,Pv,"피봇중심:"+NumToStr(pv,2));
tx2 = Text_New(NextBarSdate,NextBarStime,R1,"1차저항:"+NumToStr(R1,2));
tx3 = Text_New(NextBarSdate,NextBarStime,R2,"2차저항:"+NumToStr(R2,2));
tx4 = Text_New(NextBarSdate,NextBarStime,S1,"1차지지:"+NumToStr(S1,2));
tx5 = Text_New(NextBarSdate,NextBarStime,S2,"2차지지:"+NumToStr(S2,2));
Text_SetStyle(tx1,0,1);
Text_SetStyle(tx2,0,1);
Text_SetStyle(tx3,0,1);
Text_SetStyle(tx4,0,1);
Text_SetStyle(tx5,0,1);
}
2022-10-21
1284
글번호 163187
지표
답변완료
추세선 세로선
input : Period(5);
Var:선두께(1),상승색(red), 하락색(blue);
Var:j(0),T(0);
Var: date11(0),date12(0),time11(0),time12(0),TL1(0),TL(0),
date21(0),date22(0),time21(0),time22(0),
date31(0),date32(0),time31(0),time32(0),tx(0),tx1(0),tl4(0);
Array:HiVal[20](0),LoVal[20](0),HiBar[20](0),LoBar[20](0)/*,ZZ[20](0)*/;
Array:r[7](0),fr[7](0),TL2[7](0),TL3[7](0),TX2[7](0),TX3[7](0);
r[0] = 0;
r[1] = 2;
r[2] = 3.;
r[3] = -1;
r[4] = -2.;
r[5] = 1;
r[6] = 0.5;
For j = 0 To 19
{
HiBar[j] = HiBar[j] + 1;
LoBar[j] = LoBar[j] + 1;
}
if crossup(c,highest(H,Period)[1]) Then
T = 1;
if CrossDown(c,Lowest(L,Period)[1]) Then
T = -1;
If T == -1 Then
{
If T[1] != -1 Then
{
For j = 18 DownTo 0
{
LoVal[j+1] = LoVal[j];
LoBar[j+1] = LoBar[j];
//ZZ[j+1] = ZZ[j];
}
LoVal[0] = L;
LoBar[0] = 0;
//ZZ[0] = L;
date11 = date[HiBar[0]];
time11 = stime[HiBar[0]];
Value11 = HiVal[0];
date12 = date[LoBar[0]];
time12 = stime[LoBar[0]];
Value12 = LoVal[0];
TL_Delete(tl);
TL = TL_New(sdate,stime,Value12,NextBarSdate,NextBarStime,NextBarOpen);
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
TL_SetColor(TL1,하락색);
Tx = Text_New(date11,time11,Value11,"●");
#동그라미 색상, 빨강
Text_SetColor(Tx,Green);
Text_SetStyle(Tx,2,2);
Text_SetSize(tx,7);
//tx = Text_New(date11,time11,Value11,NumToStr(value11,2)+NewLine+NumToStr(value11,2)+NewLine);
//Text_SetStyle(tx,2,1);
date21 = date[HiBar[0]];
time21 = stime[HiBar[0]];
date22 = date[0];
time22 = stime[0];
for j = 0 to 6
{
fr[j] = LoVal[1] + ((HiVal[0] - LoVal[1]) * r[j]);
}
#TL2[1] = TL_New(date21,time21,fr[1],date22,time22,fr[1]);
#TL_SetColor(TL2[1],RED);
#TL_SetStyle(TL2[1], 3);
#TL2[2] = TL_New(date21,time21,fr[2],date22,time22,fr[2]);
#TL_SetColor(TL2[2],RED);
#TL_SetSize(TL2[2],1);
#TX2[2] = Text_New(date22,time22,fr[2],NumToStr(fr[2],2));
#Text_SetColor(Tx2[2],BWHITE);
#Text_SetStyle(TX2[2],1,1);
#TL2[3] = TL_New(date21,time21,fr[3],date22,time22,fr[3]);
#TL_SetColor(TL2[3],RED);
#TL_SetStyle(TL2[3], 3);
#TL2[4] = TL_New(date21,time21,fr[4],date22,time22,fr[4]);
#TL_SetColor(TL2[4],RED);
#TL_SetSize(TL2[4],1);
#TX2[4] = Text_New(date22,time22,fr[4],NumToStr(fr[4],2));
#Text_SetColor(Tx2[4],BWHITE);
#Text_SetStyle(TX2[4],1,0);
}
If LoVal[0] > L Then
{
LoVal[0] = L;
LoBar[0] = 0;
//ZZ[0] = L;
date12 = date[LoBar[0]];
time12 = stime[LoBar[0]];
Value12 = LoVal[0];
TL_SetEnd(TL1, date12,time12,Value12);
date22 = date[0];
time22 = stime[0];
TL_SetEnd(TL2[0],date22,time22,fr[0]);
TL_SetEnd(TL2[1],date22,time22,fr[1]);
TL_SetEnd(TL2[2],date22,time22,fr[2]);
Text_SetLocation(TX2[2],date22,time22,fr[2]);
TL_SetEnd(TL2[3],date22,time22,fr[3]);
TL_SetEnd(TL2[4],date22,time22,fr[4]);
Text_SetLocation(TX2[4],date22,time22,fr[4]);
TL_SetEnd(TL2[5],date22,time22,fr[5]);
TL_SetEnd(TL2[6],date22,time22,fr[6]);
TL_Delete(tl);
TL = TL_New(sdate,stime,Value12,NextBarSdate,NextBarStime,NextBarOpen);
}
}
If T == 1 Then
{
If T[1] != 1 Then
{
For j = 18 DownTo 0
{
HiVal[j+1] = HiVal[j];
HiBar[j+1] = HiBar[j];
//ZZ[j+1] = ZZ[j];
}
HiVal[0] = H;
HiBar[0] = 0;
//ZZ[0] = H;
date11 = date[LoBar[0]];
time11 = stime[LoBar[0]];
Value11 = LoVal[0];
date12 = date[HiBar[0]];
time12 = stime[HiBar[0]];
Value12 = HiVal[0];
TL_Delete(tl);
TL = TL_New(sdate,stime,Value12,NextBarSdate,NextBarStime,NextBarOpen);
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
TL_SetColor(TL1,상승색);
Tx1 = Text_New(date11,time11,Value11,"●");
#동그라미 색상, 파랑
Text_SetColor(Tx1,Green);
Text_SetStyle(Tx1,2,2);
Text_SetSize(tx1,7);
//tx = Text_New(date11,time11,Value11,NewLine+NumToStr(value11,2)+NewLine+NumToStr(value11,2));
//Text_SetStyle(tx,2,0);
date31 = date[LoBar[0]];
time31 = stime[LoBar[0]];
date32 = date[0];
time32 = stime[0];
for j = 0 to 5
{
fr[j] = LoVal[0] + ((HiVal[1] - LoVal[0]) * r[j]);
}
}
If HiVal[0] < H Then
{
HiVal[0] = H;
HiBar[0] = 0;
//ZZ[0] = H;
date12 = date[HiBar[0]];
time12 = stime[HiBar[0]];
Value12 = HiVal[0];
TL_SetEnd(TL1, date12,time12,Value12);
date32 = date[0];
time32 = stime[0];
TL_SetEnd(TL3[0],date32,time32,fr[0]);
TL_SetEnd(TL3[1],date32,time32,fr[1]);
TL_SetEnd(TL3[2],date32,time32,fr[2]);
Text_SetLocation(TX3[2],date32,time32,fr[2]);
TL_SetEnd(TL3[3],date32,time32,fr[3]);
TL_SetEnd(TL3[4],date32,time32,fr[4]);
Text_SetLocation(TX3[4],date32,time32,fr[4]);
TL_SetEnd(TL3[5],date32,time32,fr[5]);
TL_SetEnd(TL3[6],date32,time32,fr[6]);
TL_Delete(tl);
TL = TL_New(sdate,stime,Value12,NextBarSdate,NextBarStime,NextBarOpen);
}
}
TL_SetSize(TL1,선두께);
//TL_SetEnd(tl,NextBarSdate,NextBarStime,NextBarOpen);
1,지표:쌍바닥,쓰리바닥,쓰리봉 세로선.
쌍바닥,쓰리바닥은 상하(2,1) 변수 분리.쓰리바닥은 쌍바닥과 겹침. 쓰리봉은 세 꼭지점 상단의 높이 차이가 2틱 이내일때.
셋중 최고점과 세번째 고점의 차이가 2틱. 안되면 상하 변수 분리.
2.시스템:쌍바닥 매수, 음전환시 매수청산. 항상 감사합니다.
2022-10-21
1409
글번호 163183
지표