Обсуждение статьи "Переосмысливаем классические стратегии (Часть XI): Пересечение скользящих средних (II)"

 

Опубликована статья Переосмысливаем классические стратегии (Часть XI): Пересечение скользящих средних (II):

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

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

Чтобы быть эмпирическими в наших сравнениях, сначала построим торговую стратегию на MQL5 для валютной пары EURGBP, используя только следующие индикаторы:

  1. 2 Экспоненциальные скользящие средние, применяемые к цене закрытия. Одна с периодом 20, а другая установлена на 60.
  2. Стохастический осциллятор с примененными настройками по умолчанию 5,3,3 установлен в режим экспоненциальной скользящей средней и настроен на выполнение своих расчетов в режиме CLOSE_CLOSE
  3. Индикатор Средний истинный диапазон (Average True Range) с периодом в 14 минут для установки уровней тейк-профита и стоп-лосса.

Наша стратегия будет направлена на торговлю на дневном таймфрейме. Мы проведем бэк-тестирование этой стратегии с первого января 2022 года по начало июня 2024 года. Изначально наша стратегия будет основываться на классических правилах трейдинга. Таким образом, сигналы на покупку будут подаваться всякий раз, когда быстрая скользящая средняя пересекает медленную скользящую среднюю, а стохастические показания превышают 80. А обратное справедливо для наших сигналов на продажу. Мы зафиксируем сигнал на продажу, когда быстрая скользящая средняя окажется ниже медленной, а стохастический осциллятор - ниже 20.


Автор: Gamuchirai Zororo Ndawana

 

Спасибо Гаму. Мне нравятся ваши публикации, и я стараюсь учиться, воспроизводя ваши шаги.

У меня есть некоторые проблемы, надеюсь, это может помочь другим.

1) мои тесты с вашим EURGBP_Stochastic daily с использованием предоставленного скрипта дают только 2 ордера и впоследствии Sharpe ration 0.02. Я полагаю, что у меня те же настройки, что и у вас, но на 2 брокерах он выдает только 2 ордера.

2) в качестве предупреждения для других, вам может понадобиться изменить настройки символа в соответствии с вашим брокером (например, EURGBP на EURGBP.i), если это необходимо

3) далее, когда я пытаюсь экспортировать данные, я получаю массив вне диапазона для ATR, я полагаю, это потому, что я не получаю 100000 записей в мой массив (если я изменю его на 677), я могу соответственно получить файл с 677 строками. для меня по умолчанию максимальное количество баров на графике составляет 50000, если я изменю это на 100000, мой размер массива составляет только 677, но, возможно, у меня плохая настройка. Может быть, вы могли бы также включить скрипт извлечения данных в вашу загрузку.

4)Я скопировал код из вашей статьи, чтобы попробовать в Python Я получаю ошибку look_ahead not defined ----> 3 data.loc[data["Close"].shift(-look_ahead) > data["Close"], "Binary Target"] = 1

4 data = data.iloc[:-look_ahead,:]


NameError: имя 'look_ahead' не определено

5) когда я загрузил ваш блокнот Juypiter, я обнаружил, что в нем нужно установить опережающий прогноз #Let us forecast 20 steps into future

look_ahead = 20 , После этого я использовал только ваш включенный файл, но я застрял на следующей ошибке, возможно, связанной с тем, что у меня всего 677 строк.

Я запускаю #Масштабирование данных перед тем, как мы начнем их визуализировать

from sklearn.preprocessing import RobustScaler

scaler = RobustScaler()

data[['Open', 'High', 'Low', 'Close', 'MA Fast', 'MA Slow','Stoch Main']] = scaler.fit_transform(data[['Open', 'High', 'Low', 'Close', 'MA Fast', 'MA Slow','Stoch Main']])

что дает ошибку, которую я не понимаю, как решить

ipython-input-6-b2a044d397d0>:4: SettingWithCopyWarning: Значение пытается быть установлено на копии фрагмента из DataFrame. Попробуйте вместо этого использовать .loc[row_indexer,col_indexer] = value См. предостережения в документации: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy data[['Open', 'High', 'Low', 'Close', 'MA Fast', 'MA Slow','Stoch Main']] = scaler.fit_transform(data[['Open', 'High', 'Low', 'Close', 'MA Fast', 'MA Slow','Stoch Main']])

 
linfo2 #:

Спасибо Гаму. Я наслаждаюсь вашими публикациями и стараюсь учиться, воспроизводя ваши шаги.

У меня возникли некоторые проблемы, надеюсь, это поможет другим.

1) мои тесты с вашим EURGBP_Stochastic daily с использованием предоставленного скрипта дают только 2 ордера и впоследствии Sharpe ration 0.02. Я считаю, что у меня те же настройки, что и у вас, но на 2 брокерах он выдает только 2 ордера.

2) в качестве предупреждения для других, вам может потребоваться изменить настройки символа в соответствии с вашим брокером (например, EURGBP на EURGBP.i), если это необходимо.

