Как сделать, чтобы лот рассчитывался один раз вначале месяца?

 
Привет всем! Ребят, как сделать, чтобы лот рассчитывался не на каждую сделку в процентах от депо, а рассчитывался один раз на начало месяца, и сделки открывались с фиксированным рассчитанным лотом? Просто иногда первое число выпадает на выходные. Например, у меня на начало месяца депо 1000$ , риск на сделку 2% и советник открывал весь месяц сделки риском в 20$. На начало следующего месяца уже, например, депо 1500$ и чтобы советник открывал весь месяц сделки с риском в 30$? В поиске искал- особо ничего не нашел подходящего. Если можете- скиньте ссылку или дайте ответ тут. Заранее спасибо!
 
Nikolai_korzhok:
Привет всем! Ребят, как сделать, чтобы лот рассчитывался не на каждую сделку в процентах от депо, а рассчитывался один раз на начало месяца, и сделки открывались с фиксированным рассчитанным лотом? Просто иногда первое число выпадает на выходные. Например, у меня на начало месяца депо 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
Скажите, можно ли как то увеличить размер лота с каждой сделки....??? К примеру, у меня депозит 100, торгую с лотом 0.50. депозит 200, торую 1...
 
Alexsandr San:

а можно , увеличился Ваш баланс, лот увеличится. Вот приблизительная функция для этого https://www.mql5.com/ru/forum/107406#comment_3018721

Я из этой функции слепил - только всё на оборот . от убытка увеличивает лот

 

во как хорошо ! что выставил код .

Нашёл ошибку в коде !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

 
Большое спасибо всем! Ваша помощь бесценна) Буду пробовать, надеюсь, что получится все. 
 
Alexsandr San:

а можно , увеличился Ваш баланс, лот увеличится. Вот приблизительная функция для этого https://www.mql5.com/ru/forum/107406#comment_3018721


 

чтобы функция была добра к пополнениям/снятиям стоит смотреть от максимального(и учитывая минимальный) баланса по контрольным датам  или учитывать соотв.события в истории

в интрадее считаю лоты от типичного значения баланса на ночь среды за последние 3/5 недель. Чтобы в четверг утром подавать на ввод/вывод, и к выходным деньги пришли/ушли. И чтобы при этом не сошёл с ума рассчёт лотов :-)

 
Maxim Kuznetsov:

чтобы функция была добра к пополнениям/снятиям стоит смотреть от максимального(и учитывая минимальный) баланса по контрольным датам  или учитывать соотв.события в истории

в интрадее считаю лоты от типичного значения баланса на ночь среды за последние 3/5 недель. Чтобы в четверг утром подавать на ввод/вывод, и к выходным деньги пришли/ушли. И чтобы при этом не сошёл с ума рассчёт лотов :-)

Благодарю!)

 
Я бы передавал в функцию расчета лота прибыль_за_текущий_месяц. Дальше баланс_на_начало_месяца = текущий_баланс - прибыль_за_текущий месяц. От полученного баланса на начало месяца считаем лот. Пополнения/снятия можно учитывать или не учитывать по вашему желанию. А прибыль за текущий месяц заботливо подготавливаем в блоке работы с историей ордеров.
 
Ориентируйтесь на месячную свечу. Как только открылась, рассчет Лота и так до следующей
 
Большое спасибо всем, ребята!