正常在0图层平掉空头以后,会在相同价格开立新的多头头寸,后续会在红圈处平掉多头再开立新的空头头寸,但是图表没有给出这两个信号,是不是0图层上代码只判断一次?但是1图层5分钟是baseperiod,按照这个颗粒度去运行正常应该有空透信号啊?以下为代码。
Params
Numeric Length(1); //周期
Numeric SlowLength(26);
//Numeric Offset(1.1); //标准差倍数
Numeric Constt(0.3); // 通道倍数
Numeric OverSold(5) ; //超卖
Numeric OverBought(95) ; //超买
Numeric comno(1);//打算投资的品种个数
Vars
Series<Numeric> UpLine; //上轨
Series<Numeric> DownLine; //下轨
Series<Numeric> MidLine; //中间线
Series<Numeric> Band;
Series<Numeric> AvgRange;
Numeric thigh;
Numeric tlow;
Series<Numeric> TRange;
Series<Numeric> AvgValue1;
Series<Numeric> AvgValue2;
Numeric money;//开仓资金
Numeric myprice;//委托价格
Numeric lots;//委托数量
Global Numeric risk;//账户当前风险程度
Series<Numeric> kcprice;//开仓价格
Series<Numeric> priceguess;
Global Numeric lposition(0);
Global Numeric sposition(0);
Events
OnInit()
{
AddDataFlag(Enum_Data_RolloverBackWard());
AddDataFlag(Enum_Data_RolloverRealPrice());
AddDataFlag(Enum_Data_AutoSwapPosition());
AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());
SetBeginBarMaxCount(10); //设置最大起始bar数为10
}
OnReady()
{
SetBackBarMaxCount(1+Max(SlowLength,Length));
}
OnBar(ArrayRef<Integer> indexs)
{
risk = Portfolio_UsedMargin / Portfolio_CurrentEquity;//定义risk为保证金占动态权益比例
Numeric a;
Numeric result = 1;
for a = 0 to DataSourceSize-1
{
result = result*data[a].BarExistStatus;
}
If (result <> 1) Return;//检查跨周期数据源是否闪烁
Range[0:DataSourceSize() - 1]
{
MidLine = AverageFC(Close[1],Length);
thigh = max(high,close[1]);
tlow = min(low,Close[1]);
TRange = thigh - tlow;
AvgRange = Average(TRange[1],Length); // 计算真实波动均值(atr)
UpLine = MidLine + AvgRange*Constt; // 计算通道上轨=均线+1.2倍的10周期真实波动值
DownLine = MidLine - AvgRange*Constt;// 计算通道下轨=均线-1.2倍的10周期真实波动值
Band = (upline-downline)/2;
PlotNumeric(UpLine,UpLine);
PlotNumeric(DownLine,DownLine);
PlotNumeric(MidLine,MidLine);
}
money = Portfolio_CurrentEquity * 0.4 / comno;//按总风险度的40%,每个品种均分投资额
myprice = Open;//这里使用open,更为精确的是使用委托价格
lots = IntPart(money/(myprice*contractunit*BigPointValue*MarginRatio)); //计算开仓手数
Commentary(始MarketPosition: + Text(MarketPosition()));
Commentary(始动态权益: + Text(Portfolio_CurrentEquity));
Commentary(始保证金占用: + Text(Portfolio_UsedMargin));
If (CurrentBar >= Max(SlowLength,Length))
{
Range[0:0]
{
Commentary(始风险度:+Text(risk));
If(risk <= 0.4 && MarketPosition <> 1 && Low <= DownLine)//在震荡市,限制开仓规模
{
Buy(lots,Max(low,DownLine));//低线做多
Commentary(低位做多价:+Text(Max(low,DownLine)));
kcprice = EntryPrice;
lposition = lots;
}
If(MarketPosition > 0 && high >= UpLine && BarsSinceEntry > 0)//多头止赢
{
Sell(lposition,min(high,UpLine));
Commentary(多头止盈退出价:+Text(min(high,UpLine)));
Commentary(多头止盈);
Commentary(多头止赢点数:+Text(ExitPrice - kcprice));
}
If(risk <= 0.4 && MarketPosition <> -1 && high >= UpLine ) //在震荡市,限制开仓规模
{
SellShort(lots,Min(High,UpLine));//高线做空
Commentary(高位做空价:+Text(Min(High,UpLine)));
kcprice = EntryPrice;
sposition = lots;
}
If(MarketPosition < 0 && Low <= downLine && BarsSinceEntry > 0)//空头止赢
{
BuyToCover(sposition,max(low,DownLine));
Commentary(空头止盈退出价:+Text(max(low,DownLine)));
Commentary(空头止赢);
Commentary(空头盈利点数:+Text(kcprice - ExitPrice));
}
}
}
}
OnBarClose(ArrayRef<Integer> indexs)
{
risk = Portfolio_UsedMargin / Portfolio_CurrentEquity;//定义risk为保证金占动态权益比例
Commentary(终风险度:+Text(risk));
Commentary(终MarketPosition: + Text(MarketPosition()));
}
//------------------------------------------------------------------------
// 编译版本 2024/06/20 220532
// 版权所有 xingn1991
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
你先写的buy 再写的sellshort 那当然开不出来了
代码执行也是有先后顺序的