Обсуждение статьи "Разработка передовых торговых систем (ПТС): Реализация Order Blocks в индикаторе" - страница 2
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Что касается первой проблемы, я думаю, это может быть связано с тем, что индикатор неправильно загружает данные. Обычно это происходит при смене графика или открытии нового. Однако если речь идет о графике, который уже использовался, стоит разобраться, почему не получаются блоки ордеров. В этом случае было бы полезно включить в код отладочные (Print) сообщения, чтобы выявить проблему.
Что касается второй проблемы, когда рисуются только бычьи блоки ордеров, то это может быть связано с тем, что пара EURUSD на таймфрейме H4 в настоящее время находится на максимумах 600-700 свечей. В этом контексте возможно, что все медвежьи блоки ордеров были смягчены, поэтому они и не рисуются на графике.
Что касается изменения критериев, я уменьшил некоторые булевы переменные в коде. Тем не менее, при необходимости не составит труда снова ввести эти условия.
Что касается цветов, то в последней версии, которую я выложил в комментариях, к цветам прямоугольников блока ордеров применяется прозрачность. Возможно, именно поэтому цвета визуально не совпадают с цветами предыдущих версий. Наконец, что касается анимации, я не совсем понял, что вы имеете в виду. Не могли бы вы подробнее объяснить, что вы имеете в виду под анимацией в данном контексте?
В разделе 3.0 "Заключение" вы представили видео индикатора в действии для XAUUSD M1. Мне интересно, использовали ли вы функцию индикатора Strategy Tester для создания видео. Когда я запускаю Strategy Tester, обычно для советника с установленным режимом Visal Mode, он показывает индикаторы и сделки, но обычно не отображает текст о работающем советнике. Мне просто интересно, можете ли вы знать причину или решение.
Кроме того, я обнаружил, что изменение размера больших многомерных массивов занимает непомерно много времени. Я прибег к использованию 100 дополнительных элементов при каждом изменении размера, чтобы минимизировать время. Это отлично работает для меня, поскольку я использую массивы, основанные на нулях, для временных рядов.
В разделе 3.0 "Заключение" вы представили видео с индикатором в действии для XAUUSD M1. Я задался вопросом, использовали ли вы функцию индикатора Strategy Tester для создания видео. Когда я запускаю Strategy Tester, обычно для советника с установленным Visal Mode, он показывает индикаторы и сделки, но обычно не отображает текст о запущенном советнике. Я просто хотел узнать, может быть, вы знаете причину или решение.
Кроме того, я обнаружил, что изменение размера больших многомерных массивов занимает непомерно много времени. Я прибег к использованию 100 дополнительных элементов в каждом изменении размера, чтобы минимизировать время. Это отлично работает для меня, поскольку я использую массивы на основе нуля для временных рядов.
Здравствуйте, CapeCoddah.
Для записи видео я использовал внешнее приложение, а не встроенную функцию Strategy Tester.
Что касается текста, который вы упоминаете во время выполнения советника, я понимаю, что это может быть что-то внешнее по отношению к MQL5, а не графические объекты, такие как метки. Было бы очень полезно, если бы вы поделились скриншотом, чтобы я мог лучше его проанализировать.
С наилучшими пожеланиями.
HI,
Спасибо за информацию, я ценю ее.
О переводе ваших комментариев с испанского на английский. Поскольку Google Translate не переводит текст после // в строке, он не подходил для перевода ваших комментариев. Я попробовал DeepL, и он переводит текст после //. Мне также было трудно понять. Перевести код было несложно, но сохранить перевод было невозможно.Тем не менее, он действительно плохо справился с переводом. Он вставлял точки и "End" там, где, по его мнению, заканчивалось предложение. Кроме того, он менял && на &&& и, конечно, создавал еще больше проблем. Я сдался после исправления этих ошибок, и компиляция все равно выдала более 100 ошибок.
Я прогнал вашу часть 2 через тестер стратегий, и ваши линии TP и SL и текст отображаются. Однако, похоже, что ваши расчеты для уровней TP и SL нуждаются в корректировке. Кроме того, тест показывает перекрывающиеся SL и TP. В среде без хеджирования SL и TP были бы объединены в один SL или TP. Должна быть только одна линия, а не две, и она должна иметь шаг, чтобы указать изменение значения. Также на графике не видно, где начинается ваша прогнозируемая сделка.
Я решил сосредоточиться на вашей первой программе, так как она дает больше сигналов.Я планирую: включить механизм прекращения сигнала при окончании тренда; исключить дублирование сигналов в пределах n баров друг от друга; стандартизировать высоту коробки, центрированной вокруг медианы бара; определить и изменить параметры блока ордеров, чтобы обеспечить рациональное использование на периодах H1 и выше; поместить скользящую среднюю объемов либо на основной график, либо на открытый график индикатора; и, наконец, преобразовать массивы на основе нуля, чтобы соответствовать моему стандартному использованию и в конечном итоге включить их в мой советник.Я попытаюсь использовать функции для выполнения и инкапсуляции логики, чтобы вы могли включить ее при желании. Однако мой стиль организации программирования нетрадиционен и не соответствует автоматическим отступам MetaQuotes.
Я буду продолжать следить за вами, так как считаю, что у вас очень хороший подход к торговле, продолжайте в том же духе.
Будьте здоровы и с теплыми пожеланиями,
CapeCoddah
Здравствуйте,
Я только что тестировал своего советника в тестере стратегий, EURUSD H4 1/1/2025-2//1/2025, и заметил в конце прогона две проблемы с индикатором Block Order.
Во-первых, он выбрал блочный ордер на 2/3/2025, который находится за пределами тестового окна, а во-вторых, он поместил текст блока в область Chart Shift.
Наслаждайтесь
CapeCoddah
Здесь представлена переведенная на английский язык версия вашего первого индикатора. Я решил, что мне нужно понять ваши многочисленные комментарии к коду на английском языке, и пересмотрел Google Translate, поскольку DeepL не произвел на меня впечатления. Сначала я заменил все //-комментарии на #/#, чтобы Google мог перевести //-комментарии к строкам... а затем преобразовал текстовый файл в документ MS Word для ввода в Translate.После перевода я открыл новый документ, сохранил его как текстовый файл, переименовал его и начал синтаксическую обработку нового источника. По моим оценкам, Translate сделал 90 % работы, но он добавил пробелы и символы, которые требовали ручного преобразования. После нескольких дней работы он скомпилировался без ошибок. Удивительно, но он сработал с первой попытки! Я сравнил его с вашим оригинальным индикатором на 1000 баров, и они были идентичны.
Здесь представлена переведенная на английский язык версия вашего первого индикатора. Я решил, что мне нужно понять ваши многочисленные комментарии к коду на английском языке, и пересмотрел Google Translate, поскольку DeepL не произвел на меня впечатления. Сначала я заменил все //-комментарии на #/#, чтобы Google мог перевести //-комментарии к строкам... а затем преобразовал текстовый файл в документ MS Word для ввода в Translate.После перевода я открыл новый документ, сохранил его как текстовый файл, переименовал его и начал синтаксическую обработку нового источника. По моим оценкам, Translate сделал 90 % работы, но он добавил пробелы и символы, которые требовали ручного преобразования. После нескольких дней работы он скомпилировался без ошибок. Удивительно, но он сработал с первой попытки! Я сравнил его с вашим оригинальным индикатором на 1000 баров, и они были идентичны.
К сожалению, похоже, что ваш индикатор структурно несовершенен и бесполезен для торговли, поскольку он выполняет свои расчеты на будущих переменных, которые неизвестны на момент расчета, как выделено в коде ниже жирным шрифтом.
for( int i = Universal_search_range ; i > 5 ; i--) {
//проверка ошибок
if( i + 3 > ArraySize(highArray) || i + 3 > ArraySize(atr))
continue ;
if( i < 0) continue;
// Обновление индексов свечей
one_candle = i ; //центральная свеча
candle_behind_two = i +2;
candle_behind_one = one_candle +1;
две_свечи = одна_свеча - 1;
три_свечи = одна_свеча - 2;
four_candle = one_candle -3;
// Рассчитываем средний объем предыдущих свечей
body1 = MathAbs(closeArray[one_candle] - openArray[one_candle]);
body2 = MathAbs(closeArray[two_candle] - openArray[two_candle]);
body3 = MathAbs(closeArray[three_candle] - openArray[three_candle]);
К сожалению, похоже, что ваш индикатор структурно несовершенен и бесполезен для торговли, поскольку он выполняет свои расчеты на будущих переменных, которые неизвестны на момент расчета, как выделено в коде ниже жирным шрифтом.
for( int i = Universal_search_range ; i > 5 ; i--) {
//проверка ошибок
if( i + 3 > ArraySize(highArray) || i + 3 > ArraySize(atr))
continue ;
if( i < 0) continue;
// Обновление индексов свечей
one_candle = i ; //центральная свеча
candle_behind_two = i +2;
candle_behind_one = one_candle +1;
две_свечи = одна_свеча - 1;
три_свечи = одна_свеча - 2;
four_candle = one_candle -3;
// Рассчитываем средний объем предыдущих свечей
body1 = MathAbs(closeArray[one_candle] - openArray[one_candle]);
body2 = MathAbs(closeArray[two_candle] - openArray[two_candle]);
body3 = MathAbs(closeArray[three_candle] - openArray[three_candle]);
Здравствуйте CapeCoddah, я думаю, что это не так, поскольку, например, индикатор делает все вычисления, используя массивы последовательно (хотя это не распространено, они обычно делаются без серии) в контексте первого показанного цикла, этот цикл используется для обнаружения блоков ордеров, что делается, так это переход от свечи "Universal_search_range" (помните, что в серии свеча 0 является самой последней) к свече 6, поэтому я не вижу, чтобы использовались будущие свечи, и если бы это было так, то two_candle или другой индекс привели бы к значению меньше 0, что привело бы к выходу из диапазона. Таким образом, свеча four_candle = one_candle - 3 будет наиболее близка к 0 в случае, если цикл заканчивается там, где i = 6, тогда four_candle = 3, поэтому, принимая во внимание, что текущая свеча равна 0, я могу сказать, что ни в какое время я не использую будущие свечи. Название может показаться запутанным, я знаю, но я сделал его таким, потому что мне так было проще понять, учитывая, что когда дело доходило до получения блоков ордеров, one_vela была похожа на центральную свечу. Таким образом, если я искал сильное движение, я оценивал свечи, которые следовали за ним (в серии это было бы вычитанием).