CopyTicks() не возвращает правильное значение для пользовательского символа. - страница 2

 
Aleksandr Slavskii # :

Как тебе помочь если ты не отвечаешь на заданные тебе вопросы?

Проблема у тебя, а не у  MetaQuotes, но ты её не пытаешься решить. Устраиваешь истерики и детский шантаж.

Задам вопрос ещё раз.  Какая у тебя версия метатрейдера?

Извините, если вы считаете, что я пытаюсь шантажировать. Поверьте мне, это не так. Я просто предполагаю, что, если Metatrader 5 не сможет помочь мне, у меня, возможно, не будет другого выбора, кроме как уйти, поскольку у меня есть огромные проекты, и я должен завершить их по мере приближения крайнего срока. Надеюсь, вы понимаете. Я люблю Metatrader 5, и вы можете себе представить, что я работаю с ним уже 7 лет и никогда не думал о том, чтобы оставить его. Всегда продолжал задавать вопросы и пытался решить проблему. Я люблю Форум и особенно Русский форум, так как здесь очень вежливые и знающие люди, что я находил большую часть времени. Опыт других может отличаться. Но на этот раз необходимость вести множество проектов слишком велика. Надеюсь, вы поймете.

 
jaffer wilson #:

Извините, если вы считаете, что я пытаюсь шантажировать. Поверьте мне, это не так. Я просто предполагаю, что, если Metatrader 5 не сможет помочь мне, у меня, возможно, не будет другого выбора, кроме как уйти, поскольку у меня есть огромные проекты, и я должен завершить их по мере приближения крайнего срока. Надеюсь, вы понимаете. Я люблю Metatrader 5, и вы можете себе представить, что я работаю с ним уже 7 лет и никогда не думал о том, чтобы оставить его. Всегда продолжал задавать вопросы и пытался решить проблему. Я люблю Форум и особенно Русский форум, так как здесь очень вежливые и знающие люди, что я находил большую часть времени. Опыт других может отличаться. Но на этот раз необходимость вести множество проектов слишком велика. Надеюсь, вы поймете.

Хорошо. В некоторых предыдущих версиях были проблемы с функциями пользовательских символов. Их пофиксили. Значит версия метатрейдера тут ни при чём.

Давайте попробуем воспроизвести ошибку с минимальным кодом,что бы была возможность обратиться к разработчикам  корректно.

Попробуйте такой код. У меня он печатает правильные значения.

//+------------------------------------------------------------------+
void OnStart()
  {
   string Symb = _Symbol + "TEST";
   MqlTick Tick[1];

   if(!SymbolInfoInteger(Symb, SYMBOL_CUSTOM))
      CustomSymbolCreate(Symb, "\\" + Symb, _Symbol);

   if(SymbolSelect(Symb, true) && SymbolInfoTick(_Symbol, Tick[0]) && CustomTicksAdd(Symb, Tick) > 0)
     {
      MqlTick Tick_check[];
      int hh = CopyTicks(Symb, Tick_check, COPY_TICKS_ALL, 0, 1);
      if(hh > 0)
        {
         ArrayPrint(Tick_check);// здесь у вас получаются не корректные значения
         MqlTick TT;
         SymbolInfoTick(Symb, TT);
         Print(SymbolInfoDouble(Symb, SYMBOL_BID), "; ", TT.bid);// здесь всё правильно
        }
     }
  }
//+------------------------------------------------------------------+
 
Aleksandr Slavskii # :

Хорошо. В некоторых предыдущих версиях были проблемы с функциями пользовательских символов. Их пофиксили. Значит версия метатрейдера тут ни при чём.

Давайте попробуем воспроизвести ошибку с минимальным кодом,что бы была возможность обратиться к разработчикам  корректно.

Попробуйте такой код. У меня он печатает правильные значения.

Скрипт работает нормально.

Вот результат:

(USDCAD,H4)                      [time]   [bid]   [ask] [last] [volume]    [time_msc] [flags] [volume_real]
(USDCAD,H4)     [0] 2023.10.31 09:47:00 1.38340 1.38340 0.0000        0 1698745620184       6       0.00000
(USDCAD,H4)     1.38338;1.38338

Я предполагаю, что скрипт или советник работают нормально, но проблема в индикаторе. Я создал индикатор, поскольку немногие брокеры не позволяли мне запускать советник или скрипт.

Можете ли вы попробовать мой код с использованием индикатора и сообщить мне, что у вас получится?

 
jaffer wilson #:

Скрипт работает нормально.

Вот результат:

Я предполагаю, что скрипт или советник работают нормально, но проблема в индикаторе. Я создал индикатор, поскольку немногие брокеры не позволяли мне запускать советник или скрипт.

Можете ли вы попробовать мой код с использованием индикатора и сообщить мне, что у вас получится?

Проверил.

Да, проблема в вашем коде.

На биткоине то, что возвращает CopyTicks нужно умножать на 100, а вот на евробакс то, что возвращает CopyTicks нужно делить на 100.

Забавненько)))

 
jaffer wilson #:

Я предполагаю, что скрипт или советник работают нормально, но проблема в индикаторе. 

Ваше предположение ошибочно.

Вот вам индикатор)

#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots 0
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   string Symb = _Symbol + "TEST";
   MqlTick Tick[1];

   if(!SymbolInfoInteger(Symb, SYMBOL_CUSTOM))
      CustomSymbolCreate(Symb, "\\" + Symb, _Symbol);

   if(SymbolSelect(Symb, true) && SymbolInfoTick(_Symbol, Tick[0]) && CustomTicksAdd(Symb, Tick) > 0)
     {
      MqlTick Tick_check[];
      int hh = CopyTicks(Symb, Tick_check, COPY_TICKS_ALL, 0, 1);
      if(hh > 0)
        {
         ArrayPrint(Tick_check);// здесь у вас получаются не корректные значения
         MqlTick TT;
         SymbolInfoTick(Symb, TT);
         Print(SymbolInfoDouble(Symb, SYMBOL_BID), "; ", TT.bid);// здесь всё правильно
        }
     }
   return rates_total;
  }
//+------------------------------------------------------------------+
(BTCUSDT.fut,H1)        [0] 2023.10.31 15:27:38 34345.80 34345.90 34345.80        6 1698766058205      30          6.55
(BTCUSDT.fut,H1)        34345.8; 34345.8

Я не знаю в чём причина такого поведения CopyTicks в вашем индикаторе.

Попробуйте задать вопрос fxsaber, возможно причина в его библиотеке, хотя это вряд ли.

 
Привет @fxsaber , можешь помочь мне с этой проблемой, пожалуйста? Я надеюсь найти какое-то решение этой проблемы, поскольку мои прогнозы задерживаются.
 
Aleksandr Slavskii #:

Ваше предположение ошибочно.

Вот вам индикатор)

Я не знаю в чём причина такого поведения CopyTicks в вашем индикаторе.

Из заметных различий между работающей и неработающей версией - вот эта строка:

SYMB.SetProperty(SYMBOL_DIGITS, 10);
 
Stanislav Korotky #:

Из заметных различий между работающей и неработающей версией - вот эта строка:

Я её пробовал и менять и удалять, но это не  дало ничего хорошего.

Если в функцию подставить вместо 10,  4  то CopyTicks  выдаёт правильные значения, но на символе _Digits равен 2.

Как то это всё странно и не понятно.

 
Aleksandr Slavskii #:

Я её пробовал и менять и удалять, но это не  дало ничего хорошего.

Если в функцию подставить вместо 10,  4  то CopyTicks  выдаёт правильные значения, но на символе _Digits равен 2.

Как то это всё странно и не понятно.

Ну вот у меня сомнения, что в _Digits можно любое значение с потолка написать. Хотелось бы от MQ услышать, каков разрешенный диапазон и что произойдет, если установить значение вне этого диапазона.

 
jaffer wilson:

Здравствуйте, у меня возникла проблема с использованием пользовательского символа, которой раньше у меня не было.

Проблема заключается в получении тиков с помощью функции CopyTicks().

Вот что я заполняю символ BTCUSD:


И вот что я получил, используя функцию копирования тиков:


Значение почти делится на 100, поскольку я думаю, что символ Цифры = 2.

Я пытался проверить, есть ли проблема с моим кодом, но раньше все работало нормально. Эта проблема началась после обновления MT5.

Когда я перезапускаю МТ5, проблема исчезла. И все работает. Но опять же, если я попытаюсь создать собственный символ с другой валютой, у меня возникнет та же проблема. При перезапуске МТ5 проблема повторяется. Но я не могу продолжать перезапускать MT5 во время открытой сделки.

Пожалуйста, дайте решение этой проблемы или хотя бы попросите Metaqotes проверить проблему.

заполните все свойства символа корректно

мне кажется вы задали несоответствующие значения для point, digits или lotsize

Причина обращения: