这个策略基于超趋势指标来判断入场点,当指标反转时做多做空。同时设置了3个不同比例的止盈单,分别固定止赚2%、5%和10%,以锁定不同程度的利润。
该策略使用超趋势指标判断行情趋势。超趋势指标基于平均真实波幅和一个乘数因子,当价格超过上轨时为超买形态,当价格跌破下轨时为超卖形态。因此,该策略通过监测超趋势指标的方向变化来判断何时做多和做空。
具体来说,当超趋势指标变化小于0时,即代表指标由上向下反转,形成做多信号;当超趋势指标变化大于0时,即代表指标由下向上反转,形成做空信号。收到做多或做空信号后,记录入场价格,并下单入场。
该策略同时设置了3个不同比例的止盈单,它们的止盈价格分别为入场价的1.02倍、1.05倍和1.10倍,对应固定止赚2%、5%和10%的利润。这3个止盈单的手数比例分别设定为25%、50%和25%。收到开仓信号后,该策略会同时挂上这3个止盈单,意在锁定不同程度的利润。
该策略具有以下几个优势:
使用超趋势指标判断入场,能够有效捕捉趋势反转点,精准做多做空。
设置多个止盈单比例,可以锁定不同程度的利润,降低回撤。
止盈设置比较保守,以2%、5%和10%的目标利润为主,避免追求过高盈利导致的亏损扩大。
策略逻辑简单清晰,容易理解和修改,适合量化交易的初学者。
该策略也存在一些风险:
超趋势指标设定不当,可能错过趋势反转点,导致入场不够精确。
止盈位置设置过于保守,可能错过行情继续运行带来更大利润的机会。
突发事件导致快速跳空或断头,超趋势指标来不及反应,造成止损被触发。
策略中没有设置止损条件,存在无限亏损的风险。
该策略还可以从以下几个方面进行优化:
测试不同的超趋势指标参数,优化指标的灵敏度。
增加止损条件,设定最大承受损失,控制风险。
根据不同品种和交易周期,调整止盈比例和止盈数量。
增加其他指标过滤,避免在震荡行情中频繁开仓。
优化资金利用率,通过调整策略默认交易额,降低单笔风险。
该策略整体来说较为简单实用。它使用超趋势指标判断入场时点,再利用多个止盈单来锁定利润,可有效控制风险。但策略中还存在可以进一步优化的地方,如设置止损、优化参数等,这些都为日后改进提供了方向。总的来说,该策略适合量化交易初学者学习和实践。
/*backtest
start: 2023-01-01 00:00:00
end: 2024-01-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy( "Supertrend with TP", overlay=true )
// Supertrend Settings
atrPeriod = input(10, "ATR Length")
factor = input.float(3.0, "Factor", step = 0.01)
// TP's
tp1Open = input.bool(true, "TP1")
tp1 = input.float(2.0, "TP Level (%)", step = 0.1) / 100
tp1Amount = input.int(25, "Amount (%)", step = 1)
tp2Open = input.bool(true, "TP2")
tp2 = input.float(5.0, "TP Level (%)", step = 0.1) / 100
tp2Amount = input.int(50, "Amount (%)", step = 1)
tp3Open = input.bool(true, "TP3")
tp3 = input.float(10.0, "TP Level (%)", step = 0.1) / 100
tp3Amount = input.int(25, "Amount (%)", step = 1)
[_, direction] = ta.supertrend(factor, atrPeriod)
entryPrice = 0.0
entryPrice := entryPrice[1]
if ta.change(direction) < 0
strategy.entry("Long", strategy.long)
entryPrice := close
if ta.change(direction) > 0
strategy.entry("Short", strategy.short)
entryPrice := close
if (tp1Open)
strategy.exit ("TP1", from_entry="Long", limit=entryPrice * (1 + tp1), qty_percent=tp1Amount)
strategy.exit ("TP1", from_entry="Short", limit=entryPrice * (1 - tp1), qty_percent=tp1Amount)
if (tp2Open)
strategy.exit ("TP2", from_entry="Long", limit=entryPrice * (1 + tp2), qty_percent=tp2Amount)
strategy.exit ("TP2", from_entry="Short", limit=entryPrice * (1 - tp2), qty_percent=tp2Amount)
if (tp3Open)
strategy.exit ("TP3", from_entry="Long", limit=entryPrice * (1 + tp3), qty_percent=tp3Amount)
strategy.exit ("TP3", from_entry="Short", limit=entryPrice * (1 - tp3), qty_percent=tp3Amount)