OPEN-SOURCE SCRIPT

SOL 15分钟MACD全自动策略

52
//version=5
strategy("30分钟高胜率MACD+RSI全自动策略", overlay=true, shorttitle="HighWin-30min Auto",
initial_capital=10000, // 初始资金
default_qty_type=strategy.cash, // 按资金比例开仓
default_qty_value=2000, // 单次开仓金额(可调整)
commission_type=strategy.commission.percent,
commission_value=0.1, // 匹配欧易0.1%默认手续费
margin_long=100, margin_short=100, // 现货交易无杠杆
pyramiding=0, // 禁止加仓,控制风险
close_entries_rule=strategy.close_entries_rule.all,
calc_on_every_tick=false, // 关闭逐Tick计算,避免报错
title_color=#1E90FF, line_color=#FF6347)

// ———— 1. 核心参数设置(高胜率优化版,可微调) ————
// MACD参数(30分钟周期适配,比默认更稳定)
macd_fast = input.int(12, title="MACD快线周期", minval=1)
macd_slow = input.int(26, title="MACD慢线周期", minval=1)
macd_signal = input.int(9, title="MACD信号线周期", minval=1)
// RSI参数(过滤超买超卖,避免追涨杀跌)
rsi_length = input.int(14, title="RSI周期", minval=1)
rsi_long_thresh = input.int(40, title="多头RSI阈值(低于该值可开多)", minval=10, maxval=50)
rsi_short_thresh = input.int(60, title="空头RSI阈值(高于该值可开空)", minval=50, maxval=90)
// 成交量参数(验证资金动能)
vol_multiplier = input.float(1.5, title="成交量放大倍数", step=0.1, minval=1.0)
// ATR止损与止盈参数(科学风控)
atr_length = input.int(14, title="ATR周期(衡量波动)", minval=1)
atr_sl_multi = input.float(2.0, title="止损ATR倍数(2倍更安全)", step=0.1, minval=1.0)
risk_reward = input.float(2.0, title="风险回报比(1:2,赚2倍于亏)", step=0.1, minval=1.5)
// 信号过滤(避免连续交易)
signal_gap = input.int(4, title="多空信号最小间隔K线数", minval=2)

// ———— 2. 指标计算(三重验证,降低假信号) ————
// 2.1 MACD计算(多空趋势核心)
[macd_line, signal_line, hist_line] = ta.macd(close, macd_fast, macd_slow, macd_signal)
// 多头趋势:MACD在零轴上+红柱放大;空头趋势:MACD在零轴下+绿柱放大
macd_long_trend = macd_line > 0 and hist_line > hist_line[1]
macd_short_trend = macd_line < 0 and hist_line < hist_line[1]

// 2.2 RSI计算(过滤超买超卖)
rsi_value = ta.rsi(close, rsi_length)
rsi_long_condition = rsi_value < rsi_long_thresh // 未超买,有上涨空间
rsi_short_condition = rsi_value > rsi_short_thresh // 未超卖,有下跌空间

// 2.3 成交量计算(验证资金动能)
vol_condition = volume >= volume[1] * vol_multiplier and volume[1] > 0 // 成交量比前根放大50%+
vol_long = vol_condition and close > open // 放量上涨,多头资金进场
vol_short = vol_condition and close < open // 放量下跌,空头资金进场

// 2.4 ATR计算(动态止损基础)
atr_value = ta.atr(atr_length)
atr_value := nz(atr_value, ta.sma(ta.tr, atr_length)) // 空值兜底,避免报错

// ———— 3. 多空信号生成(三重条件共振,高胜率核心) ————
// 3.1 多头信号(4个条件同时满足)
var int last_long_bar = 0
long_condition = ta.crossover(macd_line, signal_line) // MACD金叉
and macd_long_trend // 多头趋势
and rsi_long_condition // RSI未超买
and vol_long // 放量上涨
and (bar_index - last_long_bar) >= signal_gap // 间隔过滤
final_long = long_condition

// 3.2 空头信号(4个条件同时满足)
var int last_short_bar = 0
short_condition = ta.crossunder(macd_line, signal_line) // MACD死叉
and macd_short_trend // 空头趋势
and rsi_short_condition // RSI未超卖
and vol_short // 放量下跌
and (bar_index - last_short_bar) >= signal_gap // 间隔过滤
final_short = short_condition

// ———— 4. 动态止盈止损计算(适配30分钟波动,不被洗盘) ————
// 4.1 记录开仓关键数据
var float long_entry = na // 多头入场价
var float short_entry = na // 空头入场价
var float long_entry_low = na // 多头开仓K线低点
var float short_entry_high = na // 空头开仓K线高点
var float entry_atr = na // 开仓时ATR值

// 多头开仓数据记录
if final_long
long_entry := close
long_entry_low := low
entry_atr := atr_value
last_long_bar := bar_index // 更新最后多头信号K线

// 空头开仓数据记录
if final_short
short_entry := close
short_entry_high := high
entry_atr := atr_value
last_short_bar := bar_index // 更新最后空头信号K线

// 4.2 多头止盈止损(双逻辑防护)
long_sl = math.max(long_entry - (entry_atr * atr_sl_multi), long_entry_low * 0.997) // 0.3%缓冲防插针
long_loss = long_entry - long_sl // 止损幅度
long_tp = long_entry + (long_loss * risk_reward) // 1:2风险回报比止盈
// 额外绑定中期压力:前10根K线高点(30分钟周期趋势更稳,周期稍长)
long_resistance = ta.highest(high, 10)[1]
long_tp = math.min(long_tp, long_resistance * 1.003) // 0.3%缓冲防踏空

// 4.3 空头止盈止损(对称逻辑)
short_sl = math.min(short_entry + (entry_atr * atr_sl_multi), short_entry_high * 1.003)
short_loss = short_sl - short_entry
short_tp = short_entry - (short_loss * risk_reward)
// 额外绑定中期支撑:前10根K线低点
short_support = ta.lowest(low, 10)[1]
short_tp = math.max(short_tp, short_support * 0.997)

// ———— 5. 全自动交易执行(严格仓位控制,避免冲突) ————
// 多头开仓:无仓位时执行(避免多空对冲)
if final_long and strategy.position_size == 0
strategy.entry("Long-Position", strategy.long)
strategy.exit("Long-Exit", "Long-Position", stop=long_sl, limit=long_tp) // 自动挂止盈止损

// 空头开仓:无仓位时执行
if final_short and strategy.position_size == 0
strategy.entry("Short-Position", strategy.short)
strategy.exit("Short-Exit", "Short-Position", stop=short_sl, limit=short_tp)

// ———— 6. 可视化与预警(清晰监控,欧易同步提醒) ————
// 6.1 多空信号标记(直观区分)
plotshape(final_long, title="多头信号", location=location.belowbar,
color=color.new(color.green, 0), style=shape.labelup,
text="多", textcolor=color.white, size=size.small)
plotshape(final_short, title="空头信号", location=location.abovebar,
color=color.new(color.red, 0), style=shape.labeldown,
text="空", textcolor=color.white, size=size.small)

// 6.2 止盈止损线(开仓后自动显示,红色止损、绿色止盈)
plot(strategy.position_size > 0 ? long_sl : na, title="多头止损",
color=color.red, linewidth=2, style=plot.style_linebr)
plot(strategy.position_size > 0 ? long_tp : na, title="多头止盈",
color=color.green, linewidth=2, style=plot.style_linebr)
plot(strategy.position_size < 0 ? short_sl : na, title="空头止损",
color=color.red, linewidth=2, style=plot.style_linebr)
plot(strategy.position_size < 0 ? short_tp : na, title="空头止盈",
color=color.green, linewidth=2, style=plot.style_linebr)

// 6.3 副图指标(辅助验证趋势)
// MACD副图
plot(macd_line, title="MACD线", color=color.blue, linewidth=1)
plot(signal_line, title="MACD信号线", color=color.orange, linewidth=1)
barcolor(hist_line > 0 ? color.new(color.green, 60) : color.new(color.red, 60), title="MACD柱")
hline(0, "MACD零轴线", color=color.gray, linestyle=hline.style_dashed)
// RSI副图(显示超买超卖区间)
plot(rsi_value, title="RSI", color=color.purple, linewidth=1, display=display.data_window)
hline(rsi_long_thresh, "多头RSI阈值", color=color.green, linestyle=hline.style_dotted)
hline(rsi_short_thresh, "空头RSI阈值", color=color.red, linestyle=hline.style_dotted)
hline(30, "超卖线", color=color.gray, linestyle=hline.style_dashed)
hline(70, "超买线", color=color.gray, linestyle=hline.style_dashed)

// 6.4 关键预警(欧易同步通知,无需盯盘)
alertCondition(final_long, title="多头开仓提醒",
message="30分钟触发高胜率多头信号,入场价:" + str.tostring(long_entry) + ",止损:" + str.tostring(long_sl))
alertCondition(final_short, title="空头开仓提醒",
message="30分钟触发高胜率空头信号,入场价:" + str.tostring(short_entry) + ",止损:" + str.tostring(short_sl))
alertCondition(strategy.position_size > 0 and close <= long_sl, title="多头止损提醒",
message="多头触及止损位:" + str.tostring(long_sl) + ",已自动平仓")
alertCondition(strategy.position_size > 0 and close >= long_tp, title="多头止盈提醒",
message="多头触及止盈位:" + str.tostring(long_tp) + ",已自动平仓")
alertCondition(strategy.position_size < 0 and close >= short_sl, title="空头止损提醒",
message="空头触及止损位:" + str.tostring(short_sl) + ",已自动平仓")
alertCondition(strategy.position_size < 0 and close <= short_tp, title="空头止盈提醒",
message="空头触及止盈位:" + str.tostring(short_tp) + ",已自动平仓")

Pernyataan Penyangkalan

Informasi dan publikasi tidak dimaksudkan untuk menjadi, dan bukan merupakan saran keuangan, investasi, perdagangan, atau rekomendasi lainnya yang diberikan atau didukung oleh TradingView. Baca selengkapnya di Persyaratan Penggunaan.