Количественная стратегия торговли, основанная на индикаторе RSI и скользящей средней

Автор:Чао Чжан, Дата: 2023-12-25 11:40:36
Тэги:

img

Обзор

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

Принцип стратегии

Стратегия в основном использует индикатор RSI и быстрые/медленные скользящие средние для определения тенденций цен и времени обратного движения. В частности, она сначала рассчитывает быструю скользящую среднюю (SMA) и медленную скользящую среднюю. Когда быстрая SMA пересекает медленную SMA, генерируется сигнал покупки. Когда быстрая SMA пересекает ниже медленной SMA, генерируется сигнал продажи. Это указывает на изменение тренда цены.

В то же время эта стратегия рассчитывает индикатор RSI, чтобы определить, находится ли цена в состоянии перекупленности или перепроданности. Перед открытием позиций он будет судить о том, является ли индикатор RSI нормальным. Если RSI превышает установленный порог, он приостановит открытие позиций и подождает, пока RSI отойдет назад перед открытием позиций. Это может избежать установления позиций в неблагоприятное время перекупления и перепроданности. С другой стороны, после принятия позиций, если RSI превышает установленный порог получения прибыли, он закрывает позиции, чтобы получить прибыль. Это может блокировать торговые прибыли.

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

Преимущества

Стратегия имеет следующие преимущества:

  1. Использование скользящего среднего золотого креста в качестве сигнала покупки и смертельного креста в качестве сигнала продажи может точно зафиксировать возможности изменения ценового тренда.

  2. Избегайте неблагоприятного времени открытия позиций. Судя по условиям перекупленности и перепродажи с помощью индикатора RSI, он может эффективно предотвратить установление позиций при чрезмерных колебаниях цен в краткосрочной перспективе, избегая ненужных плавающих потерь.

  3. Риски могут быть хорошо контролированы. RSI take profit может держать позиции в разумном диапазоне прибыли и эффективно контролировать торговые риски.

  4. Легко оптимизировать параметры. Периоды SMA, параметры RSI и т. д. могут быть гибко скорректированы для адаптации к различным рыночным условиям.

  5. Высокая эффективность использования капитала. Частая торговля может проводиться во время консолидации тренда и шоковых стадий, что позволяет эффективно использовать капитал.

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

Стратегия также имеет следующие риски:

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

  2. Частый риск торговли: на колеблющихся рынках он может привести к чрезмерно частому открытию и закрытию позиций.

  3. Риск настройки параметров. Периоды SMA и параметры RSI требуют повторного тестирования и корректировки для адаптации к рынкам. Неправильные настройки могут повлиять на эффективность стратегии.

  4. Неправильные настройки RSI могут также привести к преждевременному выходу из позиций или продолжению роста после выхода из позиции.

Руководство по оптимизации

Направления оптимизации следующие:

  1. Попробуйте использовать MACD, Bollinger Bands и другие индикаторы в сочетании с RSI, чтобы сделать сигналы более точными и надежными.

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

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

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

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

Заключение

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


