Обсуждение статьи "Машинное обучение в торговых системах на сетке и мартингейле. Есть ли рыба?" - страница 3

 
А где посмотреть варианты множителей? например, не по мартину а с разными вариантами увеличения лота при росте или уменьшения, остановка изменения размера лота, хеджирование лота другой последовательности, и другие варианты
 
1_lexa:
А где посмотреть варианты множителей? например, не по мартину а с разными вариантами увеличения лота при росте или уменьшения, остановка изменения размера лота, хеджирование лота другой последовательности, и другие варианты

GRID_COEFFICIENTS, GRID_DISTANCES, GRID_SIZE

сетка предполагается фиксированной здесь для всех случаев, а алгоритм машинного обучения обобщает её на все ситуации. Для хеджирования нужно править логику разметки и тестера. Не занимался.

 
Aleksey Vyazmikin:

Попробуйте разметить не по прибыли, а по числу открытых позиций - где меньше - там лучше.

можно будет посмотреть, вариантов много. Как доделаю другое исследование - попробую

это несложно сделать, достаточно изменить условие разметки
 
Maxim Dmitrievsky:

можно будет посмотреть, вариантов много. Как доделаю другое исследование - попробую

это несложно сделать, достаточно изменить условие разметки
def add_labels(dataset, min, max, distances, coefficients):
    labels = []
    for i in range(dataset.shape[0]-max):
        rand = random.randint(min, max)
        all_pr = dataset['close'][i:i + rand + 1]

        grid_stats = {'up_range': all_pr[0] - all_pr.min(),
                      'dwn_range': all_pr.max() - all_pr[0],
                      'up_state': 0,
                      'dwn_state': 0,
                      'up_orders': 0,
                      'dwn_orders': 0,
                      'up_profit': all_pr[-1] - all_pr[0] - MARKUP,
                      'dwn_profit': all_pr[0] - all_pr[-1] - MARKUP
                      }

        for i in np.nditer(distances):
            if grid_stats['up_state'] + i <= grid_stats['up_range']:
                grid_stats['up_state'] += i
                grid_stats['up_orders'] += 1
                grid_stats['up_profit'] += (all_pr[-1] - all_pr[0] + grid_stats['up_state']) \
                * coefficients[int(grid_stats['up_orders']-1)]
                grid_stats['up_profit'] -= MARKUP * coefficients[int(grid_stats['up_orders']-1)]

            if grid_stats['dwn_state'] + i <= grid_stats['dwn_range']:
                grid_stats['dwn_state'] += i
                grid_stats['dwn_orders'] += 1
                grid_stats['dwn_profit'] += (all_pr[0] - all_pr[-1] + grid_stats['dwn_state']) \
                * coefficients[int(grid_stats['dwn_orders']-1)]
                grid_stats['dwn_profit'] -= MARKUP * coefficients[int(grid_stats['dwn_orders']-1)]
        
        if grid_stats['up_orders'] < grid_stats['dwn_orders'] and grid_stats['up_profit'] > 0:
            labels.append(0.0)
            continue
        elif grid_stats['dwn_profit'] > 0:
            labels.append(1.0)
            continue
        
        labels.append(2.0)

    dataset = dataset.iloc[:len(labels)].copy()
    dataset['labels'] = labels
    dataset = dataset.dropna()
    dataset = dataset.drop(
        dataset[dataset.labels == 2].index).reset_index(drop=True)
    return dataset

Желтое - изменить условие

результат (обучение с 2020.05)

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

Можно подобрать настройки, при которых бот почти неубиваемый с 2010г. и раньше (если поработать с просадками в паре случаев)

Сделок получается по прежнему много

Пожалуй, следует сделать перебиралку параметров, по аналогии с предыдущей статьей

 
Maxim Dmitrievsky:

Желтое - изменить условие

результат (обучение с 2020.05)

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

Можно подобрать настройки, при которых бот почти неубиваемый с 2010г. и раньше (если поработать с просадками в паре случаев)

Сделок получается по прежнему много

Пожалуй, следует сделать перебиралку параметров, по аналогии с предыдущей статьей

Вроде так лучше.

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

 
Aleksey Vyazmikin:

Вроде так лучше.

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

Так неплохо, да, осталось проработать вариант с работой на более длинной истории. Например, в кризисы не работает при сильном падении, потому что не было таких примеров при обучении.

 
Maxim Dmitrievsky:

Так неплохо, да, осталось проработать вариант с работой на более длинной истории. Например, в кризисы не работает при сильном падении, потому что не было таких примеров при обучении.

Если стремится к выживанию в кризис, то общий прирост будет значительно меньше, чем за периоды до и после кризиса. Это философский вопрос, потерять часть депо в кризис и заработать в разы больше потерянного до и после кризиса, либо иметь шанс не слить в кризис, но зарабатывать раз в 3-5 медленней.

Нужны динамические уровни, как минимум, для выживания на больших движениях.

 
Aleksey Vyazmikin:

Если стремится к выживанию в кризис, то общий прирост будет значительно меньше, чем за периоды до и после кризиса. Это философский вопрос, потерять часть депо в кризис и заработать в разы больше потерянного до и после кризиса, либо иметь шанс не слить в кризис, но зарабатывать раз в 3-5 медленней.

Нужны динамические уровни, как минимум, для выживания на больших движениях.

Если аппроксимировать кризис+спокойный рынок то да, на стандартных фичах получается туго, надо либо то, либо то. Либо искать компромиссы.

 
Aleksey Vyazmikin:

Вроде так лучше.

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

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

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

Ну уж если хочется заморачиваться с сеткой надо матрицу исходов строить, и править её по Байесу с каждым новым движением цены и т.е. новым прогнозом.

 
Aleksey Mavrin:

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

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

Ну уж если хочется заморачиваться с сеткой надо матрицу исходов строить, и править её по Байесу с каждым новым движением цены и т.е. новым прогнозом.

Именно эта цель преследовалась, найти другие сетапы, которые невозможны без сетки

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