Советники: Multik

 

Multik:

Мультивалютный советник.

Автор: AM2

Мультивалютный эксперт

Мультивалютный эксперт

 

Что, нормализовать все пары будем по текущему инструменту ?

dsma2 = NormalizeDouble(SMA[2] - SMA[3], _Digits);      // MA на участке 2-3
dsma1 = NormalizeDouble(SMA[1] - SMA[2], _Digits);      // MA на участке 1-2
 
Valmars:

Что, нормализовать все пары будем по текущему инструменту ?


Да, здесь заложена ошибка. Кроме того, функцию определения нового бара можно реализовать без использования функции копирования времени.
 
Valmars:

Что, нормализовать все пары будем по текущему инструменту ?


А как правильно реализовать чтобы без предупреждений было?

В исходном варианте так примерно:

     int Digits_ = SymbolInfoInteger(Symbol_, SYMBOL_DIGITS) + 4;
     dsma2 = NormalizeDouble(SMA[2] - SMA[3], Digits_);      // MA на участке 2-3
     dsma1 = NormalizeDouble(SMA[1] - SMA[2], Digits_);      // MA на участке 1-2
 
AM2:

А как правильно реализовать чтобы без предупреждений было?

В исходном варианте так примерно:

А при чем тут +4? Так вроде должно быть по логике вещей

int Digits_ = SymbolInfoInteger(Symbol_, SYMBOL_DIGITS);
dsma2 = NormalizeDouble(SMA[2] - SMA[3], Digits_); // MA на участке 2-3
dsma1 = NormalizeDouble(SMA[1] - SMA[2], Digits_); // MA на участке 1-2
 
Interesting:

А при чем тут +4? Так вроде должно быть по логике вещей

Так тоже предупреждение идет:

possible loss of data due to type conversion Multik.mq5 218 18
 

 
AM2:

Так тоже предупреждение идет:

possible loss of data due to type conversion Multik.mq5 218 18
 

 что бы не было предупреждений, надо сделать конверсию вот так

int Digits_ = (int)SymbolInfoInteger(Symbol_, SYMBOL_DIGITS);
 

Хорошая работа, но не теряет ли смысл мультиинструментарий, когда вы торгуете сопряженными парами с одинаковыми настройками? Я бы ожидал, что их просадки будут происходить примерно в одно и то же время, и это может стать проблемой. Но, к сожалению, все валютные пары настолько взаимосвязаны, что это может быть неизбежно. На самом деле я тоже торгую парами EUR/USD GBP/USD вместе, но на одной из них я использую трендовый советник, а на другой - разворотный, с вершинами и низами.

 
sergey1294:

 что бы не было предупреждений, надо сделать конверсию вот так

Спасибо все работает!
 

request.volume = Money_M();

Этот советник является отличным примером организованного кода и имеет отличные комментарии. Однако у меня возник один вопрос, касающийся вашей функции размера лота под названием Money_M(). Что и где находится в дереве решений, стоящем за этим?

Я попытался найти информацию на сайте поддержки, но не смог найти никаких ссылок, и, похоже, она не связана с ассоциированным классом.

 
bdwezensky:

request.volume = Money_M();

Этот советник является отличным примером организованного кода и содержит отличные комментарии. Однако у меня возник один вопрос, касающийся вашей функции размера лота под названием Money_M(). Что и где находится в дереве решений, стоящем за этим?

Я попытался поискать на сайте поддержки, но не смог найти никакой ссылки, и, похоже, она не связана с ассоциированным классом.

double Money_M()
  {
   double Lots=AccountInfoDouble(ACCOUNT_FREEMARGIN)/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);
  }

Эта функция используется для расчета размера торговых лотов.

double Lots=AccountInfoDouble(ACCOUNT_FREEMARGIN)/100000*10;

В этой строке вычисляется размер торговых лотов. Расчет производится на свободные средства(ACCOUNT_FREEMARGIN). Риск = 10% от доступных свободных средств.

Lots=MathMin(5,MathMax(0.1,Lots));
В этой строке выполняется нормализация торговых лотов. 0.1 <= Lot <= 5.0