程序運(yùn)行于后臺1秒鐘輪詢,開倉語句如下:
IF THOLDING=0 AND THOLDING2=0 AND 開多1 THEN
開多A:TBUY(1,手?jǐn)?shù),LMT,SP1);
IF THOLDING=0 AND THOLDING2=0 AND 開空1 THEN
開空A:TBUYSHORT(1,手?jǐn)?shù),LMT,BP1);
IF THOLDING=0 AND THOLDING2=0 AND 開多2 THEN
開多B:TBUY(1,手?jǐn)?shù),LMT,SP1);
IF THOLDING=0 AND THOLDING2=0 AND 開空2 THEN
開空B:TBUYSHORT(1,手?jǐn)?shù),LMT,BP1);
在某些情況下可能出現(xiàn)既滿足開空A,又滿足開多B的情況,按道理我在開倉之前用THOLDING=0 AND THOLDING2=0進(jìn)行了限制
如果前面已經(jīng)開倉,無論是否成交后面都不應(yīng)該再繼續(xù)開倉. 而實(shí)際情況不是這樣的, 如果前面開倉,后面還會繼續(xù)開, 資金不夠的
話會報(bào)告資金不足, 但是如果資金有多的,就會出現(xiàn)多空雙開的情況
而圖表K線走完模式下不會出現(xiàn)這個(gè)問題,所以很明顯這個(gè)應(yīng)該是THOLDING出了問題,它沒能及時(shí)變更數(shù)值,對于這種情況該怎么辦?
1,仔細(xì)理解下THODLING和THOLIDNG2的機(jī)制,只有成交后才會返回值
代碼從上往下運(yùn)行,來了tick可能條件同時(shí)滿足。報(bào)單后未及時(shí)成交導(dǎo)致值沒有返回是很正常的情況
條件里加個(gè)未成交判斷
THODLING2是成交了才生效,THODLING不是訂單發(fā)出以后就立即生效了嗎? 如果都是成交了才生效那么THODLING2存在的意義何在?
你說檢查未成交單,你看我這樣改可以解決問題嗎?
IF THOLDING=0 AND THOLDING2=0 AND TREMAINQTY(0,'','')=0 AND 開多1 THEN
開多A:TBUY(1,手?jǐn)?shù),LMT,SP1);
IF THOLDING=0 AND THOLDING2=0 AND TREMAINQTY(0,'','')=0 AND 開空1 THEN
開空A:TBUYSHORT(1,手?jǐn)?shù),LMT,BP1);
IF THOLDING=0 AND THOLDING2=0 AND TREMAINQTY(0,'','')=0 AND 開多2 THEN
開多B:TBUY(1,手?jǐn)?shù),LMT,SP1);
IF THOLDING=0 AND THOLDING2=0 AND TREMAINQTY(0,'','')=0 AND 開空2 THEN
開空B:TBUYSHORT(1,手?jǐn)?shù),LMT,BP1);
http://www.weistock.com/bbs/dispbbs.asp?BoardID=2&ID=49371&skin=0 看下這個(gè)帖子
TISREMAIN( ) 用這個(gè)函數(shù)比較好,具體情況實(shí)際驗(yàn)證下。也有可能一比tick過來值未刷新的情況,另外勾選下高頻
從我觀察應(yīng)該不是屬于tick過來值未刷新,就是因?yàn)橥瑫r(shí)滿足條件前面的開倉沒有立即成交而后面的又開了,我改成這樣,你看如何?
IF THOLDING=0 AND THOLDING2=0 AND TISREMAIN(0)=0 AND 開多1 THEN
開多A:TBUY(1,手?jǐn)?shù),LMT,SP1);
IF THOLDING=0 AND THOLDING2=0 AND TISREMAIN(0)=0 AND 開空1 THEN
開空A:TBUYSHORT(1,手?jǐn)?shù),LMT,BP1);
IF THOLDING=0 AND THOLDING2=0 AND TISREMAIN(0)=0 AND 開多2 THEN
開多B:TBUY(1,手?jǐn)?shù),LMT,SP1);
IF THOLDING=0 AND THOLDING2=0 AND TISREMAIN(0)=0 AND 開空2 THEN
開空B:TBUYSHORT(1,手?jǐn)?shù),LMT,BP1);
如果這樣還不行,我干脆加個(gè)變量,在開倉之前置為0,只要經(jīng)過一個(gè)開平條件就把它設(shè)置為1, 然后每次開倉前檢查它是不是為0