답변완료
수식작성
1
Input : 당일수익틱수(200);
var : entry(0),mav1(0),mav2(0);
var : B(0),S(0),LL(0),HH(0);
Var : N1(0),dayPl(0),당일수익(0),Xcond(false);
if bdate != bdate[1] Then
{
entry = 0;
Condition1 = False;
Xcond = false;
N1 = NetProfit;
}
당일수익 = PriceScale*당일수익틱수;
daypl = NetProfit-N1;
if TotalTrades > TotalTrades[1] then
{
if daypl >= 당일수익 Then
Xcond = true;
if (IsExitName("dbp",1) == true or IsExitName("dsp",1) == true) then
Xcond = true;
}
mav1 = ma(C,2);
mav2 = ma(c,10);
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then
entry = entry+1;
if Condition1 == false and L <= DayHigh-PriceScale*100 Then
{
Condition1 = true;
B = 0;
}
if Condition1 == true Then
{
if CrossUp(mav1,mav2) Then
{
B = B+1;
if B == 2 and MarketPosition <= 0 and entry < 1 and Xcond == false Then
{
B = 3;
Buy("b");
}
}
}
if MarketPosition == 1 Then
{
exitlong("bx",atlimit,lowest(L,BarsSinceEntry)+PriceScale*100);
ExitLong("dbp",atlimit,EntryPrice+((당일수익-daypl)/CurrentContracts));
if CrossDown(mav1,mav2) Then
ExitLong();
if BarsSinceEntry == 8 Then
LL = Lowest(L,17);
if BarsSinceEntry >= 8 Then
ExitLong("bx2",AtStop,LL-PriceScale*2);
}
if Condition2 == false and H >= DayLow+PriceScale*100 Then
{
Condition2 = true;
S = 0;
}
if Condition2 == true Then
{
if CrossDown(mav1,mav2) Then
{
S = S+1;
if S == 2 and MarketPosition >= 0 and entry < 1 and Xcond == false Then
Sell("s");
}
}
if MarketPosition == -1 Then
{
ExitShort("sx",atlimit,Highest(H,BarsSinceEntry)-PriceScale*100);
ExitShort("dsp",atlimit,EntryPrice-((당일수익-daypl)/CurrentContracts));
if CrossDown(mav1,mav2) Then
ExitShort();
if BarsSinceEntry == 8 Then
HH = Lowest(H,17);
if BarsSinceEntry >= 8 Then
ExitShort("sx2",AtStop,HH+PriceScale*2);
}
if sdate != sdate[1] Then
SetStopEndofday(55000);
if bdate != bdate[1] Then
SetStopEndofday(0);
2
input : StartTime1(070000),EndTime1(220000),진입횟수1(1);
input : StartTime2(220000),EndTime2(055000),진입횟수2(2);
input : Xtime(055000),당일수익틱수(200);
var : entry(0),Tcond1(false),Tcond2(False);
Var : N1(0),dayPl(0),당일수익(0),Xcond(false),mav1(0),mav2(0),B(0),S(0),HH(0),LL(0);
mav1 = ma(C,2);
mav2 = ma(c,10);
if (sdate != sdate[1] and stime >= EndTime1) or
(sdate == sdate[1] and stime >= EndTime1 and stime[1] < EndTime1) Then
Tcond1 = False;
if (sdate != sdate[1] and stime >= StartTime1) or
(sdate == sdate[1] and stime >= StartTime1 and stime[1] < StartTime1) Then
{
Tcond1 = true;
entry = 0;
Xcond = false;
N1 = NetProfit;
Condition1 = False;
Condition2 = False;
}
if (sdate != sdate[1] and stime >= EndTime2) or
(sdate == sdate[1] and stime >= EndTime2 and stime[1] < EndTime2) Then
Tcond2 = False;
if (sdate != sdate[1] and stime >= StartTime2) or
(sdate == sdate[1] and stime >= StartTime2 and stime[1] < StartTime2) Then
{
Tcond2 = true;
entry = 0;
Condition1 = False;
Condition2 = False;
}
당일수익 = PriceScale*당일수익틱수;
daypl = NetProfit-N1;
if TotalTrades > TotalTrades[1] then
{
if daypl >= 당일수익 Then
Xcond = true;
if (IsExitName("dbp",1) == true or IsExitName("dsp",1) == true) then
Xcond = true;
}
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then
entry = entry+1;
if Condition1 == false and L <= DayHigh-PriceScale*100 Then
{
Condition1 = true;
B = 0;
}
if Condition1 == true Then
{
if CrossUp(mav1,mav2) Then
{
B = B+1;
if B == 2 and MarketPosition <= 0 and Xcond == False and ((Tcond1 == true and entry < 진입횟수1) or (Tcond2 == true and entry < 진입횟수2)) Then
{
B = 3;
Buy("b");
}
}
}
if MarketPosition == 1 Then
{
exitlong("bx",atlimit,lowest(L,BarsSinceEntry)+PriceScale*100);
ExitLong("dbp",atlimit,EntryPrice+((당일수익-daypl)/CurrentContracts));
if CrossDown(mav1,mav2) Then
ExitLong();
if BarsSinceEntry == 8 Then
LL = Lowest(L,17);
if BarsSinceEntry >= 8 Then
ExitLong("bx2",AtStop,LL-PriceScale*2);
}
if Condition2 == false and H >= DayLow+PriceScale*100 Then
{
Condition2 = true;
S = 0;
}
if Condition2 == true Then
{
if CrossDown(mav1,mav2) Then
{
S = S+1;
if S == 2 and MarketPosition >= 0 and Xcond == False and ((Tcond1 == true and entry < 진입횟수1) or (Tcond2 == true and entry < 진입횟수2)) Then
Sell("s");
}
}
if MarketPosition == -1 Then
{
ExitShort("sx",atlimit,Highest(H,BarsSinceEntry)-PriceScale*100);
ExitShort("dsp",atlimit,EntryPrice-((당일수익-daypl)/CurrentContracts));
if CrossUp(mav1,mav2) Then
ExitShort();
if BarsSinceEntry == 8 Then
HH = Lowest(H,17);
if BarsSinceEntry >= 8 Then
ExitShort("sx2",AtStop,HH+PriceScale*2);
}
if sdate != sdate[1] Then
SetStopEndofday(Xtime);
if bdate != bdate[1] Then
SetStopEndofday(0);
---------------------
검증중 청산이 원하는대로 되질않아서 그래프를 참고로 올립니다.
buy의 청산싯점이 진입 가격으로 됨에 +100틱에 청산으로 수정되는 수식어를 부탁드립니다.
반대포지션도 동일합니다.
늘 감사드립니다.
2021-05-21
1104
글번호 149226
시스템
답변완료
문의
buy 수식에서
1차 진입 b1에 10 입력후
2차 진입 b2에 777888999를 입력하면 data2 선물기준 틱수이므로
2차 진입은 발생하지 않아야 하는데 진입이 발생합니다
sell 수식에서
1차 진입 b1에 10 입력후
2차 진입 b2에 777888999를 입력하면 data2 선물기준 틱수이므로
2차 진입은 발생하지 않아야 하는데 진입이 발생합니다
첨부파일은 2차 진입발생 내역입니다.
buy와 sell 수식의 2차(b2) 진입수식을 살펴주시고 고친부분은 # 표시해주세요.
********************************************************************************
1) buy 수식
Input : 최대(999999999),최소(0),거래횟수(500);
input : b1(10),b2(777888999),X1(10),X2(10);
input : 진입눌림1(10),진입돌파1(10),청산눌림1(10),청산돌파1(10);
input : 진입눌림2(10),진입돌파2(10),청산눌림2(10),청산돌파2(10);
var : T1(0,data1),entry(0,data1);
var : LL(0,data2),EH(0,data2),E1(0,data2),H1(0,data2);
var : i1(0,data2),S1(0,data2),L1(0,data2);
var : DH2(0,data2),DL2(0,data2);
if data1(Bdate != Bdate[1]) Then
T1 = TotalTrades;
if data2(Bdate != Bdate[1]) Then{
E1 = 0;
DH2 = data2(H);
DL2 = data2(L);
}
if data2(H > DH2) Then
DH2 = data2(H);
if data2(L < DL2) Then
DL2 = data2(L);
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = (TotalTrades-T1)+1;
if MarketPosition == 0 and entry == 0 Then{
if data2(E1 == 0 and C >= DL2+PriceScale*B1 and C[1] < DL2+PriceScale*B1) Then{
E1 = 1;
H1 = data2(H);
i1 = data2(index);
}
if data2(E1 == 1 and index > i1) then{
if data2(H > H1) Then
H1 = data2(H);
if data2(L <= H1-PriceScale*진입눌림1) Then{
E1 = 2;
i1 = data2(index);
S1 = H1;
}
}
if 최대 >= C and C >= 최소 and data2(E1 == 2 and index > i1 and C >= S1+PriceScale*진입돌파1) Then{
buy("b1");
}
}
if TotalTrades > TotalTrades[1] Then
LL = data2(L);
if data2(L < LL) Then
LL = data2(L);
if MarketPosition == 0 and entry >= 1 and entry < 거래횟수 Then{
if data2(E1 == 0 and C >= LL+PriceScale*B2 and C[1] < LL+PriceScale*B2) Then{
E1 = 1;
H1 = data2(H);
i1 = data2(index);
}
if data2(E1 == 1 and index > i1) then{
if data2(H > H1) Then
H1 = data2(H);
if data2(L <= H1-PriceScale*진입눌림2) Then{
E1 = 2;
i1 = data2(index);
S1 = H1;
}
}
if data2(E1 == 2 and index > i1 and C >= S1+PriceScale*진입돌파2) Then{
buy("b2");
}
}
if MarketPosition == 1 and IsEntryName("b1") == true Then{
if entry >= 1 then{
if CurrentContracts > CurrentContracts[1] Then{
EH = data2(H);
E1 = 0;
}
if data2(H > EH) Then{
EH = data2(H);
E1 = 0;
}
if data2(E1 == 0 and C <= EH-PriceScale*X1) Then{
E1 = 1;
L1 = data2(L);
i1 = data2(index);
}
if data2(E1 == 1 and index > i1) Then{
if data2(L < L1) Then
L1 = data2(L);
if data2(H >= L1+PriceScale*청산눌림1) Then{
E1 = 2;
I1 = data2(index);
S1 = L1;
}
}
if data2(E1 == 2 and index > i1 and C <= S1-PriceScale*청산돌파1) Then{
exitlong("bx1");
E1 = 0;
}
}
}
if MarketPosition == 1 and IsEntryName("b2") == true Then{
if entry >= 1 then{
if CurrentContracts > CurrentContracts[1] Then{
EH = data2(H);
E1 = 0;
}
if data2(H > EH) Then{
EH = data2(H);
E1 = 0;
}
if data2(E1 == 0 and C <= EH-PriceScale*X1) Then{
E1 = 1;
L1 = data2(L);
i1 = data2(index);
}
if data2(E1 == 1 and index > i1) Then{
if data2(L < L1) Then
L1 = data2(L);
if data2(H >= L1+PriceScale*청산눌림2) Then{
E1 = 2;
I1 = data2(index);
S1 = L1;
}
}
if data2(E1 == 2 and index > i1 and C <= S1-PriceScale*청산돌파2) Then{
exitlong("bx2");
E1 = 0;
}
}
}
2) sell 수식
Input : 최대(999999999),최소(0),거래횟수(500);
input : b1(10),b2(777888999),X1(10),X2(10);
input : 진입눌림1(10),진입돌파1(10),청산눌림1(10),청산돌파1(10);
input : 진입눌림2(10),진입돌파2(10),청산눌림2(10),청산돌파2(10);
var : T1(0,data1),entry(0,data1);
var : HH(0,data2),LL(0,data2),EH(0,data2),EL(0,data2);
var : E1(0,data2),H1(0,data2),i1(0,data2),S1(0,data2),L1(0,data2);
var : DH2(0,data2),DL2(0,data2);
if data1(Bdate != Bdate[1]) Then
T1 = TotalTrades;
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = (TotalTrades-T1)+1;
if data2(Bdate != Bdate[1]) Then{
E1 = 0;
DH2 = data2(H);
DL2 = data2(L);
}
if data2(H > DH2) Then
DH2 = data2(H);
if data2(L < DL2) Then
DL2 = data2(L);
if MarketPosition == 0 and entry == 0 Then{
if data2(E1 == 0 and C <= DH2-PriceScale*B1 and C[1] < DH2-PriceScale*B1) Then{
E1 = 1;
L1 = data2(L);
i1 = data2(index);
}
if E1 == 1 and data2(index) > i1 then{
if data2(L < L1) Then
L1 = data2(L);
if data2(H >= L1+PriceScale*진입눌림1) Then{
E1 = 2;
i1 = data2(index);
S1 = L1;
}
}
if 최대 >= C and C >= 최소 and data2(E1 == 2 and index > i1 and C <= S1-PriceScale*진입돌파1) Then{
sell("s1");
}
}
if TotalTrades > TotalTrades[1] Then
HH = data2(H);
if data2(H > HH) Then
HH = data2(H);
if MarketPosition == 0 and entry >= 1 and entry < 거래횟수 Then{
if data2(E1 == 0 and C <= HH-PriceScale*B2 and C[1] < HH-PriceScale*B2) Then{
E1 = 1;
L1 = data2(L);
i1 = data2(index);
}
if data2(E1 == 1 and index > i1) then{
if data2(L < L1) Then
L1 = data2(L);
if data2(H >= L1+PriceScale*진입눌림2) Then{
E1 = 2;
i1 = data2(index);
S1 = L1;
}
}
if data2(E1 == 2 and index > i1 and C <= S1-PriceScale*진입돌파2) Then{
sell("s2");
E1 = 0;
}
}
if MarketPosition == -1 and IsEntryName("s1") == true Then{
if entry >= 1 then{
if CurrentContracts > CurrentContracts[1] Then{
EL = data2(L);
E1 = 0;
}
if data2(L < EL) Then{
EL = data2(L);
E1 = 0;
}
if data2(E1 == 0 and C >= EL+PriceScale*X1) Then{
E1 = 1;
H1 = data2(H);
i1 = data2(index);
}
if data2(E1 == 1 and index > i1) Then{
if data2(H > H1) Then
H1 = data2(H);
if data2(L <= H1-PriceScale*청산눌림1) Then{
E1 = 2;
I1 = data2(index);
S1 = H1;
}
}
if data2(E1 == 2 and index > i1 and C >= S1+PriceScale*청산돌파1) Then{
ExitShort("sx1");
E1 = 0;
}
}
}
if MarketPosition == -1 and IsEntryName("s2") == true Then{
if entry >= 1 then{
if CurrentContracts > CurrentContracts[1] Then{
EL = data2(L);
E1 = 0;
}
if data2(L < EL) Then{
EL = data2(L);
E1 = 0;
}
if data2(E1 == 0 and C >= EL+PriceScale*X1) Then{
E1 = 1;
H1 = data2(H);
i1 = data2(index);
}
if data2(E1 == 1 and index > i1) Then{
if data2(H > H1) Then
H1 = data2(H);
if data2(L <= H1-PriceScale*청산눌림2) Then{
E1 = 2;
I1 = data2(index);
S1 = H1;
}
}
if data2(E1 == 2 and index > i1 and C >= S1+PriceScale*청산돌파2) Then{
ExitShort("sx2");
E1 = 0;
}
}
}
2021-05-21
1119
글번호 149223
시스템