Двусторонняя арбитражная стратегия на основе индикаторов TSI и HMACCI


Дата создания: 2024-01-23 11:26:14 Последнее изменение: 2024-01-23 11:26:14
Копировать: 0 Количество просмотров: 575
1
Подписаться
1617
Подписчики

Двусторонняя арбитражная стратегия на основе индикаторов TSI и HMACCI

Обзор

Эта стратегия объединяет двусторонние торговые сигналы TSI и улучшенного показателя CCI, используя арбитраж для частого открытия позиций с целью достижения более стабильной и устойчивой прибыли. Ключевой логикой является быстрое и медленное среднелинейное форк и мертвый форк в показателе TSI, в сочетании с многолинейной сигнальной линией показателя HMACCI, чтобы определить направление покупки и продажи на рынке.

Стратегический принцип

Стратегия основана на сочетании двух показателей: TSI и HMACCI.

Индекс TSI содержит быструю среднюю линию и медленную среднюю линию для определения сигнала купли-продажи. Когда быстрая линия прорывает медленную линию снизу вверх, это является сигналом покупки, а наоборот - сигналом продажи. Таким образом, можно более чувствительно улавливать изменяющиеся тенденции рынка.

Индекс HMACCI основан на традиционном индикаторе CCI, используя Hull Moving Average вместо самой цены, чтобы отфильтровать часть шума, чтобы определить перекуп и перепродажу. Перекуп и перепродажа могут вновь подтвердить направление сигнала индикатора TSI.

Ключевая логика стратегии состоит в том, чтобы объединить результаты этих двух показателей и установить определенные дополнительные условия для фильтрации ошибочных сигналов, таких как закрытие цены на одной из K-линий и минимальная цена на наивысшей цене до нескольких циклов, чтобы контролировать качество обратного сигнала.

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

С точки зрения стоп-стоп-убытков, установлены плавающие стоп-убытки и полный плавный прибыль. Это хорошо контролирует риск односторонней торговли.

Стратегические преимущества

Это более стабильная и надежная стратегия высокочастотного арбитража. Основные преимущества:

  1. Комбинация двойных индикаторов эффективно предотвращает ошибочные сигналы
  2. Каждая K-линия открывает позиции, часто использует арбитраж, прибыль и убыток колеблются более плавно
  3. Строгие логики открытия позиций и условия остановки для контроля риска
  4. Высокая допустимость ошибок в сочетании с тенденциями и обратным суждением
  5. Неориентированные предпочтения, применимые к различным рыночным ситуациям
  6. Параметры могут быть изменены в зависимости от размера и оптимизированы для разных сортов

Анализ рисков

Основные риски, о которых следует помнить:

  1. Более высокие комиссионные из-за высокочастотных сделок
  2. Возможность избежать ловушки в арбитраже
  3. Неправильная настройка параметров может привести к чрезмерному вовлечению
  4. Возможность крупных односторонних убытков в ближайшее время невыносима

Риски можно снизить следующими способами:

  1. Допустимые изменения в частоте открытия складов для снижения влияния комиссионных
  2. Оптимизация параметров индикатора для обеспечения качества сигнала
  3. Повышение уровня стоп-лосса, но при этом будет больше убытков от риска.
  4. Тестирование параметров различных сортов

Направление оптимизации

В этой стратегии есть много возможностей для оптимизации, и основные направления:

  1. Оптимизация и тестирование параметров, таких как циклы, длительность и т. д.
  2. Попробуйте различные комбинации показателей, такие как MACD, BOLL и т.д.
  3. Изменения в логике открытия и установка более строгих фильтров
  4. Оптимизация стратегии остановки и прекращения убытков для достижения динамического и резкого прекращения убытков
  5. Попробуйте методы машинного обучения, чтобы найти более стабильный диапазон параметров
  6. Тестирование на торговые сорта и периоды
  7. В сочетании с индикаторами для определения тенденций, избегайте слишком радикального выхода на рынок из-за шока

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the suns bipolarity
//©SeaSide420
//@version=4
strategy(title="TSI HMA CCI", default_qty_type=strategy.cash,default_qty_value=1000,commission_type=strategy.commission.percent,commission_value=0.001)
long = input(title="TSI Long Length", type=input.integer, defval=25)
short = input(title="TSI Short Length", type=input.integer, defval=25)
signal = input(title="TSI Signal Length", type=input.integer, defval=13)
length = input(33, minval=1, title="HMACCI Length")
src = input(open, title="Price Source")
ld = input(50, minval=1, title="Line Distance")
CandlesBack = input(8,minval=1,title="Candles Look Back")
StopLoss= input(3000,minval=1, title="Stop Loss")
TargetProfitAll= input(3000,minval=1, title="Target Profit Close All")
FromMonth=input(defval=1,title="FromMonth",minval=1,maxval=12)
FromDay=input(defval=1,title="FromDay",minval=1,maxval=31)
FromYear=input(defval=2020,title="FromYear",minval=2020)
ToMonth=input(defval=1,title="ToMonth",minval=1,maxval=12)
ToDay=input(defval=1,title="ToDay",minval=1,maxval=31)
ToYear=input(defval=9999,title="ToYear",minval=2017)
start=timestamp(FromYear,FromMonth,FromDay,00,00)
finish=timestamp(ToYear,ToMonth,ToDay,23,59)
window()=>true
ul = (ld)
ll = (ld-ld*2)
ma = hma(src, length)
cci = (src - ma) / (0.015 * dev(src, length))
price = close
double_smooth(src, long, short) =>
	fist_smooth = ema(src, long)
	ema(fist_smooth, short)
pc = change(price)
double_smoothed_pc = double_smooth(pc, long, short)
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)*10
tsi_value2=ema(tsi_value/10, signal)*10
cc = color.white
ct = color.new(color.gray, 90)
if cci<ll or cci[1]<ll
    cc:=color.red
if cci>ul or cci[1]>ul
    cc:=color.green
if cci<ul and cci>ll
    cc:=color.new(color.yellow, 90)
ccc = color.white
if cci>ul
    ccc:=color.green
if cci<cci[1] and cci<ul and cci>ll
    ccc:=color.red
if cci<ll
    ccc:=color.red
if cci>cci[1] and cci>ll and cci<ul
    ccc:=color.green
tsiplot= plot(tsi_value, color=color.lime)
tsiplot2=plot(tsi_value2, color=color.red)    
colorchange2 =tsi_value>tsi_value2?color.lime:color.orange
fill(tsiplot, tsiplot2, color=colorchange2, title="TSIBackground", transp=50)
band1 = hline(ul, "Upper Band 1", color=ct, linestyle=hline.style_dashed)
band0 = hline(ll, "Lower Band 1", color=ct, linestyle=hline.style_dashed)
fill(band1, band0, color=cc, title="MidBandBackground", transp=0)
band2 = hline(ul, "Upper Band 2", color=ct, linestyle=hline.style_dashed)
band3 = hline(ll, "Lower Band 2", color=ct, linestyle=hline.style_dashed)
cciplot2 = plot(cci, "CCIvHMA 2", color=color.black, transp=0, linewidth=5)
cciplot = plot(cci, "CCIvHMA", color=ccc, transp=0, linewidth=3)
hline(0, title="Zero")
hline(420, title="420")
hline(-420, title="-420")
fill(cciplot, cciplot2, color=ccc, title="CCIBackground", transp=0)
LongCondition=cci>cci[1] and cci>ll and src>src[CandlesBack] and tsi_value>tsi_value2
ShortCondition=cci<cci[1] and cci<ul and src<src[CandlesBack] and tsi_value<tsi_value2
plotshape(LongCondition, title="BUY", style=shape.circle, location=location.top, color=color.green)
plotshape(ShortCondition, title="SELL", style=shape.circle, location=location.top, color=color.red)
if  strategy.openprofit>TargetProfitAll
    strategy.close_all(when=window(),comment="close all profit target")
if LongCondition and strategy.openprofit>-1
    strategy.order("BUY", strategy.long,when=window())
if ShortCondition and strategy.openprofit>-1
    strategy.order("SELL", strategy.short,when=window())
strategy.exit("SL exit a sell", "SELL", loss = StopLoss,when=window())     
strategy.exit("SL exit a buy", "BUY", loss = StopLoss,when=window())