您現在的位置:程序化交易>> 期貨公式>> 交易開拓者(TB)>> 開拓者知識>>正文內容

跨周期數據轉換函數以及跨周期技術指標調用的實現 - TradeBlazer公式 [開拓者 TB]

  • 咨詢內容: 本帖最后由 追漲殺跌 于 2011-12-26 14:17 編輯

    TB的跨周期調用,以前已經有一些解決方案。但總體來說,使用還不夠方便。以前的帖子中Nopain曾提出過一個算法,非常精巧。最近在這個算法的基礎上, 把整個實現方法完善了一下。下面把總體思路和函數代碼貼出來,請大家試用,也歡迎大家提出修改意見。

    總體思路:
    1、小周期調用大周期的數據;
    2、具體方法是新編一個函數,用來根據小周期下的數據推算出大周期的BAR數據,為了省事,計算時,會將大周期下的開高低收以及成交量和持倉量等數據都算出來,然后將這些數據通過引用參數返回。當然有的朋友可能只需要一個收盤價就可以了,那樣的話,可以自行修改這個函數,把多余的數據去掉;
    3、返回的大周期數據將以序列變量的形式保留在對應的小周期K線上,以便以后調用;
    4、另外為了便于大周期的數據計算出來后的回溯使用,函數會將小周期下當前BAR到大周期下的前一個BAR的最后一個小周期BAR需要回溯的BAR數目,作為函數的結果返回。這句話,不容易描述清楚,估計大家聽起來也費力,但沒關系,后面用例子來解釋,知道這回事就行了。
    5、另外還增加了一個返回值(也是通過引用參數返回),表示的是當前小周期K線對應的大周期K線在整個大周期中的索引值。舉例來說,5分鐘圖,樣本數300,那轉換成30分鐘周期圖,總共應該是50根K線,那最新一根5分鐘圖對應的30分鐘K線在整個30分鐘圖中的索引值就應該是49(類似CurrentBar 0-49);

    好,其他先不廢話,把代碼貼出來,再舉幾個例子。

    新建用戶函數MtBar, 返回值為數值類型,代碼如下:
    1. Params
    2.         Numeric TimeFrame(1440);   
    3.         // 目標時間周期:月線=40320,周線=10080,日線=1440,4小時線=240
    4.         // 其他1小時內的周期等于相應的分鐘數,如:1小時=60, 30分鐘=30。。。
    5.         // 支持不規則分鐘數,如3分鐘,8分鐘,之類都行
    6.         
    7.         Numeric BarsBack(1);
    8.         // 目標時間周期BAR偏移:
    9.         // 1--表示將目標時間周期下的前1根K線數據作為與當前Bar對應的目標時間周期下的K線數據
    10.         // 0--表示將目標時間周期下的截止到目前為止的數據轉換為與當前BAR對應的目標時間周期下K線數據
    11.         
    12.         NumericRef oCurBar;                 // 目標時間周期下的Bar索引
    13.         NumericRef oOPenHT;         // 目標時間周期下的開盤價
    14.         NumericRef oHighHT;         // 目標時間周期下的最高價
    15.         NumericRef oLowHT;          // 目標時間周期下的最低價
    16.         NumericRef oCloseHT;        // 目標時間周期下的收盤價
    17.         NumericRef oVolHT;          // 目標時間周期下的成交量
    18.         NumericRef oOpenIntHT;      // 目標時間周期下的持倉量

    19. Vars
    20.         NumericSeries barCnt;
    21.         NumericSeries CurBar;
    22.         NumericSeries barCntSum;
    23.         NumericSeries OpenHT;
    24.         NumericSeries HighHT;
    25.         NumericSeries LowHT;
    26.         NumericSeries CloseHT;
    27.         NumericSeries VolHT;
    28.         NumericSeries OpenIntHT;
    29.         Numeric CurTime;
    30.         Numeric PreTime;
    31.         bool condition(false);
    32.         Numeric i;
    33. Begin
    34.         If (TimeFrame == 40320)                 // 月線
    35.         {
    36.                 CurTime = Month;
    37.                 PreTime = Month[1];
    38.         }
    39.         Else If (TimeFrame == 10080)                        // 周線
    40.         {
    41.                 CurTime = IntPart(DateDiff(19700105,Date)/7);
    42.                 PreTime = IntPart(DateDiff(19700105,Date[1])/7);
    43.         }
    44.         Else                                                                        // 其他時間周期
    45.         {
    46.                 CurTime = IntPart((DateDiff(19700105,date)*1440 + Hour*60 + Minute)/TimeFrame);
    47.                 PreTime = IntPart((DateDiff(19700105,date[1])*1440 + Hour[1]*60 + Minute[1])/TimeFrame);
    48.         }
    49.         condition = CurTime != PreTime;

    50.         If (CurrentBar==0)                // 如果是第一根Bar, CurBar=0
    51.         {
    52.                 barCnt = 0;
    53.                 CurBar = 0;
    54.                 OpenHT = Open;
    55.                 HighHT = High;
    56.                 LowHT = Low;
    57.                 CloseHT = Close;
    58.                 VolHT = Vol;
    59.                 OpenIntHT = OpenInt;
    60.         }
    61.         Else
    62.         {
    63.                 If(Condition)               
    64.                 // 如果在目標周期下,屬于另一根K線,則CurBar加1
    65.                 {
    66.                         barCnt = 1;
    67.                         CurBar = CurBar[1] + 1;
    68.                         OpenHT = Open;
    69.                         HighHT = High;
    70.                         LowHT = Low;
    71.                         VolHT = Vol;
    72.                 }Else
    73.                 // 如果在目標周期下,屬于同一根K線,則CurBar不變,但最高價和最低價要記錄價格的變化,成交量要累加
    74.                 {
    75.                         barCnt = barCnt[1] + 1;
    76.                         CurBar = CurBar[1];
    77.                         OpenHT = OpenHT[1];
    78.                         HighHT = Max(HighHT[1],High);
    79.                         LowHT = Min(LowHT[1],Low);
    80.                         VolHT = VolHT[1] + Vol;
    81.                 }
    82.                 // 收盤價和持倉量總是取最新值
    83.                 CloseHT = Close;
    84.                 OpenIntHT = OpenInt;
    85.         }
    86.         
    87.         // 上面的程序,在每根小周期的K線上,記錄了它所屬的大時間周期下的開高低收等值的變化。
    88.         // 接下來,要把在大的時間周期級別上,屬于同一根K線的開高低收這些數據,記錄在這一組小周期K線的最后一根上。
    89.         barCntSum = barCnt ;
    90.         If(BarsBack == 0)
    91.         // 如果Bar偏移參數為0,則取每根小周期K線上保留的大時間周期截止到這根小周期K線為止的BAR數據
    92.         {
    93.                 barCntSum = 0 ;
    94.         }Else If(BarsBack == 1)
    95.         // 如果Bar偏移參數為1,則取大時間周期的上一根K線的BAr數據
    96.         {
    97.                 barCntSum = barCnt ;
    98.         }Else
    99.         // 如果BAR偏移參數為其他,則取大時間周期的指定偏移后的那根K線的BAR數據
    100.         {
    101.                 For i = 2 To BarsBack
    102.                 {
    103.                         barCntSum = barCntSum + barCnt[barCntSum];
    104.                 }
    105.         }

    106.         // 最后將相應的K線數據作為引用參數返回
    107.         oCurBar = CurBar;
    108.         oOpenHT = OpenHT[barCntSum];
    109.         oHighHT = HighHT[barCntSum];
    110.         oLowHT = LowHT[barCntSum];
    111.         oCloseHT = CloseHT[barCntSum];
    112.         oVolHT = VolHT[barCntSum];
    113.         oOpenIntHT = OpenIntHT[barCntSum];
    114.         Return barCnt;
    115. End

     

  • TB技術人員: 忘了說一句,以上代碼是在TB V4中編寫與調試的。

    接下來,我們來實現跨周期的求和函數MtSummation,上面的函數中特地返回了一個值oCurBar,就是我上面提到的大周期下的BAR索引值,就是想為實現MtSummationFC留下的伏筆,等以后有時間再解決。現在先還是用最笨的循環累加的算法。
    1. Params
    2.         NumericSeries Price(1);
    3.         NumericSeries BarCnt(0);
    4.         Numeric Length(10);
    5. Vars
    6.         NumericSeries SumValue(0);
    7.         Numeric i;
    8.         Numeric j(0);
    9. Begin
    10.         SumValue = 0;
    11.         For i = 1 to Length
    12.         {
    13.                 If (Price[j] <> InvalidNumeric)
    14.                 {
    15.                         SumValue = SumValue + Price[j];
    16.                         j = j + BarCnt[j];
    17.                 }
    18.                 else Break;
    19.         }
    20.         Return SumValue;
    21. End
    復制代碼

     

  • TB客服: 接下來,就可以實現計算跨周期簡單移動平均的函數MtMa。
    1. Params
    2.         Numeric TimeFrame(1440);        // 目標時間周期參數,參數說明參見MtBar
    3.         Numeric BarsBack(1);                // 目標時間周期BAR偏移參數,說明見MtBar函數
    4.         Numeric Length(10);                        // 均線周期
    5.         NumericRef oMA;             // 以目標時間周期下的K線數據計算出的移動平均線
    6. Vars
    7.         NumericSeries mtBarCnt;
    8.         NumericSeries mtClose;
    9.         Numeric refCurBar;
    10.         Numeric refOpen;
    11.         Numeric refHigh;
    12.         Numeric refLow;
    13.         Numeric refClose;
    14.         Numeric refVol;
    15.         Numeric refOpenInt;
    16.        
    17.         Numeric SumValue(0);
    18.         Numeric i;
    19.         Numeric j(0);
    20. Begin
    21.         mtBarCnt = MtBar(TimeFrame,BarsBack,refCurBar,refOpen,refHigh,refLow,refClose,refVol,refOpenInt);
    22.         mtClose = refClose;

    23.         SumValue = MtSummation(mtClose,mtBarCnt,Length);
    24.         oMA = SumValue/Length;
    25.         Return mtBarCnt;
    26. End
    復制代碼

     

  • 網友回復: 現在可以舉個例子來說明,怎么用上面的幾個函數來做交易策略了。假如我們的策略如下:
    1、我們以日線的均線交叉來判斷大趨勢,然后在5分鐘圖上來做交易;
    2、日線的短期均線上穿長期均線,則只做多,不做空;反之只做空,不做多;
    3、確定了大趨勢后,我們再根據5分鐘圖來判斷小趨勢,以決定進場時機。我們仍然用均線來判斷,在多頭大趨勢下,如果5分鐘的短期均線上穿長期均線,則進場做多,反穿出場,但不反手做空;在空頭大趨勢下,類似;
    我們在5分鐘圖上調用剛才的函數的來實現。新建公式應用TestMtMa,代碼如下:
    1. Params
    2.         Numeric TimeFrame(1440);        // 目標時間周期參數,參數說明參見MtBar
    3.         Numeric BarsBack(1);                // 目標時間周期BAR偏移參數,說明見MtBar函數

    4.         Numeric Length1(10);                // 大周期的短期均線周期               
    5.         Numeric Length2(20);                // 大周期的長期均線周期
    6.         Numeric Length3(10);                // 小周期的短期均線周期
    7.         Numeric Length4(20);                // 小周期的長期均線周期
    8.         Numeric Lots(1);
    9. Vars
    10.         NumericSeries MA1;
    11.         NumericSeries MA2;
    12.         Numeric oMA1;
    13.         Numeric oMA2;

    14.         NumericSeries MA3;
    15.         NumericSeries MA4;
    16. Begin
    17.         MtMa(TimeFrame,BarsBack,Length1,oMA1);
    18.         MA1 = oMA1;
    19.         PlotNumeric("MA1",MA1);
    20.         MtMa(TimeFrame,BarsBack,Length2,oMA2);
    21.         MA2 = oMA2;
    22.         PlotNumeric("MA2",MA2);
    23.         MA3 = AverageFC(Close,Length3);
    24.         MA4 = AverageFC(Close,Length4);
    25.         PlotNumeric("MA3",MA3);
    26.         PlotNumeric("MA4",MA4);
    27.        
    28.        
    29.         If (MA1>MA2)                // 大周期均線金叉,多頭趨勢
    30.         {
    31.                 if (MarketPosition!=1 and MA3[1]>MA4[1])
    32.                 {
    33.                         Buy(Lots,Open);
    34.                 }
    35.                 if (MarketPosition==1 and MA3[1]<MA4[1])
    36.                 {
    37.                         Sell(Lots,Open);
    38.                 }
    39.         }
    40.         If (MA1<MA2)                // 大周期均線死叉,空頭趨勢
    41.         {
    42.                 if (MarketPosition!=-1 and MA3[1]<MA4[1])
    43.                 {
    44.                         SellShort(Lots,Open);
    45.                 }
    46.                 if (MarketPosition==-1 and MA3[1]>MA4[1])
    47.                 {
    48.                         BuyToCover(Lots,Open);
    49.                 }
    50.         }
    51. End
    復制代碼

     

  • 網友回復: 如果上面的策略,我們不想用日線均線來判斷大趨勢,而改用小時線來判斷,則只要將參數TimeFrame改為60, 就可以了。

 

