Обсуждение статьи "Самооптимизирующийся советник на языках MQL5 и Python (Часть III): Реализация алгоритма Boom 1000"

 

Опубликована статья Самооптимизирующийся советник на языках MQL5 и Python (Часть III): Реализация алгоритма Boom 1000:

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

Мы проанализируем все синтетические рынки Deriv по отдельности, начав с самого известного — Boom 1000. Boom 1000 печально известен своим нестабильным и непредсказуемым поведением. Рынок характеризуется медленными, короткими и одинаковыми по размеру медвежьими свечами, за которыми случайным образом следуют бычьи свечи размером с небоскреб. Смягчить последствия бычьих свечей особенно сложно, поскольку тики, связанные со свечой, обычно не отправляются на клиентский терминал, а это означает, что все стоп-лоссы каждый раз срабатывают с гарантированным проскальзыванием.

Поэтому большинство успешных трейдеров используют стратегии, в основе которых лежит только покупка при торговле Boom 1000. Boom 1000 может падать в течение 20 минут на графике M1 и отыграть всё это падение за одну свечу! Таким образом, учитывая чрезмерно выраженный бычий характер рынка, успешные трейдеры придают больший вес покупке на Boom 1000.

Автор: Gamuchirai Zororo Ndawana

 
MetaQuotes:
Мы проанализируем все синтетические рынки Deriv по отдельности, начав с самого известного — Boom 1000.

Большое спасибо за статью! Давно присматриваюсь к этим индексам, но не знал, с какого боку к ним подступиться.

Пожалуйста, продолжайте!

 
#Instatiate the model
model = MLPClassifier(hidden_layer_sizes=(30,10),max_iter=200)

#Cross validate the model
for i,(train,test) in enumerate(tscv.split(train_X)):
    model.fit(
        train_X.loc[train[0]:train[-1],:],
        ohlc_train_y.loc[train[0]:train[-1]]
    )
    validation_accuracy.iloc[i,0] = accuracy_score(
        ohlc_train_y.loc[test[0]:test[-1]],
        model.predict(train_X.loc[test[0]:test[-1],:])
    )

---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[25], line 5
3 #Cross validate the model
4 for i,(train,test) in enumerate(tscv.split(train_X)):
----> 5 model.fit(train_X.loc[train[0]:train[-1],:],ohlc_train_y.loc[train[0]:train[-1]])
6 validation_accuracy.iloc[i,0] = accuracy_score(ohlc_train_y.loc[test[0]:test[-1]],model.predict(train_X.loc[test[0]:test[-1],:]))

File c:\Python\ocrujenie\.ordi\Lib\site-packages\sklearn\base.py:1389, in _fit_context.<locals>.decorator.<locals>.wrapper(estimator, *args, **kwargs)
1382 estimator._validate_params()
1384 with config_context(
1385 skip_parameter_validation=(
1386 prefer_skip_nested_validation or global_skip_validation
1387 )
1388 ):
-> 1389 return fit_method(estimator, *args, **kwargs)

File c:\Python\ocrujenie\.ordi\Lib\site-packages\sklearn\neural_network\_multilayer_perceptron.py:754, in BaseMultilayerPerceptron.fit(self, X, y)
736 @_fit_context(prefer_skip_nested_validation=True)
737 def fit(self, X, y):
738 """Fit the model to data matrix X and target(s) y.
739 740 Parameters (...) 752 Returns a trained MLP model. 753 """
...

476 "Found input variables with inconsistent numbers of samples: %r"
477 % [int(l) for l in lengths]
478 )
ValueError: Found input variables with inconsistent numbers of samples: [4139, 4133]

Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings...

я испробовал несколько инструментов и на каждом ваша модель выдает ошибку из-за несоответствия размеров входных данных (X) и целевых переменных (y).

 
Janis Ozols # :

Большое спасибо за статью! Я давно анализировал эти индексы, но не был уверен, с какой стороны к ним подойти.

Пожалуйста, продолжайте!

Не за что, Янис.

Я обязательно продолжу. Многое нужно осветить, но я найду время.

 
Aliaksandr Kazunka # :

Я попробовал несколько инструментов, и в каждом из них ваша модель выдает ошибку из-за несоответствия размеров входных данных (X) и целевых переменных (y).

Здравствуйте, Александр, вы можете использовать код в качестве шаблона, а затем внести необходимые изменения на своей стороне. Я бы также рекомендовал вам попробовать разные индикаторы, попробовать разные вариации общей идеи, изложенной в статье. Это поможет нам быстрее понять глобальную истину.

 
Aliaksandr Kazunka #:

Я попробовал несколько инструментов, и каждый из них приводил к ошибке модели из-за несоответствия размеров входных данных (X) и целевой переменной (y).

# Сохраняйте индексы согласованными, иначе при наличии отфильтрованных данных индексы будут перестроены.
X = pd.DataFrame(RobustScaler().fit_transform(boom_1000.loc[:, predictors]), columns=predictors, index=boom_1000.index)