Здравствуйте, Андрей!
Просьба написать функцию расчета (оптимизации) лота для советника МТ4.
Принцип расчета (оптимизации) лота заключается в следующем:
1) К примеру, при депозите
1000$ стартовый лот будет равен
0.10, далее депозит увеличивается до
2000$ — лот будет равен
0.20, до
3000$ —
0.30 лота и так далее, т.е. на каждую полную
1000$ баланса лот увеличивается на
0.10.
2) Если баланс уменьшится хотя бы на одну единицу баланса от полной тысячи, то лот уменьшается до размера остатка полной тысячи.
Пример: Баланс уменьшился с
3000$ до
2999$, лот соответственно меняется с
0.30 на
0.20 и так далее.
3) Если баланс становится меньше
1000$, то для расчета рабочего лота команда передается на другую функцию, которая рассчитывает лот процент от баланса, я предпочитаю такую:
double MMLot()
{
double LotSize=MarketInfo(Symbol(),MODE_LOTSIZE);
double Min_Lot=MarketInfo(Symbol(),MODE_MINLOT);
double Max_Lot=MaxLot; //Входной параметр советника "MaxLot"
double MMlot=AccountBalance()*MM/LotSize; //Входной параметр советника "MM", т.е. Мани-менеджмент (%) от баланса
if(MMlot<=Min_Lot) MMlot=Min_Lot;
if(MMlot>=Max_Lot) MMlot=Max_Lot;
Print("Рабочий лот для ",Symbol()," (",MM,"%) = ",MMlot);
return(MMlot);
}
Входные параметры для советника и соответственно для работы функций можно обозначить следующим образом:
extern bool MMonoff = true; //Мани-менеджмент вкл/выкл
extern double MM = 5; //Мани-менеджмент (%) от баланса
extern double Lot = 0.10; //Начальный лот
extern bool ProgressiveLot = true; //Прогрессивный лот от баланса вкл/выкл
extern double InitialLot = 0.10; //Прогрессия лота на каждые "ProgressiveBalans" +0.10 лот
extern double ProgressiveBalans = 1000; //Шаг баланса
extern double MaxLot = 10; //Максимальный лот
Или как Вам будет удобно.
Комментарии (15)
35 AM2 Сообщений: 16420 - Андрей
18 Andrju81 Автор Сообщений: 245 - Андрей
35 AM2 Сообщений: 16420 - Андрей
На рисунке видим предыдущий баланс 5220 сейчас 4942.
Лот уменьшился на 0.1
Вот функция:
И советник:
35 AM2 Сообщений: 16420 - Андрей
В Вашем примере, я так понимаю, лот рассчитывается конкретно на 1000 депозита. Я немного подумал, и вот что я решил сделать, немного изменил Вашу функцию с возможностью выбора шага изменения баланса и выбора величины прогрессии лота:
Но есть одна загвоздка!!! Лот начинает изменяться до того как баланс увеличивается (в данном случае) на 1000, т.е., допустим, начальный баланс 1000, как только баланс переваливает за 1501, лот уже начинает увеличивается!?.. А надо чтобы лот начинал увеличиваться на каждую полную (в данном случае) 1000!?.. Как это сделать, не могу понять?!..
Вот фрагмент отчета:
Редактирован: 24 января 2016, 16:11
18 Andrju81 Автор Сообщений: 245 - Андрей
Также как с уменьшением.
Только наоборот.
35 AM2 Сообщений: 16420 - Андрей
18 Andrju81 Автор Сообщений: 245 - Андрей
18 Andrju81 Автор Сообщений: 245 - Андрей
35 AM2 Сообщений: 16420 - Андрей
18 Andrju81 Автор Сообщений: 245 - Андрей
Функция:
Редактирован: 25 января 2016, 08:48
35 AM2 Сообщений: 16420 - Андрей
35 AM2 Сообщений: 16420 - Андрей
Например баланс 3200 лот считает 0.3. Стал 2900 лот будет 0.2.
35 AM2 Сообщений: 16420 - Андрей
Вы со мной согласны?!.. Если да, то тогда вопрос исчерпан. Еще раз СПАСИБО за помощь. Редактирован: 25 января 2016, 17:27
18 Andrju81 Автор Сообщений: 245 - Андрей
Согласен
35 AM2 Сообщений: 16420 - Андрей
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий