电竞比分网-中国电竞赛事及体育赛事平台

分享

量化投資

 taozl 2022-09-23 發(fā)布于安徽

第十六章:關(guān)于編寫bar內(nèi)交易的小技巧

  前面講過(guò)多次,在編寫交易邏輯的時(shí)候需要先分析是否用到了bar內(nèi)的數(shù)據(jù),如果單純的open價(jià)格買入,那只需要非bar內(nèi)交易即可,如果你的代碼遇到了盤中突破等bar內(nèi)數(shù)據(jù)的話,就需要開啟bar內(nèi)交易。因此在遇到bar內(nèi)交易的時(shí)候,我們首先想到的就是獲取marketposition的bar持倉(cāng)數(shù)據(jù)。如果我們只要求bar內(nèi)只進(jìn)行一次交易(一次平倉(cāng),一次出場(chǎng))的話。我們需要用到Intrabarpersist這個(gè)復(fù)合數(shù)據(jù)類型。而且需要把marketposition持倉(cāng)數(shù)據(jù)提取出來(lái),因?yàn)閙arketposition本身是沒(méi)有可回溯功能的。

  因此有下面的代碼,開啟bar內(nèi)運(yùn)行market單。

  示例代碼1:雙均線交叉,bar內(nèi)模式

復(fù)制代碼
[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]);
復(fù)制代碼

//觀察返回值(部分)

復(fù)制代碼
   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
復(fù)制代碼

【分析】

  1、藍(lán)色的兩條數(shù)據(jù)分別表示在一個(gè)bar內(nèi)交易是的bar的起點(diǎn)和bar的終點(diǎn)

  2、在進(jìn)行初次交易時(shí),我們進(jìn)行多單交易,此時(shí)mp0 = marketposition記錄了持倉(cāng)狀態(tài),mp0和marketposition為同步顯示,表示意思是一樣的

  3、第一個(gè)紅色的mp0[1]表示位置,此時(shí)用mp0去回溯上一個(gè)bar的持倉(cāng)狀態(tài),此時(shí)為0,因?yàn)樵趫D表開頭,此時(shí)并沒(méi)有marketposition的狀態(tài)

  4、第二個(gè)紅色mp0[1]表示的位置,此時(shí)上一個(gè)bar結(jié)束,下一個(gè)bar開盤后,mp0去回溯刪一個(gè)bar的狀態(tài),表示為持有了多頭。

  在這里我們充分運(yùn)用到了復(fù)合數(shù)據(jù)類型Intrabarpersist它的bar內(nèi)可以回溯上一個(gè)bar的信息。因此這里可以用于日內(nèi)交易。如果我們采取想上一個(gè)bar的持倉(cāng)狀態(tài)(“委托判斷條件”),去進(jìn)行下一個(gè)bar的開倉(cāng)要求(“委托單觸發(fā)”)。

  示例代碼2:

復(fù)制代碼
[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 ;
復(fù)制代碼

【分析】:

  1、如果需要定義一個(gè)變量在bar內(nèi)進(jìn)行變化的話,那么需要設(shè)置Intrabarpersist var0(0)這樣一個(gè)變量去接收它,比如var0 = high;var0=average()等。

 【備注】:子圖不能實(shí)現(xiàn)bar內(nèi)交易

=================================================

之前的文章感謝大家的轉(zhuǎn)載,希望轉(zhuǎn)載時(shí)請(qǐng)注明出處,本人轉(zhuǎn)自其它網(wǎng)站的圖表一并感謝,謝謝~!

https://www.cnblogs.com/noah0532/

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多