/*backtest
start: 2023-12-17 00:00:00
end: 2023-12-18 19:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//1. 做多
//    a. RSI在超买区间时不开单,直到RSI回落一点再开单
//    b. 已经有多仓,如果RSI超买,则平多获利,当RSI回落一点之后,再次开多,直到有交叉信号反转做空

//2. 做空
//    a. RSI在超卖区间时不开单,直到RSI回落一点之后再开多单
//    b. 已经有空仓,如果RSI超卖,则平空获利,当RSI回落一点之后,再开空单,直到有交叉信号反转做多

//@version=4
strategy("策略_RSI+移动揉搓线_", overlay=true)

// 输入
fastLength = input(11, minval=1)
slowLength = input(82,minval=1)
length = input(title="长度", type=input.integer, defval=14, minval=1, maxval=100)
hight_rsi = input(title="rsi超过上轨平多获利", type=input.integer, defval=80, minval=1, maxval=100)
low_rsi = input(title="rsi超过下轨平空获利", type=input.integer, defval=20, minval=1, maxval=100)

open_long_rsi_threshold = input(title="rsi低于该阈值时才开多", type=input.integer, defval=75, minval=1, maxval=100)
open_short_rsi_threshold = input(title="rsi高于该阈值时才开空仓", type=input.integer, defval=25, minval=1, maxval=100)

// 均线
sma_fast = sma(close, fastLength)
sma_slow = sma(close, slowLength)
// RSI
rsi = rsi(close, length)

//**********变量*start*******//
var long_f = false // 标记是否是均线交叉多头
var short_f = false // 标记是否是均线交叉空头
var long_open_pending = false // 标记开仓时rsi是否处于超买状态
var short_open_pending = false // 标记开仓时rsi是否处于超卖
var long_rsi_over_buy = false // 标记 多仓时 是否发生超买平多获利
var short_rsi_over_sell = false // 标记 空仓时 是否发生超卖平空获利

//**********逻辑*start*******//

// 买入
longCondition = crossover(sma_fast, sma_slow)
if (longCondition)
    short_rsi_over_sell := false // 清空该标记,防止再次开空仓
    long_f := true
	short_f := false
	if (rsi < hight_rsi)
	    // 并且没有超买
	    strategy.entry("多", long=strategy.long)
    if (rsi > hight_rsi)
        // 开仓时发生超买,等待rsi小于hight_rsi
	    long_open_pending := true

// 卖出
shortCondition = crossunder(sma_fast, sma_slow)
if (shortCondition)
    long_rsi_over_buy := false //清空该标记,防止再次开多仓
    long_f := false
    short_f := true
    if (rsi > low_rsi)
        strategy.entry("空", long=strategy.short)
	if (rsi < low_rsi)
	    // 开仓时发生超卖,等待rsi大于low_rsi
	    short_open_pending := true
	    

// 等待RSI合理,买入开仓
if (long_f and long_open_pending and strategy.position_size == 0 and rsi < open_long_rsi_threshold)
    strategy.entry("多", long=strategy.long)
	long_open_pending := false
// 等待RSI合理,卖出开仓
if (short_f and short_open_pending and strategy.position_size == 0 and rsi > open_short_rsi_threshold)
    strategy.entry("空", long=strategy.short)
	short_open_pending := false


	
//RSI止盈(RSI超买平多)
if (strategy.position_size > 0 and long_f and rsi > hight_rsi)
	strategy.close_all()
	long_rsi_over_buy := true
//RSI止盈(RSI超卖平空)
if (strategy.position_size < 0 and short_f and rsi < low_rsi)
	strategy.close_all()
	short_rsi_over_sell := true
	
	
//RSI止盈之后,再次开多
if (long_f and long_rsi_over_buy and strategy.position_size == 0 and rsi < hight_rsi)
    long_rsi_over_buy := false
    strategy.entry("多", long=strategy.long)
//RSI止盈之后,再次开空
if (short_f and short_rsi_over_sell and strategy.position_size == 0 and rsi > low_rsi)
    short_rsi_over_sell := false
    strategy.entry("空", long=strategy.short)


//**********绘图*start*******//

p1 = plot(sma_fast, linewidth=2, color=color.green)
p2 = plot(sma_slow, linewidth=2, color=color.red)
fill(p1, p2, color=color.green)
plot(cross(sma_fast, sma_slow) ? sma_fast : na, style = plot.style_circles, linewidth = 4)

// 绘制rsi线
//plot(rsi, color=color.green, editable=true, style=plot.style_circles, linewidth=2)

// 绘制上下轨
//high_ = hline(80, title="上轨")
//low_ = hline(20, title="下轨")
//fill(high_, low_, transp=80, editable=true, title="背景")
    
    
    
    
    
    
    

Больше