|
第十七章:關(guān)于bar內(nèi)交易的幾個(gè)問題 1、實(shí)時(shí)數(shù)據(jù)刷新打印和歷史數(shù)據(jù)刷新打印 打印歷史數(shù)據(jù)時(shí)會發(fā)現(xiàn)如下: #cb 1.00 #bs 1.00 #t1109.00 #p 1.00 #mp 1.00 #mp[1] 0.00 打印實(shí)時(shí)數(shù)據(jù)時(shí)會發(fā)現(xiàn)如下: #cb 108.00 #bs 2.00 #t1457.00 #p 0.00 #mp 0.00 #mp[1] 0.00#cb 109.00 #bs 0.00 #t1458.00 #p 0.00 #mp 0.00 #mp[1] 0.00#cb 109.00 #bs 1.00 #t1458.00 #p 0.00 #mp 0.00 #mp[1] 0.00 【分析】 1、在新bar開啟時(shí),打印歷史數(shù)據(jù)時(shí),上一個(gè)bar的收盤狀態(tài)會放在下一個(gè)bar的time當(dāng)中;而在打印實(shí)時(shí)數(shù)據(jù)時(shí),上一個(gè)bar的收盤狀態(tài)是放在上一個(gè)bar的time當(dāng)中。 我們打印歷史的收盤價(jià)價(jià)格 #cb 1.00 #bs 1.00 #t1109.00 #p 1.00 #mp 1.00 #mp[1] 0.00 #close3553.00#cb 1.00 #bs 2.00 #t1110.00 #p 1.00 #mp 1.00 #mp[1] 0.00 #close3553.00#cb 2.00 #bs 0.00 #t1110.00 #p 1.00 #mp 1.00 #mp[1] 1.00 #close3553.00 多打印幾個(gè) #cb 3.00 #bs 1.00 #t1111.00 #p 1.00 #mp 1.00 #mp[1] 1.00 #close3551.00 #cb 3.00 #bs 2.00 #t1112.00 #p 1.00 #mp 1.00 #mp[1] 1.00 #close3551.00 #cb 4.00 #bs 0.00 #t1112.00 #p 1.00 #mp 1.00 #mp[1] 1.00 #close3551.00#cb 4.00 #bs 1.00 #t1112.00 #p 1.00 #mp 1.00 #mp[1] 1.00 #close3552.00 #cb 78.00 #bs 1.00 #t1426.00 #p 1.00 #mp 1.00 #mp[1] 1.00 #close3555.00 #cb 78.00 #bs 2.00 #t1427.00 #p 1.00 #mp 1.00 #mp[1] 1.00 #close3555.00 #cb 79.00 #bs 0.00 #t1427.00 #p 1.00 #mp 1.00 #mp[1] 1.00 #close3555.00#cb 79.00 #bs 1.00 #t1427.00 #p 1.00 #mp 1.00 #mp[1] 1.00 #close3554.00 #cb 99.00 #bs 1.00 #t1447.00 #p 1.00 #mp 1.00 #mp[1] 1.00 #close3554.00 分別找到:它們的開盤價(jià)和收盤,發(fā)現(xiàn)是可以一一對應(yīng)的。這就應(yīng)征了最早之前所說的,是由于當(dāng)根新開盤tick造成的上一個(gè)bar的收盤。這里顯示在這里非常清楚的表明了這點(diǎn)。但是在實(shí)盤實(shí)時(shí)數(shù)據(jù)刷新是是看不到這個(gè)結(jié)果的。其實(shí)這個(gè)結(jié)果是一閃而現(xiàn)的。 2、開啟精細(xì)模式時(shí),時(shí)間對不起來了? 我們發(fā)現(xiàn)在找上門的收盤價(jià)時(shí)間的時(shí)候,在K線圖上去找都是延后一個(gè)時(shí)間段。這是因?yàn)槲覀冮_啟了精細(xì)模式所致(當(dāng)然不開啟精細(xì)模式也是這樣),這是因?yàn)槿缦聢D所示: 在打印的時(shí)間,打印的是準(zhǔn)確的時(shí)間,觀察K線顯示的是bar完成的時(shí)間。因此在后面解釋bar上時(shí)間問題,就是這個(gè)原因 3、再分析最初的那段代碼 A:原始代碼打印結(jié)果分析 [IntrabarOrderGeneration=true]var:intrabarpersist mp(0),intrabarpersist mp1(0), intrabarpersist ma0(0),
intrabarpersist ma1(0);
mp=marketposition;
ma0 = Average(close,5);
ma1 = Average(close,20);if mp[1] <> 1 and ma0[1] > ma1[1] then buy 1 shares next bar at market;if mp[1] = 1 and ma0[1] < ma1[1] then sell 1 shares next bar at market;
print('#cb ',currentbar,' #bs',barstatus,' #t',Time_,' #p',marketposition,' #mp',mp,' #mp[1]',mp[1]);【分析】 1、我們分析第一次開倉時(shí)間 [cb] 1.00 [bs] 1.00 [t]1109.00 [p] 0.00 [mp] 0.00 [mp[1]] 0.00 紅色標(biāo)注位置顯示:【p】表示當(dāng)前已經(jīng)持有多單,【mp】與marketposition相等也是表示持有多單,【mp[1]】表示上一個(gè)bar沒有持有倉位。 問題:這里為什么要顯示在第一個(gè)bar內(nèi)位置而不顯示在開盤位置(顯示在barstatus=1(第一個(gè)),而不顯示在barStatus=0)? 回答:這是因?yàn)?,單子確實(shí)是下在barStatus=0的這個(gè)位置,因?yàn)橹灰聠瘟酥蟛艜@示持倉狀態(tài),因此要顯示在barstat=1(第一個(gè))的位置。 佐證:觀察下圖我們發(fā)現(xiàn),價(jià)格是下在了3553的這個(gè)開盤價(jià),我們打印價(jià)格時(shí)候發(fā)現(xiàn)barstatus=1時(shí)的價(jià)格為3554。因此證明了,價(jià)格是下在開盤價(jià),而下單完成后,在下一個(gè)tick顯示成交狀態(tài)。 B:我們更改原始代碼,要求上一個(gè)bar進(jìn)場之后,如果當(dāng)前的close價(jià)格(也就是精細(xì)模式中的當(dāng)前tick)向下穿越上一個(gè)ma0(慢速均線),要求在下一個(gè)tick掛止損單出場(stop); [IntrabarOrderGeneration=true]var:intrabarpersist mp(0),intrabarpersist mp1(0), intrabarpersist ma0(0),
intrabarpersist ma1(0);
mp=marketposition;
ma0 = Average(close,5);
ma1 = Average(close,20);if mp[1] <> 1 and ma0[1] > ma1[1] then buy 1 shares next bar at market;//if mp[1] = 1 and ma0[1] < ma1[1] then sell 1 shares next bar at market;if mp[1] = 1 and close crosses under ma0[1] then sell 1 shares next bar at market;
print('[cb]',currentbar,' [bs]',barstatus,' [t]',Time_,' [p]',marketposition,' [mp]',mp,' [mp[1]]',mp[1],'[close]',Close);【分析】 1、我們再來看一下上面的輸出結(jié)果,只看出場部分,還是第一筆,只觀察出場部分,從圖表上我們可以找到出場是在1112(bar上時(shí)間是1113)。如下面所示: 2、從輸出結(jié)果來看,我們是在bar內(nèi)的3550價(jià)格出場的,在出場之后,marketposition/mp再下一個(gè)tick位置已經(jīng)變換成了0,表示當(dāng)根不再持倉,其中mp[1]表示上一個(gè)bar的狀態(tài)還是1,并為改變。 【小結(jié)】 通過上面的例子我們得到如下幾個(gè)結(jié)論: 1、在bar內(nèi)模式下,我們在盤中突破買入或者賣出操作的時(shí)候,需要判斷上一個(gè)bar的狀態(tài)。如果不判斷上一個(gè)bar的狀態(tài)的話,很可能會不斷的進(jìn)場或者出場操作。在這里我們提取marketposition的值,并賦值給Intrabarpersist mp(用復(fù)合變量命名)變量,在對bar內(nèi)進(jìn)行開平倉操作的時(shí)候,我們需要判斷mp[1]上一個(gè)bar的狀態(tài)。如果采用mp當(dāng)根tick的狀態(tài)的話是有可能造成不斷進(jìn)出場的問題。這就是復(fù)合變量的妙用 2、通過上面例子,復(fù)合變量既能顯示當(dāng)根bar的的持倉狀態(tài),又能顯示上一個(gè)bar的持倉狀態(tài),只需要通過[方括號]改變其復(fù)合變量的性質(zhì)即可。 3、在print打印時(shí)間的時(shí)候。存在正在進(jìn)行的數(shù)據(jù)和bar上的時(shí)間,在K線的邏輯下,bar上的時(shí)間會“慢”一刻,這是疑問K線上/bar上的時(shí)間是完成時(shí)間。在找相關(guān)bar對照的數(shù)據(jù)要注意這問題。 4、錯(cuò)誤的應(yīng)用 我們想到,bar內(nèi)模式,開啟的精細(xì)是按照逐筆的方式,在國內(nèi)期貨中:逐筆=tick級別。那我們改成Ticks來穿越可不可以? [IntrabarOrderGeneration=true]var:intrabarpersist mp(0),intrabarpersist mp1(0), intrabarpersist ma0(0),
intrabarpersist ma1(0);
mp=marketposition;
ma0 = Average(close,5);
ma1 = Average(close,20);if mp[1] <> 1 and ma0[1] > ma1[1] then buy 1 shares next bar at market;//if mp[1] = 1 and ma0[1] < ma1[1] then sell 1 shares next bar at market;if mp[1] = 1 and Ticks crosses under ma0[1] then sell 1 shares next bar at market;
print('[cb]',currentbar,' [bs]',barstatus,' [t]',Time_,' [p]',marketposition,' [mp]',mp,' [mp[1]]',mp[1],'[close]',Close);答案顯然是不行的,錯(cuò)誤自己觀察即可。 【分析】 按住F1幫助看一下tick的定義: 圖表設(shè)置成交量基于成交筆數(shù),則Ticks返回每根Bar的成交筆數(shù)。 圖表設(shè)置成交量基于交易量,則Ticks返回每根Bar的成交股數(shù)(成交手?jǐn)?shù))。 圖表設(shè)置成交量基于成交筆數(shù): - 1-tick圖表中,當(dāng)前tick的Ticks返回值為1。 圖表設(shè)置成交量基于交易量: - 1-tick圖表中,當(dāng)前tick的Ticks返回值為當(dāng)前tick的成交股數(shù)。 注意:許多歷史數(shù)據(jù)源只提供有限的歷史成交量和成交筆數(shù)的數(shù)據(jù),實(shí)時(shí)存儲數(shù)據(jù)可以確保成交量和成交筆數(shù)數(shù)據(jù)的有效性。 tick返回的成交筆數(shù),所以不可以,因此在bar內(nèi)模式下,close價(jià)格=逐筆成交價(jià)格,而不是tick ≠逐筆成交價(jià)格。 ================================================= 之前的文章感謝大家的轉(zhuǎn)載,希望轉(zhuǎn)載時(shí)請注明出處,本人轉(zhuǎn)自其它網(wǎng)站的圖表一并感謝,謝謝~! |
|
|