Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 664

 
Alexey Kozitsyn:
Да, входные параметры не могут быть модифицированы. Если честно, не понимаю, зачем менять это значение в соответствии с 3/5 значными котировками? Вы ведь задаете это значение во входных параметрах. Нельзя просто написать 100 (если 3/5 значные) и не мучиться?

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

 
-Aleks-:

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

Так должно работать

int Sign = 1;

int OnInit() {
// Округлим огрызки - 3 и 5 знак
Sign=(SymbolInfoInteger(_Symbol,SYMBOL_DIGITS)==3 || SymbolInfoInteger(_Symbol,SYMBOL_DIGITS)==5)?10:1;
// Приведем к терминальному количеству знаков
TakeProfit*=Sign;
StopLoss*=Sign;
TrailingShift*=Sign;
TrailingStep*=Sign;
Slippage*=Sign;
}


 

 
Vitaly Muzichenko:

Так должно работать

int Sign = 1;

int OnInit() {
// Округлим огрызки - 3 и 5 знак
Sign=(SymbolInfoInteger(_Symbol,SYMBOL_DIGITS)==3 || SymbolInfoInteger(_Symbol,SYMBOL_DIGITS)==5)?10:1;
// Приведем к терминальному количеству знаков
TakeProfit*=Sign;
StopLoss*=Sign;
TrailingShift*=Sign;
TrailingStep*=Sign;
Slippage*=Sign;
}


 

 

Спасибо - опробую, как только удасться запустить советник...

 

Лавлю ещё такую ошибку - как её править?

'MODE_MAIN' - enumerator identifier already defined initmql4__1.mqh 223 24


 ENUM_STO_PRICE StoFieldMigrate(int field)


  {
   switch(field)
     {
      case 0: return(STO_LOWHIGH);
      case 1: return(STO_CLOSECLOSE);
      default: return(STO_LOWHIGH);
     }
  }

//+------------------------------------------------------------------+
enum ALLIGATOR_MODE  { MODE_GATORJAW=1,   MODE_GATORTEETH, MODE_GATORLIPS };
enum ADX_MODE        { MODE_MAIN,         MODE_PLUSDI, MODE_MINUSDI };
enum UP_LOW_MODE     { MODE_BASE,         MODE_UPPER,      MODE_LOWER };
enum ICHIMOKU_MODE   { MODE_TENKANSEN=1,  MODE_KIJUNSEN, MODE_SENKOUSPANA, MODE_SENKOUSPANB, MODE_CHINKOUSPAN };
enum MAIN_SIGNAL_MODE{ MODE_MAIN,         MODE_SIGNAL };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CopyBufferMQL4(int handle,int index,int shift)
  {
   double buf[];
   switch(index)
     {
      case 0: if(CopyBuffer(handle,0,shift,1,buf)>0)
         return(buf[0]); break;
      case 1: if(CopyBuffer(handle,1,shift,1,buf)>0)
         return(buf[0]); break;
      case 2: if(CopyBuffer(handle,2,shift,1,buf)>0)
         return(buf[0]); break;
      case 3: if(CopyBuffer(handle,3,shift,1,buf)>0)
         return(buf[0]); break;
      case 4: if(CopyBuffer(handle,4,shift,1,buf)>0)
         return(buf[0]); break;
      default: break;
     }
   return(EMPTY_VALUE);
  }
//+------------------------------------------------------------------+

 
-Aleks-:

Такая ситуацию, получаю ошибку - помогите понять, почему возникает ошибка - в MQL5 нельзя менять значение вводимой пользователем переменной?

Нельзя!

Если решили использовать MQL4_to_MQL5.mqh, то настоятельно рекомендую этого не делать. Т.к. он писался для примеров, что в описании библиотеки. Т.е. он ни капли не универсальный. В частности, там очень ограниченная версия MarketInfo (чтобы только примеры работали). Но хорошие решения там есть. Поэтому сам этот mqh лучше не использовать, а взять оттуда полезные вещи только.

 
-Aleks-:

Лавлю ещё такую ошибку - как её править?

'MODE_MAIN' - enumerator identifier already defined initmql4__1.mqh 223 24


 ENUM_STO_PRICE StoFieldMigrate(int field)


  {
   switch(field)
     {
      case 0: return(STO_LOWHIGH);
      case 1: return(STO_CLOSECLOSE);
      default: return(STO_LOWHIGH);
     }
  }

