Самообучение языку MQL5 с полного нуля - страница 80

 
MrBrooklin #:

Где кроется проблема мне и самому удалось выяснить, но вопрос был задан о другом: на что могут влиять эти ошибки и, что нужно изменить в коде, чтобы их устранить?

С уважением, Владимир.

Если ошибка случится, то советник не прикрепится к графику.

Ничего не надо делать. Что надо уже сделано - при ошибке советник отсоединяется от графика 

и уведомляет пользователя.

Эта ошибка практически не случается, разве только когда на компе творится полный бардак. 

==

Впрочем.. если она постоянно случается в процессе разработки...

То значит индикатор неправильно вызывается - исправлять параметры индикатора.

 
Dmitry Fedoseev #:

Если ошибка случится, то советник не прикрепится к графику.

Ничего не надо делать. Что надо уже сделано - при ошибке советник отсоединяется от графика 

и уведомляет пользователя.

Эта ошибка практически не случается, разве только когда на компе творится полный бардак. 

==

Впрочем.. если она постоянно случается в процессе разработки...

То значит индикатор неправильно вызывается - исправлять параметры индикатора.

Спасибо, Дмитрий за развёрнутый и доходчивый ответ!

С уважением, Владимир.

 
SanAlex #:

вот работает - период может вы не правильно задаёте

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

Всем спасибо за участие!

С уважением, Владимир.

 
MrBrooklin #:

P.S. Вы бы "портянку" с кодом советника убрали, а то эти "портянки" многих раздражают. Свою уже убрал.

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

Я тоже не люблю эти портянки, но я просто их не смотрю.

[Удален]  
Немного желающих смотрю язык учить, заглохла ветка. К чему бы это
 
Vladimir Baskakov #:
Немного желающих смотрю язык учить, заглохла ветка. К чему бы это

Владимир, всё очень просто. То, что мне нужно было изучить - изучил. Теперь беру разные советники и делаю их под себя. Самое главное, что на язык программирования MQL5 теперь уже смотрю, не как на китайские иероглифы, а как на нормальный программный продукт. Большое спасибо всем специалистам, которые помогали мне в самообучении!

С уважением, Владимир.

 
MrBrooklin #:


По мне лучше пусть портянка, чем скачивать файл и к себе в песочницу сувать. )

 

Всем доброго утра и хорошего настроения!

Продолжаю самообучение языку программирования MQL5. Наступил момент, когда пришлось столкнуться с массивами. Написал код для мультивалютного советника на 10 валютных парах и решил рассчитывать размер лота в зависимости от риска, заданного во входных параметрах советника.  После компиляции ошибок и предупреждений нет, но сам код функции не работает. Подскажите, пжл, где ошибка?

С уважением, Владимир.

input double   Risk0=1.0;           //Риск (% от баланса)
.
.
.
.
input double   Risk9=1.0;           //Риск (% от баланса)

//+------------------------------------------------------------------+
//| Функция Money_Management рассчитывает размер лота в зависимости  |
//|  от риска, заданного во входных параметрах советника.            |
//+------------------------------------------------------------------+
double Money_Management()
  {
   static int Risk[];
   int Number=0;
//----+ Объвляем переменную для хранения размеров массивов переменных
   static int Size_ = 0;
//----+ Изменяем размер массивов переменных
   if(Number + 1 > Size_)
     {
      uint size = Number + 1;
      //---- Предварительно обнуляем ячейки массива
      Risk[Number] = false;
     }
   if(Risk[0] != Risk[Number])
     {
      Risk[Number] = Risk[0];
     }
   double Lots=AccountInfoDouble(ACCOUNT_MARGIN_FREE)*Risk[Number]/100000*10;
   Lots=MathMin(5,MathMax(0.1,Lots));
   if(Lots<0.1)
      Lots=NormalizeDouble(Lots,2);
   else
     {
      if(Lots<1)
         Lots=NormalizeDouble(Lots,1);
      else
         Lots=NormalizeDouble(Lots,0);
     }
   return(Lots);
  }
//+------------------------------------------------------------------+
 
MrBrooklin #:

Всем доброго утра и хорошего настроения!

Продолжаю самообучение языку программирования MQL5. Наступил момент, когда пришлось столкнуться с массивами. Написал код для мультивалютного советника на 10 валютных парах и решил рассчитывать размер лота в зависимости от риска, заданного во входных параметрах советника.  После компиляции ошибок и предупреждений нет, но сам код функции не работает. Подскажите, пжл, где ошибка?

С уважением, Владимир.

Очень надеюсь, что это писали не вы…

Вот рабочая функция

/********************************************************************\
|   Calculate optimal lot size     Расчет объема лота                |
/********************************************************************/
double contractSize(double Lot)
 {
  double volume = Lot > 0.0 ? Lot : AccountInfoDouble(ACCOUNT_MARGIN_FREE)/10000,
         v = volume,
         volumeStep = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP),
         minLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN),
         maxLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
  v = round(volume/volumeStep)*volumeStep;
  return(fmin(maxLot, fmax(minLot, v)));
 }/******************************************************************/

Достаточно только вписать размер риска, чтобы считать не от полной свободной маржи…

 
Alexey Viktorov #:

Очень надеюсь, что это писали не вы…

Вот рабочая функция

Достаточно только вписать размер риска, чтобы считать не от полной свободной маржи…

Спасибо, Алексей, за отклик! Расчёт лота в моём варианте работает, а не работает только та часть кода, где прописан массив.

Изначально задумано так, чтобы можно было задавать разные размеры риска на разных валютных парах.

Как использовать Ваш код для мультивалютного советника, честно говоря, пока не совсем понимаю.

С уважением, Владимир.