Подскажите, пожалуйста, баг в коде. На сбере работает, а на газпроме не работает - страница 2

 
Aleksandr Slavskii #:

Код не смотрел.Сорри.

Но думаю причина может крыться в разных размерах пункта с тиком, на акциях это часто бывает.

При нормализации цены часто ограничиваются NormalizeDouble(), но когда пункты не равны тикам этого не достаточно.

попробуйте нормализовать цену так:

Спасибо большое!
То есть вот так, но почему-то 1 ошибка где-то есть


 
Aleksandr Slavskii #:

Код не смотрел.Сорри.

Но думаю причина может крыться в разных размерах пункта с тиком, на акциях это часто бывает.

При нормализации цены часто ограничиваются NormalizeDouble(), но когда пункты не равны тикам этого не достаточно.

попробуйте нормализовать цену так:

уже комбинаторикой пробовал. Не получается в код впихнуть Ваш вариант)

//БЫЛО         tp=NormalizeDouble(tp,_Digits);

//------------


/*

//вар2 price price tp: 2 ошибка, 0 предупреждений

 double NormalizePrice(string symb, double price)

  {

   double tick_size = SymbolInfoDouble(symb, SYMBOL_TRADE_TICK_SIZE);

   if(tick_size == 0)

      return 0;

price = NormalizeDouble(MathRound(tp / tick_size) * tick_size, (int)SymbolInfoInteger(symb, SYMBOL_DIGITS));

return(price);

  }

*/



/*

//вар3 price tp tp: 4 ошибка, 0 предупреждений

   double NormalizePrice(string symb, double Price)

  {

   double tick_size = SymbolInfoDouble(symb, SYMBOL_TRADE_TICK_SIZE);

   if(tick_size == 0)

      return 0;

tp = NormalizeDouble(MathRound(tp / tick_size) * tick_size, (int)SymbolInfoInteger(symb, SYMBOL_DIGITS));

return(tp);

  }

*/


/*

//вар4 tp price tp: 6 ошибка, 0 предупреждений


 double NormalizePrice(string symb, double price/tp)

  {

   double tick_size = SymbolInfoDouble(symb, SYMBOL_TRADE_TICK_SIZE);

   if(tick_size == 0)

      return 0;

price/tp = NormalizeDouble(MathRound(price/tp / tick_size) * tick_size, (int)SymbolInfoInteger(symb, SYMBOL_DIGITS));

return(price);

  }

*/



/*

//вар5 tp tp price: 3 ошибка, 0 предупреждений

 double NormalizePrice(string symb, double tp)

  {

   double tick_size = SymbolInfoDouble(symb, SYMBOL_TRADE_TICK_SIZE);

   if(tick_size == 0)

      return 0;

tp = NormalizeDouble(MathRound(price / tick_size) * tick_size, (int)SymbolInfoInteger(symb, SYMBOL_DIGITS));

return(price);

  }

*/


/*

//вар6 price tp price: 2 ошибка, 0 предупреждений

 double NormalizePrice(string symb, double price)

  {

   double tick_size = SymbolInfoDouble(symb, SYMBOL_TRADE_TICK_SIZE);

   if(tick_size == 0)

      return 0;

tp = NormalizeDouble(MathRound(price / tick_size) * tick_size, (int)SymbolInfoInteger(symb, SYMBOL_DIGITS));

return(price);

  }

*/



/*

//вар7 tp tp tp: 1 ошибка, 0 предупреждений

   double NormalizePrice(string symb, double tp)

  {

   double tick_size = SymbolInfoDouble(symb, SYMBOL_TRADE_TICK_SIZE);

   if(tick_size == 0)

      return 0;

tp = NormalizeDouble(MathRound(tp / tick_size) * tick_size, (int)SymbolInfoInteger(symb, SYMBOL_DIGITS));

return(tp);

  }

*/


/*

//вар8 tp price price: 4 ошибка, 0 предупреждений

 double NormalizePrice(string symb, double tp)

  {

   double tick_size = SymbolInfoDouble(symb, SYMBOL_TRADE_TICK_SIZE);

   if(tick_size == 0)

      return 0;

price = NormalizeDouble(MathRound(price / tick_size) * tick_size, (int)SymbolInfoInteger(symb, SYMBOL_DIGITS));

return(price);

  }

*/



 /* ОБРАЗЕЦ вар1 price price price


 double NormalizePrice(string symb, double price)

  {

   double tick_size = SymbolInfoDouble(symb, SYMBOL_TRADE_TICK_SIZE);

   if(tick_size == 0)

      return 0;

price = NormalizeDouble(MathRound(price / tick_size) * tick_size, (int)SymbolInfoInteger(symb, SYMBOL_DIGITS));

return(price);

  }

   */      

 
igor_spb #:

уже комбинаторикой пробовал. Не получается в код впихнуть Ваш вариант)

...

Вставляйте правильно код -

----------------‌

MQL5.community - Памятка пользователя 

Кнопка  Исходный кодпредназначена для вставки исходного кода в текст сообщения. При нажатии появляется пустое окно, в которое необходимо вставить код и далее нажать кнопку Вставить. Для отмены вставки кода необходимо нажать кнопку Отмена.

 
igor_spb #:

уже комбинаторикой пробовал. Не получается в код впихнуть Ваш вариант)

Всё проще)

void OnTick()
  {
   //БЫЛО         tp=NormalizeDouble(tp,_Digits);

   //стало
   tp=NormalizePrice(_Symbol, tp);

  }

//+------------------------------------------------------------------+
double NormalizePrice(string symb, double price)
  {
   double tick_size = SymbolInfoDouble(symb, SYMBOL_TRADE_TICK_SIZE);
   if(tick_size == 0)
      return 0;
   price = NormalizeDouble(MathRound(price / tick_size) * tick_size, (int)SymbolInfoInteger(symb, SYMBOL_DIGITS));
   return(price);
  }
//+------------------------------------------------------------------+
 
Aleksandr Slavskii #:

Всё проще)

А где я не так код вставил)))

На всякий случай проверил, что в коде нет невидимых символов (бывают когда с мессенджеров копируешь еще всякий мусор подтягивается).

Тот вариант который Вы в сообщении №14 написали от 2024.11.10 11:32 соответствует моему варианту 1. И по нему получаем 5 ошибок. Код я прислал, можете /* */ убрать и убедиться, что я сделал как Вы указали. Не понимаю.

 
прога с вариантами вставки кода.
Файлы:
 
igor_spb #:
А где я не так код вставил)))
Здесь -
Подскажите, пожалуйста, баг в коде. На сбере работает, а на газпроме не работает
Подскажите, пожалуйста, баг в коде. На сбере работает, а на газпроме не работает
  • 2024.11.09
  • igor_spb
  • www.mql5.com
Всем добрый день и заранее спасибо за ответ/совет/подсказку...
 
igor_spb #:
прога с вариантами вставки кода.

Вы функцию воткнули в тело другой функции. Так делать нельзя.

Поправил.

Файлы: