自适应价格交叉均线交易策略是一种基于Hull移动平均线(HMA)的量化交易方法。该策略利用价格与HMA的交叉来生成买入和卖出信号,同时设置固定的止损和止盈水平来管理风险和收益。策略采用了104周期的HMA作为主要指标,结合价格交叉来触发交易。
该策略的核心是使用Hull移动平均线(HMA)作为主要指标。HMA是一种先进的移动平均线,它能够快速响应价格变化,同时减少滞后。策略逻辑如下:
策略通过跟踪开放头寸来确保不会在已有头寸的情况下重复开仓。当一个交易被平仓后,系统重置标志,允许新的交易信号生效。
自适应价格交叉均线交易策略是一种简单而有效的量化交易方法。通过利用Hull移动平均线的优势,该策略能够捕捉市场趋势,同时通过固定的风险管理措施来保护资金。虽然策略存在一些潜在风险,但通过持续优化和改进,可以进一步提高其性能和适应性。对于寻求自动化交易解决方案的交易者来说,这是一个值得考虑的基础策略框架。
/*backtest
start: 2024-01-01 00:00:00
end: 2024-03-23 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("SHIESTD", overlay=true)
// Function to calculate Hull Moving Average (HMA)
hma(src, length) =>
wma1 = ta.wma(src, length)
wma2 = ta.wma(src, length / 2)
hma = ta.wma(2 * wma2 - wma1, math.round(math.sqrt(length)))
hma
// Parameters
hma_length = 104
// Calculate Hull Moving Average
hma_value = hma(close, hma_length)
// Plot HMA
plot(hma_value, title="104-period Hull Moving Average", color=color.blue, linewidth=2)
// Define SL and TP values in dollars
long_sl_amount = 1.25
long_tp_amount = 37.5
short_sl_amount = 1.25
short_tp_amount = 37.5
// Number of contracts
contracts = 2
// Function to calculate SL and TP prices based on entry price and dollar amounts
long_sl_price(entry_price) =>
entry_price - long_sl_amount
long_tp_price(entry_price) =>
entry_price + long_tp_amount
short_sl_price(entry_price) =>
entry_price + short_sl_amount
short_tp_price(entry_price) =>
entry_price - short_tp_amount
// Trading conditions
price_intersects_hma = ta.crossover(close, hma_value) or ta.crossunder(close, hma_value)
// Long and Short Conditions based on price intersecting HMA
long_condition = ta.crossover(close, hma_value)
short_condition = ta.crossunder(close, hma_value)
// Track open positions
var bool long_open = false
var bool short_open = false
// Handle Long Positions
if (long_condition and not long_open)
entry_price = close
strategy.entry("Long", strategy.long, qty=contracts)
strategy.exit("Exit Long", from_entry="Long", stop=long_sl_price(entry_price), limit=long_tp_price(entry_price))
long_open := true
// Handle Short Positions
if (short_condition and not short_open)
entry_price = close
strategy.entry("Short", strategy.short, qty=contracts)
strategy.exit("Exit Short", from_entry="Short", stop=short_sl_price(entry_price), limit=short_tp_price(entry_price))
short_open := true
// Reset flags when the position is closed
if (strategy.opentrades == 0)
long_open := false
short_open := false