Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 883

 
Askr:
Как в мт 5 загружается архив котировок? В мт 4 например F2 и далее там тыкаешь обновление а тут?

В MetaTrader 5 ничего загружать не нужно. К какому торговому серверу подключились - теми котировками и пользуетесь. Хотите получайте через CopyRates, хотите через CopyTicks.

 
Askr:
Как в мт 5 загружается архив котировок? В мт 4 например F2 и далее там тыкаешь обновление а тут?

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

 
Ihor Herasko:

А если советник не был активен в то время? Ведь данные хотелось бы получить из истории счета. Но это, к сожалению, невозможно сделать однозначным способом. Только с кучей оговорок. 

Вообще странно, почему разработчики не сделали OrderCloseTime() в МТ5. Видимо на то были серьёзные причины)

 
lil_lil:

Вообще странно, почему разработчики не сделали OrderCloseTime() в МТ5. Видимо на то были серьёзные причины)

Потому, что ордер в терминологии МТ5 и Mql5 имеет другое значение. Чтобы узнать время закрытия позиции, надо выбрать ордера и сделки относящиеся к этой позиции, среди них найти сделку с модификатором DEAL_ENTRY_OUT и время этой сделки будет равно закрытию позиции.

 

Добрый день, подскажите, не могу составить конструкцию для следующего условия: запускается индикатор, в свече появляются подходящие ценовые параметры, рисуется графическое указание, но, допустим, если до закрытия свечи еще далеко, то индикатор может выявить другую свечную комбинацию в этом месте. Вопрос - как в процессе ежесекундного мониторинга написать код так, чтобы он удалял предыдущий результат после прекращения отрабатывания условия в этой свече?

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

И еще вопрос - как сделать алерт на основе следующей концепции конструкции:

Задача - дано: ТФ 1 час.

Условие - запустить работу поисковой части индикатора только, допустим, после 55 минуты и до 60 минуты текущей свечи и после перезапустить цикл.

Как реализовать эту конструкцию?

 
clickaider:

Добрый день, подскажите, не могу составить конструкцию для следующего условия: запускается индикатор, в свече появляются подходящие ценовые параметры, рисуется графическое указание, но, допустим, если до закрытия свечи еще далеко, то индикатор может выявить другую свечную комбинацию в этом месте. Вопрос - как в процессе ежесекундного мониторинга написать код так, чтобы он удалял предыдущий результат после прекращения отрабатывания условия в этой свече?

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

1. Тестер работал и работает правильно, ошибок нет.

2. Ошибка в понимании Вами процесса тестирования: когда происходит первый запуск индикатора или подкачка истории (помним, что признак этого есть prev_calculated==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[])

у которых для каждого i-го члена цикла есть только ОДНО значение Open, High, Low и Close. 

А вот когда все бары обошли тестер начинает работать на каждом баре в тиковом режиме - именно поэтому можно видеть как растёт High и снижается Low.

 
Vladimir Karputov:

1. Тестер работал и работает правильно, ошибок нет.

2. Ошибка в понимании Вами процесса тестирования: когда происходит первый запуск индикатора или подкачка истории (помним, что признак этого есть prev_calculated==0) Вы обходите все бары в цикле. Так вот, в этом цикле Вы пользуетесь массивами-таймсериями 

у которых для каждого i-го члена цикла есть только ОДНО значение Open, High, Low и Close. 

А вот когда все бары обошли тестер начинает работать на каждом баре в тиковом режиме - именно поэтому можно видеть как растёт High и снижается Low.

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

if(Cmp(shadow_upper_1,shadow_lower_0)<0 && body_size_0 < body_size_1 && shadow_lower_0 >= 0.7*shadow_upper_0 && 8*body_size_0 >= shadow_lower_0 && 7*body_size_0 <= shadow_upper_0 && close_0 >= Upper1_0 && close_0 <= body_Upper_Upper1_mediane75_0 && Upper1_1 >= Upper1_2)
         if(InpEnablePAT_DOJIUP_UPPER1) DrawPattern(index,PATTERN_TYPE_DOJIUP_UPPER1,high,low,time);

Вот код формирования указания на свечу, но как его сделать перерисовываемым?

 
clickaider:

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

Вот код формирования указания на свечу, но как его сделать перерисовываемым?

Храните в индексе номер бара. Проверяйте перед отрисовкой. Если на баре есть объект, удаляете его. ObjectDelete.

 
clickaider:

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

Вот код формирования указания на свечу, но как его сделать перерисовываемым?

Просто предусмотреть три состояния: 

  • отрисовать паттерн 1
  • отрисовать паттерн 2
  • ничего не рисовать (например для DRAW_ARROW передаёте в индикаторный буфер "0", если конечно вначале индикатора Вы прописали 

//--- установим пустое значение 
   PlotIndexSetDouble(индекс_построения_DRAW_ARROW,PLOT_EMPTY_VALUE,0);
 
Vladimir Karputov:

Просто предусмотреть три состояния: 

  • отрисовать паттерн 1
  • отрисовать паттерн 2
  • ничего не рисовать (например для DRAW_ARROW передаёте в индикаторный буфер "0", если конечно вначале индикатора Вы прописали 

Я скинул Вам исходник, не могли бы Вы посмотреть, куда именно нужно это прописать?
Файлы:
PatternsBB.ex5  81 kb
Причина обращения: