本人想从MC转到TBQ,模型翻译时遇到不少问题,于是做了一些测试,这个测试的信号,按我的逻辑应该突破前一根K线高低点才会有买卖信号,但是如图2中红色圈出的部分,根本没按逻辑来,百思不得其解!太痛苦了,忘大佬指点
由于图片一直上传失败,先上传测试代码如下:
Events
OnBar(ArrayRef<Integer> indexs)
{
if ( MarketPosition<>1 and c[1]>o[1] )
{
Buy(0,Max(Open,H[1]) );
// Buy(0,Max(Open,HighD(1)) );
}
if (MarketPosition<>-1 and c[1]<o[1] )
{
SellShort(0,Min(Open,l[1]) );
// SellShort(0,Min(Open,LowD(1)) );
}
}
其他的具体消息可以学习一下事件域 onbar的内容
谢谢
简单说下机制,听不明白建议看看文档教学和视频以及系统的策略案例
buy sellshort sell buytocover 属于图表信号交易命令,作用是在bar上标记一个信号。历史bar上标记的信号不发单,实盘bar上第一次出信号立即按信号的价格手数参数发单。回测的时候按照bar上标记的信号进行统计得到测试报告。
至于你说的预埋单,图表信号交易机制没有这个内容
你这个代码的基本逻辑就是错的,
if ( MarketPosition<>1 and c[1]>o[1] )
{
Buy(0,Max(Open,H[1]) );
// Buy(0,Max(Open,HighD(1)) );
}
比如这一段的逻辑,上一根的收盘价大于上一根的开盘价,那不是当前bar开盘的时候就能确认吗?确认的时候实时价格是当前开盘价,怎么会用上一根的最高价来作为信号成交价格?这不是明显的偷价吗?
意思TBQ的机制,是出现buy sellshort 指令,必须是满足开仓条件同时处于买得到的价格 这个状态? MC是发单语句也有类似预埋单作用,可以实时价格还没触及,坐等价格触及发单这样,我理解的对吗
我之前理解是,buy(1,max(open,h[1])),这里 max(open,h[1]) 这里等于实时价格还没触及 h[1],所以暂时不发单,触及了再发单
Events
OnBar(ArrayRef<Integer> indexs)
{
if ( MarketPosition<>1 and c[1]>o[1] and c>h[1])
{
Buy(0,Max(Open,H[1]) );
// Buy(0,Max(Open,HighD(1)) );
}
if (MarketPosition<>-1 and c[1]<o[1] and c<l[1] )
{
SellShort(0,Min(Open,l[1]) );
// SellShort(0,Min(Open,LowD(1)) );
}
}
改成这样是不是就对了
没有这种机制
你这个会信号闪烁
计算机是死的,你怎么写,它怎么运行
所以如果你的结果除了问题,那肯定是你写得出了问题。
要么是你对语法和机制还没掌握,要么是你设计的业务逻辑有bug
不管是哪种,都得看了代码才知道哪里出问题
谢谢大佬,代码如下
Events
OnBar(ArrayRef<Integer> indexs)
{
if ( MarketPosition<>1 and c[1]>o[1] )
{
Buy(0,Max(Open,H[1]) );
// Buy(0,Max(Open,HighD(1)) );
}
if (MarketPosition<>-1 and c[1]<o[1] )
{
SellShort(0,Min(Open,l[1]) );
// SellShort(0,Min(Open,LowD(1)) );
}
}
图挂了 看不到