- Спреды - Для продвинутых пользователей - Торговые операции
- Групповые операции - Торговля - MetaTrader 5 для Android
- Торговый отчет - Торговые операции
Привет всем! Ребят, как сделать, чтобы лот рассчитывался не на каждую сделку в процентах от депо, а рассчитывался один раз на начало месяца, и сделки открывались с фиксированным рассчитанным лотом? Просто иногда первое число выпадает на выходные. Например, у меня на начало месяца депо 1000$ , риск на сделку 2% и советник открывал весь месяц сделки риском в 20$. На начало следующего месяца уже, например, депо 1500$ и чтобы советник открывал весь месяц сделки с риском в 30$? В поиске искал- особо ничего не нашел подходящего. Если можете- скиньте ссылку или дайте ответ тут. Заранее спасибо!
Найдите статью по определению нового бара, там
поставьте период графика 1 месяц и если функция вернёт что наступил новый месяц, то произвести пересчёт.
- www.mql5.com
Nikolai_korzhok:
Привет всем! Ребят, как сделать, чтобы лот рассчитывался не на каждую сделку в процентах от депо, а рассчитывался один раз на начало месяца, и сделки открывались с фиксированным рассчитанным лотом? Просто иногда первое число выпадает на выходные. Например, у меня на начало месяца депо 1000$ , риск на сделку 2% и советник открывал весь месяц сделки риском в 20$. На начало следующего месяца уже, например, депо 1500$ и чтобы советник открывал весь месяц сделки с риском в 30$? В поиске искал- особо ничего не нашел подходящего. Если можете- скиньте ссылку или дайте ответ тут. Заранее спасибо!
а можно , увеличился Ваш баланс, лот увеличится. Вот приблизительная функция для этого https://www.mql5.com/ru/forum/107406#comment_3018721
Я из этой функции слепил - только всё на оборот . от убытка увеличивает лот
input string tL="---- Lots Parameters -----"; // input uint maxLimits = 1; // Кол-во Позиции Открыть в одну сторону input double InpLots1 = 0.01; // Lots 1 input int InpLots_01 = 200; // До убытка валюте Lots 0.01 input double InpLots2 = 0.02; // Lots 2 input int InpLots_02 = 400; // До убытка валюте Lots 0.02 input double InpLots3 = 0.04; // Lots 3 input int InpLots_03 = 800; // До убытка валюте Lots 0.04 input double InpLots4 = 0.08; // Lots 4
ошибка ! красным цветом
//+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double OptimizedBuy(void) { double PROFIT_BUY=0.00; double PROFIT_SELL=0.00; for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of open positions { string position_GetSymbol=PositionGetSymbol(i); // GetSymbol позиции if(position_GetSymbol==m_symbol.Name()) { if(m_position.PositionType()==POSITION_TYPE_BUY) { PROFIT_BUY=PROFIT_BUY+PositionGetDouble(POSITION_PROFIT); } else { PROFIT_SELL=PROFIT_SELL+PositionGetDouble(POSITION_PROFIT); } } } double Lots=0.01; double ab=PROFIT_BUY; if(ab<-1 && ab>=-InpLots_01) Lots=InpLots1; if(ab<-InpLots_01 && ab>=-InpLots_02) Lots=InpLots2; if(ab<-InpLots_02 && ab>=-InpLots_03) Lots=InpLots3; if(ab<-InpLots_03) Lots=InpLots4; //--- return trading volume return(Lots); } //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double OptimizedSell(void) { double PROFIT_BUY=0.00; double PROFIT_SELL=0.00; for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of open positions { string position_GetSymbol=PositionGetSymbol(i); // GetSymbol позиции if(position_GetSymbol==m_symbol.Name()) { if(m_position.PositionType()==POSITION_TYPE_BUY) { PROFIT_BUY=PROFIT_BUY+PositionGetDouble(POSITION_PROFIT); } else { PROFIT_SELL=PROFIT_SELL+PositionGetDouble(POSITION_PROFIT); } } } double Lots=0.01; double ab=PROFIT_SELL; if(ab<-1 && ab>=-InpLots_01) Lots=0.01; if(ab<-InpLots_01 && ab>=-InpLots_02) Lots=0.02; if(ab<-InpLots_02 && ab>=-InpLots_03) Lots=0.04; if(ab<-InpLots_03) Lots=0.08; //--- return trading volume return(Lots); } //+------------------------------------------------------------------+
-------------------------
это приблизительно выглядит, так!
макс. количество
double price=m_symbol.Ask(); for(uint i=0; i<maxLimits; i++) { //--- open position if(m_trade.PositionOpen(m_symbol.Name(),ORDER_TYPE_BUY,OptimizedBuy(),price,0.0,0.0)) printf("Position by %s to be opened",m_symbol.Name()); else { printf("Error opening BUY position by %s : '%s'",m_symbol.Name(),m_trade.ResultComment()); printf("Open parameters : price=%f,TP=%f",price,0.0); } res=true; }
- 2008.03.07
- www.mql5.com
а можно , увеличился Ваш баланс, лот увеличится. Вот приблизительная функция для этого https://www.mql5.com/ru/forum/107406#comment_3018721
Я из этой функции слепил - только всё на оборот . от убытка увеличивает лот
во как хорошо ! что выставил код .
Нашёл ошибку в коде !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
а можно , увеличился Ваш баланс, лот увеличится. Вот приблизительная функция для этого https://www.mql5.com/ru/forum/107406#comment_3018721
чтобы функция была добра к пополнениям/снятиям стоит смотреть от максимального(и учитывая минимальный) баланса по контрольным датам или учитывать соотв.события в истории
в интрадее считаю лоты от типичного значения баланса на ночь среды за последние 3/5 недель. Чтобы в четверг утром подавать на ввод/вывод, и к выходным деньги пришли/ушли. И чтобы при этом не сошёл с ума рассчёт лотов :-)
чтобы функция была добра к пополнениям/снятиям стоит смотреть от максимального(и учитывая минимальный) баланса по контрольным датам или учитывать соотв.события в истории
в интрадее считаю лоты от типичного значения баланса на ночь среды за последние 3/5 недель. Чтобы в четверг утром подавать на ввод/вывод, и к выходным деньги пришли/ушли. И чтобы при этом не сошёл с ума рассчёт лотов :-)
Благодарю!)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования