Количественная стратегия торговли, основанная на нескольких показателях

Автор:Чао Чжан, Дата: 2023-10-25 18:06:44
Тэги:

img

Обзор

Эта стратегия сочетает в себе несколько технических индикаторов для принятия длинных и коротких торговых решений. Она в основном использует полосы Боллинджера, RSI, ADX и другие индикаторы, а также скользящие средние для определения направления тренда.

Логика стратегии

Стратегия в основном использует полосы Боллинджера для оценки волатильности цен. Сокращение полос представляет собой снижение волатильности, которое может привести к прорыву. RSI используется для выявления условий перекупления и перепродажи. RSI выше 70 является перекупленным, а ниже 30 является перепроданным. Когда полосы сужаются и RSI приближается к своим пределам, рассматривается обратная торговля.

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

В частности, когда диапазоны сжимаются, RSI приближается к своим пределам, и цена прерывается ниже нижнего диапазона, ожидается отскок, идите длинным. Когда диапазоны сжимаются, RSI приближается к своим пределам, и цена прерывается выше верхнего диапазона, ожидается падение, идите коротким. Кроме того, с высоким ADX, добавьте длинные в восходящем тренде. С низким ADX, добавьте короткие в нисходящем тренде. Комбинирование индикаторов улучшает надежность системы.

Анализ преимуществ

Стратегия многопоказателей имеет следующие преимущества:

  1. Объединение индикаторов повышает точность и надежность.

  2. Рассматривает как тренд, так и диапазон торговли, адаптируемый к различным рыночным условиям.

  3. Долгие и короткие снижают направленные риски и избегают крайних движений.

  4. Остановить убытки и взять прибыль блокировать прибыль и ограничить убытки, когда сделки идут не так.

  5. Оптимизация параметров постоянно улучшает стратегию, адаптируясь к изменяющимся рынкам.

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

Стратегия также сопряжена с некоторыми рисками:

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

  2. Излишняя зависимость от технических показателей при игнорировании основных показателей может привести к неточным сигналам.

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

  4. Двухнаправленная торговля увеличивает частоту, увеличивая затраты и давление.

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

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

Возможности для расширения

Некоторые способы оптимизации стратегии:

  1. Испытывать различные наборы параметров для поиска оптимальных значений с использованием пошаговых, случайных или генетических алгоритмов.

  2. Добавьте больше показателей, таких как KDJ, Williams, чтобы построить надежный индикаторный ансамбль.

  3. Оптимизировать модели размещения позиций для динамического управления рисками.

  4. Включить модели машинного обучения для прогнозирования ценовых тенденций и движений.

  5. Испытания на различных продуктах, сроках и рынках для улучшения адаптивности.

  6. Усовершенствуйте время входа и выхода, чтобы зафиксировать тенденции рано и выйти до перелома.

  7. Используйте получение прибыли, задержки, чтобы зафиксировать прибыль и ограничить потери.

  8. Добавьте фундаментальные факторы и анализ структуры рынка для фильтрации технических сигналов.

Резюме

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


/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © The_Bigger_Bull
//@version=5
strategy("Best TradingView Strategy", overlay=true, margin_long=0, margin_short=0)
//Bollinger Bands
source1 = close
length1 = input.int(15, minval=1)
mult1 = input.float(2.0, minval=0.001, maxval=50)
basis1 = ta.sma(source1, length1)
dev1 = mult1 * ta.stdev(source1, length1)
upper1 = basis1 + dev1
lower1 = basis1 - dev1
//buyEntry = ta.crossover(source1, lower1)
//sellEntry = ta.crossunder(source1, upper1)

//RSI
ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "Bollinger Bands" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings")
maLengthInput = input.int(14, title="MA Length", group="MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings")

up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsiMA = ma(rsi, maLengthInput, maTypeInput)
isBB = maTypeInput == "Bollinger Bands"

//plot(rsi, "RSI", color=#7E57C2)
//plot(rsiMA, "RSI-based MA", color=color.yellow)
rsiUpperBand = hline(70, "RSI Upper Band", color=#787B86)
hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
rsiLowerBand = hline(30, "RSI Lower Band", color=#787B86)
fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")
bbUpperBand = plot(isBB ? rsiMA + ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Upper Bollinger Band", color=color.green)
bbLowerBand = plot(isBB ? rsiMA - ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Lower Bollinger Band", color=color.green)
fill(bbUpperBand, bbLowerBand, color= isBB ? color.new(color.green, 90) : na, title="Bollinger Bands Background Fill")

//ADX

adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up1 = ta.change(high)
	down1 = -ta.change(low)
	plusDM = na(up1) ? na : (up1 > down1 and up1 > 0 ? up1 : 0)
	minusDM = na(down1) ? na : (down1 > up1 and down1 > 0 ? down1 : 0)
	truerange = ta.rma(ta.tr, len)
	plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
	minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)




out = ta.sma(close, 14)

sma1=ta.sma(close,55)

ema200=ta.ema(close,200)



longCondition = (out>sma1) and ta.crossover(source1, lower1)

if (longCondition )
    strategy.entry("long", strategy.long)
    
shortCondition = (out<sma1) and ta.crossunder(source1, lower1)

if (shortCondition )
    strategy.entry("short", strategy.short)
    
    
stopl=strategy.position_avg_price-50
tptgt=strategy.position_avg_price+100
stopshort=strategy.position_avg_price+50
tptgtshort=strategy.position_avg_price-100

strategy.exit("longclose","long",trail_offset=5,trail_points=45,when=ta.crossover(sma1,out))
strategy.exit("shortclose","short",trail_offset=5,trail_points=45,when=ta.crossover(out,sma1))

    
//if strategy.position_avg_price<0
    
    
plot(sma1 , color=color.blue)
plot(out, color=color.green)
//plot(ema200,color=color.red)


    
    


Больше