PowerZone交易策略是一种创新的自动化交易方法,专注于捕捉市场中强劲的价格运动。该策略通过识别特定的价格区域(称为”PowerZones”),为交易者提供明确的入场和出场信号,同时内置风险管理机制。
策略的核心在于识别两种关键的PowerZone类型: 1. 牛市PowerZone(Bullish PowerZone): - 初始为一根熊市K线(收盘价低于开盘价) - 随后连续数根K线(默认5根)呈现上涨趋势 - 总体价格变动超过预设阈值(默认2%)
引入附加过滤条件
动态仓位管理
多时间框架验证
PowerZone交易策略通过系统化地识别价格强势区域,为交易者提供了一种结构化的交易方法。其核心优势在于自动化、可视化和灵活性,但同时需要谨慎调整参数,并持续优化风险管理机制。
/*backtest
start: 2024-03-31 00:00:00
end: 2025-03-29 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tradingbauhaus
//@version=6
strategy("PowerZone Trading Strategy", overlay=true, shorttitle="PZStrat", default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// Inputs
periods = input.int(5, title="Periods for PowerZone", minval=1)
threshold = input.float(0.0, title="Min % Move for PowerZone", step=0.1, minval=0.0)
usewicks = input.bool(false, title="Use Full Range [High/Low]?")
tp_factor = input.float(1.5, title="Take Profit Factor", step=0.1, minval=0.5)
sl_factor = input.float(1.0, title="Stop Loss Factor", step=0.1, minval=0.5)
colors = input.string("DARK", title="Color Scheme", options=["DARK", "BRIGHT"])
showbull = input.bool(true, title="Show Bullish Channel?")
showbear = input.bool(true, title="Show Bearish Channel?")
showdocu = input.bool(false, title="Show Documentation?")
info_pan = input.bool(true, title="Show Info Panel?")
// Core Variables
bullcolor = colors == "DARK" ? color.white : color.green
bearcolor = colors == "DARK" ? color.blue : color.red
ob_period = periods + 1
// PowerZone Detection
absmove = math.abs((close[ob_period] - close[1]) / close[ob_period]) * 100
relmove = absmove >= threshold
// Bullish PowerZone
bullishPZ = close[ob_period] < open[ob_period]
upcandles = 0
for i = 0 to periods - 1
upcandles := upcandles + (close[i + 1] > open[i + 1] ? 1 : 0)
PZ_bull = bullishPZ and upcandles == periods and relmove
PZ_bull_high = PZ_bull ? (usewicks ? high[ob_period] : open[ob_period]) : na
PZ_bull_low = PZ_bull ? low[ob_period] : na
PZ_bull_avg = PZ_bull ? (PZ_bull_high + PZ_bull_low) / 2 : na
// Bearish PowerZone
bearishPZ = close[ob_period] > open[ob_period]
downcandles = 0
for i = 0 to periods - 1
downcandles := downcandles + (close[i + 1] < open[i + 1] ? 1 : 0)
PZ_bear = bearishPZ and downcandles == periods and relmove
PZ_bear_high = PZ_bear ? high[ob_period] : na
PZ_bear_low = PZ_bear ? (usewicks ? low[ob_period] : open[ob_period]) : na
PZ_bear_avg = PZ_bear ? (PZ_bear_high + PZ_bear_low) / 2 : na
// Strategy Logic
var float bull_entry = na
var float bull_tp = na
var float bull_sl = na
var float bear_entry = na
var float bear_tp = na
var float bear_sl = na
if PZ_bull and close > PZ_bull_high and strategy.position_size == 0
bull_entry := close
bull_tp := bull_entry + (PZ_bull_high - PZ_bull_low) * tp_factor
bull_sl := PZ_bull_low - (PZ_bull_high - PZ_bull_low) * sl_factor
strategy.entry("BullPZ", strategy.long)
strategy.exit("BullExit", "BullPZ", limit=bull_tp, stop=bull_sl)
if PZ_bear and close < PZ_bear_low and strategy.position_size == 0
bear_entry := close
bear_tp := bear_entry - (PZ_bear_high - PZ_bear_low) * tp_factor
bear_sl := PZ_bear_high + (PZ_bear_high - PZ_bear_low) * sl_factor
strategy.entry("BearPZ", strategy.short)
strategy.exit("BearExit", "BearPZ", limit=bear_tp, stop=bear_sl)
// Visualization
plot(PZ_bull_high, title="Bull High", color=bullcolor, style=plot.style_linebr, linewidth=2, offset=-ob_period)
plot(PZ_bull_low, title="Bull Low", color=bullcolor, style=plot.style_linebr, linewidth=2, offset=-ob_period)
plot(PZ_bear_high, title="Bear High", color=bearcolor, style=plot.style_linebr, linewidth=2, offset=-ob_period)
plot(PZ_bear_low, title="Bear Low", color=bearcolor, style=plot.style_linebr, linewidth=2, offset=-ob_period)
// Alerts
alertcondition(PZ_bull and close > PZ_bull_high, title="Bullish Entry", message="Bullish PowerZone Breakout - LONG!")
alertcondition(PZ_bear and close < PZ_bear_low, title="Bearish Entry", message="Bearish PowerZone Breakdown - SHORT!")
// Info Panel
var label info_panel = na
if info_pan
if not na(info_panel)
label.delete(info_panel)
panel_text = "POWERZONE STRATEGY\n" +
"Bull High: " + str.tostring(PZ_bull_high, "#.##") + " | TP: " + str.tostring(bull_tp, "#.##") + " | SL: " + str.tostring(bull_sl, "#.##") + "\n" +
"Bear High: " + str.tostring(PZ_bear_high, "#.##") + "\n" +
"Bear Low: " + str.tostring(PZ_bear_low, "#.##") + " | TP: " + str.tostring(bear_tp, "#.##") + " | SL: " + str.tostring(bear_sl, "#.##")
info_panel := label.new(x=bar_index, y=high, text=panel_text, xloc=xloc.bar_index, yloc=yloc.abovebar, color=color.gray, textcolor=color.white, size=size.normal)
// Documentation
if showdocu
label.new(x=bar_index, y=low, text="PowerZone Strategy\nLONG on breakout above Bull PZ High\nSHORT on breakdown below Bear PZ Low", xloc=xloc.bar_index, yloc=yloc.belowbar, color=color.gray, textcolor=color.white, size=size.tiny)