本策略名称为“基于SMA、EMA的量化交易策略”,其主要思想是结合不同参数的SMA均线和EMA均线来构建交易信号。
计算close价格的SMA9、SMA50、SMA180均线和EMA20均线。
根据收盘价close与支撑位sup和阻力位res的关系,确定买入信号和卖出信号。当close突破sup时产生买入信号BuySignal,当close跌破res时产生卖出信号SellSignal。
在买入信号触发时,执行多头开仓策略;在卖出信号触发时,平掉多头仓位。
在卖出信号触发时,执行空头开仓策略;在买入信号触发时,平掉空头仓位。
结合了多种均线来形成交易信号,提高信号的准确性和稳定性。
计算了动态的支撑阻力位,使交易信号更有依据。
采用了高中低波动均线,既注重长期趋势判断又兼顾短期突破,提高策略机会获利率。
支持做多做空双向交易,可以在趋势行情和震荡行情下都能获得收益。
SMA均线存在滞后性,可能导致买入卖出信号被延迟,从而影响策略效果。
没有设定止损机制,持仓亏损可能会扩大。
回测数据不足,实盘中参数需要根据市场调整。
依赖技术指标形成交易信号,无法应对重大黑天鹅事件的冲击。
对应风险的解决方法:
1. 适当调整SMA均线周期;
2. 设定合理的止损位;
3. 加大回测样本量,调整参数;
4. 风控机制需要进一步完善。
增加基于波动率的止损机制,控制单笔损失。
增加机器学习模型判断行情趋势,辅助形成交易信号。
增加关键价格位分析模块,提高支撑阻力判断的准确性。
测试不同均线指标参数的组合,寻找更优参数。
本策略综合运用了SMA均线和EMA均线的技术指标来构建交易信号,同时计算了动态的支撑阻力位,形成了较为完整的买卖策略逻辑。策略具有指标参数灵活、双向交易、适应多种行情的优点,但也面临均线滞后、止损不完善等问题。未来可从止损机制、趋势判断、关键价格位判断等方面进行策略优化,使策略具有更好的稳定性和盈利空间。
]
/*backtest
start: 2023-12-10 00:00:00
end: 2023-12-11 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="StrategySMA 9/50/180 | EMA 20 | BUY/SELL", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
//SMA and EMA code
smaInput1 = input(9, title="SMA1")
smaInput2 = input(50, title="SMA2")
smaInput3 = input(180, title="SMA3")
emaInput1 = input(20, title="EMA1")
sma1 = sma(close, smaInput1)
sma2 = sma(close, smaInput2)
sma3 = sma(close, smaInput3)
EMA1 = ema(close, emaInput1)
plot(sma1, color= color.red , title="SMA1")
plot(sma2, color = color.blue, title="SMA2")
plot(sma3, color= color.white, title="SMA3")
plot(EMA1, color = color.yellow, title="EMA1")
no=input(3,title="BUY/SELL Swing")
Barcolor=input(false,title="BUY/SELL Bar Color")
Bgcolor=input(false,title="BUY/SELL Background Color")
res=highest(high,no)
sup=lowest(low,no)
avd=iff(close>res[1],1,iff(close<sup[1],-1,0))
avn=valuewhen(avd!=0,avd,0)
tsl=iff(avn==1,sup,res)
// Buy/sell signals
BuySignal = crossover(close, tsl)
SellSignal = crossunder(close, tsl)
// Enter long position
strategy.entry("Buy", strategy.long, when=BuySignal)
// Exit long position
strategy.exit("Sell", "Buy", when=SellSignal)
// Enter short position
strategy.entry("Sell", strategy.short, when=SellSignal)
// Exit short position
strategy.exit("Buy", "Sell", when=BuySignal)
colr = close>=tsl ? color.green : close<=tsl ? color.red : na
plot(tsl, color=colr)