예스스탁
예스스탁 답변
2023-03-06 15:09:08
안녕하세요
예스스탁입니다.
1
시스템은 청산신호에 이름을 지정하지 않으면
먼저 발생한 진입신호가 먼저 청산을 하게 됩니다.
자동으로 최근부터 청산하게 할 방법은 없습니다.
또한 위 내용은 앞에서 순서대로 청산하는것과
최근부터 청산하는 내용이 단지 차트 신호상 진입청산 짝을 맞추는 부분입니다.
실제 계좌에서 위 내용으로 청산을 하는 것이 아니며
차트신호상 손익도 위 2가지는 결과가 같습니다.
아래 2개의식을 차트에 적용해 보시기 바랍니다.
A식은 첫진입부터 청산되고
B식은 청산함수에 이름을 지정해 마지막진입부터 청산하게 한 식입니다.
2식 모두 총손익은 같습니다.
A식
if sDate == 20230306 Then
{
if DayIndex == 0 Then
Buy("b1");
if DayIndex == 5 Then
Buy("b2");
if DayIndex == 10 Then
Buy("b3");
if DayIndex == 15 Then
ExitLong("bx1",OnClose,Def,"",1,1);
if DayIndex == 20 Then
ExitLong("bx2",OnClose,Def,"",1,1);
if DayIndex == 25 Then
ExitLong("bx3",OnClose,Def,"",1,1);
}
B식
if sDate == 20230306 Then
{
if DayIndex == 0 Then
Buy("b1");
if DayIndex == 5 Then
Buy("b2");
if DayIndex == 10 Then
Buy("b3");
if DayIndex == 15 Then
ExitLong("bx1",OnClose,Def,"b3");
if DayIndex == 20 Then
ExitLong("bx2",OnClose,Def,"b2");
if DayIndex == 25 Then
ExitLong("bx3",OnClose,Def,"b1");
}
작성하신 수식이 동일이름으로 추가가 되고 몇번추가신호가 발생할 수 없습니다.
횟수등 지정하셔도 최대진입횟수별로 많이 나열되는 내용이라
저희가 시간상 작성해 드리지 않습니다.
해당 부분은 아래 내용 참고하셔서 직접 추가해 보셔야 합니다.
진입횟수별로 각각 이름을 달리 지정해 진입식을 만든 후
청산도 최대 2번진입한경우, 최대 3번진입한경우, 최대 4번진한경우와 같이
경우의 수 잡아서 모두 나열해 청산식 작성하셔야 합니다.
2,3,4
#----------------------------------------------------------------
#--------------------------------
# 매수
#--------------------------------
input : 수익틱수(20),특정상단값(360),특정하단값(340);
var : x(0),NP1(0),daypl(0),수익(0);
수익 = PriceScale*20;
if Bdate != Bdate[1] Then
NP1 = NetProfit;
daypl = NetProfit-NP1+PositionProfit;
var1 = PriceScale*매수진입폭;
if MarketPosition == 0 and L > DayOpen-var1 Then
Buy("B",AtLimit,DayOpen-var1,1);
if MarketPosition == 1 Then
{
Buy("B2",AtLimit,DayOpen-var1*(MaxEntries+1),1);
if CurrentContracts > CurrentContracts[1] Then
Var2 = AvgEntryPrice;
if CurrentContracts < CurrentContracts[1] Then
x = x+1;
ExitLong("BX",AtLimit,Var2+var1*(x+1),"",1,2);
Value2 = PriceScale*20;
if sTime == 060000 and C >= EntryPrice+((수익-daypl)/CurrentContracts) Then
ExitLong("bx2");
ExitLong("bx3",atlimit,EntryPrice+((수익-daypl)/CurrentContracts));
ExitLong("bx41",atlimit,특정상단값);
ExitLong("bx42",AtStop,특정하단값);
}
Else
x = 0;
#--------------------------------
# 매도
#--------------------------------
var : xx(0);
var3 = PriceScale*매도진입폭;
if MarketPosition == 0 and H < DayOpen+var3 Then
Sell("S",AtLimit,DayOpen+var3,1);
if MarketPosition == -1 Then
{
Sell("S2",AtLimit,DayOpen+var3*(MaxEntries+1),1);
if CurrentContracts > CurrentContracts[1] Then
Var4 = AvgEntryPrice;
if CurrentContracts < CurrentContracts[1] Then
xx = xx+1;
ExitShort("SX",AtLimit,Var4-var3*(xx+1),"",1,2);
Value2 = PriceScale*20;
if sTime == 060000 and C <= EntryPrice-((수익-daypl)/CurrentContracts) Then
ExitShort("sx2");
ExitShort("sx3",AtLimit,EntryPrice-((수익-daypl)/CurrentContracts));
ExitShort("sx41",AtStop,특정상단값);
ExitShort("sx42",AtLimit,특정하단값);
}
Else
xx = 0;
#----------------------------------------------------------------
즐거운 하루되세요
> 양치기 님이 쓴 글입니다.
> 제목 : 시스템식 부탁드립니다.
> 항상 도움 주셔서 감사합니다.
아래와 같은 시스템식을 작성하였습니다.
종목 : 해외선물
도움요청1 :
가령 가격이 계속 하락하여 매수로 3계약이 들어갔을 경우
가격이 다시 상승하면 맨 마지막 진입부터 청산이 되어야 하는데
처음 들어간 계약부터 청산 되고, 마지막 3번째 들어간 매수는
가장 높은곳에서 청산 됩니다.
저는 가격이 다시 상승할 경우 마지막 매수진입분터 제일 먼저 청산하고
처음들어간 매수포지션은 맨 마지막에 청산하고 싶습니다
아래 시스템 수식 수정 부탁드립니다.
도움요청2 :
당일 청산 순수익과 현재 포지션 손익의 합이
20틱 이상 수익인 경우 새벽 6시에 체크하여 잔고 모두 청산하도록
시스템식 수정 부탁드립니다.
도움요청3 :
매수든 매도든 포지션 처음 진입이후 포지션 청산 순수익과 현재 포지션 손익의 합이
20틱 이상 수익인 경우 잔고 모두 청산하도록 시스템식 수정 부탁드립니다.
도움요청4 :
포지션이 있는 경우 가격이 특정값보도 높게 상승하거나
특정값보다 낮게 하락하는 경우 모든 포지션 청산(손절)하도록 시스템식 수정부탁드립니다.
#----------------------------------------------------------------
#--------------------------------
# 매수
#--------------------------------
var : x(0);
var1 = PriceScale*매수진입폭;
if MarketPosition == 0 and L > DayOpen-var1 Then
Buy("B",AtLimit,DayOpen-var1,1);
if MarketPosition == 1 Then
{
Buy("B2",AtLimit,DayOpen-var1*(MaxEntries+1),1);
if CurrentContracts > CurrentContracts[1] Then
Var2 = AvgEntryPrice;
if CurrentContracts < CurrentContracts[1] Then
x = x+1;
ExitLong("BX",AtLimit,Var2+var1*(x+1),"",1,2);
}
Else
x = 0;
#--------------------------------
# 매도
#--------------------------------
var : xx(0);
var3 = PriceScale*매도진입폭;
if MarketPosition == 0 and H < DayOpen+var3 Then
Sell("S",AtLimit,DayOpen+var3,1);
if MarketPosition == -1 Then
{
Sell("S2",AtLimit,DayOpen+var3*(MaxEntries+1),1);
if CurrentContracts > CurrentContracts[1] Then
Var4 = AvgEntryPrice;
if CurrentContracts < CurrentContracts[1] Then
xx = xx+1;
ExitShort("SX",AtLimit,Var4-var3*(xx+1),"",1,2);
}
Else
xx = 0;
#----------------------------------------------------------------
감사합니다.