
本策略通过计算RSI指标和快慢移动平均线,来判断买入和卖出的时机。当RSI上涨5个点,并且低于70的时候;并且9日移动平均线上穿50日移动平均线时,做多;当50日移动平均线下穿9日移动平均线时,平仓。
本策略主要利用了RSI指标和移动平均线的组合。RSI指标可以显示一个股票或数字货币是否被高估或低估。当RSI低于30时被认为是超卖,当高于70时被认为是超买。本策略利用RSI指标判断是否处于超卖区域来决定买入时机。
移动平均线被广泛用于判断趋势方向。快速移动平均线能更快捕捉价格变化,慢速移动平均线则可以过滤假突破。当快速移动平均线上穿慢速移动平均线时,表示开始进入上涨趋势;反之,下穿则代表进入下跌趋势。本策略利用9日和50日移动平均线的金叉死叉组合来判断趋势,以及买入卖出时机。
本策略最大的优势在于,通过RSI指标判断是否超卖区域,避免高位买入;并利用快慢移动平均线过滤假突破,锁定趋势方向,可以获得比较高的获利率。
同时,策略加入了RSI指标连续上涨5个点的条件,可以进一步避免超买区域的不必要买入。另外,策略采用部分仓位交易方式,可以大幅降低单笔交易的亏损风险。
本策略最大的风险在于,RSI指标和移动平均线都可能产生滞后。当价格出现剧烈变动时,它们的信号可能会落后,导致买入高位或卖出低位的风险。
为防范这一风险,本策略加入了快速移动平均线,利用其更快速地响应价格变动的特点来减少滞后的可能。此外,部分仓位交易也可以降低单笔交易的损失。
本策略可以从以下几个方面进行优化:
测试不同周期的RSI指标参数,寻找最优参数组合
测试更多组合的快慢移动平均线,以获得更好的过滤效果
优化仓位大小,测试不同的仓位参数
增加止损条件,以锁定利润
本策略整体来说非常适合趋势交易。通过RSI指标避开超卖区域,配合快慢移动平均线判断趋势方向和重要支撑阻力。同时采取部分仓位交易,可以获得较高的胜率和盈利率。后期通过参数优化和风控条件优化,可以获得更好的策略效果。
/*backtest
start: 2023-11-12 00:00:00
end: 2023-12-12 00:00:00
period: 1h
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/
// © Coinrule
//@version=5
strategy("RSI with Slow and Fast MA Crossing Strategy (by Coinrule)",
overlay=true,
initial_capital=10000,
process_orders_on_close=true,
default_qty_type=strategy.percent_of_equity,
default_qty_value=30,
commission_type=strategy.commission.percent,
commission_value=0.1)
showDate = input(defval=true, title='Show Date Range')
timePeriod = time >= timestamp(syminfo.timezone, 2020, 1, 1, 0, 0)
notInTrade = strategy.position_size <= 0
// RSI
length = input(14)
vrsi = ta.rsi(close, length)
// Moving Averages for Buy Condition
buyFastEMA = ta.ema(close, 9)
buySlowEMA = ta.ema(close, 50)
buyCondition1 = ta.crossover(buyFastEMA, buySlowEMA)
increase = 5
if ((vrsi > vrsi[1]+increase) and buyCondition1 and vrsi < 70 and timePeriod)
strategy.entry("Long", strategy.long)
// Moving Averages for Sell Condition
sellFastEMA = ta.ema(close, 9)
sellSlowEMA = ta.ema(close, 50)
plot(request.security(syminfo.tickerid, "60", sellFastEMA), color = color.blue)
plot(request.security(syminfo.tickerid, "60", sellSlowEMA), color = color.green)
condition = ta.crossover(sellSlowEMA, sellFastEMA)
//sellCondition1 = request.security(syminfo.tickerid, "60", condition)
strategy.close('Long', when = condition and timePeriod)