// 策略名称:ATR多空信号(5分钟分时专用+开仓K线止损)
// 适用周期:5分钟分时图
// 止损规则:开多→止损=开仓5分钟柱最低价;开空→止损=开仓5分钟柱最高价
Params
Numeric ATRLength(60); // ATR计算周期
Numeric EMA60Length(60); // 中轨EMA周期(5分钟图对应300分钟趋势)
Numeric Dx(5); // 短线EMA周期(5分钟图对应25分钟趋势)
Numeric N(15); // HH/LL计算周期(5分钟图对应75分钟高低点)
Numeric Lots(1); // 开仓手数(5分钟图建议1-2手控制风险)
Vars
// 基础变量
Numeric TR;
Numeric ATR;
Numeric MidLine;
Numeric UpperLine;
Numeric LowerLine;
Numeric ShortMA;
Numeric HH;
Numeric LL;
Numeric TT;
Numeric NN;
Numeric YY;
Numeric TradeLine;
Bool LongSignal;
Bool ShortSignal;
// 止损专用变量(存储开仓K线高低点)
Numeric LongEntryLow; // 多单开仓5分钟柱最低价
Numeric ShortEntryHigh; // 空单开仓5分钟柱最高价
Bool IsLongPosition; // 多单持仓标识
Bool IsShortPosition; // 空单持仓标识
Begin
// 1. 计算ATR与轨道线(5分钟图适配)
If(CurrentBar>=1) Begin
TR=Max(Max(High-Low,Abs(Close[1]-High)),Abs(Close[1]-Low));
End Else Begin
TR=High-Low;
End;
ATR=EMA(TR,ATRLength);
MidLine=EMA(Close,EMA60Length);
UpperLine=MidLine+ATR;
LowerLine=MidLine-ATR;
ShortMA=EMA(Close,Dx);
// 2. 计算多空信号(5分钟图高低点判断)
HH=HHV(High,N);
LL=LLV(Low,N);
TT=BarsLast(HH>HH[1]);
NN=BarsLast(LL<LL[1]);
YY=IfElse(TT<NN,1,IfElse(TT>NN,-1,0));
TradeLine=IfElse(YY>=0,LL,HH);
LongSignal=Cross(NN,TT); // 5分钟图“多”信号
ShortSignal=Cross(TT,NN); // 5分钟图“空”信号
// 3. 持仓状态判断
IsLongPosition=MarketPosition==1;
IsShortPosition=MarketPosition==-1;
// 4. 开仓逻辑(同步记录开仓5分钟柱高低点)
// 4.1 多单开仓:记录开仓柱最低价作为止损
If(LongSignal) Begin
Buy(Lots,Open); // 5分钟图多信号开多
Sell(0,Open); // 平掉现有空单
LongEntryLow=Low; // 存储开仓5分钟柱的最低价(用于止损)
End;
// 4.2 空单开仓:记录开仓柱最高价作为止损
If(ShortSignal) Begin
BuyShort(Lots,Open); // 5分钟图空信号开空
BuyToCover(0,Open); // 平掉现有多单
ShortEntryHigh=High; // 存储开仓5分钟柱的最高价(用于止损)
End;
// 5. 止损逻辑(严格匹配5分钟图需求)
// 5.1 多单止损:价格跌破开仓5分钟柱最低价,立即平仓
If(IsLongPosition And Close<LongEntryLow) Begin
Sell(0,Close); // 市价平仓(确保快速止损,5分钟图波动快)
End;
// 5.2 空单止损:价格突破开仓5分钟柱最高价,立即平仓
If(IsShortPosition And Close>ShortEntryHigh) Begin
BuyToCover(0,Close); // 市价平仓(5分钟图避免滑点扩大)
End;
// 6. 常规平仓逻辑(信号反转平仓)
If(ShortSignal And IsLongPosition) Begin
Sell(0,Open);
End;
If(LongSignal And IsShortPosition) Begin
BuyToCover(0,Open);
End;
// 7. 5分钟图画图(清晰显示关键信号)
PlotNumeric("中轨",MidLine,Yellow);
PlotNumeric("上轨",UpperLine,Red);
PlotNumeric("下轨",LowerLine,Green);
PlotNumeric("短线",ShortMA,White);
PlotNumeric("做多线",IfElse(YY>=0,TradeLine,NULL),Red);
PlotNumeric("做空线",IfElse(YY<0,TradeLine,NULL),Green);
// 标注开仓止损位(5分钟图直观查看)
If(IsLongPosition) PlotNumeric("多单止损",LongEntryLow,Magenta,Linethick2);
If(IsShortPosition) PlotNumeric("空单止损",ShortEntryHigh,Cyan,Linethick2);
// 信号文字标注
If(LongSignal) PlotString("多","多",Low,Red);
If(ShortSignal) PlotString("空","空",High,Green);
End
这只是看着很想tb语言,但是实际上不知所云的代码。建议谁写的让谁修改