marketposition在图表中仅运行一次吗?

data-href=

正常在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公式修改和重写的权利

//------------------------------------------------------------------------

实盘中可以使用marketposition函数吗?
请问怎么实现十分钟内仅执行一次信号?定时器?可以发个案例吗
marketposition能控制信号闪烁吗
公式中包含MULTSIG,加载在图表、历史回测、实时交易都是tick模式吗
有没有一个函数用于判定当前公式 是在回测环境中运行,还是在实盘环境中运行?
命令当日仅执行一次该如何编写?
在 Oninit事件中 A 函数有限制吗?
tbquant3,怎样新建一个空白图表,并在空白图表上运行公式?
新功能建议:运行中的图表公式的资金量与实际账户中的资金量保持一致
在【图表模式】和【策略运行】下可以读取Dic但【策略优化】不行

你先写的buy 再写的sellshort 那当然开不出来了

代码执行也是有先后顺序的

https://www.tbquant.net/forumDetail?cur=tbquan&id=11165&cid=undefined

data-href=

参考了这个帖子,有答案了