Сравнение баланса до открытия ордера и после

 

Как правильно задать условие проверки баланса? 

К примеру, исходный баланс у нас 1000. Открываем позицию, закрыли, имеем профит 100.

Если текущий баланс больше "предыдущего", увеличиваем лот. Если нет, ставим исходный.

                  Bal=AccountInfoDouble(ACCOUNT_BALANCE); // начальный баланс 1000 до сделки

                  // Закрытие ордера

                  if(AccountInfoDouble(ACCOUNT_BALANCE)>Bal) // текущий баланс 1000+100

                 {

                  L=L+0.1;

                  }

                  else // если получили -100

                  {

                  L=0.1;

                  }

                  Bal=AccountInfoDouble(ACCOUNT_BALANCE);

Этот код работает некорректно. Не могу понять логику и правильную ли я беру переменную?

Спасибо. 

 
Rice:

Как правильно задать условие проверки баланса? 

К примеру, исходный баланс у нас 1000. Открываем позицию, закрыли, имеем профит 100.

Если текущий баланс больше "предыдущего", увеличиваем лот. Если нет, ставим исходный.

                  Bal=AccountInfoDouble(ACCOUNT_BALANCE); // начальный баланс 1000 до сделки

                  // Закрытие ордера

                  if(AccountInfoDouble(ACCOUNT_BALANCE)>Bal) // текущий баланс 1000+100

                 {

                  L=L+0.1;

                  }

                  else // если получили -100

                  {

                  L=0.1;

                  }

                  Bal=AccountInfoDouble(ACCOUNT_BALANCE);

Этот код работает некорректно. Не могу понять логику и правильную ли я беру переменную?

Спасибо. 

Лучще проверить последний ордер или позицию, если она закрылась сприбылью то увеличим лот если с минусом то .....
 
Код и будет работать некорректно, так как данные теряются при любом перезапуске советника. Лучше проверять историю торгов, там вся информация о прибыли уже есть.
 
Vladimir Pastushak:
Лучще проверить последний ордер или позицию, если она закрылась сприбылью то увеличим лот если с минусом то .....
Я сразу так и думал, AccountInfoDouble(ACCOUNT_PROFIT)>0, но это условие почему-то не выполняется, поэтому ставится 0.1
 
Vitalie Postolache:
Код и будет работать некорректно, так как данные теряются при любом перезапуске советника. Лучше проверять историю торгов, там вся информация о прибыли уже есть.

Почему же некорректно?

Вначале задаём переменной исходный баланс на момент запуска.

После закрытия ордера проверяем, больше или меньше текущий баланс значения в нашей переменной.

Выполняем условие и приравниваем текущий баланс переменной. И так далее. 

 

Порылся в справке, через десятые ссылки нашёл. :)

if(OrderSelect(OrderTicket(),SELECT_BY_TICKET,MODE_HISTORY))

if(OrderProfit()>0)

{

L=L+0.1;

}

else

{

L=0.1;

}

 Работает. 

 
Alexander Laur:

Баланс Вы должны проверять после сделки, а не на каждом тике, баре и т.д. В Вашем коде значение баланса сохраняется на каждой отработке советника.

Нужно примерно так:

Спасибо, учту. :)
Причина обращения: