如何修改AlphaTrend策略仅做多并在卖出信号触发时平仓获利?
AlphaTrend 仅做多策略修改方案(卖出信号平仓)
修改说明
原策略支持多空双向开仓,现调整为仅建立多头仓位,且触发卖出信号时立即平仓现有多头持仓。核心修改逻辑为删除空头开仓代码,将卖出信号绑定多头平仓操作。
修改后的完整代码
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // author © KivancOzbilgic // developer © KivancOzbilgic //@version=5 strategy("AlphaTrend 仅做多策略", shorttitle='ATSt-Long', overlay=true, format=format.price, precision=2, margin_long=100) coeff = input.float(1, '乘数', step=0.1) AP = input(14, '通用周期') ATR = ta.sma(ta.tr, AP) src = input(close) showsignalsk = input(title='显示信号标记?', defval=false) novolumedata = input(title='无成交量数据时切换计算方式?', defval=false) upT = low - ATR * coeff downT = high + ATR * coeff AlphaTrend = 0.0 AlphaTrend := (novolumedata ? ta.rsi(src, AP) >= 50 : ta.mfi(hlc3, AP) >= 50) ? upT < nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : upT : downT > nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : downT color1 = AlphaTrend > AlphaTrend[2] ? #00E60F : AlphaTrend < AlphaTrend[2] ? #80000B : AlphaTrend[1] > AlphaTrend[3] ? #00E60F : #80000B k1 = plot(AlphaTrend, color=color.new(#0022FC, 0), linewidth=3) k2 = plot(AlphaTrend[2], color=color.new(#FC0400, 0), linewidth=3) fill(k1, k2, color=color1) buySignalk = ta.crossover(AlphaTrend, AlphaTrend[2]) sellSignalk = ta.crossunder(AlphaTrend, AlphaTrend[2]) K1 = ta.barssince(buySignalk) K2 = ta.barssince(sellSignalk) O1 = ta.barssince(buySignalk[1]) O2 = ta.barssince(sellSignalk[1]) plotshape(buySignalk and showsignalsk and O1 > K2 ? AlphaTrend[2] * 0.9999 : na, title='买入', text='买入', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(#0022FC, 0), textcolor=color.new(color.white, 0)) plotshape(sellSignalk and showsignalsk and O2 > K1 ? AlphaTrend[2] * 1.0001 : na, title='卖出', text='卖出', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.maroon, 0), textcolor=color.new(color.white, 0)) // 仅触发多头开仓 longCondition = buySignalk if (longCondition) strategy.entry("多头仓位", strategy.long) // 卖出信号触发时平仓多头 sellCondition = sellSignalk if (sellCondition) strategy.close("多头仓位")
关键修改点
- 移除空头配置:删除原策略的
margin_short=100参数,取消空头仓位支持 - 替换空头操作:删除原代码中的空头开仓逻辑,改为在卖出信号触发时调用
strategy.close("多头仓位"),直接平掉已持有的多头持仓 - 优化策略标识:修改策略名称为"AlphaTrend 仅做多策略",短标题改为
ATSt-Long,便于区分 - 参数中文本地化:将输入参数的英文标签改为中文,提升可读性
内容的提问来源于stack exchange,提问作者yasinkonuk
相关产品推荐
相关产品推荐

