龙听期货论坛's Archiver

龙听 发表于 2018-5-12 11:51

交易系統送信號如何比別人更快幾秒[MC平台]

在盤中常常發現某些整點時間或特定時間週期會突然有許多系統單同時出來
特別是長週期的突破系統,通常會在突破後的下一個整點時間全數出籠,
因此出現滑價或買不到好價位

針對這個問題,可以用語法來解決,讓你比別人快幾秒進場,甚至可以吃點別人的豆腐
一般程序化交易系統都往往會在這根bar結束(buy this bar at close)或是下根bar開始(buy next bar at open)時送出委託單,如果你可以在這根bar結束前就進場,自然比別人更佔便宜!


這裡把送出委託單的時間在往前移10秒,必須啟動IntrabarOrderGeneration才能正常運作。
在Multicharts裡設置 Format(格式)->Signal(信號)->Fomat(設置)->IntrabarOrderGeneration(Bar內產生委託)

[code]
vars:

intrabarpersist waitingForBuy(false),

intrabarpersist mySec(0),

intrabarpersist myEntrySec(0);

if barstatus=0 then begin

mySec = currenttime_s;

myEntrySec = currenttime_s+barinterval*60-10;

end else begin

mySec = mySec[1];

myEntrySec = myEntrySec[1];

end;

if {your entry condition} then begin

waitingForBuy = true;

end;

if waitingForBuy and currenttime_s>=myEntrySec then begin

buy next bar at open;

waitingForBuy =false;

end;
[/code]

龙听 发表于 2018-5-12 12:05

下面进行解释一下:

IntrabarOrderGeneration:这个意思是允许K线BAR还在走的过程中就可以产生交易信号。因为一般是默认这根K线走完才出信号,只有加上这一个才能让这根K线还没有走完就可以盘中发出委托单来。

barstatus=0 意思是当前这根BAR出第一个TICK价格。
*注: 这里做一个说明,关于技术图表上面数据的分类,一般的交易软件都是分这么两种,一是分时图,一个是技术图的。分时图就不说了,技术图表现价格的方式很多种,像美国线,宝塔线等等,但是国际上通用最多的就是蜡烛图,也叫K线。但是无论是蜡烛图还是分时图都源于一种数据叫TICK数据。国内默认的TICK数据是一秒钟统计的一秒钟内成交的数量,价格以及持仓情况的信息流。无数个秒级的TICK画成了分时图,而在某一时间段内(比方说五分钟或一小时),这个时间段第一个TICK数据的价格就是这个时间段K线的开盘价,最后一个TICK的价格就是这个时间段K线的收盘价,在这段时间内最大的TICK价就是最高价,最小的TICK价就是这段时间的K线的最低价。而在这个时间短内所有的TICK上面的成交加总就是这个时间段时K线的成交量,持仓量类似。

barstatus=2的时间,说明这个TICK是这根BAR也叫K线的最后一个TICK价格。也就是这根BAR的收盘价了。

龙听 发表于 2018-5-12 13:47

if barstatus=0 then begin

mySec = currenttime_s;

myEntrySec = currenttime_s+barinterval*60-10;
这一段的意思是说系统检查到现在这根K线的第一个TICK数据出来了,就是相当于这个K线刚开始,那么我设定的时间就是现在的时间。我进场的时间就是我设置时间+ BAR/K线周期*60秒-10.就是就是这根BAR结束之前10秒钟。比方说要是我们做程序化跑的是5分钟,那么五分钟内有5*60=300秒时间。减去10秒,也就是在这根BAR在第290秒时就是我要进场的时间了 。

龙听 发表于 2018-5-12 13:55

[b]回复 [url=http://www.qhlt.cn/redirect.php?goto=findpost&pid=21076&ptid=15492]1#[/url] [i]龙听[/i] [/b]

else begin

mySec = mySec[1];

myEntrySec = myEntrySec[1];

这一段的时间是如果现在不是这根K线的第一个TICK数据。那么我时间的时间就是上一根BAR/K线的记录的第一个BAR时的时间。这主要是为了应对盘中BAR在一直不停的运行的情况。这时系统只要检查到现在的TICK并不是这根BAR的第一个TICK,就一直忽略,延用第一个TICK的时间。

龙听 发表于 2018-5-12 13:57

if {your entry condition} then begin

waitingForBuy = true;

end;

这是一个控制开关,只有条件达到进场的标准了,才打开等等买进的开关。默认是关上的。

龙听 发表于 2018-5-12 13:59

if waitingForBuy and currenttime_s>=myEntrySec then
begin

buy next bar at open;

waitingForBuy =false;

end;

这里有一个过滤,条件达到了进场的标准,同时时间也达到了标准。就激活下单委托指令,然后接着关上这个时间阀门。

龙听 发表于 2018-5-12 14:03

整体来说这个策略的目的是要在这根K线收盘前N秒进场,不过这个也有一个出现可能性不是很大,但是也有可能出现的情况,就是在这个N秒内价格出现了巨幅的回撤。比方说我们上面写的是这根BAR收前10秒下单,然后在这剩下的9秒内出现了巨幅的回搪,条件又没有达到了,但是单子已经发出去了并且成交了,但是从盘后看这个信号并没有出现。这就是信号闪烁,这个就没法避免了,就得再写个检查的策略,要是上一根BAR成交了,但是收盘时这个信号又没有了,那么在现在的这个BAR上把这个单子给平掉。

页: [1]