Как измерить длину ТЕКУЩЕЙ свечи для любого инструмента? - страница 2

 
Vladimir Karputov:

Индикатор запущенный в тестере стратегий в режиме генерации тиков "Все тики на основе реальных тиков" - показывает РЕАЛЬНУЮ картинку, как поступали тики. Индикатор визуализирует историю. Здесь OnTick() вообще не при чём. 

Это индикатор и он в тестере стратегий в режиме генерации тиков "Все тики на основе реальных тиков" показывает ВАМ реальную картину в тиковой истории. 

Вот и ответ. Мне собственно нужен только ответ. Значит, в советнике нельзя измерить актуальную длину свечи используя имеющиеся функции. Только вручную.

 
Evgeniy Scherbina:

Вот и ответ. Мне собственно нужен только ответ. Значит, в советнике нельзя измерить актуальную длину свечи используя имеющиеся функции. Только вручную.

Тю. Все отлично измеряется. Вы измерили. Получили значение. НО это не гарантия, что цена уже не изменилась во время отправки торгового запроса.. Неужели не понятно???

Про проскальзывание что-то слышали? Про время исполнения торговых приказов слышали?
 
Evgeniy Scherbina:

Если проходим эту проверку, то дальше открывается сделка:

А ничего, что на скрине М30, а в коде М1?

      int copied = CopyRates("USDCAD", PERIOD_M1, 0, 1, rates); 
 
Alexey Viktorov:

А ничего, что на скрине М30, а в коде М1?

Я пробовал разные. Всегда одно и то же.

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

Попробую написать свое решение, ибо вопрос этот безусловно очень важный!

 
Evgeniy Scherbina:

Я пробовал разные. Всегда одно и то же.

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

Попробую написать свое решение, ибо вопрос этот безусловно очень важный!

Какие насмешки??? Если ты пытаешься сравнить данные минутного графика с данными 30ти минутного, что в этом смешного? Я просто указал на несоответствие.

 
Evgeniy Scherbina:

Я пробовал разные. Всегда одно и то же.

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

Попробую написать свое решение, ибо вопрос этот безусловно очень важный!

Вам уже сто раз написали в чем проблема, сделайте так:

CopyRates(symbol, _Period, 0, 1, rates);

вместо

CopyRates(symbol, PERIOD_M1, 0, 1, rates);
 

В данном случае (скачок, если не сказать рывок) котировок в течении секунды после 15:30 не имеет значение, что запрашивать, M1 или M30. 

НО: лучше запрашивать с того периода, на котором работает эксперт - так как таймсерии построены и доступны.

 

Также, вероятна задержка в этой строке:

if(IsVisual() && trade_btns_state[3] == "on")

Что в этой функции и как заполняется массив trade_btns_state?

 

Я сделал свое решение по измерению длины текущей свечки. Не удалось объединить его в одну функцию, так как все оказалось проще разбросать по частям.

Логика получилась следующая (вдруг кому надо, сделаю форум полезнее!!):

  1. Хранить и обновлять минимумы и максимумы внутри OnTick в трех массивах: string rates_currencies[], double rates_high[] и double rates_low[]. Строковый нужен, чтобы запоминать валютные пары, иначе в mql никак не объединить. То есть натурально обсчитывать цены ASK и BID по каждому тику, проверять больше они или меньше текущих и записывать есливче в массивы.
  2. Каждые 15 минут сбрасывать массивы через ArrayFree, чтобы хранить только данные по 15-мин свечам, как мне было нужно.
  3. В нужный момент (то есть не каждую секунду, а именно когда это нужно) получать цену открытия с помощью функции CopyOpen и одномоментно сохранить ее в double rates_open[]. Как я уже писал раньше, эта цена актуальна, в отличие от цен из функций CopyRates, CopyHigh или CopyLow.
  4. Вычислять длину свечи для бая: rates_high[0] - rates_open[0] и для селла rates_open[0] - rates_low[0].

Все!! Так я могу получить точную и актуальную длину текущей свечи для всех инструментов, которые торгуются с одного графика, и конечно не зависимо от размера графика.

Никаких проблем со скоростью вычислений из-за добавленных действий, и все данные актуальные.

 
Evgeniy Scherbina:

Я сделал свое решение по измерению длины текущей свечки. Не удалось объединить его в одну функцию, так как все оказалось проще разбросать по частям.

Логика получилась следующая (вдруг кому надо, сделаю форум полезнее!!):

  1. Хранить и обновлять минимумы и максимумы внутри OnTick в трех массивах: string rates_currencies[], double rates_high[] и double rates_low[]. Строковый нужен, чтобы запоминать валютные пары, иначе в mql никак не объединить. То есть натурально обсчитывать цены ASK и BID по каждому тику, проверять больше они или меньше текущих и записывать есливче в массивы.
  2. Каждые 15 минут сбрасывать массивы через ArrayFree, чтобы хранить только данные по 15-мин свечам, как мне было нужно.
  3. В нужный момент (то есть не каждую секунду, а именно когда это нужно) получать цену открытия с помощью функции CopyOpen и одномоментно сохранить ее в double rates_open[]. Как я уже писал раньше, эта цена актуальна, в отличие от цен из функций CopyRates, CopyHigh или CopyLow.
  4. Вычислять длину свечи для бая: rates_high[0] - rates_open[0] и для селла rates_open[0] - rates_low[0].

Все!! Так я могу получить точную и актуальную длину текущей свечи для всех инструментов, которые торгуются с одного графика, и конечно не зависимо от размера графика.

Никаких проблем со скоростью вычислений из-за добавленных действий, и все данные актуальные.

Попробую на досуге сделать проверку соответствие CopyOpen, CopyHigh и CopyRates. Примерно правильно я понял проблему?

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