Коллеги, всем привет.
Есть готовый советник на МТ4. В целом, за исключением некоторых моментов, меня в нём всё устраивает.
Осталось добавить в него единственную вещь: автолот на размер депозита. Т.е. если поставлю в этом поле 500, то на каждые 500 депозитв ставится 0.01 лота.
Пробовал сам делать, из различных советников вставлять. Постоянно какие-то ошибки вылазят. Ладно если бы только необъявленные переменные.
Найдутся здесь добрые люди, кто алгоритм объяснит по написанию в коде параметра автолот, или поделится частью кода, как правильно прописать автолот в общем коде - буду рад. Или если есть уже готовые решения здесь на форуме и вы знаете ссылку на статью - тоже хорошо.
За адекватные комментарии заранее спасибо!
- book.mql4.com
Коллеги, всем привет.
Есть готовый советник на МТ4. В целом, за исключением некоторых моментов, меня в нём всё устраивает.
Осталось добавить в него единственную вещь: автолот на размер депозита. Т.е. если поставлю в этом поле 500, то на каждые 500 депозитв ставится 0.01 лота.
Пробовал сам делать, из различных советников вставлять. Постоянно какие-то ошибки вылазят. Ладно если бы только необъявленные переменные.
Найдутся здесь добрые люди, кто алгоритм объяснит по написанию в коде параметра автолот, или поделится частью кода, как правильно прописать автолот в общем коде - буду рад. Или если есть уже готовые решения здесь на форуме и вы знаете ссылку на статью - тоже хорошо.
За адекватные комментарии заранее спасибо!
Могу предложить вот такой вариант. Сам использую во всех своих советниках. Расчёт - на каждую 1000 депозита минимальный шаг лота (там где maxlots). Дальше проверка на максимум-минимум допустимого лота, постановка стопов и тейков и разные способы открытия позиции.
//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void BuyOrderRiskFixed747() { double lotsize = MarketInfo(Symbol(), MODE_LOTSIZE) / AccountLeverage(); double pipsize = 0.01 ; // * 10 double maxlots = NormalizeDouble(AccountFreeMargin() / 1000 * H1_RISK, 2) ; double lots = maxlots; // calculate lot size based on current risk double lotvalue = 0.001; double minilot = MarketInfo(Symbol(), MODE_MINLOT); int powerscount = 0; while(minilot < 1) { minilot = minilot * MathPow(10, powerscount); powerscount++; } lotvalue = NormalizeDouble(lots, powerscount - 1); if(lotvalue < MarketInfo(Symbol(), MODE_MINLOT)) // make sure lot is not smaller than allowed value { lotvalue = MarketInfo(Symbol(), MODE_MINLOT); } if(lotvalue > MarketInfo(Symbol(), MODE_MAXLOT)) // make sure lot is not greater than allowed value { lotvalue = MarketInfo(Symbol(), MODE_MAXLOT); } double SL = Ask - SL_H1 * PipValue * Point; if(SL_H1 == 0) SL = 0; double TP = Ask + TP_H1 * PipValue * Point; if(TP_H1 == 0) TP = 0; int ticket = -1; if(ECNBroker_H1) ticket = OrderSend(Symbol(), OP_BUY, lotvalue, Ask, 400, 0, 0, "TG_PULSE_1.0.9_H1_risk", MAGIC10, 0, Blue); else ticket = OrderSend(Symbol(), OP_BUY, lotvalue, Ask, 400, SL, TP, "TG_PULSE_1.0.9_H1_risk", MAGIC10, 0, Blue); if(ticket > -1) { if(ECNBroker_H1) { bool sel = OrderSelect(ticket, SELECT_BY_TICKET); bool ret = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Blue); if(ret == false) Print("OrderModify() error - ", ErrorDescription(GetLastError())); } PrintToLog746(); } else { Print("OrderSend() error - ", ErrorDescription(GetLastError())); } }
если что-то прям совсем элементарное
(AccountBalance()/500)*0.01
Коллеги, всем спасибо большое!) Завтра займусь этим и напишу что в итоге получилось.
Что в итоге пробовал. Изначально прописал такой код для автолота.
extern double DepoPerLot = 0; //Depo Per 0.01 Lot (0-off) double lot_size = sets[set_index]; double mm_lot = lot_size; if (depo_per_lot >= 100) { double balance = AccountInfoDouble(ACCOUNT_BALANCE); #ifdef IS_OPT lot_size = balance / depo_per_lot * sets[set_index].lot; #else lot_size = balance / depo_per_lot * pairs_lots[set_index]; #endif mm_lot = lot_size; }
Но вылезли ошибки:
Окей. Тогда попробовал вот такое:
extern double DepoPerLot = 0; //Depo Per 0.01 Lot (0-off) int depo_per_lot; double pairs_lots; double sets; double lot_size = sets[set_index]; double mm_lot = lot_size; if (depo_per_lot >= 100) { double balance = AccountInfoDouble(ACCOUNT_BALANCE); #ifdef IS_OPT lot_size = balance / depo_per_lot * sets[set_index].lot; #else lot_size = balance / depo_per_lot * pairs_lots[set_index]; #endif mm_lot = lot_size; }
Теперь ругается на строки:
double lot_size = sets[set_index];
lot_size = balance / depo_per_lot * pairs_lots[set_index];
что теперь то не так?
Эту строку ставите в переменную лот. Её потом отправляете в ф ию открытия позиции.
Там же, как я понял, идёт от 500 баланса рассчет? Или от любого установленного, но с учетом того, что если депо менее 500 - в любом случае мин лот будет?
Там же, как я понял, идёт от 500 баланса рассчет? Или от любого установленного, но с учетом того, что если депо менее 500 - в любом случае мин лот будет?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Коллеги, всем привет.
Есть готовый советник на МТ4. В целом, за исключением некоторых моментов, меня в нём всё устраивает.
Осталось добавить в него единственную вещь: автолот на размер депозита. Т.е. если поставлю в этом поле 500, то на каждые 500 депозитв ставится 0.01 лота.
Пробовал сам делать, из различных советников вставлять. Постоянно какие-то ошибки вылазят. Ладно если бы только необъявленные переменные.
Найдутся здесь добрые люди, кто алгоритм объяснит по написанию в коде параметра автолот, или поделится частью кода, как правильно прописать автолот в общем коде - буду рад. Или если есть уже готовые решения здесь на форуме и вы знаете ссылку на статью - тоже хорошо.
За адекватные комментарии заранее спасибо!