Как правильно задать условие проверки баланса?
К примеру, исходный баланс у нас 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);
Этот код работает некорректно. Не могу понять логику и правильную ли я беру переменную?
Спасибо.
Лучще проверить последний ордер или позицию, если она закрылась сприбылью то увеличим лот если с минусом то .....
Код и будет работать некорректно, так как данные теряются при любом перезапуске советника. Лучше проверять историю торгов, там вся информация о прибыли уже есть.
Почему же некорректно?
Вначале задаём переменной исходный баланс на момент запуска.
После закрытия ордера проверяем, больше или меньше текущий баланс значения в нашей переменной.
Выполняем условие и приравниваем текущий баланс переменной. И так далее.
Порылся в справке, через десятые ссылки нашёл. :)
if(OrderSelect(OrderTicket(),SELECT_BY_TICKET,MODE_HISTORY))
if(OrderProfit()>0)
{
L=L+0.1;
}
else
{
L=0.1;
}
Работает.
Баланс Вы должны проверять после сделки, а не на каждом тике, баре и т.д. В Вашем коде значение баланса сохраняется на каждой отработке советника.
Нужно примерно так:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Как правильно задать условие проверки баланса?
К примеру, исходный баланс у нас 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);
Этот код работает некорректно. Не могу понять логику и правильную ли я беру переменную?
Спасибо.