VR1:=SUM(MAX(MAX(HIGH-LOW,ABS(HIGH-REF(CLOSE,1))),ABS(LOW-REF(CLOSE,1))),25); VAR2:=HIGH-REF(HIGH,1); VAR3:=REF(LOW,1)-LOW; VAR4:=SUM(IF(VAR2>0 AND VAR2>VAR3,VAR2,0),25); VAR5:=SUM(IF(VAR3>0 AND VAR3>VAR2,VAR3,0),25); VAR6:=VAR4*100/VR1; VAR7:=VAR5*100/VR1; VAR8:=MA(ABS(VAR7-VAR6)/(VAR7+VAR6)*100,15); VAR9:=(VAR8+REF(VAR8,15))/2; BUY1:=ZIGZAG(C,10,1); SELL1:=MA(BUY1,2); DRAWICON(CROSS( BUY1,SELL1),L-0.1,95); DRAWICON(CROSS(SELL1,BUY1),H+0.1,'ICO96'); STICKLINE1(CROSS(BUY1,SELL1),H,L,3,0),COLORWHITE; STICKLINE1(CROSS(SELL1,BUY1),H,L,3,0),COLORYELLOW;
这是文华的

这是TB的

//------------------------------------------------------------------------
// 简称: TB_wmr8684413
// 名称:
// 类别: 策略应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------
// 将文华财经代码转换为开拓者TBQuant V3版本
Params
Numeric SwingDepth(1); // 寻找高低点的周期范围
Numeric RetracePct(10); // 转向百分比阈值
Vars
Series<Numeric> SwingPrice;
Numeric SwingHighPrice;
Numeric SwingLowPrice;
Series<Numeric> UpDn(0);
Bool Isrollover(true);//是否后复权
Bool Isrolloverrealprice(true);//是否映射真实价格
Bool IsautoSwapposition(true);//是否自动换仓
Defs
//此处添加公式函数
Events
//此处实现事件函数
OnInit()
//设置周期
{
//交易设置
Range[0:DataCount-1]
{
If(IsRollover)
{
AddDataFlag(Enum_Data_RolloverBackWard());//设置后复权
}
If(IsRolloverRealPrice)
{
AddDataFlag(Enum_Data_RolloverRealPrice());//是否映射真实价格
}
If(IsAutoSwapPosition)
{
AddDataFlag(Enum_Data_AutoSwapPosition());//设置自动换仓
}
}
}
//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
OnBar(ArrayRef<Integer>indexs)
{
SwingHighPrice = SwingHigh(1, High, SwingDepth, 2);
SwingLowPrice = SwingLow(1, Low, SwingDepth, 2);
//ZigZag逻辑判断趋势转折
If (SwingHighPrice != -1)
{
If (UpDn <= 0 && SwingHighPrice >= SwingPrice * (1 + RetracePct * 0.01)And MarketPosition>=0 )
{
UpDn = 1;
SwingPrice = SwingHighPrice;
SellShort (1,Open);
}
Else
If (UpDn == 1 && SwingHighPrice >= SwingPrice And MarketPosition>=0 )
{
SwingPrice = SwingHighPrice;
SellShort (1,Open);
}
}
Else
If (SwingLowPrice != -1)
{
If (UpDn >= 0 && SwingLowPrice <= SwingPrice * (1 - RetracePct * 0.01) And MarketPosition<=0)
{
UpDn = -1;
SwingPrice = SwingLowPrice;
Buy(1,Open);
}
Else
If (UpDn == -1 && SwingLowPrice <= SwingPrice And MarketPosition<=0)
{
SwingPrice = SwingLowPrice;
Buy(1,Open);
}
}
}
//------------------------------------------------------------------------
// 编译版本 2025/10/23 1396/1762/277
// 版权所有 jswxyfx
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TradeBlazer策略修改和重写的权利
//------------------------------------------------------------------------
谢谢大佬!
有偿
TB这个ZIGZAG没有,你让TB代写: https://bbs.tbquant.net/thread/20241205162315158864
用ZigZag做交易策略我认为不可取,从静态看高底点信号很好看,都是开在最高或最底点,因为交易策略固有的信号闪烁都很难消除,ZigZag是在一定周期内有了新高或新底,它是有新的用新的同时删了旧的高底点的结果,图表上看上去信号都 在高点和底点,实盘中就不是了。