Тиковая история - страница 3

 
Mikaiel Israielian:

Игорь, спасибо! Это очень хорошая новость) Я обязательно проверю! Т.е. вот этот код гарантированно запишет все тики, пришедшие в терминал?

Или вместо Bid надо что-то другое применить?


текущий bid - это текущий close

 
Taras Slobodyanik:

текущий bid - это текущий close


то, что Bid и Close это одно и то же, я уже усвоил за 8 лет на форексе))) Сейчас вопрос в том, как получить все Биды из пакета.

А то может оказаться, что придёт пакет, скажем, с тремя разными Бидами. OnCalculate будет вызван 3 раза, но каждый раз в переменной Bid, из которой я буду читать, будет храниться первое или последнее значение из этого пакета. А мне все нужны.


 
Mikaiel Israielian:

то, что Bid и Close это одно и то же, я уже усвоил за 8 лет на форексе))) Сейчас вопрос в том, как получить все Биды из пакета.

А то может оказаться, что придёт пакет, скажем, с тремя разными Бидами. OnCalculate будет вызван 3 раза, но каждый раз в переменной Bid, из которой я буду читать, будет храниться первое или последнее значение из этого пакета. А мне все нужны.



Получите все три. Единственный минус - у всех тиков будет одно и то же время - TimeCurrent().

 
Ihor Herasko:

Получите все три. Единственный минус - у всех тиков будет одно и то же время - TimeCurrent().

Сейчас проверил. Видимо, уже нет этой фишки. Проверял так:

  1. Подключил индикатор к графику.
  2. Перезагрузил терминал.
  3. При загрузке получил 13 срабатываний OnCalculate. Все ценовые значения одинаковые. 
Таким образом, тики ловятся, но цену каждого из них в отдельности получить невозможно. Получаем цену только последнего из них. В таймсериях - то же самое.

 
Ihor Herasko:

Сейчас проверил. Видимо, уже нет этой фишки. Проверял так:

  1. Подключил индикатор к графику.
  2. Перезагрузил терминал.
  3. При загрузке получил 13 срабатываний OnCalculate. Все ценовые значения одинаковые. 
Таким образом, тики ловятся, но цену каждого из них в отдельности получить невозможно. Получаем цену только последнего из них. В таймсериях - то же самое.


Повесил на выходные на отдельные графики Биткойна советника и индиктора с одинаковым кодом

tick_count++;
Comment(tick_count);

За сутки индикатор вырвался вперёд на 20 тиков. Это уже что-то. Ещё буду проверять в деле. Потом отчитаюсь.

 
Mikaiel Israielian:

Повесил на выходные на отдельные графики Биткойна советника и индиктора с одинаковым кодом

За сутки индикатор вырвался вперёд на 20 тиков. Это уже что-то. Ещё буду проверять в деле. Потом отчитаюсь.


Да, я тоже постоянно фиксирую превышение количества тиков на некоторых барах по сравнению с тем количеством, которое дает ДЦ. В чем дело - не разобрался до сих пор. Я понимаю еще, когда фиксируется меньше количество тиков (не дошли до сети/терминала), а вот большее количество никак не укладывается в голове.

 
Ihor Herasko:

Да, я тоже постоянно фиксирую превышение количества тиков на некоторых барах по сравнению с тем количеством, которое дает ДЦ. В чем дело - не разобрался до сих пор. Я понимаю еще, когда фиксируется меньше количество тиков (не дошли до сети/терминала), а вот большее количество никак не укладывается в голове.

Просто происходит отражение, эхо, повтор, размножение. Посмотрите, там же та самая цена и то же самое время. Есть минимальный интервал между тиками - кажется 20 мс. Если предусмотрено разработчиками - должна быть ловушка. Однажды у нас был случай, когда сеть случайно закольцевалась - сигналы шли по кольцу, и на каждом круге дублировались. Сеть переполнилась. Пришлось высылать специалиста.Чаще всего это бывает в аппаратуре Киске = Cisco. Сообщайте брокерам, пусть принимают меры.

 
Ihor Herasko:

Да, я тоже постоянно фиксирую превышение количества тиков на некоторых барах по сравнению с тем количеством, которое дает ДЦ. В чем дело - не разобрался до сих пор. Я понимаю еще, когда фиксируется меньше количество тиков (не дошли до сети/терминала), а вот большее количество никак не укладывается в голове.


Если ещё интересен этот вопрос, отчитываюсь, как и обещал ))

Повесил вот такой индикатор

#property strict
#property indicator_chart_window

datetime curoptime = 0;
long mytickvol = 0;
//+------------------------------------------------------------------+
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[])
{

  if(time[0] > curoptime)//новый бар
  {
    curoptime = time[0];//запоминаем время открытия нового бара
    mytickvol = 0;      //обнуляем свой счётчик тиков
  }
  
  mytickvol++;
 
  // Сразу после запуска может давать Алерт до конца бара, а дальше, должно срабатывать только если будет пакет цен
  if(mytickvol != tick_volume[0]) Alert("mytickvol ",mytickvol," tick_volume[0] ", tick_volume[0], " Bid ", Bid, " close[0] ", close[0]);
  
  //Просто интересно бывает ли, что Bid и close[0] отличаются
  if(Bid != close[0]) Alert("Bid ", Bid, " close[0] ", close[0], "mytickvol ",mytickvol," tick_volume[0] ", tick_volume[0]);

  return(rates_total);
}

Результат показал, что OnCalculate(), к сожалению, тоже вызывается только для одной цены из пакета. Особенно хорошо это видно в красных рамочках, когда между двумя вызовами OnCalculate() цена Bid остаётся неизменной, а разрыв между tick_volume[0] и mytickvol возрастает.

Файлы:
 
Mikaiel Israielian:

Если ещё интересен этот вопрос, отчитываюсь, как и обещал ))

Повесил вот такой индикатор

Результат показал, что OnCalculate(), к сожалению, тоже вызывается только для одной цены из пакета. Особенно хорошо это видно в красных рамочках, когда между двумя вызовами OnCalculate() цена Bid остаётся неизменной, а разрыв между tick_volume[0] и mytickvol возрастает.

Я чуть выше показал, что при пакетном приеме невозможно получить цену каждого тика из пакета. Раньше я как-то делал это. Видимо, все-таки, Bid менялся при каждом вызове OnCalculate. Сейчас такого поведения не наблюдаю.

Ну а по сути приведенного Вами рисунка выводы неправильные. Ведь одна и та же цена зафиксирована в разное время. То есть это не пакет тиков, а нормальны приход тиков один за другим. То, что у них цены Bid одинаковые, ни о чем не говорит. Новый тик не обязан отличаться по цене от предыдущего, что не мешает быть ему другим тиком. Кроме того, в указанных тиках могла быть разная цена Ask. Выведите еще и ее, чтобы отследить этот момент.

 
void OnTick()
  {

//if (As0 =! As1)
As4 = As3;
//if (As1 =! As2)
As3 = As2;
//if (As2 =! As3)
As2 = As1;
//if (As3 =! As4)
As1 = As0;
As0 = Ask;
Print (As0 ," - ", As1 ," - ", As2 ," - ", As3 ," - ", As4);
if (As0<As2 && As2<As4 )
{Alert ("Покупаем по цене", Ask);}
else
if (As0>As2 && As2>As4)
{Alert ("Продаем по цене", Bid);}
Print (As0, " - ", As4);
//---
  string var2=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
  Comment (
  "Время - тиков ",var2,"\n"
  );
  }
Причина обращения: