Ошибки, баги, вопросы - страница 3212

 
Renat Fatkhullin #:

Функционал терминала тоже меняется:

  • далее более продвинутый новый тестер стратегий

Здравствуйте! 

Большая просьба - обратите внимание на ветку при улучшении тестера стратегий. Описанные в ветке проблемы значительно затрудняют тестирование фьючерсов MOEX.

Добавлено:

И вот этот глюк

Неприятно огорчен: тестер MetaTrader оказывается не выдает реальное ГО на дату тестирования.
Неприятно огорчен: тестер MetaTrader оказывается не выдает реальное ГО на дату тестирования.
  • 2022.06.28
  • www.mql5.com
Собственно, вся боль написана в названии топика. Тестер МТ5 вместо реального ГО на дату тестирования, подставляет последнее известное значение. Т.е...
 
Renat Fatkhullin #:

И платформа и MQL5 язык постоянно развиваются. Мы каждый рабочий день по бета версии выпускаем.

Изменения в языке идут огромные:

  • добавили матрицы, вектора, комплексные числа
  • добавили массу математических операций над матрицами и векторами (не все еще в документации, доступно в интеллисенсе)
  • расширили работу с матрицами и векторами в OpenCL
  • разрешили поддержку OpenCL устройств с float (без поддержки double), чтобы машинное обучение с float
  • готовим к запуску функционала машинного обучения и нейросетей прямо в MQL5


Функционал терминала тоже меняется:

  • готовим расширенные финансовые отчеты
  • готовим новые графические интерфейсы для торговли
  • скоро запустим подписки на рыночные данные (готов NASDAQ)
  • далее более продвинутый новый тестер стратегий
Все это должно быть окружением в виде подключаемых модулей/библиотек.
 
Andrey Dik #:

Да уж... Прошли те времена, когда сообщество активно способствовало развитию платформы вообще и языка в частности... Костыльные решения применялись как исключительные и временные меры.

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

Плохо это, и для сообщества (людей) и для платформы в целом, что говорит о застое. Застойные процессы начались не вчера, нормальные адекватные люди уходят с форума (Математ, Винин, Гранит, Свинозавр и многие другие интересные личности, с которыми мне выпала честь общаться лично и дружить), а тем, кто всё же остаётся, становится всё меньше и меньше хотеть что либо писать и предлагать на форме.

Очень жаль. Но ведь ладно если бы не мешали, мешают! Держаться за уродства платформы (сброс глобальных переменных) как за нечто полезное и нужное - вот это точно клиника.

Развитие, рассвет, застой, рецессия, деградация, экономическая нецелесообразность в виду появления развитых конкурентов, уход в небытие. Так что ли? Если и так, то я на это один повлиять не в силах, без дружного сообщества ничего не получится, не будет дальнейшего развития.

Да, были времена, когда на форуме MQ жизнь била ключом. Но форум тогда был MQL4.
 

Копируем в отладчике длиииинную строку:

Получаем это:

Куда всё остальное делось?

 

Проблема при использовании    CTrade  trade;

Когда Ask/Bid получается внутри OnTick(), то всё нормально: например  Ask=SymbolInfoDouble(symb,SYMBOL_ASK);


А когда Ask определяется из  CopyTicks(), и выбирается из массива(MqlTick tick[]) с помощью цикла (for), то ордер открывается не по той цене. В обоих случаях(и при OnTick() и при цикле) даты открытия ордера совпадают.

Возникает вопрос: как использовать функцию trade.Buy() , в цикле ?


                   Ask = tick[itick].ask;   timetick = tick[itick].time; 
                   Print("=================================================================================================================");
                   Print("itick=",itick, "    Ask=",Ask, "    timetick=",timetick);
                   
              if ( trade.Buy(minlot, symb, Ask, 0, 0, "Robot") )
              {
                if(opt) timeopen=timetick; else timeopen=TimeCurrent(); 
               
                Print ("opt=",opt, " ------------------------------  B U Y  with Robot  ",minlot,"  ",equity,"  ",KLOT," Ask=",Ask, "  ", timeopen);


2022.07.04 09:10:32.277 2022.06.11 00:00:00   =================================================================================================================

2022.07.04 09:10:32.277 2022.06.11 00:00:00   itick=1241124    Ask=29631.43    timetick=2022.06.04 06:32:31

2022.07.04 09:11:24.049 2022.06.11 00:00:00   market buy 0.25 BTCUSD (29262.01 / 29288.98)

2022.07.04 09:11:24.049 2022.06.11 00:00:00   deal #2 buy 0.25 BTCUSD at 29288.98 done (based on order #2)

2022.07.04 09:11:24.050 2022.06.11 00:00:00   deal performed [#2 buy 0.25 BTCUSD at 29288.98]

2022.07.04 09:11:24.050 2022.06.11 00:00:00   order performed buy 0.25 at 29288.98 [#2 buy 0.25 BTCUSD at 29288.98]    ? ? ? ? 

2022.07.04 09:11:24.052 2022.06.11 00:00:00   CTrade::OrderSend: market buy 0.25 BTCUSD [done at 29288.98]

2022.07.04 09:11:24.052 2022.06.11 00:00:00   opt=true ------------------------------  B U Y  with Robot  0.25  5000.0  20000 Ask=29631.43  2022.06.04 06:32:31
 
Petros Shatakhtsyan #:

Проблема при использовании    CTrade  trade;

Когда Ask/Bid получается внутри OnTick(), то всё нормально: например  Ask=SymbolInfoDouble(symb,SYMBOL_ASK);

А когда Ask определяется из  CopyTicks(), и выбирается из массива(MqlTick tick[]) с помощью цикла (for), то ордер открывается не по той цене. В обоих случаях(и при OnTick() и при цикле) даты открытия ордера совпадают.

Возникает вопрос: как использовать функцию trade.Buy() , в цикле ?

...

Предоставьте пожалуйста код для воспроизведения ошибки

 
Aliaksandr Hryshyn #:

Копируем в отладчике длиииинную строку:

Получаем это:

Куда всё остальное делось?

Увеличил внутренний буфер копирования в Clipboard с 256 до 4096 символов

 
Ilyas #:

Увеличил внутренний буфер копирования в Clipboard с 256 до 4096 символов

Спасибо

 
Ilyas #:

Предоставьте пожалуйста код для воспроизведения ошибки

Надеюсь понятно что я хочу делать:  вместо OnTick(), использовать массив тиков от CopyTicks()

Я так понял такое решение  ошибочно, из-за текущей цены, также из-за текущей времени. Получается функция Buy() без OnTick() не сможет работать ?


#include<Trade\Trade.mqh>
   CTrade  trade;
   MqlTick tick[];
   double ASK;
   int itick, ktick;
   datetime timetick;
   datetime time=D'2022.06.04 06:32:31';
   
void OnInit()
{
  LoadTick();
}
void BUY()
{         
      Print("------------------------------------------------------------------");
      Print("itick=",itick, "    Ask=",ASK, "    timetick=",timetick);
      Print("------------------------------------------------------------------");
              
   if ( trade.Buy(0.1, _Symbol, ASK, 0, 0) )
   {
      bool selected=PositionSelect(_Symbol);
      if(selected) 
      {
      Print("==================================================================");
      Print("price=",PositionGetDouble(POSITION_PRICE_OPEN), "    time=",TimeToString(PositionGetInteger(POSITION_TIME)) );
      }
    }
}
void LoadTick()
{ 
    datetime start; 
    datetime   end=TimeCurrent();
        
    start=end-10*24*3600; 
    Print("Start=",start, " end=",end);
     
    ktick=CopyTicksRange(_Symbol, tick, COPY_TICKS_INFO, start*1000, end*1000);

    for( itick=0; itick<ktick; itick++)
    {
       ASK=tick[itick].ask;  timetick=tick[itick].time; 
       Sleep(1);   // Цена открытия ордера меняется, если меняем значение Sleep.
        
      if (timetick==time) { BUY(); break; }
    }
 }


2022.07.06 10:57:55.184	Core 1	2022.06.11 00:20:41   ------------------------------------------------------------------
2022.07.06 10:57:55.184	Core 1	2022.06.11 00:20:41   itick=1241124    Ask=29631.43    timetick=2022.06.04 06:32:31
2022.07.06 10:57:55.184	Core 1	2022.06.11 00:20:41   ------------------------------------------------------------------
2022.07.06 10:57:55.184	Core 1	2022.06.11 00:20:41   market buy 0.1 BTCUSD (29223.69 / 29247.56)
2022.07.06 10:57:55.184	Core 1	2022.06.11 00:20:41   deal #2 buy 0.1 BTCUSD at 29247.56 done (based on order #2)
2022.07.06 10:57:55.184	Core 1	2022.06.11 00:20:41   deal performed [#2 buy 0.1 BTCUSD at 29247.56]
2022.07.06 10:57:55.184	Core 1	2022.06.11 00:20:41   order performed buy 0.1 at 29247.56 [#2 buy 0.1 BTCUSD at 29247.56]
2022.07.06 10:57:55.184	Core 1	2022.06.11 00:20:41   CTrade::OrderSend: market buy 0.10 BTCUSD [done at 29247.56]
2022.07.06 10:57:55.184	Core 1	2022.06.11 00:20:41   ==================================================================
2022.07.06 10:57:55.184	Core 1	2022.06.11 00:20:41   price=29247.56    time=2022.06.11 00:20
2022.07.06 10:57:55.184	Core 1	2022.06.11 23:59:58   position closed due end of test at 28452.45 [#2 buy 0.1 BTCUSD 29247.56]



 
Petros Shatakhtsyan #:

Надеюсь понятно что я хочу делать:  вместо OnTick(), использовать массив тиков от CopyTicks()

Я так понял такое решение  ошибочно, из-за текущей цены, также из-за текущей времени. Получается функция Buy() без OnTick() не сможет работать ?




У Вас очень странный код. Вы пытаетесь совершить покупку по цене, которая была у тика попавшего на

D'2022.06.04 06:32:31'

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