Тестируем 'CopyTicks' - страница 3

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Dmitriy Skub
13186
Dmitriy Skub  

Я не тестирую, а напоминаю разработчикам. Практика показывает, что это не бывает лишним))

Насчет направления сделки - на фортс оно дается всегда биржей.

Тот алгоритм, который сейчас в терминале используется, не годится для этого - надо брать инфу с биржи обязательно.

akuloff
90
akuloff  
Dmitriy Skub:

Я не тестирую, а напоминаю разработчикам. Практика показывает, что это не бывает лишним))

Насчет направления сделки - на фортс оно дается всегда биржей.

Тот алгоритм, который сейчас в терминале используется, не годится для этого - надо брать инфу с биржи обязательно.

Тут  просто уже несколько тем про copyticks  (и mqltickinfo) заканчиваются на "ждемс".

Вот еще, например:

https://www.mql5.com/ru/forum/61607


Так что действительно, "ждемс" :-)

CopyTicks на медленном рынке
CopyTicks на медленном рынке
  • www.mql5.com
На нём видно, что после получения первых 10 тиков после запуска терминала, CopyTicks перестаёт работать:. - - Категория: автоматические торговые системы
Mikhail Filimonov
5306
Mikhail Filimonov  
А как сейчас, в 1210 билде, обстоят дела с CopyTicks()?
Vladimir Karputov
Модератор
121464
Vladimir Karputov  
Михаил:
А как сейчас, в 1210 билде, обстоят дела с CopyTicks()?
 Всё отлично: Тиковая история
Dmitriy Skub
13186
Dmitriy Skub  
Михаил:
А как сейчас, в 1210 билде, обстоят дела с CopyTicks()?

Почти работает. Двойников нет. Объемы не пропадают.

Но, направление сделок во флагах отсутствует. Вычисление по бид/аск не дает должной верности.

Структура реальная - старая и отличается от описанной в хелпе. Так понимаю, что это промежуточный билд. Посему, как всегда, ждем следующего))

Mikhail Filimonov
5306
Mikhail Filimonov  
Dmitriy Skub:

Почти работает. Двойников нет. Объемы не пропадают.

Но, направление сделок во флагах отсутствует. Вычисление по бид/аск не дает должной верности.

Структура реальная - старая и отличается от описанной в хелпе. Так понимаю, что это промежуточный билд. Посему, как всегда, ждем следующего))

Спасибо
zimbabve15
32
zimbabve15  

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

MqlTick

zimbabve15, 2016.02.03 06:15

Брокер "Открытие" инструмент ED-3.16 левая таблица - тиковые данные пишутся индикатором в процедуре OnCalculate  через запрос SymbolInfoTick , правая таблица - через CopyTicks. Структура и там и там: время, бид, аск, ласт, объем, время_мсек, флаг. 

Почему у одних и тех же тиков имеем разные значения объемов и флагов? 

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


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

MqlTick

zimbabve15, 2016.02.03 06:39

 

Брокер FiboFroup левая таблица тики через SymbolInfoTick , правая таблица - через CopyTicks. Структура и там и там: время, бид, аск, ласт, объем, время_мсек, флаг.  

Флаги разные, т.к. пляшут значения bid/ask в одних и тех же тиках, записанных разными способами.   


Vladimir Karputov
Модератор
121464
Vladimir Karputov  
zimbabve15:


Это эпидемия такая - размещать "простыни" без какого-либо кода?
zimbabve15
32
zimbabve15  

CopyTicks 

////////////////////////////////////////////////////////////////////////////////////////////////////////// 

MqlTick tick_array[];  

int OnInit()
  {
   int copied=CopyTicks(_Symbol,tick_array,COPY_TICKS_ALL,0,countHistoryTicks);
   if(Save_File!=NOT_SAVE)
     {
      SaveTicksToFile(tick_array);
     }
   return(INIT_SUCCEEDED);

  }


void SaveTicksToFile(MqlTick &massiveTicks[])

  {

   string filename,file_buffer;

   StringConcatenate(filename,Symbol(),".txt");

   int file_handle=FileOpen(filename,FILE_READ|FILE_WRITE|FILE_ANSI|FILE_SHARE_READ);

FileSeek(file_handle,0,SEEK_END);

   int sizeMassiveTicks=ArraySize(massiveTicks);

   int i=0;

   while(i<sizeMassiveTicks)

     {

      StringConcatenate(file_buffer,TimeToString(massiveTicks[i].time,TIME_DATE|TIME_SECONDS)," ",DoubleToString(massiveTicks[i].bid,_Digits)," ",DoubleToString(massiveTicks[i].ask,_Digits)," ",DoubleToString(massiveTicks[i].last,_Digits)," ",IntegerToString(massiveTicks[i].volume,_Digits)," ",IntegerToString(massiveTicks[i].time_msc)," ",IntegerToString(massiveTicks[i].flags,_Digits));

      FileWrite(file_handle,file_buffer);

      i++;

     }

   FileClose(file_handle);

  } 

 

SymbolInfoTick 

////////////////////////////////////////////////////////////////////////

int OnCalculate(const int rates_total,

                const int prev_calculated,

                const datetime &time[],

                const double &open[],

                const double &high[],

                const double &low[],

                const double &close[],

                const long &tick_volume[],

                const long &volume[],

                const int &spread[])

  {

   MqlTick last_tick;

   SymbolInfoTick(Symbol(),last_tick);


   TickStruct tick={0,0,0,0,0,0,0};

   tick.time=TimeCurrent();

   tick.bid=last_tick.bid;

   tick.ask=last_tick.ask;

   tick.flag=last_tick.flags;

   tick.last=last_tick.last;

   tick.time_msc=last_tick.time_msc;

   tick.volume=last_tick.volume;

   int total=ArraySize(g_ticks);

   if(ArrayResize(g_ticks,total+1,1000)<0)

     {

      Alert(": индикатору не хватает памяти для сохранения данных об очередном тике.");

     }

   else

     {

      g_ticks[total]=tick;

      UpTick[rates_total-1]=total;

     }

   if(total>999)

     {

      SaveTempTicks();

      ArrayFree(g_ticks);

     }

   return(rates_total);

  } 

 

 

void SaveTempTicks()

  {

// Создание файла тиковой истории

   int hTicksFile=FileOpen(Symbol()+"fullTicks.tks",FILE_BIN|FILE_READ|FILE_WRITE|FILE_SHARE_READ|FILE_SHARE_WRITE);

   if(hTicksFile<1)

      return;

   FileSeek(hTicksFile,0,SEEK_END);

// Запись файла 

   int total=ArraySize(g_ticks),i=0;

   while(i<total)

     {

      if(FileWriteStruct(hTicksFile,g_ticks[i])==0)

        {

         Print("Ошибка сохранения данных во временный файл...");

         return;

        }

  i++;

     }

FileClose(hTicksFile);

 }  

Vladimir Karputov
Модератор
121464
Vladimir Karputov  
Исправьте, пожалуйста, своё сообщение (Правильно вставляем код на форуме). Еще было бы хорошо, если Вы кроме кода в сообщении прикрепите сам файл (*.mq5).
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий