Как использовать CopyRates() для поиска и фильтрации по нескольким таймфреймам модели бычьего поглощения

Я пытаюсь использовать CopyRates() для поиска модели свечи бычьего поглощения (медвежья свеча, за которой следует большая бычья свеча) на нескольких таймфреймах (все таймфреймы с H2 по M10 в пределах H4 бычьей свечи после ее закрытия). Я прочитал определение CopyRates(), но мне кажется, что его сложно реализовать. Идея здесь заключается в том, что из паттернов я хочу отфильтровать паттерн с самым большим соотношением пар медвежьих и бычьих свечей. Посмотрите, что я сделал ниже:

В OnTick():

for (int i=ArraySize(timeframes); i>=1; i--)   {
    
    if(CopyRates(Symbol(), timeframes[i - 1], 1, MyPeriod, rates)!=MyPeriod) {
        Print("Error CopyRates errcode = ",GetLastError()); 
        return;
    }

    // Using bullish engulfing pattern:
    if ((rates[numCandle].open < rates[numCandle].close) &&
        (rates[numCandle + 1].open > rates[numCandle + 1].close) &&
        (rates[numCandle + 1].open < rates[numCandle].close) &&
        (rates[numCandle + 1].close > rates[numCandle].open)) {

        // Not too certain what should be done here
    }
}

Вот другой связанный код:

input int numCandle=0; 
MqlRates rates[];
ENUM_TIMEFRAMES timeframes[7] = {PERIOD_H2, PERIOD_H1, PERIOD_M30, PERIOD_M20, PERIOD_M15, PERIOD_M12, PERIOD_M10};

void OnInit() {
   ArraySetAsSeries(rates, true);
}

ОБНОВЛЕНО

Ниже приведено определение модели бычьего поглощения:

введите здесь описание изображения

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


person SuperHueman    schedule 23.06.2020    source источник
comment
Основываясь на интересе к этому вопросу, я создал награду с подробным описанием всех необходимых частей. Пожалуйста, не стесняйтесь задавать любые вопросы, чтобы уточнить любую дополнительную информацию, которая вам потребуется для достижения указанного решения.   -  person SuperHueman    schedule 25.06.2020
comment
Я ненавижу эти изображения неправильно выровненных свечей. Они вводят в заблуждение и заставляют новых трейдеров поверить в то, что видеть огромные гэпы, когда предыдущее закрытие не совпадает с новым открытием, нормально. Единственный случай, когда это допустимо, — это если некоторые биржевые брокеры разрешают овернайт и внесессионную торговлю. Если это видно на валютном рынке, в нормальных повседневных рыночных условиях вас обманывают!   -  person not2qubit    schedule 09.11.2020


Ответы (2)


Предполагая, что MyPeriod инициализирован равным 2, остальная часть кода кажется правильной. Вы должны создать переменную, чтобы сохранить таймфрейм с наибольшим соотношением. Внутри вашего if вы должны рассчитать размер тела свечи для candle+1 и candle и рассчитать соотношение, затем, если рассчитанное соотношение больше, чем предыдущее рассчитанное, вы изменяете значение И обновляете таймфрейм, в котором вы его нашли.

К концу цикла for вы можете решить, в какой период времени вы хотите разместить свой ордер.

person prmottajr    schedule 26.06.2020

person    schedule
comment
Я внимательно следил за этим вопросом, потому что меня очень интересует решение. Я добавил (pastebin.com/rjdqtx1K) в качестве графического интерфейса. Я попытался запустить код, но не увидел прямоугольника. Предыдущая свеча и текущая H4 свечи на моем графике бычьи. Я что-то упускаю? - person SuperHyperMegaSomething; 30.06.2020
comment
трудно сказать. во-первых, вы уверены, что объект существует (проверьте список объектов)? Далее может случиться так, что вы не видите объект, потому что он слишком мал на 4-часовом графике. Для этого я бы предпочел изучить графики M1. Далее необходим полный код, показывающий, где вы добавили объекты графического интерфейса. - person Daniel Kniaz; 01.07.2020
comment
В списке объектов нет объекта. Не уверен, почему он не появляется. Вот мой полный moveRectangle() (pastebin.com/0WmdTvTG). Кроме того, если я хорошо понимаю ваш код, он должен рисовать прямоугольник, если свеча 0 на H4 является бычьей, верно? Так будет ли он искать после закрытия H4 или постоянно, пока формируется свеча H4 0? Кажется, это меня немного смущает. - person SuperHyperMegaSomething; 01.07.2020
comment
1. Вы уверены, что у вас есть выкройка? 2. что вы видите в файле журнала экспертов - если не удалось создать объект, будет логирована ошибка - person Daniel Kniaz; 01.07.2020
comment
1. Я использую тот же шаблон, который вы указали в своем решении. Единственные изменения, которые я внес, — это ссылка moveRectangle(), которую я предоставил. 2. Упс, забыл проверить журнал эксперта. Я получил эту ошибку 25 MultiTimeframeTest.mq5: failed to load/copy rates on 240. error=4003, и она появлялась на каждой паре, которую я пробовал тестировать. - person SuperHyperMegaSomething; 01.07.2020
comment
@DanielKniaz, пожалуйста, извините меня, я не проверял этот вопрос несколько дней. Я обязательно проверю решение в ближайшее время и свяжусь с вами до истечения срока действия вознаграждения. - person SuperHueman; 01.07.2020
comment
@DanielKniaz Кажется, я получаю то же error=4003, что и SuperHyoerMegaSomething, на валютных парах, которые я тестировал. - person SuperHueman; 02.07.2020
comment
Ага, понятно. допустил ошибку при копировании ответа. пожалуйста, попробуйте снова - person Daniel Kniaz; 02.07.2020
comment
@DanielKniaz Я получил ошибку array out of range in ‘MTFCopyRates.mq5' (59,30). Строка 30 моего кода — const datetime timeStart=rates[0].time, timeEnd=TimeCurrent(); //within a bullish H4 candle - DONE, а строка 59 — if(getCandleDir(rates[i+1])!=SHORT). - person SuperHueman; 02.07.2020
comment
Вы не обращались, если я хорошо понимаю ваш код, он должен рисовать прямоугольник, если свеча 0 на H4 является бычьей, верно? Так будет ли он искать после закрытия H4 или постоянно, пока формируется свеча H4 0? Кажется, это меня немного смущает. в вашем ответе на мой комментарий. - person SuperHyperMegaSomething; 02.07.2020
comment
@SuperHueman это происходит потому, что иногда не хватает свечей с начала текущей свечи H4, например. если сейчас 17:01 - есть две свечи H1 (4:00 и 5:00), и сейчас 4:01 - вы можете найти только одну свечу H1 с начала H4 (то есть 4:00: 00). необходимо принять логическое решение, чтобы исправить возможную ошибку - person Daniel Kniaz; 02.07.2020
comment
@SuperHyperMegaSomething Код, который я загрузил, выполняет однократную операцию, а затем завершается. Если вам нужно это делать постоянно - опишите, что вы ожидаете получить (и код вверху), и удалите ExpertRemove(); строку - person Daniel Kniaz; 02.07.2020
comment
@DanielKniaz Думаю, я должен был лучше объяснить это в своем вопросе. Меня интересует H4 бычья свеча после ее закрытия. Это в основном поиск по индексу свечи 1 на графике H4. По мере формирования свечи бывают моменты, когда она переключается с бычьей на медвежью, поэтому в моем случае проверка свечи по мере ее формирования не требуется. Я обновлю вопрос, чтобы категорически заявить об этом. Пожалуйста, не могли бы вы обновить свое решение, чтобы учесть это, тогда я награжу вас наградой. - person SuperHueman; 02.07.2020
comment
@DanielKniaz награда закончится менее чем через час, поэтому я наградил вас наградой. Спасибо. Пожалуйста, не могли бы вы обновить решение для поиска внутри H4 бычьей свечи после ее закрытия. - person SuperHueman; 03.07.2020
comment
@DanielKniaz также идея прямоугольника состоит в том, чтобы открыть сделку, поэтому смещение прямоугольника до тех пор, пока не будет найдено общее наивысшее соотношение, приведет к открытию и закрытию нескольких сделок, пока не будет найдено самое высокое соотношение. Я пытался найти способ реструктурировать код, чтобы найти самый высокий прямоугольник, прежде чем рисовать его только один раз, но мне это не удалось. Я хотел задать еще один вопрос, но я чувствовал, что это не требует еще одного вопроса. Не могли бы вы помочь в этом отношении. - person SuperHueman; 05.07.2020
comment
@SuperHueman Я обновил - код вызывается один раз для каждого бара, предыдущего бара H4 (и всех внутренних нижних элементов tf). Если вам нужно открывать сделки из прямоугольника - имейте в виду, что вам, вероятно, нужно быть конкретным и ловить только анализ последнего против предыдущего бара на младших таймфреймах. - person Daniel Kniaz; 06.07.2020
comment
@DanielKniaz Я получаю ошибку array out of range in ‘MTFNewCopyRates.mq5' (75,29). Я попробовал это на нескольких парах, у которых предыдущая свеча H4 была бычьей, но получил ту же ошибку. Строка 29 — if(CopyRates(_Symbol,timeframeHighest,0,2,rates)==-1), а строка 75 — if(getCandleDir(rates[i+1])!=SHORT). - person SuperHueman; 07.07.2020
comment
@DanielKniaz Я должен признать, что выяснить, как поймать последний регион (который дает максимальное общее соотношение в пределах H4 свечи), чтобы открыть сделку, было для меня довольно сложной задачей. Я хотел задать еще один вопрос по этому поводу, но не думал, что это требует нового вопроса, поскольку он так тесно связан с этим решением. Не могли бы вы помочь с этим. - person SuperHueman; 07.07.2020
comment
Я не знаю, что вы подразумеваете под высшим соотношением - что сравнивать, чего добиваться? - person Daniel Kniaz; 07.07.2020
comment
@DanielKniaz Извините, я имел в виду самый большой коэффициент для модели бычьего поглощения (как рассчитано выше). В настоящее время код сравнивает два паттерна бычьего поглощения и продолжает перемещать прямоугольник, пока не достигнет паттерна с наибольшим отношением от H2 к M10. Я хочу разместить сделку после того, как все сравнения коэффициентов моделей поглощения будут выполнены, чтобы сделка была совершена по бычьей модели поглощения с наибольшим соотношением (где прямоугольник окончательно устанавливается). - person SuperHueman; 07.07.2020
comment
@DanielKniaz Я также получаю ошибку array out of range, которую получил SuperHueman - person IronThrone; 08.07.2020
comment
@DanielKniaz Я тоже получил ошибку array out of range. Я пытался исправить это вчера, но не смог. Я также попробовал немного другой подход к вашему решению, который не требует перемещения прямоугольника, поэтому он рисует только в окончательно желаемой области внутри свечи H4. Но я понял, что это непростая задача :) хотя это решает другую проблему SuperHueman в процессе. Спасибо, вы обязательно получите мои +50 голосов, когда закончите исправлять ошибки и добавлять последний запрос SuperHueman. - person Bane; 08.07.2020
comment
@DanielKniaz Хорошее решение. Просто нужно исправить ошибку диапазона массива. Как сказал Бэйн, перемещение прямоугольника только один раз, когда H4 закрывается как бычий, было бы прекрасным дополнением. - person Containment; 08.07.2020
comment
@DanielKniaz Меня здесь не было несколько дней. Я считаю, что это решение заслуживает большей похвалы, но ошибки могут помешать этому. Есть планы исправить это? - person IronThrone; 11.07.2020
comment
@SuperHueman @Containment @Bane @IronThrone - исправлена ​​ошибка вне массива путем перехода к следующей свече (выбрасывается первая свеча в пределах бара H4. не лучшее решение, просто как пример. Разумнее было бы вычислить время более точно, или вызвать iClose,iOpen... для свечи перед первой в пределах H4 - person Daniel Kniaz; 13.07.2020
comment
@DanielKniaz Спасибо за обновление. Я все еще пытался разобраться в этом и забыл проверить ваш ответ. Относится ли первая свеча в баре H4 к бару H2? Если это так, то ищется только половина таймфрейма, что далеко не идеально, как вы сказали. Как мне точнее рассчитать время? Также я не смог получить условие для положения покоя прямоугольника, чтобы разместить сделку, как я подробно описал в предыдущих комментариях. Не могли бы вы также обратиться к этому тоже. - person SuperHueman; 22.07.2020
comment
чтобы применить CopyRates, вам нужно знать либо даты, либо количество свечей. они разные для каждого таймфрейма. так что приходится либо пересчитывать и проходить для каждого ТФ, либо жить без первой свечи. понятия не имею, что вы имеете в виду под resting position of the rectangle - person Daniel Kniaz; 23.07.2020
comment
@DanielKniaz Я до сих пор не уверен, что первая свеча в H4 относится к свече H2. Пожалуйста, подтвердите это для меня. Честно говоря, я потратил около 3 месяцев на изучение этого вопроса и пытался найти способ поиска свечного паттерна на нескольких таймфреймах, но ваше решение здесь самое близкое, что я нашел. Я очень ценю вашу помощь до сих пор, но я до сих пор не совсем понимаю, как я могу завершить решение, как вы объяснили в своем комментарии выше. Пожалуйста, не могли бы вы помочь с этим, возможно, предоставив более полное решение. 1/2 - person SuperHueman; 23.07.2020
comment
@DanielKniaz Обратите внимание, что это также принесет пользу многим людям, которые проявили интерес к этому вопросу и решению. 2/2 - person SuperHueman; 23.07.2020
comment
@DanielKniaz В предыдущих комментариях я упомянул, что хочу открыть сделку на основе верхнего и нижнего значений прямоугольника. Основываясь на текущем решении, прямоугольник продолжает двигаться по мере сравнения отношений, поэтому я пытался выяснить, как отфильтровать самое большое соотношение, при котором прямоугольник больше не будет двигаться, это то, что я имел в виду, когда сказал resting position of the rectangle. В противном случае я думал о размещении отложенного ордера и его отмене всякий раз, когда прямоугольник движется до упора, что не является хорошим способом решения проблемы. Как я могу решить эту проблему? - person SuperHueman; 23.07.2020
comment
@DanielKniaz Я внимательно за этим наблюдал. и, судя по ответу и отзывам на предпоследний комментарий SuperHueman, справедливо сказать, что многие пользователи здесь, включая меня, действительно заинтересованы в более эффективном или удобном решении. Это определенно не что-то простое в кодировании, как я уже говорил ранее, что пытался исправить ваш код, но не смог в нем разобраться. Также я готов наградить вас дополнительными 100 баллами вместо 50, о которых я упоминал ранее, как только это будет сделано, а также будет решена проблема с «движущимся прямоугольником» (которую SuperHueman упомянул в своем предыдущем комментарии) для открытия сделок. - person Bane; 27.07.2020
comment
@DanielKniaz Я только что создал для этого новую награду в 150 баллов. - person Bane; 29.07.2020
comment
@Bane 150 баллов, вау. Я все еще пытался понять это полностью. - person SuperHueman; 29.07.2020