Страница 2 из 2
Re: Оптимизация стратегии (убыток НПУ)
Добавлено: 03 сен 2022, 11:01
RuDi
Добрый день.
Если LongLimit или ShortLimit достигает своего лимита, то условие (CurrentPL() <= -SL) не срабатывает. Если же лимит не достигнут, все прекрасно работает. В чем может быть дело?
Код: Выделить всё
function Initialize()
{
...
AddParameter("SL", 10000, "Сумма убытка", 1);
...
}
function OnUpdate()
{
...
if ((Input1.Close >= (AverPrice() + ClosePos)) || (CurrentPL() <= -SL))
{
EnterShort(1);
}
...
}
Re: Оптимизация стратегии (убыток НПУ)
Добавлено: 03 сен 2022, 11:08
evge
думается что условие всё же срабатывает, просто заявка не отправляется из-за лимита, что логично.
Re: Оптимизация стратегии (убыток НПУ)
Добавлено: 03 сен 2022, 11:12
RuDi
evge писал(а):думается что условие всё же срабатывает, просто заявка не отправляется из-за лимита, что логично.
Но заявка на противоположное действие. Если я был в лонге и достиг SL выставляется заявка на шорт. Почему робот учитывает лимит и как это можно обойти?
Re: Оптимизация стратегии (убыток НПУ)
Добавлено: 03 сен 2022, 11:17
evge
чтобы точно быть уверенным что позиция противоположная, нужно ещё условие добавлять
CurrentPosition() > 0
Re: Оптимизация стратегии (убыток НПУ)
Добавлено: 03 сен 2022, 11:20
RuDi
У меня это прописано так:
Код: Выделить всё
if (CurrentPosition() > 0) // лонговая позиция
{
double Kol_Pos = CurrentPosition();
double Step = Kol_Pos * K_Step;
double ClosePos = SummaProfita / Kol_Pos;
if (Input1.Close <= AverPrice() - Step)
{
EnterLong(Lot);
}
if ((Input1.Close >= (AverPrice() + ClosePos)) || (CurrentPL() <= -SL))
{
EnterShort(Lot);
}
}
Это не корректно?
Re: Оптимизация стратегии (убыток НПУ)
Добавлено: 03 сен 2022, 11:24
evge
нет, если учесть что может выполнятся условие выше, раньше чем сработает -SL, т.е. стоп не выполнится т.к. перед ним будет постоянно выполнятся EnterLong(Lot) - ограниченное лимитом
Код: Выделить всё
if (Input1.Close <= AverPrice() - Step)
{
EnterLong(Lot);
}
поставить так
Код: Выделить всё
if (CurrentPosition() > 0) // лонговая позиция
{
double Kol_Pos = CurrentPosition();
double Step = Kol_Pos * K_Step;
double ClosePos = SummaProfita / Kol_Pos;
if ((Input1.Close >= (AverPrice() + ClosePos)) || (CurrentPL() <= -SL))
{
EnterShort(Lot);
}
else
if (Input1.Close <= AverPrice() - Step)
{
EnterLong(Lot);
}
}