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

 

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

'Slippage' - constant cannot be modified Kamikadze_MA-may.mq5 67 7

extern int Slippage    = 10;                       // Проскальзывание

int init()
  {
//3,5 знаков
   if(MarketInfo(Symbol(),MODE_DIGITS)==3 || MarketInfo(Symbol(),MODE_DIGITS)==5)
     {
      Slippage*=10;
     }
   return(INIT_SUCCEEDED);
  }

  }

[Удален]  
-Aleks-:

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

'Slippage' - constant cannot be modified Kamikadze_MA-may.mq5 67 7

extern int Slippage    = 10;                       // Проскальзывание

int init()
  {
//3,5 знаков
   if(MarketInfo(Symbol(),MODE_DIGITS)==3 || MarketInfo(Symbol(),MODE_DIGITS)==5)
     {
      Slippage*=10;
     }
   return(INIT_SUCCEEDED);
  }

  }

Вот этого в 5-рке нетю

MarketInfo

а про Slippage - не знаю)

 
new-rena:

Вот этого в 5-рке нетю

MarketInfo

 

Вот зараза - что ж он его в ошибки то не ставит...

Что за аналог надо использовать? 

[Удален]  
-Aleks-:

 

Вот зараза - что ж он его в ошибки то не ставит...

Что за аналог надо использовать? 

В этой же ветке в прошлые выходные разбирались про переход на 5-рку.

От моего поста и назад читаем все посты на 2-3-х страницах

https://www.mql5.com/ru/forum/6343/page662#comment_2930149

Вопросы от начинающих
Вопросы от начинающих
  • www.mql5.com
Форум трейдеров MQL5.community
 
new-rena:

В этой же ветке в прошлые выходные разбирались про переход на 5-рку.

От моего поста и назад читаем все посты на 2-3-х страницах

https://www.mql5.com/ru/forum/6343/page662#comment_2930149

 

Да-да, я уже открыл эту статью - спасибо. Вставил MarketInfoMQL4 функцию, но результат отрицательный.... может не туда вставил...

[Удален]  
-Aleks-:

 

Да-да, я уже открыл эту статью - спасибо. Вставил MarketInfoMQL4 функцию, но результат отрицательный.... может не туда вставил...

MarketInfo(Symbol(),MODE_DIGITS) это (int)SymbolInfoInteger(Symbol(),SYMBOL_DIGITS)

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

Будет изящнее и ближе к MQL5

Не торопитесь короче говоря.

Не надо никаких библиотек и чужих функций. Писать нужно на чистом MQL5 учиться.

[Удален]  
-Aleks-:

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

'Slippage' - constant cannot be modified Kamikadze_MA-may.mq5 67 7

extern int Slippage    = 10;                       // Проскальзывание

int init()
  {
//3,5 знаков
   if(MarketInfo(Symbol(),MODE_DIGITS)==3 || MarketInfo(Symbol(),MODE_DIGITS)==5)
     {
      Slippage*=10;
     }
   return(INIT_SUCCEEDED);
  }

  }

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

MarketInfo(Symbol(),MODE_DIGITS) это (int)SymbolInfoInteger(Symbol(),SYMBOL_DIGITS)

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

Будет изящнее и ближе к MQL5

Не торопитесь короче говоря.

Не надо никаких библиотек и чужих функций. Писать нужно на чистом MQL5 учиться.

 

Кстати, функция из статьи MarketInfoMQL4() приводет к ошибке - как это исправить? (учить два языка - мозг закипит - нужно пока иметь возможность проверять работу идей на фондовом рынке без углубленного кодирования)

 '(' - name expected Kamikadze_MA-may.mq5 332 17
'::' - name expected Kamikadze_MA-may.mq5 332 17


double MarketInfoMQL4(string symbol,
                      int type)
  {
   switch(type)
     {
      case MODE_LOW:
         return(SymbolInfoDouble(symbol,SYMBOL_LASTLOW));
      case MODE_HIGH:
         return(SymbolInfoDouble(symbol,SYMBOL_LASTHIGH));
      case MODE_TIME:
         return(SymbolInfoInteger(symbol,SYMBOL_TIME));
      case MODE_BID:
        {
         MqlTick last_tick;
         SymbolInfoTick(symbol,last_tick);
         double Bid=last_tick.bid;
         return(Bid);
        }
      case MODE_ASK:
        {
         MqlTick last_tick;
         SymbolInfoTick(symbol,last_tick);
         double Ask=last_tick.ask;
         return(Ask);
        }
      case MODE_POINT:
         return(SymbolInfoDouble(symbol,SYMBOL_POINT));
      case MODE_DIGITS:
         return(SymbolInfoInteger(symbol,SYMBOL_DIGITS));
      case MODE_SPREAD:
         return(SymbolInfoInteger(symbol,SYMBOL_SPREAD));
      case MODE_STOPLEVEL:
         return(SymbolInfoInteger(symbol,SYMBOL_TRADE_STOPS_LEVEL));
      case MODE_LOTSIZE:
         return(SymbolInfoDouble(symbol,SYMBOL_TRADE_CONTRACT_SIZE));
      case MODE_TICKVALUE:
         return(SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE));
      case MODE_TICKSIZE:
         return(SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE));
      case MODE_SWAPLONG:
         return(SymbolInfoDouble(symbol,SYMBOL_SWAP_LONG));
      case MODE_SWAPSHORT:
         return(SymbolInfoDouble(symbol,SYMBOL_SWAP_SHORT));
      case MODE_STARTING:
         return(0);
      case MODE_EXPIRATION:
         return(0);
      case MODE_TRADEALLOWED:
         return(0);
      case MODE_MINLOT:
         return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN));
      case MODE_LOTSTEP:
         return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP));
      case MODE_MAXLOT:
         return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX));
      case MODE_SWAPTYPE:
         return(SymbolInfoInteger(symbol,SYMBOL_SWAP_MODE));
      case MODE_PROFITCALCMODE:
         return(SymbolInfoInteger(symbol,SYMBOL_TRADE_CALC_MODE));
      case MODE_MARGINCALCMODE:
         return(0);
      case MODE_MARGININIT:
         return(0);
      case MODE_MARGINMAINTENANCE:
         return(0);
      case MODE_MARGINHEDGED:
         return(0);
      case MODE_MARGINREQUIRED:
         return(0);
      case MODE_FREEZELEVEL:
         return(SymbolInfoInteger(symbol,SYMBOL_TRADE_FREEZE_LEVEL));

      default: return(0);
     }
   return(0);
  }

 
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;
}