Здесь всё понятно.
А вот как себя поведет стратегия, если позицию частично мы будем закрывать лимитным ордером, например, CloseShortLimit(Price, Q);
Вот как раз здесь мы и увидим странность:
Позиция будет закрыта частично по лимитной заявке, но полный стоп к позиции останется.
Когда исполнится стоп, мы окажемся в противоположной позиции, хотя в нашем коде не будет поручений на вход в противоположную позицию.
Код обоих примеров тестовых стратегий и скриншоты сигналов:
Код: Выделить всё
/**
x1
**/
function Initialize()
{
StrategyName = "x1";
AddParameter("P1", 0.005, "", 1);
AddInput("Input1", Inputs.Candle, 1, true, "SBER=МБ ЦК");
LongLimit = 100;
ShortLimit = 100;
}
function OnUpdate()
{
/// ПРАВИЛО 1
if ( Input1.Open < Input1.Close && CurrentPosition() == 0)
{
EnterShort();
StopLoss(Input.Close + Input.Close * 0.01, SignalPriceType.Price);
}
if ( Input1.Open > Input1.Close && CurrentPosition() != 0)
{
CloseShort(1);
}
}
Результат
Код: Выделить всё
/**
x2
**/
function Initialize()
{
StrategyName = "x2";
AddParameter("P1", 0.005, "", 1);
AddInput("Input1", Inputs.Candle, 60, true, "SBER=МБ ЦК");
LongLimit = 100;
ShortLimit = 100;
}
function OnUpdate()
{
/// ПРАВИЛО 1
if ( Input1.Open < Input1.Close && CurrentPosition() == 0)
{
EnterShort();
StopLoss(Input.Close + Input.Close * 0.01, SignalPriceType.Price);
}
if ( Input1.Open > Input1.Close && CurrentPosition() != 0)
{
CloseShortLimit(Input.Close + Input.Close * 0.01, 1);
}
}
Результат
во второй тестовой стратегии CloseShortLimit() не в ту строну, но сути это не меняет, он просто исполнился сразу