//------------------------------------------------------------------------
// 简称: trend_HL2
// 名称: 趋势策略2(跨周期)
// 类别: 公式应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------
Params
Numeric Length(20); //计算高低点周期
Numeric MaxLots(10); //最大连续浮亏开仓次数
Vars
Series<Numeric> HH;
Series<Numeric> LL;
Series<Numeric> HH1;
Series<Numeric> LL1;
Series<Numeric> EntryPrice1;
Series<Numeric> jincha;
Series<Numeric> sicha;
Series<Numeric> sProfit;
Series<Numeric> lProfit;
Global Numeric lots_sum(1);
Global Numeric DKG;
Global Numeric KKG;
Events
//此处实现事件函数
//初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作
OnInit()
{
//=========跨周期数据计算==============
{
SubscribeBar(Data0.Symbol,"5s",Data0.BeginDateTime);
}
}
//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
OnBar(ArrayRef<Integer> indexs)
{
Range[0:0]
{
HH = Highest(High,Length);
LL = Lowest(Low,Length);
HH1 = nthcon(HH>HH[1],1);
LL1 = nthcon(LL<LL[1],1);
//Print("HH1=" + Text(HH1));
//Print("LL1=" + Text(LL1));
Commentary("HH1=" + Text(HH1));
Commentary("LL1=" + Text(LL1));
If(HH1 < LL1)
{
PlotAuto("趋势线",LL,LL,Red,Enum_Line,Enum_Solid);
}
Else
{
PlotAuto("趋势线",HH,HH,Green,Enum_Line,Enum_Solid);
}
If(CrossOver(LL1,HH1))
{
jincha=1;
sicha=0;
}
If(CrossUnder(LL1,HH1))
{
jincha=0;
sicha=1;
}
}
Range[1:1]
{
//开仓交易
If(MarketPosition == 0)
{
If(data0.jincha==1)
{
Buy(lots_sum,Close);
EntryPrice1 = LastEntryPrice;
DKG=0;
}Else If(data0.sicha==1)
{
SellShort(lots_sum,Close);
EntryPrice1 = LastEntryPrice;
KKG=0;
}
}
//平仓交易
If(MarketPosition > 0 And data0.sicha==1 And BarsSinceEntry >= 1 And DKG==0)
{ //平多单
Sell(0,Close);
print("data0.sicha=" + Text(data0.sicha));
print("time=" + Text(Time));
lProfit = ExitPrice - EntryPrice1;
If((lProfit <= 0) And lots_sum < MaxLots)
{
lots_sum = lots_sum + 1;
Commentary("lots_sum=" + Text(lots_sum));
}Else If (lProfit >0)
{
lots_sum = 1;
}
data0.sicha=0;
DKG=1;
}
Else If(MarketPosition < 0 And data0.jincha==1 And BarsSinceEntry >= 1 And KKG==0)
{ //平空单
BuyToCover(0,Close);
print("data0.jincha=" + Text(data0.jincha));
print("time=" + Text(Time));
sProfit = EntryPrice1 - ExitPrice;
If((sProfit <= 0) And lots_sum < MaxLots)
{
lots_sum = lots_sum + 1;
}Else If (sProfit >0)
{
lots_sum = 1;
}
data0.jincha=0;
KKG=1;
}
Commentary("DKG=" + Text(DKG));
Commentary("KKG=" + Text(KKG));
Commentary("data0.jincha=" + Text(data0.jincha));
Commentary("data0.sicha=" + Text(data0.sicha));
}
}
//------------------------------------------------------------------------
// 编译版本 2024/12/27 105232
// 版权所有 wt9821506389
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
我把全局变量去除,平仓的时候还是有信号闪烁
把KKG定义为序列变量来控制就可以。但关键还是要对运行机制理解透彻。建议完整看下量化零基础视频
你对TB公式机制理解可能有点偏差,BuySell图表信号类策略,是不能这样用全局变量来控制交易条件的。
为什么不能全局变量来控制交易条件?