Обсуждение статьи "Метамодели в машинном обучении и трейдинге: Оригинальный тайминг торговых приказов" - страница 11

 
Maxim Dmitrievsky #:
Там наверное имелось в виду, что признаки и метки строятся через функции, поэтому автоматически.

Вероятно.

Maxim Dmitrievsky #:
При применении на новых данных уже обученная модель же используется, не надо ничего удалять.

А при инициализации начала обучения зачем удалять? Я не цепляюсь к словам, просто не пойму - сделали один раз разметку в начале, а потом опять делаем разметку сразу же.... не пойму этот момент.

Maxim Dmitrievsky #:
Если хотите одинаково - сделайте min и max продолжительность сделки одинаковыми, min=max
Если бы мы знали как правильно, но мы не знаем как правильно…

Можно подставить любую функцию авторазметки, в этом гибкость подхода.

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

 
Aleksey Vyazmikin #:

Вероятно.

А при инициализации начала обучения зачем удалять? Я не цепляюсь к словам, просто не пойму - сделали один раз разметку в начале, а потом опять делаем разметку сразу же.... не пойму этот момент.

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

Можно пропустить тот момент и использовать свою выборку, да. Экспериментировал с разными вариантами. Переразметка делалась для уточнения меток на торговать/не торговать вроде бы.
 
З.Ы. если есть интерес, могу выкатить другие варианты более «понятных» и простых реализаций. Потому что эта несколько сложная для понимания. Здесь много допущений, можно запутаться.

В том числе варианты с конвертацией в ONNX, раз пошел такой движ.. Потому что потом можно заменить всю эту конструкцию на одну нейросеть с интересной кастомной архитектурой и легко перенести в терминал.
 
Maxim Dmitrievsky #:
З.Ы. если есть интерес, могу выкатить другие варианты более «понятных» и простых реализаций. Потому что эта несколько сложная для понимания. Здесь много допущений, можно запутаться.

В том числе варианты с конвертацией в ONNX, раз пошел такой движ.. Потому что потом можно заменить всю эту конструкцию на одну нейросеть с интересной кастомной архитектурой и легко перенести в терминал.
Максим, опубликуйте пожалуйста, как будет время, вариант с конвертацией в ONNX. У меня все такие модели сливные выходят, причем даже на трайне сливают, не пойму в чем дело(
 
Maxim Dmitrievsky #:
З.Ы. если есть интерес, могу выкатить другие варианты более «понятных» и простых реализаций. Потому что эта несколько сложная для понимания. Здесь много допущений, можно запутаться.

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

Мне интересны любые примеры кода с мало мальским описанием, потому что пока очень плохо понимаю код питона.

 
Aleksey Vyazmikin #:

Мне интересны любые примеры кода с мало мальским описанием, потому что пока очень плохо понимаю код питона.

Питон очень простой. Буквально пару книг «Питон для сложных задач» - там рассматривается использование базовых пакетов типа numpy, pandas, sklearn. И Марк Лутц - Изучаем Питон, 1-й том. 2-й про классы, не сильно надо.
 
Maxim Dmitrievsky #:
Питон очень простой. Буквально пару книг «Питон для сложных задач» - там рассматривается использование базовых пакетов типа numpy, pandas, sklearn. И Марк Лутц - Изучаем Питон, 1-й том. 2-й про классы, не сильно надо.

Спасибо за рекомендацию. Может питон и простой, но память у меня плохая стала - поэтому сложно учиться новому.

Такой вопрос, столбец "close" после создания выборки с двумя таргетами участвует где либо ещё, или его можно заполнить нулями?

 

В общем, у меня данные такого формата в файле csv

  • "Столбцы с предикторами"+ "Столбец с календарной датой в таком формате 2010.01.04 07:24:00"+
  • "Столбец Target_P - содержит информацию о направлении сделки"+
  • "Столбец  Target_100 - содержит целевую"+
  • "Столбец   Target_100_Buy - содержит финансовый результат при покупке"+
  • "Столбец    Target_100_Sell - содержит финансовый результат при продаже"+

Соответственно, привожу их в вид, как описано в статье через такой код

# Загрузите данные из файлов
Load_train_data = pd.read_csv('E:\\FX\\MT5_CB\\MQL5\\Files\\Catboost_Tester_M02_104_SMO\\Setup\\train.csv',sep=';')

# Сохранили предикторы
train_data = Load_train_data.loc[:, :'iVolumes_B0_S15_D1']

# Сохранили значения целевой
train_labels = Load_train_data['Target_100']

# Преобразование столбца 'Time' в формат datetime
Load_train_data['Time'] = pd.to_datetime(Load_train_data['Time'], format='%Y.%m.%d %H:%M:%S')

# Преобразование обратно в строку с нужным форматом
#Load_train_data['Time'] = Load_train_data['Time'].dt.strftime('%Y-%m-%d %H:%M:%S')

# Сохранили значение столбца
train_taime  = Load_train_data['Time']

# Вывод результата
print(train_taime)

# Создали новый DataFrame объединением столбцов
combined_data = pd.concat([train_taime, train_data, train_labels], axis=1)


# Добавили новый столбец "close" после "train_taime" со значениями "1.1"
combined_data.insert(combined_data.columns.get_loc('Time') + 1, 'close', 1.1)

# Переименовали столбец "Target_100" в "labels"
combined_data.rename(columns={'Target_100': 'labels'}, inplace=True)

# Добавили столбец с данными из train_labels
combined_data['meta_labels'] = train_labels

pr = combined_data

# Вывод результата
print(combined_data)

Принтует так

0        2010-01-04 07:24:00
1        2010-01-04 21:02:00
2        2010-01-04 21:14:00
3        2010-01-04 21:56:00
4        2010-01-04 23:08:00
                ...         
28193    2018-03-12 01:18:00
28194    2018-03-12 02:52:00
28195    2018-03-12 03:08:00
28196    2018-03-12 03:38:00
28197    2018-03-12 08:32:00
Name: Time, Length: 28198, dtype: object
                      Time  close  ...  labels  meta_labels
0      2010-01-04 07:24:00    1.1  ...       0            0
1      2010-01-04 21:02:00    1.1  ...       0            0
2      2010-01-04 21:14:00    1.1  ...       0            0
3      2010-01-04 21:56:00    1.1  ...       0            0
4      2010-01-04 23:08:00    1.1  ...       0            0
...                    ...    ...  ...     ...          ...
28193  2018-03-12 01:18:00    1.1  ...       0            0
28194  2018-03-12 02:52:00    1.1  ...       0            0
28195  2018-03-12 03:08:00    1.1  ...       0            0
28196  2018-03-12 03:38:00    1.1  ...       1            1
28197  2018-03-12 08:32:00    1.1  ...       0            0

[28198 rows x 2412 columns]

Далее, комментирую функции в Вашем годе

# make dataset
#pr = get_prices()
#pr = labelling_relabeling(pr, relabeling=False)
#a, b = tester(pr, MARKUP, use_meta=False, plot=False)
#pr['meta_labels'] = b
#pr = pr.dropna()
#pr = labelling_relabeling(pr, relabeling=True)

Получаю ошибку

Traceback (most recent call last):
  File "F:/FX/Python/meta_modeling_Viborka.py", line 386, in <module>
    res.append(brute_force(pr[pr.columns[1:]], bad_samples_fraction=0.5))
  File "F:/FX/Python/meta_modeling_Viborka.py", line 128, in brute_force
    X = X[X.index >= START_DATE]
  File "C:\Program Files\Python38\lib\site-packages\pandas\core\ops\common.py", line 81, in new_method
    return method(self, other)
  File "C:\Program Files\Python38\lib\site-packages\pandas\core\arraylike.py", line 60, in __ge__
    return self._cmp_method(other, operator.ge)
  File "C:\Program Files\Python38\lib\site-packages\pandas\core\indexes\range.py", line 964, in _cmp_method
    return super()._cmp_method(other, op)
  File "C:\Program Files\Python38\lib\site-packages\pandas\core\indexes\base.py", line 6783, in _cmp_method
    result = ops.comparison_op(self._values, other, op)
  File "C:\Program Files\Python38\lib\site-packages\pandas\core\ops\array_ops.py", line 296, in comparison_op
    res_values = _na_arithmetic_op(lvalues, rvalues, op, is_cmp=True)
  File "C:\Program Files\Python38\lib\site-packages\pandas\core\ops\array_ops.py", line 171, in _na_arithmetic_op
    result = func(left, right)
  File "C:\Program Files\Python38\lib\site-packages\pandas\core\computation\expressions.py", line 239, in evaluate
    return _evaluate(op, op_str, a, b)  # type: ignore[misc]
  File "C:\Program Files\Python38\lib\site-packages\pandas\core\computation\expressions.py", line 70, in _evaluate_standard
    return op(a, b)
TypeError: '>=' not supported between instances of 'int' and 'datetime.datetime'
>>> 

Хочется потестировать, но не выходит :(

 
Aleksey Vyazmikin #:
TypeError: '>=' not supported between instances of 'int' and 'datetime.datetime'

Первое, что заметил - у вас индексы датафрейма не те, должны быть дэйттайм, то есть колонка time должна быть индексной

 
Maxim Dmitrievsky #:

Первое, что заметил - у вас индексы датафрейма не те, должны быть дэйттайм, то есть колонка time должна быть индексной

А как значение идекса (0,1,2) может сравниваться с календарной датой?

Причина обращения: