自适应价格交叉均线交易策略是一种基于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