답변완료
수식 오류 문의드립니다
안녕하세요
수식을 테스트하던중 문제상황이 발생해 문의드립니다
사용한 수식은 아래와 같고
문제가 되었던 상황은 캡처로 첨부하였습니다
input : TT(224300), TD(20220215), MDD(200000) ;
var : HB(14574), LB(14481), Hx(20000), Lx(1);
var : e60(0), Hcount(0), Lcount(0),B(0),S(0),cnt(0),T1(0), Hstate(true), Lstate(true), N(0), unitP(0), exitC(0), rHB(0), rLB(0);
N = Highest(ATr(14), 100);
unitP = floor(MDD/(N*5*4*600));
exitC = (2-(MaxEntries-1)/2)*N;
e60 = Ema(C,60);
if Condition1 == False and sDate >= TD and sTime >= TT Then
{
Condition1 = true;
Hcount = 0;
Lcount = 0;
T1 = TotalTrades;
}
if Condition1 == true Then
{
B = 0;
S = 0;
if TotalTrades-T1 > 0 Then
{
For cnt = 1 to TotalTrades-T1
{
if MarketPosition(cnt) == 1 Then B = B+1;
if MarketPosition(cnt) == -1 Then S = S+1;
}
}
Hcount = B + IFf(MarketPosition == 1,1,0);
Lcount = S + IFf(MarketPosition == -1,1,0);
if B>0 && B == Hcount then HB = rHB;
if S>0 && S == Lcount then LB = rLB;
if Hstate == true then
{
Buy("b1",AtStop,HB,unitP);
Buy("b2",AtStop,HB+0.5*N,unitP);
Buy("b3",AtStop,HB+N,unitP);
Buy("b4",AtStop,HB+1.5*N,unitP);
}
if Lstate == true then
{
Sell("s1",AtStop,LB,unitP);
Sell("s2",AtStop,LB-0.5*N,unitP);
Sell("s3",AtStop,LB-N,unitP);
Sell("s4",AtStop,LB-2.5*N,unitP);
}
if marketposition ==1 Then
{
rHB = Highest(H, BarsSinceEntry) ;
if e60 < HB+2*N Then exitlong("exitB1", atstop, HB-exitC);
if e60 >= HB+2*N and CrossDown(close, e60) Then
{
ExitLong("exitB2") ;
Hstate = false ;
}
exitlong("exitB3", AtLimit, Hx);
}
if marketposition == -1 Then
{
rLB = Lowest(L, BarsSinceEntry);
if e60 > LB-2*N Then ExitShort("exitS1", atstop, LB+exitC);
if e60 <= LB-2*N and CrossUp(close, e60) Then
{
ExitShort("exitS2");
Lstate = false ;
}
exitshort("exitS3", AtLimit, Lx);
}
if Hcount > 3 Then Hstate = False;
if Lcount > 3 Then Lstate = False;
if H >= Hx then Hstate = false;
if L <= Lx then Lstate = false;
}
MessageLog("N %.2f, P %.2f, eC %.2f",N , unitP, exitC);
MessageLog("HB %.2f, rHB %.2f, Hec %.2f, B %.f, Hc %.f, Hs %4s", HB, rHB, HB - exitC, B, Hcount, Hstate);
MessageLog("LB %.2f, rLB %.2f, Lec %.2f, S %.f, Lc %.f, Ls %4s", LB, rLB, LB + exitC, S, Lcount, Lstate);
문제상황
1. 손절조건이 되서 청산되었으나 LB = rLB로 업데이트 되지 않았고
업데이트 되지 않아 초기치로 설정한 LB로 곧바로 다시 진입
'청산 => 재진입'이 일어난 시간을 확인해보면 5초의 갭이 있어 청산-매수 시점이 겹쳐 생긴 문제는 아닌듯 (1-1)
2. 차트상에선 청산신호가 나왔으나, 실제 청산 주문이 들어가지 않음
시스템 모니터 기록에도 청산 주문이 안들어가있음(2-1)
주문은 안들어갔으나, LB=rLB로 업데이트
3. 청산이 안된채로 조건이 되자 다시 진입
청산조건이 되자 이전에 남아있던 12계약은 그대로 있고 4계약만 청산됨
+) 캡쳐는 못했는데, exitL2 조건으로 청산되어 청산후 Hstate == false가 되어 거래정지가 되어야 하는 상황에서도
동일하게 Hstate 안바뀌고, HB 도 업데이트 안되 재진입하는 상황이 발생했습니다
관계가 있는진 모르겟으나 이 케이스도 위에 예시처럼 시스템 실행하고 처음 진입했을때 입니다
이런 문제 원인이 무엇인지 못찾겠어 가능하다면 확인 부탁드립니다
감사합니다
2022-02-16
1162
글번호 156334
시스템
답변완료
분할매수
먼저 감사드립니다.
아래 보내주신 수정프로그램 실행시 다음봉에 매수신호는 발생하여 처리가능한데
b2.
b3.
b4.
신호가 동시에 발생합니다. 조언부탁드립니다.
if MarketPosition == 0 and ma(c,60) > ma(c,120) and c > o then
{
Buy("b1");
#첫매수조건이 만족하면 지정한 가격을 셋팅해서
#매수 다음봉만 가격조건 충족하는 것을 감시
Buy("b2.",atlimit,EntryPrice * 0.95);
Buy("b3.",atlimit,EntryPrice * 0.90);
Buy("b4.",atlimit,EntryPrice * 0.80);
}
#첫매수후 다다음봉부터 지정한 가격조건 충족하면 매수
if MarketPosition == 1 Then
{
ExitLong("bx",atlimit, AvgEntryPrice * 1.10);
if MaxEntries == 1 Then
Buy("b2",atlimit,EntryPrice * 0.95);
if MaxEntries == 2 Then
Buy("b3",atlimit,EntryPrice * 0.90);
if MaxEntries == 3 Then
Buy("b4",atlimit,EntryPrice * 0.80);
}
2022-02-15
1267
글번호 156333
시스템
답변완료
수식 작성 요청 드립니다.(중간)
* 항상 많은 도움에 고맙습니다.
* 아래 수식을 매매식으로 전완 좀 부탁 드립니다.
기준
1. 새로운 수평선 시작되고 4개봉이 경과힌 후에 현재 중간선이 이전 중간선 을 CrossUp 하면 매수
2. 새로운 수평선 시작되고 4개봉이 경과힌 후에 현재 중간선이 이전 하단선 을 CrossDown 하면 매도
3. 새로운 수평선 시작되고 4개봉이 경과힌 후에 현재 수평상단선이 이전전 중간선 을 CrossDown 하면 매도
4. 새로운 수평선 시작되고 4개봉이 경과힌 후에 현재 수평상단선이 이전전 하단선 을 CrossUp 하면 매수
## 아래 수식
input : n(50);
var : hh(0),ll(0),idx(0),tf(0);
var : TL1(0),TL2(0),d1(0),t1(0),TL3(0);
if Bdate != Bdate[1] Then
idx = 0;
Else
idx = idx+1;
TF = idx%n;
if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF < TF[1]) Then
{
hh = h;
ll = l;
d1 = sDate;
t1 = sTime;
#TL_Delete(TL1);
TL1 = TL_new(d1,t1,hh,NextBarSdate,NextBarStime,hh);
#TL_Delete(TL2);
TL2 = TL_new(d1,t1,ll,NextBarSdate,NextBarStime,ll);
#TL_Delete(TL3);
TL3 = TL_new(d1,t1,(hh+ll)/2,NextBarSdate,NextBarStime,(hh+ll)/2);
}
if h > hh Then
{
hh = h;
TL_SetBegin(TL1,d1,t1,hh);
TL_SetBegin(TL3,d1,t1,(hh+ll)/2);
}
if l < ll Then
{
ll = l;
TL_SetBegin(TL2,d1,t1,ll);
TL_SetBegin(TL3,d1,t1,(hh+ll)/2);
}
TL_SetEnd(TL1,NextBarSdate,NextBarStime,hh);
TL_SetEnd(TL2,NextBarSdate,NextBarStime,ll);
TL_SetEnd(TL3,NextBarSdate,NextBarStime,(hh+ll)/2);
* 고맙습니다.
2022-02-16
1340
글번호 156328
시스템
답변완료
수식 문의 드립니다.
안녕하세요,
늘 도움 많이받고 있습니다.
아래는 이전에 작성해주셨던 수평 추세선 cross시 매매하는 수식인데,
아래 수식으로 피라미딩 매매를 할 때,
1) 각 봉 위치 이전에 차트에 만들어진 수평선 중 가장 낮은값을 가지는 수평선을 crossdown하면 즉시 전량 매수청산
2) 당일 하루동안 한번 Crossup 하여 매수주문 한 수평선은 당일 매수 조건에서 제외 (다음날부터는 매수가능)
하는 수식을 추가하고 싶습니다.
답변 주심에 항상 감사드립니다.
input : left(5), right(5);
var : swing_low(0),swing_high(0),Dir(0),cnt(0);
Array : line[300](0);
swing_low = SwingLow(1, L, left, right, left+right+1);
swing_high = SwingHigh(1, H, left, right,left+right+1);
if (swing_low != -1 ) Then
{
var11 = sdate[right];
var12 = STime[right];
var13 = Low[right];
var21 = var11[1];
var22 = var12[1];
var23 = var13[1];
var31 = var21[1];
var32 = var22[1];
var33 = var23[1];
if var23 > 0 Then
{
Value11 = TL_New(var11,var12,var13,sDate,sTime,var13);
TL_SetExtRight(value11,true);
TL_SetColor(value11,BLACk);
TL_SetSize(value11,2);
line[0] = var13;
For cnt = 1 to 299
{
line[cnt] = line[cnt-1][1];
}
}
}
if ( swing_high != -1 ) Then{
var51 = sdate[right];
var52 = STime[right];
var53 = high[right];
var61 = var51[1];
var62 = var52[1];
var63 = var53[1];
var71 = var61[1];
var72 = var62[1];
var73 = var63[1];
if var63 > 0 Then
{
value31 = TL_New(var51,var52,var53,sDate,sTime,Var53);
TL_SetExtRight(value31,true);
TL_SetColor(value31,BLACk);
TL_SetSize(value31,2);
line[0] = var53;
For cnt = 1 to 299
{
line[cnt] = line[cnt-1][1];
}
}
}
Condition1 = False;
Condition2 = False;
For cnt = 0 to 299
{
if line[cnt] > 0 and C > line[cnt] and C[1] < line[cnt] Then
Condition1 = true;
if line[cnt] > 0 and C < line[cnt] and C[1] > line[cnt] Then
Condition2 = true;
}
if Condition1 == true Then
Buy("B",onclose,DEF,"",Floor(CurrentContracts*(1/2))),1);
if Condition2 == true Then
exitlong("Bx",onclose,DEF,"",Floor(CurrentContracts*(1/2))),1);
2022-02-15
919
글번호 156326
시스템
답변완료
함수요청
안녕하세요?
아래 작성주신 지표함수 (글번호 74517번)을 활용하여 전략을 작성하고 싶습니다.
(글번호 75951번의 작성 주실 스크립트를 다시 응용해보고자 합니다.)
Input : short(12), long(26), signal(9);
Var : MACDv(0), MACDs(0),macdo(0),T(0),HH(0),LL(0);
var : d1(0),t1(0),tl1(0),tl2(0);
MACDv = MACD(short, long);
MACDs = ema(MACDv,signal);
macdo = MACDv-MACDs;
if Bdate != Bdate[1] Then
{
d1 = sDate;
t1 = sTime;
HH = macdo;
LL = macdo;
Condition1 = False;
}
if d1 > 0 Then
{
if macdo > hh Then
hh = macdo;
if macdo < ll Then
ll = macdo;
if Condition1 == False and hh >= ll+0.5 Then
{
Condition1 = true;
var1 = DayHigh;
Var2 = DayLow;
TL1 = TL_New(d1,t1,var1,NextBarSdate,NextBarStime,var1);
TL2 = TL_New(d1,t1,var2,NextBarSdate,NextBarStime,var2);
}
if Condition1 == true Then
{
TL_SetEnd(TL1,sDate,sTime,var1);
TL_SetEnd(TL2,sDate,sTime,var2);
}
}
선물 5분봉으로 거래를 하고자 하는데
9시에 장이 개장하고 상기 지표(의미있는 고점 HH, 의미있는 저점 LL) 에서
100ma가 HH 위에 있다가 아래로 이탈하면 익봉 시가에서 5틱 위로 지정가 매도 진입
(이탈 완성 시가에 5틱 위로 지정가 주문이 안되면 이탈봉 종가를 기준으로 5틱 위 지정가로 주문을 생성하고 싶습니다. 다만 주문이 생성되고 n개봉 이내에서 체결이 안되면 그 매도주문은 취소를 하고 다음 신호를 기다릴 것입니다.)
100ma가 LL 아래에 있다가 위로 돌파하면 익봉 시가에서 5틱 아래 지정가 매수 진입
(이탈 완성 시가에 5틱 아래로 지정가 주문이 안되면 돌파봉 종가를 기준으로 5틱 아래 지정가로 주문을 생성하고 싶습니다. 다만 주문이 생성되고 n개봉 이내에서 체결이 안되면 그 매수주문은 취소를 하고 다음 신호를 기다릴 것입니다.)
현주가가 100ma 상향돌파 완성하면 익봉 시가에 매도 청산
(역시 상향돌파의 의미가 그 값이 작다가 커졌다는 의미입니다. 즉 매도 진입 당시에는 현주가가 100ma 아래 있었고 매도 진입 이후 현주가가 100ma를 돌파하면 익봉시가에 매도분 청산입니다.)
현주가가 100ma 하향이탈 완성하면 익봉 시가에 매수 청산
(역시 하향이탈의 의미가 그 값이 컸다가 작아졌다는 의미입니다. 즉 매수 진입 당시에는 현주가가 100ma 위에 있었고 매수 진입 이후 현주가가 100ma를 돌파하면 익봉시가에 매수분 청산입니다.)
진입봉에서 청산이 발생하면 안됩니다.
매수든 매도든 진입과 청산은 각 1번입니다. 따라서 매수 신호 발생 후 매도 신호가 발생되면 매수청산만 하고 신규진입은 하지 않습니다.
15시 15분 강제청산입니다.
2022-02-15
962
글번호 156325
시스템