Но вот ваше второе предложение дало неоднозначный результат. При тестировании я взял участок графика, показанный ранее. Слева на графике результаты по вашему предложению, справа - мой старый вариант, но с добавлением предложенного вами условия проверки позиции. В вашем варианте (слева) стоп сработал раньше, чем -300. В моем варианте (справа) стоп не сработал (движение было по условию меньше -300) и получен профит +1000. Таким образом левый вариант "не добирает" стоп и профит, чаще открывает позиции. Почему так, не знаю.
Мой окончательный вариант:
Код: Выделить всё
/**Стратегия основана на определении моментов пересечения сглаженной линии D SO и сигнальной линии SO (система "SO"). Особенности:
- сигнал на продажу выдается, если сглаженная линия D индикатора SO пересекает сигнальную линию SO сверху вниз;
- сигнал на закрытие шорта выдается при профите 1000, и при стопе -300;
- при тестировании цена сделки фиксируется как цена закрытия бара, на котором появился сигнал.
- в роботе заявка выставляется после закрытия бара, на котором появился сигнал.
Developed by GenGal;
Algorithm = ОСЦИЛЛЯТОР;**/
function Initialize()
{
StrategyName = "GenGal_SQ_test3";
AddParameter("PK", 37, "", 1);
AddParameter("PD", 31, "", 1);
AddParameter("Psig", 10, "", 1);
AddInput("Input1", Inputs.Candle, 30, true, "SiH6=ФОРТС");
LongLimit = 1;
ShortLimit = -1;
}
function OnUpdate()
{
/// ПРАВИЛО 1
if ( (SO(Input1, PK, PD, Psig).GetValue("D", 0) < SO(Input1, PK, PD, Psig).GetValue("Signal", 0))&& CurrentPosition() == 0 )
{
EnterShort();
}
/// ПРАВИЛО 2
if ( ((Input1.Close < (AverPrice()-1000)) && AverPrice() > 0))
{
CloseShort();
}
/// ПРАВИЛО 3
if ( ((Input1.Close > (AverPrice()+300)) && AverPrice() > 0))
{
CloseShort();
}
}