Помогите в эксперте.. - страница 2

 
Roger:

В принципе, да, надо перебирать историю, задавая начало месяца, суммировать всю прибыль минус свопы и комиссии, и только потом блокировать советник до конца месяца. В одну не уложиться.
Вопрос был о пунктах, поэтому свопы и комиссии считать не надо, а вычислять прибыль по типу торговой операции (Бай/Селл), ценам открытия и закрытия. Вот сама постановка задачи абсурдна - если прёт, то зачем останавливать торговлю?
 

Можно использовать примерно такой код. Думаю не составит труда подсчитать сколько в % будут 50 пунктов.

/gAllowed, gMonth, gStartingEquity
int MonthlyProfit()
{
   int ret = 1;
   
   SemaphoreTake("Semaphore_sound_2_MP");
   
      if(GlobalVariableCheck("gAllowed") == false)          //если переменных не было
      {
         GlobalVariableSet("gAllowed", 1);
         GlobalVariableSet("gMonth", Month());
         GlobalVariableSet("gStartingEquity", AccountEquity());
      }
   
      double _Allowed, _Month, _StartingEquity;
      _Month            = GlobalVariableGet("gMonth");
   
      if(RestartProfitCount == true || Month() != _Month)   //если надо начать отсчёт заново или начался новый месяц
      {
         GlobalVariableSet("gAllowed", 1);
         GlobalVariableSet("gMonth", Month());
         GlobalVariableSet("gStartingEquity", AccountEquity());
         RestartProfitCount = false;
      }

      _Month            = GlobalVariableGet("gMonth");
      _Allowed          = GlobalVariableGet("gAllowed");
      _StartingEquity   = GlobalVariableGet("gStartingEquity");
   
      if(_Allowed < 0.0)   ret = 0;
   
   //-------------------------------------------------------
      else
      {
         double EquityNow = AccountEquity();
   
         CommentArray[2] = "Month Starting Equity: " + DoubleToStr(_StartingEquity, 2);
         CommentArray[3] = "Current Equity:           " + DoubleToStr(EquityNow, 2);
   
         if( NormalizeDouble(EquityNow, 2) < NormalizeDouble((MinEquity/100.0)*_StartingEquity,2) )
         {
            Alert("Current Equity Is < ", MinEquity, "% * Starting Equity Of This Month.\nTrades Stopped.");
            CloseAllOrders();
            GlobalVariableSet("gAllowed", -1);                 //торги в этом месяце запрещены
            CommentArray[4] = "Trades Stopped At: " + TimeToStr(TimeCurrent()) + "\n" +
                              "Reason: " + DoubleToStr(EquityNow, 2) + " < " + DoubleToStr(MinEquity/100.0, 2) + "*" + DoubleToStr(_StartingEquity, 2) + "\n" +
                              "Trades Will Recommence At The Beggining Of Next Month";
            ret = 0;
         }
      
         if( NormalizeDouble(EquityNow, 2) > NormalizeDouble((MaxEquity/100.0)*_StartingEquity,2) )
         {
            Alert("Current Equity Is > ", MaxEquity, "% * Starting Equity Of This Month.\nTrades Stopped.");
            CloseAllOrders();
            GlobalVariableSet("gAllowed", -1);                 //торги в этом месяце запрещены
            CommentArray[4] = "Trades Stopped At: " + TimeToStr(TimeCurrent()) + "\n" +
                              "Reason: " + DoubleToStr(EquityNow, 2) + " > " + DoubleToStr(MaxEquity/100.0, 2) + "*" + DoubleToStr(_StartingEquity, 2) + "\n" +
                              "Trades Will Recommence At The Beggining Of Next Month";
            ret = 0;
         }
   
         if(ret!=0)
         {
            CommentArray[4] = "Min Equity:  " + DoubleToStr(MinEquity/100.0, 2) + "*" + DoubleToStr(_StartingEquity, 2) + " = " + DoubleToStr((MinEquity/100.0)*_StartingEquity,2) + "\n" +
                              "Max Equity: " + DoubleToStr(MaxEquity/100.0, 2) + "*" + DoubleToStr(_StartingEquity, 2) + " = " + DoubleToStr((MaxEquity/100.0)*_StartingEquity,2) + "\n" +
                              "Equity OK:  "  + DoubleToStr((MinEquity/100.0)*_StartingEquity,2) + " < " + DoubleToStr(EquityNow, 2) + " < " + DoubleToStr((MaxEquity/100.0)*_StartingEquity,2);
         }                     
      }
      
   SemaphoreReturn("Semaphore_sound_2_MP"); 

   return(ret);

}  
 
Написал програмку, компилировать - ошибка! В чём ошибка, не пойму? И по справке, ковырялся,и по учебнику - всё равно не вижу, где ошибся. Подскажите!
Файлы:
ispitanie.mq4  5 kb
 
novichok3:
Написал програмку, компилировать - ошибка! В чём ошибка, не пойму? И по справке, ковырялся,и по учебнику - всё равно не вижу, где ошибся. Подскажите!

Несколько ошибок в ф-и ProvOpen(), см. исправленный вариант. Ну и с такими просьбами лучше сюда https://www.mql5.com/ru/forum/111497

Файлы:
 
OneDepo:

Несколько ошибок в ф-и ProvOpen(), см. исправленный вариант. Ну и с такими просьбами лучше сюда https://www.mql5.com/ru/forum/111497



Спасибо, что ответили! Я, и вправду, больше недели учебник изучал.