我的问题是如何写:限价报单并当本bar未达成成交则报单延续至后续各bar,直至成交或信号转变。
我发现TBquant的信号确定后报单买入机制是作用于当前bar的,编写时用“open”、“close”较为通常。
但是,信号确定时,往往伴随一些行情的动量,买入价格不优。
比如,我一个策略以连续两根bar的close(close[1]和close[2])收于均线上方确定信号为做多买入信号,但是我希望能买到的价格是open[1],因此我写buy(lots,open[1])。
照理说,我希望这是一个限价报单,并且能够持续到满足条件时成交。
但是在回测中,我发现实现的买卖点不准,没有按照我的期望来,往往回测显示买点都是在信号确认bar后的那根bar一个最低点,可是这明显是实现不了的,因为那个低点并未满足达到open[1]。而且即便如此,实盘中也不会准确在low、high点去买入。因此,肯定是语言表达未能达成。
因此,我想知道,限价报单并且未成交维持报单的写法,以使成交能够精确而现实。
以下是这个公式的多单买卖条件代码,请老师示范指正代码写法:
// 多单入场条件:不持有多单且前两根bar收盘在均线上方
If (MarketPosition <= 0 And CurrentBar >= 3 And Close[1] > wma[1] And Close[2] > wma[2])
{
// 如果没有活跃的多单挂单,则创建挂单
If (!BuyOrderActive)
{
// 计算多单入场价格
BuyOrderPrice = wma + EntryOffset;
BuyOrderActive = True; retryCount = 0; // 重置重试计数
orderBarIndex = CurrentBar; // 记录挂单的bar索引
// 提交多单挂单 Buy(Lots, BuyOrderPrice);
// 输出交易信息 Print("提交多单挂单: 价格=" + Text(BuyOrderPrice) + ", 数量=" + Text(Lots)); } }
// 多单出场条件:持有多单且前两根bar收盘在均线下方
If (MarketPosition > 0 And CurrentBar >= 3 And Close[1] < wma[1] And Close[2] < wma[2])
{
// 计算多单出场价格
Numeric sellPrice = wma - ExitOffset;
// 平多单
Sell(Lots, sellPrice);
// 输出交易信息
Print("多单出场: 价格=" + Text(sellPrice) + ", 数量=" + Text(Lots));
// 同时转换做空 。。。。
图表程序挂单之后,理论上就跟图表无关了,成交取决于市场价格,成交不了,挂单就会一直挂着。
不存在什么延续的事。
要处理挂单,常见的有交易助手,监控器。