福利 跨周期的傻瓜式解決方案 [開拓者 TB]
- 咨詢內容:
TB的跨周期調用,論壇以前已經有一些解決方案。但對很多人來說不夠方便 ,本方案主要參考了追漲殺跌的一些基礎函數,兼顧了使用方便、運算性能速度、精確,在具體的算法上如 均線ma 標準差std 等不用因為數據源的變化而重新編寫算法函數。
比如close 的ma myValue 的ma 都可以用一個 iMA函數解決。iMA的形式之所以不用 iMA(iPrice 數據源,TimeFrame 時間周期,Length 算法參數) 而是選擇 iMA((iPrice 數據源,mtBarCnt ,Length1);是為了運算速度,否則如果一個策略多次用到跨周期的算法 函數內部會多次重復計算mtBarCnt值 , 會影響運算速度。 - TB技術人員:
此函數是追漲殺跌的MtBar 函數 為了和后面函數包的美觀 修改了函數名
- //------------------------------------------------------------------------
- // 簡稱: iBar
- // 名稱:
- // 類別: 用戶函數
- // 類型: 用戶函數
- // 輸出: 數值型
- //------------------------------------------------------------------------
- Params
- Numeric TimeFrame(1440);
- // 目標時間周期:月線=40320,周線=10080,日線=1440,4小時線=240
- // 其他1小時內的周期等于相應的分鐘數,如:1小時=60, 30分鐘=30。。。
- // 支持不規則分鐘數,如3分鐘,8分鐘,之類都行
-
- Numeric BarsBack(1);
- // 目標時間周期BAR偏移:
- // 1--表示將目標時間周期下的前1根K線數據作為與當前Bar對應的目標時間周期下的K線數據
- // 0--表示將目標時間周期下的截止到目前為止的數據轉換為與當前BAR對應的目標時間周期下K線數據
-
- NumericRef oCurBar; // 目標時間周期下的Bar索引
- NumericRef oOPenHT; // 目標時間周期下的開盤價
- NumericRef oHighHT; // 目標時間周期下的最高價
- NumericRef oLowHT; // 目標時間周期下的最低價
- NumericRef oCloseHT; // 目標時間周期下的收盤價
- NumericRef oVolHT; // 目標時間周期下的成交量
- NumericRef oOpenIntHT; // 目標時間周期下的持倉量
- Vars
- NumericSeries barCnt;
- NumericSeries CurBar;
- NumericSeries barCntSum;
- NumericSeries OpenHT;
- NumericSeries HighHT;
- NumericSeries LowHT;
- NumericSeries CloseHT;
- NumericSeries VolHT;
- NumericSeries OpenIntHT;
- Numeric CurTime;
- Numeric PreTime;
- bool condition(false);
- Numeric i;
- Begin
- If (TimeFrame == 40320) // 月線
- {
- CurTime = Month;
- PreTime = Month[1];
- }
- Else If (TimeFrame == 10080) // 周線
- {
- CurTime = IntPart(DateDiff(19700105,Date)/7);
- PreTime = IntPart(DateDiff(19700105,Date[1])/7);
- }
- Else // 其他時間周期
- {
- CurTime = IntPart((DateDiff(19700105,date)*1440 + Hour*60 + Minute)/TimeFrame);
- PreTime = IntPart((DateDiff(19700105,date[1])*1440 + Hour[1]*60 + Minute[1])/TimeFrame);
- }
- condition = CurTime != PreTime;
- If (CurrentBar==0) // 如果是第一根Bar, CurBar=0
- {
- barCnt = 0;
- CurBar = 0;
- OpenHT = Open;
- HighHT = High;
- LowHT = Low;
- CloseHT = Close;
- VolHT = Vol;
- OpenIntHT = OpenInt;
- }
- Else
- {
- If(Condition)
- // 如果在目標周期下,屬于另一根K線,則CurBar加1
- {
- barCnt = 1;
- CurBar = CurBar[1] + 1;
- OpenHT = Open;
- HighHT = High;
- LowHT = Low;
- VolHT = Vol;
- }Else
- // 如果在目標周期下,屬于同一根K線,則CurBar不變,但最高價和最低價要記錄價格的變化,成交量要累加
- {
- barCnt = barCnt[1] + 1;
- CurBar = CurBar[1];
- OpenHT = OpenHT[1];
- HighHT = Max(HighHT[1],High);
- LowHT = Min(LowHT[1],Low);
- VolHT = VolHT[1] + Vol;
- }
- // 收盤價和持倉量總是取最新值
- CloseHT = Close;
- OpenIntHT = OpenInt;
- }
-
- // 上面的程序,在每根小周期的K線上,記錄了它所屬的大時間周期下的開高低收等值的變化。
- // 接下來,要把在大的時間周期級別上,屬于同一根K線的開高低收這些數據,記錄在這一組小周期K線的最后一根上。
- barCntSum = barCnt ;
- If(BarsBack == 0)
- // 如果Bar偏移參數為0,則取每根小周期K線上保留的大時間周期截止到這根小周期K線為止的BAR數據
- {
- barCntSum = 0 ;
- }Else If(BarsBack == 1)
- // 如果Bar偏移參數為1,則取大時間周期的上一根K線的BAr數據
- {
- barCntSum = barCnt ;
- }Else
- // 如果BAR偏移參數為其他,則取大時間周期的指定偏移后的那根K線的BAR數據
- {
- For i = 2 To BarsBack
- {
- barCntSum = barCntSum + barCnt[barCntSum];
- }
- }
- // 最后將相應的K線數據作為引用參數返回
- oCurBar = CurBar;
- oOpenHT = OpenHT[barCntSum];
- oHighHT = HighHT[barCntSum];
- oLowHT = LowHT[barCntSum];
- oCloseHT = CloseHT[barCntSum];
- oVolHT = VolHT[barCntSum];
- oOpenIntHT = OpenIntHT[barCntSum];
- Return barCnt;
- End
- //------------------------------------------------------------------------
- TB客服:
iBar 參數太多 調用聲明參數太麻煩 以下為簡便寫法
- //------------------------------------------------------------------------
- // 簡稱: inBar
- // 名稱: 讀書山林
- // 類別: 用戶函數
- // 類型: 用戶函數
- // 輸出: 數值型
- //------------------------------------------------------------------------
- Params
- Numeric TimeFrame(1440); // 目標時間周期參數,參數說明參見MtBar
- Numeric BarsBack(1); // 目標時間周期BAR偏移參數,說明見MtBar函數
- Vars
- NumericSeries mtBarCnt;
- Numeric refCurBar;
- Numeric refOpen;
- Numeric refHigh;
- Numeric refLow;
- Numeric refClose;
- Numeric refVol;
- Numeric refOpenInt;
-
- Numeric SumValue(0);
- Numeric i;
- Numeric j(0);
- Begin
- mtBarCnt=iBar(TimeFrame,BarsBack,refCurBar,refOpen,refHigh,refLow,refClose,refVol,refOpenInt);
- Return mtBarCnt;
- End
- //------------------------------------------------------------------------
- 網友回復:
本帖最后由 讀書山林 于 2015-5-21 02:19 編輯
跨周期求和函數- //------------------------------------------------------------------------
- // 簡稱: iSum
- // 名稱: 跨周期求和函數 讀書山林
- // 類別: 用戶函數
- // 類型: 用戶函數
- // 輸出: 數值型
- //------------------------------------------------------------------------
- Params
- NumericSeries iPrice(1);
- NumericSeries BarCnt(0);
- Numeric Length(10);
- Vars
- NumericSeries SumValue(0);
- Numeric i;
- Numeric j(0);
- Begin
- If(Length==0)
- {
- Return iPrice;
- }Else
- {
- j=0;
- SumValue = 0;
- For i = 1 to Length
- {
- If (iPrice[j] <> InvalidNumeric)
- {
- SumValue = SumValue + iPrice[j];
- j = j + BarCnt[j];
- }
- else Break;
- }
- }
- Return SumValue;
- End
- //------------------------------------------------------------------------
- 網友回復:
本帖最后由 讀書山林 于 2015-5-9 00:28 編輯
- //------------------------------------------------------------------------
- // 簡稱: iMA
- // 名稱: 跨周期求均值 讀書山林
- // 類別: 用戶函數
- // 類型: 用戶函數
- // 輸出: 數值型
- //------------------------------------------------------------------------
- Params
- NumericSeries iPrice(1); //數據源必須為跨周期的值 否則不能返回正確值
- NumericSeries mtBarCnt(1) ;
- Numeric Length(10);
- Vars
- Numeric SumValue(0);
- Numeric i;
- Numeric oMA;
- Begin
- SumValue = iSum(iPrice,mtBarCnt,Length);
- oMA = SumValue/Length;
- Return oMA;
- End
- //------------------------------------------------------------------------
有思路,想編寫各種指標公式,程序化交易模型,選股公式,預警公式的朋友
可聯系技術人員 QQ: 1145508240 進行 有償 編寫!(不貴!點擊查看價格!)
相關文章
-
沒有相關內容