Обсуждение статьи "Вспоминаем старую трендовую стратегию: два стохастических осциллятора, MA и Фибоначчи"

 

Опубликована статья Вспоминаем старую трендовую стратегию: два стохастических осциллятора, MA и Фибоначчи:

Старые торговые стратегии. В этой статье представлена стратегия отслеживания тренда. Стратегия исключительно техническая и использует несколько индикаторов и инструментов для подачи сигналов и определения целевых уровней. Компоненты стратегии включают в себя: 14-периодный стохастический осциллятор, пятипериодный стохастический осциллятор, скользящую среднюю с периодом 200 и проекцию Фибоначчи (для установки целевых уровней).

Правила стратегии следующие:

  • Сигнал на покупку генерируется всякий раз, когда оба стохастических осциллятора одновременно достигают уровня перепроданности, отскакивают, а затем возвращаются к нему (примерно в одно и то же время). Всё это должно произойти, пока рынок находится выше 200-периодной скользящей средней. Первый целевой уровень устанавливается с помощью проекции Фибоначчи, применяемой от минимума первого раза, когда стохастические осцилляторы достигли своего дна, и минимума второго раза, когда они достигли своего дна. Таким образом, первая цель — это проекция 61,8%, а вторая цель — проекция 100,0%.
  • Сигнал на продажу генерируется всякий раз, когда оба стохастических осциллятора одновременно достигают уровня перекупленности, отскакивают, а затем возвращаются к нему (примерно в одно и то же время). Всё это должно произойти, пока рынок находится ниже 200-периодной скользящей средней. Первая цель устанавливается с помощью инструмента проекции Фибоначчи, применяемого от максимума первого раза, когда стохастические осцилляторы достигли своей вершины, и максимума второго раза, когда они достигли своей вершины. Таким образом, первая цель — это проекция 61,8%, а вторая цель — проекция 100,0%.

(Я внес изменения в стратегию, чтобы иметь стоп-уровни на каждом уровне Фибоначчи)

На следующем рисунке показан медвежий сигнал:

bearish


В конечном итоге результаты могут варьироваться от рынка к рынку, и текущие результаты могут быть нестабильными. Стратегии работают в определенные периоды, но могут быть неэффективными в другие.

Автор: Javier Santiago Gaston De Iriarte Cabrera

 

Это, вероятно, статья, которую я читал, с худшим кодом, который я когда-либо видел, без обид, просто факты. Никогда не используйте это на реальном счете.

   int Highest = iHighest(Symbol(),my_timeframe,MODE_REAL_VOLUME,WHOLE_ARRAY,1);

Что, по-вашему, это делает?

На большинстве символов, кроме фьючерсов и акций, нет данных о реальном объеме. На Forex это всегда будет возвращать 1. Наибольший объем всегда = 1.

Затем вы используете этот индекс (Highest, полученный на реальном объеме), чтобы получить значение High:

   double highestValue = iHigh(Symbol(),my_timeframe,Highest);

Вы смешиваете вещи, которые не должны смешиваться (если только вы не знаете, что делаете). Как "высокое" значение цены связано с реальным объемом?

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

Я не буду продолжать. Вы сказали: :

цель этой статьи - помочь людям понять, как программировать на MQL5.

Если кто-то хочет понять, как программировать на MQL5, я бы рекомендовал избегать этой статьи любой ценой.

 
Alain Verleyen #:

Это, вероятно, статья с худшим кодом, который я когда-либо видел, без обид, просто факты. Никогда не используйте это на реальном счете.

Что, по-вашему, это делает?

На большинстве символов, кроме фьючерсов и акций, нет данных о реальном объеме. На Forex это всегда будет возвращать 1. Наибольшее значение всегда = 1.

Тогда вы используете этот индекс (Highest, полученный на реальном объеме), чтобы получить значение High:

Вы смешиваете вещи, которые не должны смешиваться (если вы не знаете, что делаете). Как "Высокое" значение цены связано с реальным объемом?

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

Я не буду продолжать. Вы сказали :

цель этой статьи - помочь людям понять, как программировать на MQL5

Если кто-то хочет понять, как программировать на MQL5, я бы рекомендовал избегать этой статьи любой ценой.


Я объясняю стратегию, и это моя цель. Вы можете написать свою собственную программу. Это просто пример. Я нахожусь в ситуации, когда нужно показать результат, поэтому выкладываю простой советник. Настоящая цель - показать стратегию.

Да, вы правы, это не полезно для изучения программирования, это просто демонстрация стратегии.

 

Согласен с Аленой, худшего кодера я тоже не видел. Вот исправление, если это может помочь: (замените первую часть функции OnTick())

MqlTick tick;
SymbolInfoTick(_Symbol,tick);

int highest_index = iHighest(NULL,0,MODE_CLOSE,100,0);
int lowest_index = iLowest(NULL,0,MODE_CLOSE,100,0); 

if(highest_index == -1 || lowest_index == -1) { 
   PrintFormat("iHighest()/iLowest() call error. Error code=%d",GetLastError());
   return;
 }

double previousHigh = iHigh(NULL, PERIOD_CURRENT, highest_index);
double previousLow = iLow(NULL, PERIOD_CURRENT, lowest_index);
double currentHigh = iHigh(NULL, PERIOD_CURRENT, 1);
double currentLow = iLow(NULL, PERIOD_CURRENT, 1);
 

Объяснение понятно, но в коде много лишних деклараций и строк.

Я не вижу, где сравнивается состояние МА и сходится состояние Стохастика с показанием тренда МА.

Пожалуйста, укажите на это, возможно, код можно изменить и упростить.

Я запустил советник, к сожалению, он не совершает сделок.