피라미딩 설정에서 다른 진입신호만 허용 상태로 시스템을 운영할 때, 분할매도가 발생할 경우
동일한 진입신호로 다시 진입이 되는 경우가 발생합니다.
동일한 진입신호로 딱 한번만 매수하게 하려면 어떻게 해야 하나요?
또는 동일한 진입신호로 매수한 수량을 모두 매도한 후에만 다시 같은 진입신호로 매수가 가능하게 하려면 어떻게 하는지 문의드립니다.
답변 1
예스스탁
예스스탁 답변
2023-01-05 13:08:14
안녕하세요.
예스스탁 입니다.
Buy, Sell 함수의 신호명을 설정하고,
신호명에 따라 진입 횟수를 카운팅하는 방식으로 문제를 해결하실 수 있습니다.
# 매수조건 1이 만족하면
if Condition1 Then
{
# 현재 포지션이 없거나 매도 포지션인 경우 진입 가능
# 현재 매수 포지션인데 b1 진입 카운팅(Var1)이 없으면 진입 가능
if MarketPosition <= 0 or (MarketPosition == 1 and var1 < 1) Then
Buy("b1");
}
if Condition2 Then
{
if MarketPosition <= 0 or (MarketPosition == 1 and var2 < 1) Then
Buy("b2");
}
if Condition3 Then
{
if MarketPosition <= 0 or (MarketPosition == 1 and var3 < 1) Then
Buy("b3");
}
if Condition4 Then
{
if MarketPosition >= 0 or (MarketPosition == -1 and var4 < 1) Then
Sell("s1");
}
if Condition5 Then
{
if MarketPosition >= 0 or (MarketPosition == -1 and var5 < 1) Then
Sell("s2");
}
if Condition6 Then
{
if MarketPosition >= 0 or (MarketPosition == -1 and var6 < 1) Then
Sell("s3");
}
# 현재 매수 포지션인데 진입 수량이 증가했거나(b1만 진입했다가, b2까지 진입했거나)
# 무 포지션, 매도 포지션에서 매수 포지션으로 진입한 경우
# 최근 진입명을 확인해서 카운팅
if MarketPosition == 1 Then
{
if CurrentContracts > CurrentContracts[1] or MarketPosition != MarketPosition[1] Then
{
if LatestEntryName(0) == "b1" Then
var1 = var1+1;
if LatestEntryName(0) == "b2" Then
var2 = var2+1;
if LatestEntryName(0) == "b3" Then
var3 = var3+1;
}
}
Else
{
# 매수 포지션 청산시에는 카운팅 초기화
var1 = 0;
var2 = 0;
var3 = 0;
}
if MarketPosition == -1 Then
{
if CurrentContracts > CurrentContracts[1] or MarketPosition != MarketPosition[1] Then
{
if LatestEntryName(0) == "s1" Then
var4 = var4+1;
if LatestEntryName(0) == "s2 Then
var6 = var5+1;
if LatestEntryName(0) == "s3" Then
var7 = var6+1;
}
}
Else
{
var4 = 0;
var5 = 0;
var6 = 0;
}
즐거운 하루 보내세요.
> huhhh 님이 쓴 글입니다.
> 제목 : 문의드립니다.
> 피라미딩 설정에서 다른 진입신호만 허용 상태로 시스템을 운영할 때, 분할매도가 발생할 경우
동일한 진입신호로 다시 진입이 되는 경우가 발생합니다.
동일한 진입신호로 딱 한번만 매수하게 하려면 어떻게 해야 하나요?
또는 동일한 진입신호로 매수한 수량을 모두 매도한 후에만 다시 같은 진입신호로 매수가 가능하게 하려면 어떻게 하는지 문의드립니다.