//+------------------------------------------------------------------+
enum ALLIGATOR_MODE  { MODE_GATORJAW=1,   MODE_GATORTEETH, MODE_GATORLIPS };
enum ADX_MODE        { MODE_MAIN,         MODE_PLUSDI, MODE_MINUSDI };
enum UP_LOW_MODE     { MODE_BASE,         MODE_UPPER,      MODE_LOWER };
enum ICHIMOKU_MODE   { MODE_TENKANSEN=1,  MODE_KIJUNSEN, MODE_SENKOUSPANA, MODE_SENKOUSPANB, MODE_CHINKOUSPAN };
enum MAIN_SIGNAL_MODE{ MODE_MAIN,         MODE_SIGNAL };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CopyBufferMQL4(int handle,int index,int shift)
  {
   double buf[];
   switch(index)
     {
      case 0: if(CopyBuffer(handle,0,shift,1,buf)>0)
         return(buf[0]); break;
      case 1: if(CopyBuffer(handle,1,shift,1,buf)>0)
         return(buf[0]); break;
      case 2: if(CopyBuffer(handle,2,shift,1,buf)>0)
         return(buf[0]); break;
      case 3: if(CopyBuffer(handle,3,shift,1,buf)>0)
         return(buf[0]); break;
      case 4: if(CopyBuffer(handle,4,shift,1,buf)>0)
         return(buf[0]); break;
      default: break;
     }
   return(EMPTY_VALUE);
  }
//+------------------------------------------------------------------+

Переименовывать. Поля ВСЕХ перечислений должны отличаться. А у Вас есть одноименные поля в enum ADX_MODE и enum MAIN_SIGNAL_MODE.
 
fxsaber:
Переименовывать. Поля ВСЕХ перечислений должны отличаться. А у Вас есть одноименные поля в enum ADX_MODE и enum MAIN_SIGNAL_MODE.

Я закомментировал пока... думаю это не критично...

 

Однако, скомпилировал советник с использованием двух библиотек - торговых функций и перевода иных функций с 4 на 5.

Пока тошнит от тестера в пятерке - не могу найти где тут индикаторы можно накинуть при визуализации и как лог отфильтровать...

Увидеть открытые ордера пока не удалось, эх. 

 

Как это интерпретировать:

2016.11.04 20:42:25.224 2016.02.11 14:04:30   При установке отложенного непредвиденная ошибка - 4756
2016.11.04 20:42:25.224 2016.02.11 14:04:30   Magic=49266773 cPoza::setOrder отправлен запрос на установку ордера. Тип: BuyStop лот=1.0 opPrice=68180.0 tp=68200.0 sl=67260.0
2016.11.04 20:42:25.224 2016.02.11 14:04:30   failed buy stop 1.00 RTS-12.16 at 68180 sl: 67260 tp: 68200 [Invalid expiration]
2016.11.04 20:42:25.224 2016.02.11 14:04:30   При установке отложенного непредвиденная ошибка - 4756

 
-Aleks-:

Как это интерпретировать:

2016.11.04 20:42:25.224 2016.02.11 14:04:30   При установке отложенного непредвиденная ошибка - 4756
2016.11.04 20:42:25.224 2016.02.11 14:04:30   Magic=49266773 cPoza::setOrder отправлен запрос на установку ордера. Тип: BuyStop лот=1.0 opPrice=68180.0 tp=68200.0 sl=67260.0
2016.11.04 20:42:25.224 2016.02.11 14:04:30   failed buy stop 1.00 RTS-12.16 at 68180 sl: 67260 tp: 68200 [Invalid expiration]
2016.11.04 20:42:25.224 2016.02.11 14:04:30   При установке отложенного непредвиденная ошибка - 4756

С заданием экспирации что-то не то.
 
-Aleks-:

Пока тошнит от тестера в пятерке - не могу найти где тут индикаторы можно накинуть при визуализации и как лог отфильтровать...

Увидеть открытые ордера пока не удалось, эх. 

Смотрю историю тестера через сконверченный MT4-скрипт 2006 года. Он показывает все так же удобно, как MT4.
Причина обращения: