Pine Script策略问题:多单触发失效及MACD柱色识别需求
问题1:开单条件与预期不符的修正
你需要的开多单条件是hist₂ < hist₁且hist < hist₁(零轴下连续两个柱体比前一根柱体更小),但当前代码里的条件hist[2] > hist[1] and hist[1] < hist是零轴下柱体先缩小后放大的形态,和需求完全相反。
修正后的开单条件代码:
if hist < 0 and hist[2] < hist[1] and hist < hist[1] strategy.entry("long", strategy.long, 100) label.new(bar_index, hist, "N")
额外注意点:
- Pine Script中
hist[n]代表n根K线前的柱体值,hist[1]是上一根K线柱体,hist[2]是前两根K线柱体。 - 若开单位置仍不符合预期,检查策略执行模式:默认是
strategy.close_on_close,即信号触发后在下一根K线开盘价成交。如需在当前K线收盘价成交,可修改为strategy.entry("long", strategy.long, 100, close=close),或在策略开头添加strategy("My Strategy", overlay=false, close_entries_rule=strategy.close_entries_rule.all)调整模式。
问题2:识别不同颜色的MACD柱
MACD柱的颜色由两个维度决定:是否在零轴上方、当前柱体相比前一根是增长还是缩小。可将颜色判断逻辑提取为变量,直接用于交易逻辑:
// 定义对应不同颜色柱体的判断变量 is_dark_green = hist >= 0 and hist[1] < hist // 深绿柱(零轴上且柱体增长) is_light_green = hist >= 0 and hist[1] >= hist // 浅绿柱(零轴上且柱体缩小) is_light_red = hist < 0 and hist[1] < hist // 浅红柱(零轴下且柱体增长) is_dark_red = hist < 0 and hist[1] >= hist // 深红柱(零轴下且柱体缩小) // 示例交易逻辑:深绿柱开多,深红柱开空 if is_dark_green strategy.entry("long_green", strategy.long) if is_dark_red strategy.entry("short_red", strategy.short)
这些变量完全对应你代码里的颜色配置:
col_grow_above(深绿)→is_dark_greencol_fall_above(浅绿)→is_light_greencol_grow_below(浅红)→is_light_redcol_fall_below(深红)→is_dark_red
完整修正代码示例
fast_length = input(title="Fast Length", defval=25) slow_length = input(title="Slow Length", defval=100) signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, defval = 9) src = input(title="Source", defval=close) sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"]) sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"]) // Plot colors col_grow_above = input(#26A69A, "Above Grow", group="Histogram", inline="Above") col_fall_above = input(#B2DFDB, "Fall", group="Histogram", inline="Above") col_grow_below = input(#FFCDD2, "Below Grow", group="Histogram", inline="Below") col_fall_below = input(#FF5252, "Fall", group="Histogram", inline="Below") // Calculating fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length) slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length) macd = fast_ma - slow_ma signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length) hist = macd - signal // 新增:柱体颜色判断变量 is_dark_green = hist >= 0 and hist[1] < hist is_light_green = hist >= 0 and hist[1] >= hist is_light_red = hist < 0 and hist[1] < hist is_dark_red = hist < 0 and hist[1] >= hist hline(0, "Zero Line", color=color.new(#787B86, 50)) plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below))) // 修正后的开单条件 if hist < 0 and hist[2] < hist[1] and hist < hist[1] strategy.entry("long", strategy.long, 100) label.new(bar_index, hist, "N") // 可选:基于颜色变量的交易逻辑示例 // if is_dark_green // strategy.entry("long_green", strategy.long) // if is_dark_red // strategy.entry("short_red", strategy.short)
内容的提问来源于stack exchange,提问作者black panther
相关产品推荐
相关产品推荐

