예스스탁
예스스탁 답변
2023-04-10 09:22:58
안녕하세요
예스스탁입니다.
강제청산은 종류별로 하나만 셋팅이 됩니다.
작성하신 수식에서는 가장 마지막에 셋팅되는
SetStopProfittarget(50*PriceScale,PointStop); 만 셋팅이 되게 됩니다.
개별청산이 SetStopProfittarget을 사용할 수 밖에 없으므로
1회진입시 +50틱 청산은 exitliong,exitshort 함수로 처리하셔야 합니다.
청산3-1이나 청산 3-2는 택일해서 하나만 사용하셔야 합니다.
var : 이평(0),매수가격(0);
이평 = ma(C,20) ;
if marketposition == 0 and C > 이평 then
{
Buy("b1",OnClose,DEf,amt);
매수가격 = EntryPrice(0) ;
}
if MarketPosition == 1 Then
{
if MaxEntries(0) == 1 then
Buy("b2",AtLimit,매수가격-10*PriceScale*MaxEntries,1);
if MaxEntries(0) == 2 Then
Buy("b3",AtLimit,매수가격-10*PriceScale*MaxEntries,1);
if MaxEntries(0) == 3 Then
Buy("b4",AtLimit,매수가격-10*PriceScale*MaxEntries,1);
if MaxEntries(0) == 4 Then
Buy("b5",AtLimit,매수가격-10*PriceScale*MaxEntries,1);
if MaxEntries(0) == 5 Then
Buy("b6",AtLimit,매수가격-10*PriceScale*MaxEntries,1);
#1회 진입
if MaxEntries == 1 Then
#+50틱에서 청산(익절)
ExitLong("bx",AtLimit,EntryPrice+PriceScale*50);
}
# 청산 3-1
if MaxEntries() >= 3 Then
SetStopProfittarget(10*PriceScale,PointStop);
Else
{
SetStopProfittarget(0);
if MaxEntries >= 2 and MaxEntries < 3 Then
{
# 청산 1
#진입 평균가보다 10틱 위 청산
Exitlong("bx1",AtLimit,AvgEntryPrice+10*PriceScale) ;
# 청산 2
#포지션 총수익 10틱 이상인 경우
ExitLong("bx2",AtLimit,AvgEntryPrice+(10*PriceScale)/CurrentContracts);
}
}
# 청산 3-2
if MaxEntries() < 3 Then
{
SetStopProfittarget(10*PriceScale,PointStop);
}
Else
{
SetStopProfittarget(0);
if MaxEntries >= 2 and MaxEntries < 3 Then
{
# 청산 1
#진입 평균가보다 10틱 위 청산
Exitlong("bx1",AtLimit,AvgEntryPrice+10*PriceScale) ;
# 청산 2
#포지션 총수익 10틱 이상인 경우
ExitLong("bx2",AtLimit,AvgEntryPrice+(10*PriceScale)/CurrentContracts);
}
}
}
Else
SetStopProfittarget(0);
즐거운 하루되세요
> 양치기 님이 쓴 글입니다.
> 제목 : 시스템식 부탁드립니다.
> 항상 도움 주셔서 감사합니다.
질문사항
시스템식에서 주문함수 exitlong(),exitshort()와
SetStopProfittarget()와 Setstoploss()를 같이 사용하고 싶습니다.
보통 주문청산을 사용할때는 exitlong(),exitshort()를 중간에 주문청산시 사용하고
코딩 맨 마지막에는 SetStopProfittarget()와 Setstoploss()를 사용합니다.
저는 SetStopProfittarget()와 Setstoploss()를 중간에도 사용하고
필요시 2번 이상도 사용하고 싶습니다.
그래서 아래와 같이 코딩해 보았는데 잘 되지 않는것 같습니다.
도움 부탁드립니다.
input : 틱사이즈(0.01) ;
var : 이평(0) ;
이평 = ma(C,20) ;
f marketposition == 0 and C > 이평 then
{
Buy("b1",OnClose,DEf,amt);
매수가격 = EntryPrice(0) ;
}
if MarketPosition == 1 Then
{
if MaxEntries(0) == 1 then
Buy("b2",AtLimit,매수가격-10*pricescal*MaxEntries,1);
if MaxEntries(0) == 2 Then
Buy("b3",AtLimit,매수가격-10*pricescal*MaxEntries,1);
if MaxEntries(0) == 3 Then
Buy("b4",AtLimit,매수가격-10*pricescal*MaxEntries,1);
if MaxEntries(0) == 4 Then
Buy("b5",AtLimit,매수가격-10*pricescal*MaxEntries,1);
if MaxEntries(0) == 5 Then
Buy("b6",AtLimit,매수가격-10*pricescal*MaxEntries,1);
# 청산 1
Exitlong("BP",AtLimit,AvgEntryPrice+10*PriceScale) ;
# 청산 2
if OpenPositionProfit/틱사이즈 > 10*PriceScale Then
ExitLong("bx",AtLimit,c+10*PriceScale);
# 청산 3-1
if MaxEntries() >= 3 Then
SetStopProfittarget(10*PriceScale,PointStop);
Else
SetStopProfittarget(0);
# 청산 3-2
if MaxEntries() < 3 Then
SetStopProfittarget(10*PriceScale,PointStop);
Else
SetStopProfittarget(0);
}
# 청산 4
SetStopProfittarget(50*PriceScale,PointStop);
위와 같이 청산 코딩을 4개로 할 경우 문제(청산이 안되거나)가 되는 부분이나
논리적으로 잘못된 부분이 있으시면 수정 부탁드립니다.
제가 하고자 하는 청산은 아래와 같습니다.
청산 1 : 가격이 하락하여 다계약 진입한 경우 진입 평균가보다 10틱 위에서 청산
청산 2 : 가격이 하락하여 다계약 진입한 경우 다계약의 현재 포지션 총수익 10틱 이상인 경우 현재가에서 10틱 위에서 청산
청산 3 : 총 3회 이상 진입한 경우 3번째 진입부터는 10틱 이상 수익시 개별 청산
3회 미만은 평균가보다 10틱 이상 또는현재 총수익이 10틱 이상인 경우 청산
또는
총 3회 미만 진입한 경우는 10틱 이상 수익시 개별 청산하고
3회 이상부터는 평균가 보다 10틱 이상 또는 총수익이 10틱 이상인 경우 청산
청산 4 : 1계약 진입후 가격이 지속 상승한 경우 50틱에서 청산(익절)
도움 부탁드립니다.
감사합니다.