有思路,想編寫各種指標公式,程序化交易模型,選股公式,預警公式的朋友

可聯系技術人員 QQ: 262069696  點擊在線交流進行 有償 編寫!不貴!點擊查看價格!


【字體: 】【打印文章】【查看評論

相關文章

    沒有相關內容
主站蜘蛛池模板: 欧亚专线欧洲s码wm| 青娱乐精品视频| 女大学生的沙龙| 中文字幕免费高清视频| 日韩美女中文字幕| 亚洲国产欧洲综合997久久| 热99精品只有里视频最新| 再深点灬舒服灬太大了快点h视频| 调教奴性同桌h| 国产女人乱人伦精品一区二区 | 99久久综合狠狠综合久久aⅴ| 成人影片麻豆国产影片免费观看| 久久久精品日本一区二区三区| 最近免费中文字幕中文高清| 亚洲国产精品无码久久| 污网址在线观看| 亚洲高清视频在线播放| 竹菊影视欧美日韩一区二区三区四区五区 | 色综合久久精品中文字幕首页| 国产成人精品久久综合| 亚洲精品老司机| 国产精品入口麻豆完整版| 777四色米奇欧美影院| 在公车上被一个接一个| 东京热TOKYO综合久久精品| 日本19禁啪啪无遮挡大尺度| 久久国产综合精品欧美| 日韩加勒比在线| 久久精品中文字幕| 日韩欧美三级视频| 久久精品男人影院| 最近2019中文字幕大全第二页| 亚洲一区欧美日韩| 欧美日韩在线视频免费完整| 亚洲欧美日韩精品久久奇米色影视 | 中文字幕一区二区三区久久网站| 无码无套少妇毛多69XXX| 久久久久久人妻一区精品| 日本国产在线视频| 久久久久无码精品国产不卡| 日本亚洲色大成网站www久久|