该策略是一个基于动量的交易系统,主要利用平衡力量(Balance of Power)指标在4小时时间周期上进行交易。通过测量买卖双方力量对比,当指标突破预设阈值时触发交易信号。策略包含动态仓位管理、可调节杠杆以及可视化交易跟踪等功能,能够有效捕捉市场趋势转折点。
策略核心是通过计算(收盘价-开盘价)/(最高价-最低价)来衡量市场买卖力量平衡。当该值接近1时表示强烈看涨动能,接近-1时表示强烈看跌压力。具体交易逻辑如下: - 开仓条件:当平衡力量指标上穿0.8时,表明买方力量强劲,进场做多 - 平仓条件:当平衡力量指标下穿-0.8时,表明卖方压力增大,平仓出场 - 仓位管理:基于账户权益动态调整,并可设置杠杆倍数
该策略通过平衡力量指标捕捉市场动量变化,结合动态仓位管理和风险控制,构建了一个相对完整的交易系统。虽然存在一定风险,但通过持续优化和完善可以进一步提升策略的稳定性和盈利能力。适合对动量交易感兴趣的交易者使用和研究。
/*backtest
start: 2024-02-25 00:00:00
end: 2025-02-22 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy(title="Balance of Power for US30 4H", format=format.price, precision=2, default_qty_type=strategy.percent_of_equity, default_qty_value=100, overlay=true, commission_value=0.01, max_labels_count=500, max_lines_count = 500)
leverage = input.float(5, "Leverage 1:", tooltip="Multiply your equity (100%) times the leverage.")
p = (close - open) / (high - low)
qty = strategy.equity * leverage / close
if ta.crossover(p, 0.8)
strategy.entry("L", strategy.long, qty=qty)
if ta.crossunder(p, -0.8)
strategy.close("L")
green = color.new(#0097a7, 0)
red = color.new(#ff195f, 0)
green90 = color.new(#0097a7, 85)
red90 = color.new(#ff195f, 85)
if strategy.position_size > strategy.position_size[1]
label.new(bar_index, low * 0.999, text="▲", textcolor=green, size=size.normal, textalign=text.align_center, color=green90, style=label.style_text_outline)
label.new(bar_index, low * 0.999, text="Buy", textcolor=green, size=size.tiny, textalign=text.align_center, color=green90, style=label.style_label_up)
if strategy.position_size < strategy.position_size[1]
label.new(bar_index, high * 1.001, text="▼", textcolor=red, size=size.normal, textalign=text.align_center, color=red90, style=label.style_text_outline)
label.new(bar_index, high * 1.001, text="Close", textcolor=red, size=size.tiny, textalign=text.align_center, color=red90, style=label.style_label_down)
var float tradeEntryPrice = na
var int tradeEntryBar = na
if strategy.position_size > 0 and strategy.position_size[1] == 0
tradeEntryPrice := close
tradeEntryBar := bar_index
if strategy.position_size == 0 and strategy.position_size[1] > 0
exitPrice = close
exitBar = bar_index
tradeColor = (exitPrice - tradeEntryPrice > 0) ? green : red
topPrice = math.max(tradeEntryPrice, exitPrice)
bottomPrice = math.min(tradeEntryPrice, exitPrice)
box.new(tradeEntryBar, topPrice, exitBar, bottomPrice, border_width=0, bgcolor=color.new(tradeColor, 85))
line.new(tradeEntryBar, topPrice, exitBar, topPrice, color=tradeColor, width=1)
line.new(tradeEntryBar, bottomPrice, exitBar, bottomPrice, color=tradeColor, width=1)