3) далее, когда я пытаюсь экспортировать данные, я получаю массив вне диапазона для ATR, я полагаю, это потому, что я не получаю 100000 записей в мой массив (если я изменю его на 677), я могу соответственно получить файл с 677 строками. для меня по умолчанию максимальное количество баров на графике составляет 50000, если я изменю это на 100000, мой размер массива составляет только 677, но, возможно, у меня плохая настройка. Может быть, вы могли бы также включить скрипт извлечения данных в вашу загрузку.

4)Я скопировал код из вашей статьи, чтобы попробовать в Python Я получаю ошибку look_ahead not defined ----> 3 data.loc[data["Close"].shift(-look_ahead) > data["Close"], "Binary Target"] = 1

4 data = data.iloc[:-look_ahead,:]


NameError: имя 'look_ahead' не определено

5) когда я загрузил ваш блокнот Juypiter, я обнаружил, что в нем нужно установить параметр look ahead #Let us forecast 20 steps into future

look_ahead = 20 , После этого я использовал только ваш включенный файл, но я застрял на следующей ошибке, возможно, связанной с тем, что у меня всего 677 строк.

Я запускаю #Масштабирование данных, прежде чем мы начнем их визуализировать

from sklearn.preprocessing import RobustScaler

scaler = RobustScaler()

data[['Open', 'High', 'Low', 'Close', 'MA Fast', 'MA Slow','Stoch Main']] = scaler.fit_transform(data[['Open', 'High', 'Low', 'Close', 'MA Fast', 'MA Slow','Stoch Main']])

что выдает ошибку, которую я не понимаю, как решить

ipython-input-6-b2a044d397d0>:4: SettingWithCopyWarning: Значение пытается быть установлено на копии фрагмента из DataFrame. Попробуйте вместо этого использовать .loc[row_indexer,col_indexer] = value См. предостережения в документации: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy data[['Open', 'High', 'Low', 'Close', 'MA Fast', 'MA Slow','Stoch Main']] = scaler.fit_transform(data[['Open', 'High', 'Low', 'Close', 'MA Fast', 'MA Slow','Stoch Main']])

Как дела, Нил, надеюсь, у вас все хорошо.

Позвольте мне посмотреть, чем я могу помочь:

1) Эта ошибка довольно странная, вот как я бы к ней подошел:

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

2) Это постоянная проблема, и ее трудно контролировать, поскольку у каждого брокера есть свои собственные соглашения об именовании, но решение, которое вы предоставили, является правильным.

3) Это может означать, что у вашего брокера есть только 677 баров ежедневных данных, которые вы можете использовать, исключая расчеты периода. Это нормально, я тоже с этим сталкиваюсь. Иногда я пытаюсь получить только 1 год ежедневных данных, но получаю только 200 с чем-то баров.

4) Попробуйте определить вид вперед прямо над оператором, вызывающим проблемы, а затем обновите его по всему коду, если это необходимо.

5) Это может быть связано с тем, что мы используем разные версии библиотек, Python и т. д. Я думаю, что корректировка должна быть сделана до задания. Итак, строка:

data[['Open', 'High', 'Low', 'Close', 'MA Fast', 'MA Slow','Stoch Main']] =.

Может потребоваться корректировка:

data.loc[:,['Open','High',...,'Stoch Main']] =
 
Gamuchirai Zororo Ndawana #:
Как дела, Нил, надеюсь, у тебя все хорошо.

Позвольте узнать, чем я могу помочь:

1) Эта ошибка довольно странная, вот как я бы к ней подошел:

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

2) Это постоянная проблема, которую трудно контролировать, потому что у каждого брокера свои правила именования, но решение, которое вы предложили, является верным.

3) Это может означать, что у вашего брокера есть только 677 баров данных Daily, которые вы можете использовать, не считая расчетов периода. Это нормально, я тоже с этим сталкиваюсь. Иногда я пытаюсь получить только 1 год ежедневных данных, но получаю только 200 с чем-то баров.

4) Попробуйте определить вид вперед прямо над оператором, вызывающим проблемы, а затем обновите его по всему коду, если это необходимо.

5) Это может быть связано с тем, что мы используем разные версии библиотек, Python и т. д. Я думаю, что корректировка должна быть сделана до задания. Итак, строка:

data[['Open', 'High', 'Low', 'Close', 'MA Fast', 'MA Slow','Stoch Main']] =

Может потребоваться корректировка:

data.loc[:,['Open','High',...,'Stoch Main']] =

Спасибо, Gamu, я ценю это, да, я знаю, что есть много движущихся частей, я посмотрю, решит ли это мои проблемы.

 
linfo2 #:

Спасибо, Gamu Ценю это, да я знаю, что есть много движущихся частей, я посмотрю, если это решит мои проблемы

Мужчина, верно? Так много, и это только простая реализация