仕事が完了した
指定
Совместить 2 скрипта и 2 индикатора
Смысл какой - есть файлы hst с одноминутным интервалом с историей прошлого и есть файлы hst с разноминутными интервалами - с текущей историей.
Что требуется - написать скрипт, который бы считывал заданное количество баров из файлов с текущей историей, затем преобразовывал график с помощью RSI, то есть надо построить RSI, но не обязательно его выводить на экран, достаточно его нахождения в буфере, и остальные операции построения индикаторов можно производить без отображения.
Затем надо открывать файлы с историей прошлого попеременно, по одному файлу, при этом строя на них с помощью RSI c каналом BolingerBands (то есть на RSI строим BolingerBands) для этого уже есть готовый скрипт http://codebase.mql4.com/ru/1179#8280 но уже без МА или его мод, прикрепленный ниже, это тоже можно не отображать в терминале. Затем надо сравнить попадает ли RSI на файле с текущей историей в канал BB в файлах с историей прошлого, то есть надо сравнить в двух файлах RSI - в одном файле с ВВ построенном на RSI в другом по всему файлу. Если тот фрагмент истории который мы задали как текущий с заданным количеством баров попал в канал в исторических файлах прошлого, то из историческрго файла прошлого требуется сделать експорт в текст того фрагмента, который нашёлся. Если не нашёлся, то на файле с историей прошлого применяется оптимизиованный конвертер периодов с заданными внутри скрипта таймфреймами например от 2 до 30 (т.е. 2,3,4 ... 30 мин.), то есть надо переписать оптимизированный конвертер периодов так, чтобы он автоматически переключал таймфреймы и чтобы это происходило только в оперативке, в смысле без записи в файл каждого таймфрейма. Потом надо сравнить файл с построенным RSI текущей истории с остальными заданными таймфреймами получившихся из больших файлов с прощлым. В общем по порядку - есть большие файлы hst с историей прошлого, на которых применяется RSI+BB и после каждого прохода сравнения эти большие файлы подвергаются сначала конвертированию по периодам и построению RSI+BB. Затем каждый получившийся таймфрейм с RSI+BB сравнивается с текущим файлом истории на котором задавали количество баров и строили RSI, то есть та же процедура сравнения - попадает ли RSI на файле с текущей историей в канал BB в файлах с историей прошлого. Например у нас есть файлы с историей с 1999 года по 1 мин GBPJPY1, EURUSD1….. ######1. Они находятся в папке терминала с историей, здесь же находятся и файлы с текущей историей например AUDCAD1, AUDCAD5, AUDCAD15, наверное надо будет указать какие файлы с какими сравнивать. Т.е. из AUDCAD1 считать с конца баров 200-300, затем построить RSI, оставить в буфере индикатор. Потом открыть GBPJPY1, построить на нём RSI+BB, считывать по 200-300 баров (в зависимости от того по сколько было задано считывать) сравнить RSI AUDCAD1 c BB GBPJPY1, если RSI AUDCAD1 попал в канал ВВ GBPJPY1, а здесь сравниваются RSI AUDCAD1 с верхним и нижним пределом ВВ GBPJPY1, то значит при попаднии в канал всего RSI AUDCAD1 (200-300 заданных баров) сделать експорт того фрагмента из GBPJPY1 в текст, но только не индикатора, а самого фрагмента графика GBPJPY1. Если весь заданный RSI AUDCAD1 не попал в канал, то смещается выборка поиска на bars++1 или bars--1, то есть дальше перемещаясь по файлу GBPJPY1( в зависимости от того в каком направлении считывали), потом когда цикл проходит весь GBPJPY1, на GBPJPY1 применяется оптимизированный конвертер периодов и строится опять же RSI+BB. Должен получиться GBPJPY2 с построеным на нём RSI+BB затем берётся AUDCAD1 с уже построенным RSI и сравнивается AUDCAD1 RSI с GBPJPY2 ВВ если RSI AUDCAD1 попал в ВВ GBPJPY2 то делается експорт того фрагмента который попал в GBPJPY2 в текст но уже с номером таймфрейма и т.д. до конца цикла т.е. GBPJPY3 ВВ, GBPJPY4 ВВ, GBPJPY5 ВВ.....
Перед каждым переключением периода наверное лучше обнулять буфер с RSI+BB, оперативка и своп – весьма ограничены:)
Потом когда отработает цикл поиска можно закрыть GBPJPY1, обнулить буфер с его RSI+BB, а затем открыть EURUSD1 и на нём опять начинать строить RSI+BB, сравнивать AUDCAD1 с уже построенным на нём RSI с EURUSD1 ВВ и потом переключаться по периодам, строя EURUSDn RSI+BB и сравнивая с AUDCAD1 RSI.
Как видно здесь есть два списка с файлами – 1-й. AUDCAD1, AUDCAD5, AUDCAD15…AUDCADm и 2-й. GBPJPY1, EURUSD1….. ######1. После того как отработался цикл с одним файлом из первого списка со всеми файлами из второго надо переключиться на второй файл из первого списка построить на нём RSI и произвести процедуру сравнения со всеми файлами из второго списка и т.д. В 1-м списке может быть больше файлов ~ 500, во втором тоже может быть много файлов и они должны как можно быстрее обрабатываться поэтому просьба задействовать предварительно переделанный period converter optimized ну и самые скоростные приёмы программирования, так как придётся обрабатывать большие объемы информации за маленький промежуток времени. Я уже модифицировал RSI + BB, в нём можно задавать и период RSI и ширину канала, просьба эти внешние переменные оставить как есть.
Насколько вам понятно задание - здесь надо совместить 4 скрипта, предварительно их переделав, это всем известные RSI, мой nik_rsi_bands, прикрепленный ниже, оптимизированный конвертер периодов и hst2csv. Что в них надо переделать - это в первую очередь поубирать вывод на экран индикаторов, то есть сократить лишние операции.
Ну и дописать этакий микс из этих четырёх скриптов. Что здесь дописывать - это логику сравнения двух файлов, и какие файлы с какими сравнивать, но совсем не обязательно указывать их все, этим могу и я заняться. Достаточно будет хотя бы собрать тело программы, и чтобы оно корректно и быстро работало, производительности у mql как будто бы предостаточно, но, смотря ещё какой алгоритм скрипта. Тот же стандартный конвертер периодов и оптимизированный а скорость очень заметна.