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

[Удален]  
mytarmailS #:
А у тебя тестер считает вход по клоузу сигнальной свечи или по открытию следующей? 

Комиссия считаеться? 

Попроси чатгпт переписать на R %)

def tester(dataset: pd.DataFrame, plot = False):
    last_deal = int(2)
    last_price = 0.0
    report = [0.0]
    chart = [0.0]
    line = 0
    line2 = 0

    indexes = pd.DatetimeIndex(dataset.index)
    labels = dataset['labels'].to_numpy()
    metalabels = dataset['meta_labels'].to_numpy()
    close = dataset['close'].to_numpy()

    for i in range(dataset.shape[0]):
        if indexes[i] <= FORWARD:
            line = len(report)
        if indexes[i] <= BACKWARD:
            line2 = len(report)

        pred = labels[i]
        pr = close[i]
        pred_meta = metalabels[i] # 1 = allow trades

        if last_deal == 2 and pred_meta==1:
            last_price = pr
            last_deal = 0 if pred <= 0.5 else 1
            continue

        if last_deal == 0 and pred > 0.5 and pred_meta == 1:
            last_deal = 2
            report.append(report[-1] - MARKUP + (pr - last_price))
            chart.append(chart[-1] + (pr - last_price))
            continue

        if last_deal == 1 and pred < 0.5 and pred_meta==1:
            last_deal = 2
            report.append(report[-1] - MARKUP + (last_price - pr))
            chart.append(chart[-1] + (pr - last_price))

    y = np.array(report).reshape(-1, 1)
    X = np.arange(len(report)).reshape(-1, 1)
    lr = LinearRegression()
    lr.fit(X, y)

    l = lr.coef_
    if l >= 0:
        l = 1
    else:
        l = -1

    if(plot):
        plt.plot(report)
        plt.plot(chart)
        plt.axvline(x = line, color='purple', ls=':', lw=1, label='OOS')
        plt.axvline(x = line2, color='red', ls=':', lw=1, label='OOS2')
        plt.plot(lr.predict(X))
        plt.title("Strategy performance R^2 " + str(format(lr.score(X, y) * l,".2f")))
        plt.xlabel("the number of trades")
        plt.ylabel("cumulative profit in pips")
        plt.show()

    return lr.score(X, y) * l
 
Maxim Dmitrievsky #:

Попроси чатгпт переписать на R %)

Было бы не плохо знать что в датафрейме на входе.. 

То есть я так понял что по клоузу текущему открывается? 
 
Maxim Dmitrievsky #:

50 кластеров. Кластеризация по волатильности.


Лучшие результаты:


Как волатильность мерили - пусть останется тайной, но напишите, как оценивали результат в кластерах для их классификации, а то не понятно.

 
Maxim Dmitrievsky #:

Попробуйте EURGBP


Выглядит красиво. Чуть позже тесты на разных инструментах - пока надо технологию настроить.

 
Alexey Burnakov выбора предикторов " не сработали

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

Это делается для взаимного обогащения "понимания" задач машинного обучения.

Продолжайте публиковать!
[Удален]  
mytarmailS #:
Было бы не плохо знать что в датафрейме на входе.. 

То есть я так понял что по клоузу текущему открывается? 
Клоузы и метки в датафрейме, выделил желтым. Больше ничего и не требуется для тестирования.
[Удален]  
Aleksey Vyazmikin #:

Как волатильность мерили - пусть останется тайной, но напишите, как оценивали результат в кластерах для их классификации, а то не понятно.

Писал где-то выше вроде. Кластеризация на n кластеров и обучение торговать на каждом кластере, игнорируя остальные. Оценка через обычный тестер.

Бывает еще causal clustering, но я до него пока не добрался.
 
Maxim Dmitrievsky #:
Писал где-то выше вроде. Кластеризация на n кластеров и обучение торговать на каждом кластере, игнорируя остальные. Оценка через обычный тестер.

Бывает еще causal clustering, но я до него пока не добрался.

Понял, т.е. по модели на каждый кластер. А не хотите просто исключить кластера, где собралось много негативных примеров?

 
Forester #:

А если сразу на 27 кластеров разделить без деревьев? Результат изменится?

Вот что получилось

Вроде как так же тенденция сохраняется. Тут пока неясно, по какому критерию лучше оценивать, вот так выглядит упорядоченные по возрастанию показатели смещения откликов - на первом графике и распределения число откликов (примеров в выборке) в соответствии с этим упорядочением - второй график (выборка train).


А это то же самое, но для дерева


 

пробовал кто то рандомные цены прогнозировать по зигзагу? У меня получаеться какой то очень оптимистичный результат

library(TTR)
library(zoo)
library(randomForest)
library(caret)

price <- rnorm(10000) |> cumsum()

X <- price |> rollapplyr(10, \(x) x-x[10])
Y <- price |> ZigZag(change = 0.1,percent = F) |> diff() |> sign() |> as.factor() |> tail(nrow(X)) 

tr <- 1:5000
ts <- 5001:nrow(X)

randomForest(Y[tr]~., X[tr,]) |> predict(X[ts,]) |> confusionMatrix(Y[ts])       

Confusion Matrix and Statistics

          Reference
Prediction   -1    1
        -1 2431   49
        1    43 2468
                                          
               Accuracy : 0.9816          
                 95% CI : (0.9774, 0.9851)
    No Information Rate : 0.5043          
    P-Value [Acc > NIR] : <2e-16          
                                          
                  Kappa : 0.9631          
                                          
 Mcnemar's Test P-Value : 0.6022          
                                          
            Sensitivity : 0.9826          
            Specificity : 0.9805          
         Pos Pred Value : 0.9802          
         Neg Pred Value : 0.9829          
             Prevalence : 0.4957          
         Detection Rate : 0.4871          
   Detection Prevalence : 0.4969          
      Balanced Accuracy : 0.9816          
                                          
       'Positive' Class : -1