
Возможности Мастера MQL5, которые вам нужно знать (Часть 48): Аллигатор Билла Вильямса
Введение
Индикатор Аллигатор был разработан Биллом Вильямсом с учетом того, рынки, как правило, демонстрируют сильный тренд в каком-либо заданном направлении лишь около 15–30% времени. По сути, это инструмент следования за трендом, который помогает трейдерам определять направление рынка и потенциальные фракталы или точки разворота. Это достигается с помощью набора из трех сглаженных скользящих средних (SMA), которые не только установлены на разные периоды усреднения, но и смещены вперед на разную величину.
Эти три SMA часто называют Челюстями, Зубами и Губами по аналогии с пастью Аллигатора. Эти 3 усредняющих буфера помогают трейдерам визуализировать фазы рынка, которые обычно включают фазы тренда, фазы консолидации и переходные фазы. Когда три индекса находятся в узком диапазоне, это часто называют "дремлющим аллигатором", что соответствует фазе отсутствия направления, описанной Биллом Уильямсом, которая, по его оценкам, занимает 70-85% времени на большинстве рынков. Другая часть (15–30%) отмечена расхождением этих трех буферов, которое характеризуется определенным направлением либо бычьего, либо медвежьего тренда. Эту фазу часто называют пробуждением Аллигатора, и считается, что именно в это время большинству трейдеров следует попытаться заработать деньги.
Ниже приведены формулы трех SMA. Во-первых, у нас есть челюсти:
где:
- SMA 13 (Close) - 13-периодная сглаженная скользящая средняя цены закрытия.
- Линия челюстей смещается вперед на 8 периодов, чтобы сгладить тренд и позволить предвидеть направление рынка.
Далее - зубы:
где:
- SMA 8 (Close) - 8-периодная сглаженная скользящая средняя цены закрытия.
- Линия зубов смещена вперед на 5 периодов.
И наконец, губы:
где:
- SMA 5 (Close) - 5-периодная сглаженная скользящая средняя цены закрытия.
- Линия губ смещена вперед на 3 периода.
Особенности, демонстрируемые Аллигатором, также можно сравнить с циклом питания. Если начать с той части, где все три буфера смешаны или слишком близки друг к другу, то в этой фазе, также известной как фаза сна, говорят, что рынки консолидируются или совершают резкие движения. Вильямс сравнил это с дремлющим Аллигатором, и, как намекалось во введении, эта фаза цикла является преобладающей и занимает большую часть времени для большинства ценных бумаг. А затем последует "пробуждение".
На этом этапе цикла три простые скользящие средние начинают расходиться, как правило, в указанном направлении. Это означает, что они начинают указывать на определенное направление, поскольку они начинают расходиться, однако их порядок, который при восхождении должен быть "губы-зубы-челюсти" и обратный при нисхождении, может пока не обязательно соблюдаться. После пробуждения следует "кормление".
В течение этой фазы цикла линии начинают расходиться более четко, и их порядок "губы-зубы-челюсти" при бычьем тренде или "челюсти-зубы-губы" при медвежьем тренде (порядок сверху) начинает закрепляться. Трейдеры часто рассматривают это как хорошее время, чтобы следовать за трендом, поскольку именно в это время можно заработать большую часть денег. Это третий этап цикла, за которым наступает этап "насыщения".
Три простые скользящие средние начинают сходиться. Это может быть сигналом о том, что тренд завершается или входит в фазу коррекции, и поэтому для некоторых трейдеров может быть хорошей идеей зафиксировать некоторую прибыль при появлении сигнала на этой стадии. Простота конструкции индикатора Аллигатор делает его относительно понятным инструментом для понимания текущей фазы рынка и потенциальных изменений направления путем изучения исключительно сглаженных скользящих средних. Поэтому он полезен, помогая трейдерам лучше выбирать время входа и выхода.
Мы рассмотрим этот индикатор паттерн за паттерном, как это было в предыдущих статьях серии, где мы рассматривали один конкретный распространенный технический индикатор за раз. В предыдущей статье мы рассмотрели 11 паттернов Ишимоку. В этой статье мы рассмотрим восемь паттернов. Анализ индикаторов по принципу "паттерн за паттерном" может раскрыть некоторые аспекты весьма распространенных индикаторов, которые могли быть упущены из виду некоторыми трейдерами, но которые, тем не менее, стоило бы добавить в их арсенал.
Но, возможно, даже более того, они проливают свет на относительный вес и важность всех ключевых паттернов, которые может предложить данный индикатор, оттачивая навыки трейдеров относительно того, на чем следует сосредоточиться, а что игнорировать. Мы склонны завершать эти статьи оптимизацией относительного веса каждого из паттернов, и хотя такие результаты можно перенести в среду реального развертывания, я бы предпочел, чтобы трейдеры вручную устанавливали вес для каждого паттерна на основе собственного опыта, даже если их оптимизированные результаты тестирования могут быть подвергнуты перекрестной проверке.
Прикрепленный код предназначен для сборки советника в Мастере MQL5. Новички могут ознакомиться с основами здесь и здесь. Этот собранный советник может использоваться только с одним паттерном одновременно, как упоминалось в предыдущих вводных статьях об этих индикаторах. Поскольку каждый паттерн индексируется от нуля до общего числа паттернов минус один, что в нашем случае составляет семь, мы можем контролировать, какие паттерны будут использоваться, с помощью входного параметра m_patterns_usage, и он наследуется от родительского класса в наш пользовательский класс сигналов.
Чтобы использовать только один из доступных паттернов, заданный индекс для этого входного параметра будет равен двум в степени индекса паттерна. Таким образом, чтобы использовать только паттерн 0, этому параметру будет присвоено значение 2^0, что равно 1, а для паттерна 5 — 2^5, что равно 32, и так далее. Этот же входной параметр может допускать множественный выбор и использование паттернов, как упоминалось выше, и именно этим мы займемся в заключительной части этой статьи, и поскольку существует множество возможных комбинаций даже для небольшого количества паттернов, в нашем случае 8, читатели могут понять, что когда используется любое целое число, которое не входит в ряд 2^0, 2^1,… 2^n, и оно меньше предела максимального значения входного параметра m_patterns_usage, то это значение подразумевает, что используется более одного паттерна. В нашем случае предел для m_patterns_usage, учитывая, что мы используем только 8 паттернов, составляет 255. Давайте разберемся с паттернами.
Пробуждение Аллигатора (сигнал пересечения)
Это, пожалуй, основной паттерн Аллигатора, и, как и следовало ожидать, он касается самой интересной стадии — кормления, которая здесь называется пробуждением. Его сигнал основан на соприкосновении губ, зубов и челюстей, что указывает на потенциальное изменение тренда.
Бычье пересечение происходит, когда зеленая линия губ пересекает вверх красные линии зубов и синюю линию челюсти. Это часто сигнализирует о начале восходящего тренда. И наоборот, медвежье пересечение происходит, когда зеленая линия губ пересекает вниз красные линии зубов и синюю линию челюсти, указывая на начало нисходящего тренда. Реализуем это в MQL5 следующим образом:
//+------------------------------------------------------------------+ //| Check for Pattern 0. | //+------------------------------------------------------------------+ bool CSignalAlligator::IsPattern_0(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Lips(X() + 1) < Jaws(X() + 1) && Lips(X()) > Jaws(X())) { return(true); } else if(T == POSITION_TYPE_SELL && Lips(X() + 1) > Jaws(X() + 1) && Lips(X()) < Jaws(X())) { return(true); } return(false); }
Это наш паттерн 0. Для выполнения тестовых запусков только с этим паттерном наш входной параметр m_patterns_usage необходимо установить равным 1. Если мы сделаем это и попытаемся оптимизировать некоторые другие советники, чтобы продемонстрировать торговый потенциал этого паттерна, мы получим следующий примерный отчет для некоторых благоприятных результатов:
Тестирование проводилось на USDCHF H1 за 2023 год. Эти результаты получены в основном за счет оптимизации порогового веса паттерна, а также пороговых значений условий открытия и закрытия. Мы торгуем отложенными ордерами, используем уровень тейк-профита, но не стоп-лосса. Конечно, это не идеальные условия, но они позволяют продемонстрировать принцип "нулевого паттерна" в действии.
Питание Аллигатора (следование за трендом)
Паттерн 1 имеет дело с сутью сигнала Аллигатора, когда линии губ, зубов и челюстей выравниваются и расходятся в заданном направлении в соответствии с определенным трендом. Это стадия питания Аллигатора, при этом бычий сигнал возникает, когда зеленые губы находятся над красными зубами, которые находятся над синими челюстями. Хотя эти линии все направлены вверх, они также будут расходиться, учитывая не только разные периоды усреднения, но и разные смещения. Если все эти характеристики соблюдены, это будет указывать на очень сильный бычий тренд.
Медвежий сигнал регистрируется, если зеленые губы находятся под красными зубами, которые, в свою очередь, находятся под синими челюстями, и снова все три простые скользящие средние направлены вниз в расходящемся (непараллельном) направлении. Соблюдение этих условий указывает на сильный медвежий сигнал. Реализуем это в MQL5 следующим образом:
//+------------------------------------------------------------------+ //| Check for Pattern 1. | //+------------------------------------------------------------------+ bool CSignalAlligator::IsPattern_1(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Lips(X()) > Teeth(X()) && Teeth(X()) > Jaws(X())) { return(true); } else if(T == POSITION_TYPE_SELL && Lips(X()) < Teeth(X()) && Teeth(X()) < Jaws(X())) { return(true); } return(false); }
Тестирование на USDCHF H1 за 2023 год дает нам следующие результаты:
Сигналы осциллятора Gator
Помимо индикатора Аллигатор, Билл Уильямс также создал осциллятор Gator, который представляет собой гистограммную проекцию в форме осциллятора разностей между тремя буферами SMA индикатора Аллигатор. Работа встроенного в MQL5 индикатора Gator сопряжена с ошибками из-за несколько необычных принципов его функционирования. Его выходными данными являются два значения double и два значения color. Поскольку определения формул, лежащие в их основе, хорошо известны, мы реализуем их в нашем собственном классе сигналов следующим образом:
// double Upper(int ind) { return(fabs(Jaws(ind) - Teeth(ind))); } color UpperColor(int ind) { return(Upper(ind) >= Upper(ind + 1) ? clrGreen : clrRed); } double Lower(int ind) { m_gator.Refresh(-1); return(-fabs(Teeth(ind) - Lips(ind))); } color LowerColor(int ind) { m_gator.Refresh(-1); return(fabs(Lower(ind)) >= fabs(Lower(ind + 1)) ? clrRed : clrGreen); } //
Паттерн 2 (третий по счету) объединяет сигналы от осциллятора Gator, которые мы будем считывать с наших настраиваемых функций, полученных из индикатора Аллигатор. С учетом вышесказанного, бычье расширение Gator происходит, когда зеленые бары осциллятора Gator расширяются вверх, указывая на усиление тренда. Напротив, медвежье расширение Gator происходит, когда красные столбцы расширяются вниз, указывая на усиление медвежьего тренда. Как следствие, смешанные красные и зеленые бары часто обозначают консолидацию рынка или ослабление тренда. Мы реализуем паттерн 2 в MQL5 следующим образом:
//+------------------------------------------------------------------+ //| Check for Pattern 2. | //+------------------------------------------------------------------+ bool CSignalAlligator::IsPattern_2(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && UpperColor(X()) == clrGreen && LowerColor(X()) != clrRed) { return(true); } else if(T == POSITION_TYPE_SELL && LowerColor(X()) == clrRed && UpperColor(X()) != clrGreen) { return(true); } return(false); }
Тестовые прогоны с благоприятными результатами оптимизации дают нам следующий отчет:
Параметры тестирование аналогичны предыдущим. Эти результаты не прошли перекрестную проверку и лишь демонстрируют торговый потенциал паттерна 2. Мы протестировали советника только с паттерном 2, присвоив входному параметру m_patterns_usage целочисленное значение 4, как описано выше во введении.
Расхождение челюстей и губ, а также зубов и губ
Паттерн 3 построен на разнице в направлении или размере зазора между челюстью и губами или зубами и губами. Потенциально ранний бычий сигнал возникает, если губы (зеленая линия) начинают отходить от зубов (красная линия) и челюстей (синяя линия) после периода резких колебаний. Напротив, медвежья дивергенция возникает, если губы начинают двигаться от челюстей и зубов вниз. Реализуем это в MQL5 следующим образом:
//+------------------------------------------------------------------+ //| Check for Pattern 3. | //+------------------------------------------------------------------+ bool CSignalAlligator::IsPattern_3(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Lips(X()) - fmax(Teeth(X()), Jaws(X())) > Lips(X() + 1) - fmax(Teeth(X() + 1), Jaws(X() + 1))) { return(true); } else if(T == POSITION_TYPE_SELL && fmin(Teeth(X()), Jaws(X())) - Lips(X()) > fmin(Teeth(X() + 1), Jaws(X() + 1)) - Lips(X() + 1)) { return(true); } return(false); }
Результаты тестирования с теми же параметрами для некоторых благоприятных настроек, полученных в ходе короткой оптимизации:
Пробуждение Аллигатора
Паттерн 4 (пятый по счету) должен развернуться после значительного периода консолидации, или сна Аллигатора. Это характеризуется тем, что губы, зубы и челюсти начинают приходить в движение. Бычий сигнал наступает после длительного периода сна Аллигатора, если губы, зубы и челюсти начинают расходиться вверх. Если те же три линии начинают расходиться вниз после длительного периода схождения, это потенциально указывает на медвежий тренд. В MQL5 паттерн реализуется следующим образом:
//+------------------------------------------------------------------+ //| Check for Pattern 4. | //+------------------------------------------------------------------+ bool CSignalAlligator::IsPattern_4(ENUM_POSITION_TYPE T) { if(Range(X() + 3) <= Spread(X() + 3) && Range(X() + 8) <= Spread(X() + 8)) { if(T == POSITION_TYPE_BUY && Lips(X()) > Lips(X() + 3) && Teeth(X()) > Teeth(X() + 3) && Jaws(X()) > Jaws(X() + 3)) { return(true); } else if(T == POSITION_TYPE_SELL && Lips(X()) < Lips(X() + 3) && Teeth(X()) < Teeth(X() + 3) && Jaws(X()) < Jaws(X() + 3)) { return(true); } } return(false); }
Тестирование паттерна с теми же настройками и параметром m_patterns_usage, равным 16, дает следующие результаты:
Подтверждение прорыва
Паттерн 5 основывает свой сигнал на движении цены в том же направлении, что и линии Аллигатора, с продолжением, не имеющим сильной коррекции. Для этого паттерна бычий прорыв происходит, если цена находится выше линий Аллигатора и все три линии направлены вверх. Каких-либо существенных изменений в цене как таковых не наблюдается. Аналогично, медвежий прорыв происходит, если цена находится ниже линий Аллигатора, и все три линии направлены вниз. Реализуем это в MQL5 следующим образом:
//+------------------------------------------------------------------+ //| Check for Pattern 5. | //+------------------------------------------------------------------+ bool CSignalAlligator::IsPattern_5(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X()) > Lips(X()) && Lips(X()) > Lips(X() + 3) && Teeth(X()) > Teeth(X() + 3) && Jaws(X()) > Jaws(X() + 3)) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) < Lips(X()) && Lips(X()) < Lips(X() + 3) && Teeth(X()) < Teeth(X() + 3) && Jaws(X()) < Jaws(X() + 3)) { return(true); } return(false); }
Чтобы торговать с помощью собранного Мастером советника, используя только этот паттерн, нам необходимо присвоить входному параметру m_patterns_usage значение 32. Этот параметр, унаследованный от родительского класса нашего пользовательского класса сигнала, называется Patterns Used Bitmap. Тестовые прогоны с благоприятными входными настройками, полученными при быстрой оптимизации, и с параметрами, аналогичными использованным выше, дают нам следующие результаты:
Сигналы волатильности
Этот бонусный паттерн, хотя и не закодирован и не протестирован формально, как остальные, можно определить, если сопоставить преобладающие тенденции ценового движения с диапазоном(ами) Аллигатора. Основной тезис заключается в том, что общий диапазон Аллигатора, который мы определяем в следующей функции:
double Range(int ind) { return(fmax(fmax(Jaws(ind), Teeth(ind)), Lips(ind)) - fmin(fmin(Jaws(ind), Teeth(ind)), Lips(ind))); }
является показателем волатильности. Таким образом, высокая волатильность наблюдается, когда челюсти, зубы и губы находятся далеко друг от друга, что указывает на то, что преобладающий тренд очень сильна и обоснована. Проверка преобладающего тренда поможет установить, следует ли делать вывод о бычьем сигнале (рост цен) или медвежьем (падение цен). С другой стороны, низкая волатильность не обязательно будет означать какой-либо сигнал, однако ее можно использовать для определения того, когда следует выходить из открытых позиций. Однако подразумевается, что, когда три буфера SMA находятся близко друг к другу, это часто сигнализирует об активности в ограниченном диапазоне и также обычно используется в качестве меры предосторожности при ожидании входа на рынки. Однако для открытых позиций это может представлять возможность выхода, и, более того, если тренд останется неизменным, учитывая недавнее падение волатильности, это может подразумевать открытие обратных позиций. В связи с этим восходящий ценовой тренд при снижении волатильности может предвещать медвежий сигнал, точно так же, как нисходящий ценовой тренд в аналогичных условиях может указывать на "зеленый свет" для быков. Этот паттерн, возможно, будет менее определенным, чем другие, и поэтому читателям, желающим закодировать и реализовать его, возможно, следует объединить его с другими сигналами.
Губы Аллигатора (сигнал коррекции)
Паттерн 6 (седьмой по счету) подразумевает движение губ в сторону зубов или челюстей без полного пересечения. Торговая стратегия в данном случае такова: бычья коррекция происходит, если линия губ движется к зубам и челюстям, но затем отскакивает вверх, не пересекая их, что указывает на потенциальное продолжение бычьего тренда. Медвежья коррекция произойдет, если губы сместятся к зубам и челюстям, отскочат, не пересекаясь, и таким образом укажут на потенциальное продолжение нисходящего тренда. Реализуем это в MQL5 следующим образом:
//+------------------------------------------------------------------+ //| Check for Pattern 6. | //+------------------------------------------------------------------+ bool CSignalAlligator::IsPattern_6(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Lips(X()) > Lips(X()+1) && Lips(X()+1) < Lips(X()+2) && Lips(X()) > Teeth(X()) && Lips(X()+1) > Teeth(X()+1) && Teeth(X()) > Jaws(X())) { return(true); } else if(T == POSITION_TYPE_SELL && Lips(X()) < Lips(X()+1) && Lips(X()+1) > Lips(X()+2) && Lips(X()) < Teeth(X()) && Lips(X()+1) < Teeth(X()+1) && Teeth(X()) < Jaws(X())) { return(true); } return(false); }
Для использования исключительно паттерна 6 входной параметр Patterns-Used-Bitmap необходимо установить на 64, что соответствует 2 в степени 6 (индекс паттерна). При самых благоприятных входных настройках мы получаем следующие результаты:
Как уже упоминалось, перекрестная проверка не проводилась. Результаты показаны здесь только для демонстрации торгового потенциала/возможностей паттерна 6.
Обнаружение ложных прорывов
Последний паттерн возник в результате наблюдения за челюстями, зубами и губами Аллигатора в попытках понять, остаются ли они на одной линии во время прорыва рынка. Целью здесь является обнаружение ложных прорывов. Таким образом, ложный бычий прорыва регистрируется, если при бычьем прорыве линии Аллигатора не расходятся значительно, то есть рынок может развернуться и снова упасть. И наоборот, ложный медвежий прорыв регистрируется, когда линии Аллигатора остаются близко друг к другу при зеркальном прорыве цены вниз, что обычно означает, что трейдерам следует воздержаться от открытия короткой позиции. Эти ложные сигналы в некотором смысле говорят о противоположной тенденции, и с этой целью мы реализуем этот паттерн в MQL5 следующим образом:
//+------------------------------------------------------------------+ //| Check for Pattern 7. | //+------------------------------------------------------------------+ bool CSignalAlligator::IsPattern_7(ENUM_POSITION_TYPE T) { if(Range(X()) <= Spread(X())) { if(T == POSITION_TYPE_BUY && Close(X()) < fmin(fmin(Jaws(X()), Teeth(X())), Lips(X())) && Close(X()+1) > fmin(fmin(Jaws(X()+1), Teeth(X()+1)), Lips(X()+1))) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) > fmax(fmax(Jaws(X()), Teeth(X())), Lips(X())) && Close(X()+1) < fmax(fmax(Jaws(X()+1), Teeth(X()+1)), Lips(X()+1))) { return(true); } } return(false); }
При использование исключительно этого паттерна требует установку параметра количества паттернов в значение 128. При тестировании на USDCHF H1 за 2023 год мы получаем следующие результаты:
Объединяем все паттерны
Сочетание и потенциальное использование всех паттернов в советнике вызывает споры о том, подходит ли это или трейдерам следует придерживаться одного паттерна. Я предостерегаю от использования оптимизированных весов для различных паттернов на реальных счетах, поскольку считаю, что лучше всего, если вес устанавливается трейдером как константа на основе его собственного опыта работы с соответствующим индикатором. Однако здесь следует рассмотреть и другие моменты.
Первым идет аргумент о взаимосвязи контекстной осведомленности и простоты. Если вы еще не очень хорошо знакомы с Аллигатором, отслеживание нескольких паттернов позволяет более детально понять полный цикл рынка, связанный с ним. В данном случае это консолидация, начало тренда, продолжение тренда и завершение тренда. Это может дать представление о тонких сдвигах в фазах при переходе, не говоря уже о вероятном профиле риска и вознаграждения на каждой фазе.
Наблюдение и сбор этой информации, вероятно, были бы идеальными в условиях ручной торговли, которая в этой серии статей не рассматривается. Аргумент в пользу простоты основывается на том факте, что сосредоточение внимания только на одном паттерне, например, на фазе "питания" или тренда, помогает упростить принятие решений. И при ручной торговле это может быть решающим аргументом, однако, поскольку мы намерены использовать советника, это не является большой проблемой, особенно если учесть, что используемые вычислительные ресурсы и ресурсы памяти ничтожны.
Итак, подводя итог, можно сказать, что подход с применением нескольких паттернов годится для исследования и обучения, а более сфокусированный подход - в том случае, когда трейдеры разбираются в том, что работает, как и почему. Несмотря на эти аргументы и предостережения, мы проводим оптимизацию для различных паттернов, чтобы выяснить, какой относительный вес будет работать лучше всего при их объединении. При этом, поскольку мы хотим использовать несколько паттернов, входное значение Pattern's Used Bitmap оптимизируется в диапазоне от 0 до 255. Результаты некоторых благоприятных входных параметров этой оптимизации:
Настройки те же - USDCHF H1 за 2023 год.
Заключение
Мы разобрали по паттернам очередной индикатор - Аллигатор Билла Уильямса в классе пользовательских сигналов с целью получить представление об относительной важности каждого паттерна, а также ответить на вопрос, является ли совместное использование всех его паттернов более плодотворным, чем индивидуальное использование каждого паттерна по отдельности. Хотя в данном случае наши отчеты о тестировании указывают на то, что "меньше значит больше", необходимо провести обширное тестирование в течение более длительных периодов, выходящих за рамки нашего окна испытаний - 2023 года, прежде чем можно будет сделать окончательные выводы.
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/16329





- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Привет бэктестов, приведенных в статье?
Когда я запускаю советник, он торгует без остановки, совершая 3943 сделки в год, и, похоже, полностью игнорирует сигнал.
Особенно меня интересует паттерн 2. Понятно, что битовая маска для него будет равна 4, но как быть с другими значениями?
Когда я запускаю советник, он торгует без остановки, совершая 3943 сделки в год, и, похоже, полностью игнорирует сигнал.
Особенно меня интересует паттерн 2. Понятно, что битовая маска для него будет равна 4, но как быть с другими значениями?
Все больше людей спрашивают меня о настройках входа, но дело в том, что я никогда их не держу. Что я всегда стараюсь сообщить в статье, так это название торгуемой пары, используемый таймфрейм и год тестирования (обычно я тестирую только один год).
Входные настройки всегда получены в результате короткой оптимизации, не проходят перекрестную проверку и поэтому, строго говоря, не заслуживают распространения.
Цель выкладывания тестовых отчетов - просто продемонстрировать пригодность к торговле и использование сигнала, не более того. Работа по поиску перекрестно проверенных настроек всегда остается на усмотрение читателя.