第十六章:關于編寫bar內(nèi)交易的小技巧 前面講過多次,在編寫交易邏輯的時候需要先分析是否用到了bar內(nèi)的數(shù)據(jù),如果單純的open價格買入,那只需要非bar內(nèi)交易即可,如果你的代碼遇到了盤中突破等bar內(nèi)數(shù)據(jù)的話,就需要開啟bar內(nèi)交易。因此在遇到bar內(nèi)交易的時候,我們首先想到的就是獲取marketposition的bar持倉數(shù)據(jù)。如果我們只要求bar內(nèi)只進行一次交易(一次平倉,一次出場)的話。我們需要用到Intrabarpersist這個復合數(shù)據(jù)類型。而且需要把marketposition持倉數(shù)據(jù)提取出來,因為marketposition本身是沒有可回溯功能的。 因此有下面的代碼,開啟bar內(nèi)運行market單。 示例代碼1:雙均線交叉,bar內(nèi)模式 [IntrabarOrderGeneration=true] var:intrabarpersist mp0(0),ma0(0),ma1(0); mp0=marketposition; ma0 = Average(close,5); ma1 = Average(close,20); if mp0[1] <> 1 and ma0 > ma1 then buy 1 shares next bar at market; if mp0[1] <> -1 and ma0 < ma1 then sellshort 1 shares next bar at market; print(barstatus,' time=',Time_,'markposition= ',marketposition, ' markposition_mp0= ',mp0, 'mp0[1]= ',mp0[1]); //觀察返回值(部分) 0.00 time= 940.00markposition= 0.00 markposition_mp0= 0.00 mp0[1]= 0.00 1.00 time= 940.00markposition= 1.00 markposition_mp0= 1.00 mp0[1]= 0.00 1.00 time= 940.00markposition= 1.00 markposition_mp0= 1.00 mp0[1]= 0.00 1.00 time= 940.00markposition= 1.00 markposition_mp0= 1.00 mp0[1]= 0.00 1.00 time= 940.00markposition= 1.00 markposition_mp0= 1.00 mp0[1]= 0.00 1.00 time= 940.00markposition= 1.00 markposition_mp0= 1.00 mp0[1]= 0.00 1.00 time= 940.00markposition= 1.00 markposition_mp0= 1.00 mp0[1]= 0.00 1.00 time= 940.00markposition= 1.00 markposition_mp0= 1.00 mp0[1]= 0.00 .....(省略) 1.00 time= 940.00markposition= 1.00 markposition_mp0= 1.00 mp0[1]= 0.00 1.00 time= 940.00markposition= 1.00 markposition_mp0= 1.00 mp0[1]= 0.00 2.00 time= 941.00markposition= 1.00 markposition_mp0= 1.00 mp0[1]= 0.00 0.00 time= 941.00markposition= 1.00 markposition_mp0= 1.00 mp0[1]= 1.00 1.00 time= 941.00markposition= 1.00 markposition_mp0= 1.00 mp0[1]= 1.00 【分析】 1、藍色的兩條數(shù)據(jù)分別表示在一個bar內(nèi)交易是的bar的起點和bar的終點 2、在進行初次交易時,我們進行多單交易,此時mp0 = marketposition記錄了持倉狀態(tài),mp0和marketposition為同步顯示,表示意思是一樣的 3、第一個紅色的mp0[1]表示位置,此時用mp0去回溯上一個bar的持倉狀態(tài),此時為0,因為在圖表開頭,此時并沒有marketposition的狀態(tài) 4、第二個紅色mp0[1]表示的位置,此時上一個bar結(jié)束,下一個bar開盤后,mp0去回溯刪一個bar的狀態(tài),表示為持有了多頭。 在這里我們充分運用到了復合數(shù)據(jù)類型Intrabarpersist它的bar內(nèi)可以回溯上一個bar的信息。因此這里可以用于日內(nèi)交易。如果我們采取想上一個bar的持倉狀態(tài)(“委托判斷條件”),去進行下一個bar的開倉要求(“委托單觸發(fā)”)。 示例代碼2: [IntrabarOrderGeneration=true] var:intrabarpersist mp0(0),intrabarpersist mp1(0), intrabarpersist ma0(0), intrabarpersist ma1(0); mp1=marketposition; ma0 = Average(close,5); ma1 = Average(close,20); if mp1[1] <> 1 and ma0[1] > ma1[1] then buy 1 shares next bar at market; if mp1[1] = 1 and ma0[1] < ma1[1] then sell 1 shares next bar at market; if mp1[1] = 1 then sell 1 shares next bar at ma0[1] stop ; 【分析】: 1、如果需要定義一個變量在bar內(nèi)進行變化的話,那么需要設置Intrabarpersist var0(0)這樣一個變量去接收它,比如var0 = high;var0=average()等。 【備注】:子圖不能實現(xiàn)bar內(nèi)交易 ================================================= 之前的文章感謝大家的轉(zhuǎn)載,希望轉(zhuǎn)載時請注明出處,本人轉(zhuǎn)自其它網(wǎng)站的圖表一并感謝,謝謝~! https://www.cnblogs.com/noah0532/ |
|
來自: taozl > 《eslanguagu》