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

 

Есть ошибки, значит код не будет работать, как задумал автор. Надо разбираться. Код у Вас, Вам и карты в руки.


Из того кусочка, что Вы показали, вижу, что либо свечей меньше 60, либо хендл одного из индикаторов INVALID, значит параметры засылаете в него некорректные. Либо ошибки в другой части кода, которую я не вижу.

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

Ой, Алексей;)

 
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)));
 }/******************************************************************/

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

Причина обращения: