Ошибки, баги, вопросы - страница 2447

 

ошибка в тестере стратегий при оптимизации.

"task rejected by tester agent"

Например, если валюта счета EUR,

  • EURJPY Нет проблем
  • Ошибка при GBPJPY


Если валюта счета - доллар США,

  • USDCAD Нет проблем
  • USDJPY Нет проблем
  • Ошибка при EURAUD


появляется при использовании в коде других валютных пар.

конкретно на моем примере - это использование расчета динамического лота

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(DynamicLot)
     {
      if(SymbolInfoDouble(sym,SYMBOL_ASK)!=0)
        {
         if(Valdepo=="USD" || Valdepo=="USC")
           {
            if(StringSubstr(sym,0,3)=="USD")Lot2=BalanceFreeMargin*LotBalancePercent*AccountInfoInteger(ACCOUNT_LEVERAGE)/100/SymbolInfoDouble(sym,SYMBOL_TRADE_CONTRACT_SIZE);
            else if(StringSubstr(sym,3,3)=="USD")Lot2=BalanceFreeMargin*LotBalancePercent*AccountInfoInteger(ACCOUNT_LEVERAGE)/SymbolInfoDouble(sym,SYMBOL_ASK)/100/SymbolInfoDouble(sym,SYMBOL_TRADE_CONTRACT_SIZE);
            else
              {
               pr=SymbolInfoDouble(StringSubstr(sym,0,3)+"USD"+prefix,SYMBOL_ASK);
               if(pr!=0)Lot2=BalanceFreeMargin*LotBalancePercent*AccountInfoInteger(ACCOUNT_LEVERAGE)/pr/100/SymbolInfoDouble(sym,SYMBOL_TRADE_CONTRACT_SIZE);
               else
                 {
                  double Margin=0;
                  OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1,SymbolInfoDouble(Symbol(),SYMBOL_ASK),Margin);
                  if(Margin!=0)Lot2=BalanceFreeMargin/Margin/100*LotBalancePercent;
                 }
              }
           }
         else

         if(Valdepo=="EUR" || Valdepo=="EUC")
           {
            if(StringSubstr(sym,0,3)=="EUR")Lot2=BalanceFreeMargin*LotBalancePercent*AccountInfoInteger(ACCOUNT_LEVERAGE)/100/SymbolInfoDouble(sym,SYMBOL_TRADE_CONTRACT_SIZE);
            else
              {
               pr=SymbolInfoDouble("EUR"+StringSubstr(sym,0,3)+prefix,SYMBOL_BID);
               if(pr!=0)Lot2=BalanceFreeMargin*LotBalancePercent*AccountInfoInteger(ACCOUNT_LEVERAGE)*pr/100/SymbolInfoDouble(sym,SYMBOL_TRADE_CONTRACT_SIZE);
               else
                 {
                  double Margin=0;
                  OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1,SymbolInfoDouble(Symbol(),SYMBOL_ASK),Margin);
                  if(Margin!=0)Lot2=BalanceFreeMargin/Margin/100*LotBalancePercent;
                 }
              }
           }



т.е. когда советник запрашивает цену другой валюты. 

 
Nikolai Semko:

Ну тогда нужна грамотная аргументация для МQ.
Для чего это нужно? Как и в каких случаях это может расширить возможности  mql? А не только удовлетворение персонального каприза.

Допустим, пишите менеджер по работе с советниками. Сейчас два одинаковых советника с разными именами невозможно признать одинаковыми.

Например, нужно при запуске советника определить, а не запущен ли он и его клон до этого.

Ну бывает, когда много чартов и советников. И что-то по ошибке запускаешь повторно.

 

Уважаемые разработчики, прошу Вас пояснить, почему я периодически получаю ошибку при копировании в буфер текущей даты бара в индикаторе?

2019.04.26 12:12:39.811 i-Regr4_05i (Si-6.19,M1)        Failed to copy data from the handle_Regressor indicator, error code 4401
   datetime Arr[],time1;
   if(CopyTime(symb,0,0,1,Arr)<=0)
   {
   PrintFormat("Failed to copy data from the handle_Regressor indicator, error code %d",GetLastError());
   return(0);
   }

Зимой такой ошибки не было - индикаторы месяц отработали стабильно, а в новых билдах это стал наблюдать.

 
Спасибо!
 
Mykhailo Ohorodniichuk:

помогите пжл решить проблемую. как сделать передачу нормальных символов вместо того что сейчас?

Погуглите про команду chcp

chcp 1251 - windows-1251

chcp 65001 - utf-8

...

 
fxsaber:

Допустим, пишите менеджер по работе с советниками. Сейчас два одинаковых советника с разными именами невозможно признать одинаковыми.

Например, нужно при запуске советника определить, а не запущен ли он и его клон до этого.

Ну бывает, когда много чартов и советников. И что-то по ошибке запускаешь повторно.

понятно...

Но я все же склоняюсь к следующей формуле: на один торговый счет не более одного советника. Это более разумно. Даже если существуют несколько стратегий, которые хочется объединить, то это делать нужно тоже в рамках одного советника. Тогда и менеджер по работе с советниками не нужен. Тем более, повторюсь, разный хэш не является гарантией неодинаковости эксперта, даже если это родной внутренний хэш разработчиков.

А если нужно проверить в момент запуска советника не запущен ли на данном счете еще случайно какой-либо советник с целью предупреждения и дальнейшего разрешения на работу нового советника во избежание возможных конфликтов, то это легко решается штатными функциями и проверка на одинаковость здесь не нужна.

 
Nikolai Semko:

понятно...

Но я все же склоняюсь к следующей формуле

Так при чем тут Ваши личные предпочтения? Речь про MT5 в целом.
 
fxsaber:
Так при чем тут Ваши личные предпочтения? Речь про MT5 в целом.
очень сомневаюсь, что кроме Вас кому-то придет в голову создавать менеджер по работе с советниками. ))
 
Nikolai Semko:
очень сомневаюсь, что кроме Вас кому-то придет в голову создавать менеджер по работе с советниками. ))

Почему? Очень правильная и удобная вещь.

Пока приходится профилями пользоваться, но у них масса ограничений.

 
Andrey Khatimlianskii:

Почему? Очень правильная и удобная вещь.

Пока приходится профилями пользоваться, но у них масса ограничений.

Андрей, не понял про профили.