Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 3690

[Удален]
fxsaber #:

Первое слагаемое - настоящий XAUUSD_bid.

Второе слагаемое - синтетический XAUUSD_bid.


Синтетический bid должен быть менее выгодным, чем настоящий. Поэтому больше нуля после 2024.

До 2024 - рассинхронизация данных.

Откуда инфа про рассинхронизацию?

Выгода в спреде вроде бы не учтена, а просто перевод стоимости актива в доллары. 
[Удален]
Aleksey Nikolayev #:
 Набрёл ещё на одну новую область в МО - топологический анализ данных.

Ага, видел такой подход. Но сразу же ничего не понял и отложил в долгий ящик :)

спред зависит от 1) у каких поставщиков ликв. берётся начальные стаканы 2) их ремапа...

приснопамятный р*в в рекламных целях для своего памм делал отрицательный спред даже на одном инструменте

лично сталкивался как в ти-илл менялись и сами спреды и их "структурность". 

история сегментирована по смене поставщиков (боссов/контрагентов DC), изменению настроек и версий софта.  (это ближайшее время, далее - вообще всё чуждое)

с какого-то не самого светлого момента DC начинают транслировать интегрированную,внешнюю историю. На которую полагаться для арбитражей и вообще скальпинга нельзя

Аль*и имел большую историю и держался дольше всех и отдавал только своё, но уже вроде как нет. (вот вточности не скажу - вследствии известных проблем от них пришлось уйти)

[Удален]
Maxim Kuznetsov #:

спред зависит от 1) у каких поставщиков ликв. берётся начальные стаканы 2) их ремапа...

приснопамятный р*в в рекламных целях для своего памм делал отрицательный спред даже на одном инструменте

лично сталкивался как в ти-илл менялись и сами спреды и их "структурность". 

история сегментирована по смене поставщиков (боссов/контрагентов DC), изменению настроек и версий софта.  (это ближайшее время, далее - вообще всё чуждое)

с какого-то не самого светлого момента DC начинают транслировать интегрированную,внешнюю историю. На которую полагаться для арбитражей и вообще скальпинга нельзя

Аль*и имел большую историю и держался дольше всех и отдавал только своё, но уже вроде как нет. (вот вточности не скажу - вследствии известных проблем от них пришлось уйти)

Ну это часовики, синхронизированные по времени. Сложно объяснить такую большую разницу сменой LP.

Глюки в котировках выражались бы в отдельных выбросах. 

там расхождения в 100-150 раз больше спреда в 2023. MQ demo.

Maxim Dmitrievsky #:

синхронизированные по времени

Вопрос на всякий случай. Есть ли полная уверенность что нет пропусков баров по какой-нибудь паре? Недавно столкнулся с пропусками недельных данных на NZDUSD.

[Удален]
Aleksey Nikolayev #:

Вопрос на всякий случай. Есть ли полная уверенность что нет пропусков баров по какой-нибудь паре? Недавно столкнулся с пропусками недельных данных на NZDUSD.

Да, строки хотя бы с одним Nan значением в любом из столбцов (пропущенной котировкой для этой даты) удаляются как бессмысленные. Соответственно, все оставшиеся записи соответствуют конкретным таймстэмпам.

Например, 3 столба для xauusd, xaueur и eurusd, в одном датафрейме с единым для всех datetime index. Строки, где есть Nan хотя бы в одном столбце, удаляются. И только после этого считается спред.

Можно поставить join='inner' вместо "outer", тогда будут объединяться только существующие значения, тогда dropna() не нужен. Но общая картина одинаковая.

def get_prices() -> pd.DataFrame:
    # Create an empty DataFrame to store the combined data
    combined_df = pd.DataFrame()
    
    # List of symbols to process
    symbols = [
        hyper_params['symbol1'],
        hyper_params['symbol2'],
        hyper_params['symbol3']
    ]
    
    for symbol in symbols:
        # Read the file for the current symbol
        p = pd.read_csv(f'files/{symbol}.csv', sep='\s+')
        
        # Process data similar to your original function
        temp_df = pd.DataFrame()
        temp_df['time'] = p['<DATE>'] + ' ' + p['<TIME>']
        temp_df['time'] = pd.to_datetime(temp_df['time'], format='mixed')
        temp_df[symbol] = p['<CLOSE>']  # Use symbol name as column name
        
        # Set time as index
        temp_df.set_index('time', inplace=True)
        temp_df.index = pd.to_datetime(temp_df.index, unit='s')
        
        # If this is the first DataFrame, use it as the base
        if combined_df.empty:
            combined_df = temp_df
        else:
            # Otherwise, join with the existing DataFrame on the time index
            combined_df = combined_df.join(temp_df, how='outer')
    combined_df = combined_df.dropna()
    combined_df['close'] = combined_df[hyper_params['symbol1']] - \
        (combined_df[hyper_params['symbol2']] * combined_df[hyper_params['symbol3']])
    return combined_df.drop(columns=[hyper_params['symbol1'], hyper_params['symbol2'], hyper_params['symbol3']])

Проверил все гипотетически сомнительные варианты, результат один и тот же:


Даже любые преобразования, например расчет спреда, где есть Nan в каком-то одном из исходных столбце, будут давать Nan. Это спред без предварительного удаления строк с Nan. По сути, ошибку допустить невозможно.


>>> dataset
                        close
time                         
2020-01-02 01:00:00       NaN
2020-01-02 02:00:00       NaN
2020-01-02 03:00:00       NaN
2020-01-02 04:00:00       NaN
2020-01-02 05:00:00       NaN
...                       ...
2025-04-17 07:00:00  0.141732
2025-04-17 08:00:00  0.098689
2025-04-17 09:00:00  0.318368
2025-04-17 10:00:00  0.526109
2025-04-17 11:00:00 -0.395750

Maxim Dmitrievsky #:

Откуда инфа про рассинхронизацию?

Это логичная гипотеза из предоставленного графика.

Выгода в спреде вроде бы не учтена, а просто перевод стоимости актива в доллары. 

Я не знаю, что такое спред и доллар. Есть два XAUUSD_bid. Чем выше эта цена - тем выгоднее.

Если бы close-бары строились по ask, то получили бы отрицательную разность, а не положительную. Потому что настоящий символ почти всегда выгоднее торговать/обменять, чем его синтетический аналог.

[Удален]
fxsaber #:

Это логичная гипотеза из предоставленного графика.

Я не знаю, что такое спред и доллар. Есть два XAUUSD_bid. Чем выше эта цена - тем выгоднее.

Если бы close-бары строились по ask, то получили бы отрицательную разность, а не положительную. Потому что настоящий символ почти всегда выгоднее торговать/обменять, чем его синтетический аналог.

Но за другие периоды такой разницы нет, все вокруг ноля. Потом возьму котировки из другого ДЦ и сравню. Думаю, что будет одинаково.

Дабы не погрязнуть во всяких теориях заговора, допишу ТС на след. неделе и проверю :)
[Удален]

Другой live сервер. Здесь все в относительном порядке.

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


[Удален]
Maxim Dmitrievsky #:

Другой live сервер. Здесь все в относительном порядке.

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

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

Моет поднять свое давнее чудо и переписать на такой случай :) Или отдельную софтину с коннекторами. Так не охото писать код.