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

 
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.
 
fxsaber:
С заданием экспирации что-то не то.

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

 

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

Этот скрипт есть в открытом доступе? 

 
-Aleks-:

Этот скрипт есть в открытом доступе? 

Этого беднягу и не заметили.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

MetaEditor build 1463

fxsaber, 2016.11.04 19:12

Вот моя история в MT5-представлении

Я отлично разбираюсь, что такое сделки, позиция, ордер. Пишу сложные кренделя на чистом MQL5. Но вот это представлении истории не перевариваю совсем. Голова кругом. На элементарные вопросы ответить себе не могу, над которыми в MT4 даже не задумывался.

Поэтому сконвертил скрипт 2006 года, и он ТУ ЖЕ историю показывает вот так

Ну все, как на ладони. Понятно, читается элементарно! Сразу ясно, кто, где, когда и насколько. Видны все связи и т.д.