打印本文
關閉窗口
跨周期數據轉換函數以及跨周期技術指標調用的實現 - TradeBlazer公式
作者:開拓者 TB 來源:cxh99.com 發布時間:2013年02月24日
咨詢內容:
本帖最后由 追漲殺跌 于 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, 返回值為數值類型,代碼如下:
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技術人員:
忘了說一句,以上代碼是在TB V4中編寫與調試的。
接下來,我們來實現跨周期的求和函數MtSummation,上面的函數中特地返回了一個值oCurBar,就是我上面提到的大周期下的BAR索引值,就是想為實現MtSummationFC留下的伏筆,等以后有時間再解決。現在先還是用最笨的循環累加的算法。
Params
NumericSeries Price(1);
NumericSeries BarCnt(0);
Numeric Length(10);
Vars
NumericSeries SumValue(0);
Numeric i;
Numeric j(0);
Begin
SumValue = 0;
For i = 1 to Length
{
If (Price[j] <> InvalidNumeric)
{
SumValue = SumValue + Price[j];
j = j + BarCnt[j];
}
else Break;
}
Return SumValue;
End
復制代碼
TB客服:
接下來,就可以實現計算跨周期簡單移動平均的函數MtMa。
Params
Numeric TimeFrame(1440); // 目標時間周期參數,參數說明參見MtBar
Numeric BarsBack(1); // 目標時間周期BAR偏移參數,說明見MtBar函數
Numeric Length(10); // 均線周期
NumericRef oMA; // 以目標時間周期下的K線數據計算出的移動平均線
Vars
NumericSeries mtBarCnt;
NumericSeries mtClose;
Numeric refCurBar;
Numeric refOpen;
Numeric refHigh;
Numeric refLow;
Numeric refClose;
Numeric refVol;
Numeric refOpenInt;
Numeric SumValue(0);
Numeric i;
Numeric j(0);
Begin
mtBarCnt = MtBar(TimeFrame,BarsBack,refCurBar,refOpen,refHigh,refLow,refClose,refVol,refOpenInt);
mtClose = refClose;
SumValue = MtSummation(mtClose,mtBarCnt,Length);
oMA = SumValue/Length;
Return mtBarCnt;
End
復制代碼
網友回復:
現在可以舉個例子來說明,怎么用上面的幾個函數來做交易策略了。假如我們的策略如下:
1、我們以日線的均線交叉來判斷大趨勢,然后在5分鐘圖上來做交易;
2、日線的短期均線上穿長期均線,則只做多,不做空;反之只做空,不做多;
3、確定了大趨勢后,我們再根據5分鐘圖來判斷小趨勢,以決定進場時機。我們仍然用均線來判斷,在多頭大趨勢下,如果5分鐘的短期均線上穿長期均線,則進場做多,反穿出場,但不反手做空;在空頭大趨勢下,類似;
我們在5分鐘圖上調用剛才的函數的來實現。新建公式應用TestMtMa,代碼如下:
Params
Numeric TimeFrame(1440); // 目標時間周期參數,參數說明參見MtBar
Numeric BarsBack(1); // 目標時間周期BAR偏移參數,說明見MtBar函數
Numeric Length1(10); // 大周期的短期均線周期
Numeric Length2(20); // 大周期的長期均線周期
Numeric Length3(10); // 小周期的短期均線周期
Numeric Length4(20); // 小周期的長期均線周期
Numeric Lots(1);
Vars
NumericSeries MA1;
NumericSeries MA2;
Numeric oMA1;
Numeric oMA2;
NumericSeries MA3;
NumericSeries MA4;
Begin
MtMa(TimeFrame,BarsBack,Length1,oMA1);
MA1 = oMA1;
PlotNumeric("MA1",MA1);
MtMa(TimeFrame,BarsBack,Length2,oMA2);
MA2 = oMA2;
PlotNumeric("MA2",MA2);
MA3 = AverageFC(Close,Length3);
MA4 = AverageFC(Close,Length4);
PlotNumeric("MA3",MA3);
PlotNumeric("MA4",MA4);
If (MA1>MA2) // 大周期均線金叉,多頭趨勢
{
if (MarketPosition!=1 and MA3[1]>MA4[1])
{
Buy(Lots,Open);
}
if (MarketPosition==1 and MA3[1]<MA4[1])
{
Sell(Lots,Open);
}
}
If (MA1<MA2) // 大周期均線死叉,空頭趨勢
{
if (MarketPosition!=-1 and MA3[1]<MA4[1])
{
SellShort(Lots,Open);
}
if (MarketPosition==-1 and MA3[1]>MA4[1])
{
BuyToCover(Lots,Open);
}
}
End
復制代碼
網友回復:
如果上面的策略,我們不想用日線均線來判斷大趨勢,而改用小時線來判斷,則只要將參數TimeFrame改為60, 就可以了。
打印本文
關閉窗口
主站蜘蛛池模板:
三人性free欧美多人
|
免费精品久久天干天干
|
亚洲人午夜射精精品日韩
|
黑人粗长大战亚洲女2021国产精品成人免费视频
|
аⅴ天堂中文在线网
|
日本一道本在线
|
人人添人人妻人人爽夜欢视AV
|
欧美成人午夜视频在线观看
|
国产在线果冻传媒在线观看
|
china同性基友gay勾外卖
|
最近中文字幕高清2019中文字幕
|
久久久久亚洲精品无码系列
|
狠狠色婷婷久久一区二区三区
|
国产老买老妇bbb
|
久久中文字幕免费视频
|
欧美va天堂在线电影
|
免费看片A级毛片免费看
|
国产激爽大片高清在线观看
|
国产自产视频在线观看香蕉
|
a毛片在线还看免费网站
|
日本中文字幕网
|
五月婷婷综合色
|
爽爽yin人网
|
国产三级小视频
|
8888四色奇米在线观看不卡
|
新疆女人啪啪毛片
|
亚洲国产精品无码成人片久久
|
黑人26厘米大战亚洲女
|
国产精品高清一区二区三区
|
99国内精品久久久久久久
|
女人18一级毛片免费观看
|
久久天天躁夜夜躁狠狠躁2022
|
精品长泽梓在线播放视频
|
国产精品一区二区三区免费
|
亚洲综合色丁香婷婷六月图片
|
国产精品酒店视频免费看
|
久久99精品久久
|
日本成本人视频
|
亚洲免费成人网
|
男人桶女人的肌肌30分
|
国产午夜福利在线观看视频
|