打印本文
關(guān)閉窗口
跨周期數(shù)據(jù)轉(zhuǎn)換函數(shù)以及跨周期技術(shù)指標(biāo)調(diào)用的實(shí)現(xiàn) - TradeBlazer公式
作者:開拓者 TB 來源:cxh99.com 發(fā)布時(shí)間:2012年08月29日
咨詢內(nèi)容:
本帖最后由 追漲殺跌 于 2011-12-26 14:17 編輯
TB的跨周期調(diào)用,以前已經(jīng)有一些解決方案。但總體來說,使用還不夠方便。以前的帖子中Nopain曾提出過一個(gè)算法,非常精巧。最近在這個(gè)算法的基礎(chǔ)上, 把整個(gè)實(shí)現(xiàn)方法完善了一下。下面把總體思路和函數(shù)代碼貼出來,請大家試用,也歡迎大家提出修改意見。
總體思路:
1、小周期調(diào)用大周期的數(shù)據(jù);
2、具體方法是新編一個(gè)函數(shù),用來根據(jù)小周期下的數(shù)據(jù)推算出大周期的BAR數(shù)據(jù),為了省事,計(jì)算時(shí),會將大周期下的開高低收以及成交量和持倉量等數(shù)據(jù)都算出來,然后將這些數(shù)據(jù)通過引用參數(shù)返回。當(dāng)然有的朋友可能只需要一個(gè)收盤價(jià)就可以了,那樣的話,可以自行修改這個(gè)函數(shù),把多余的數(shù)據(jù)去掉;
3、返回的大周期數(shù)據(jù)將以序列變量的形式保留在對應(yīng)的小周期K線上,以便以后調(diào)用;
4、另外為了便于大周期的數(shù)據(jù)計(jì)算出來后的回溯使用,函數(shù)會將小周期下當(dāng)前BAR到大周期下的前一個(gè)BAR的最后一個(gè)小周期BAR需要回溯的BAR數(shù)目,作為函數(shù)的結(jié)果返回。這句話,不容易描述清楚,估計(jì)大家聽起來也費(fèi)力,但沒關(guān)系,后面用例子來解釋,知道這回事就行了。
5、另外還增加了一個(gè)返回值(也是通過引用參數(shù)返回),表示的是當(dāng)前小周期K線對應(yīng)的大周期K線在整個(gè)大周期中的索引值。舉例來說,5分鐘圖,樣本數(shù)300,那轉(zhuǎn)換成30分鐘周期圖,總共應(yīng)該是50根K線,那最新一根5分鐘圖對應(yīng)的30分鐘K線在整個(gè)30分鐘圖中的索引值就應(yīng)該是49(類似CurrentBar 0-49);
好,其他先不廢話,把代碼貼出來,再舉幾個(gè)例子。
新建用戶函數(shù)MtBar, 返回值為數(shù)值類型,代碼如下:
Params
Numeric TimeFrame(1440);
// 目標(biāo)時(shí)間周期:月線=40320,周線=10080,日線=1440,4小時(shí)線=240
// 其他1小時(shí)內(nèi)的周期等于相應(yīng)的分鐘數(shù),如:1小時(shí)=60, 30分鐘=30。。。
// 支持不規(guī)則分鐘數(shù),如3分鐘,8分鐘,之類都行
Numeric BarsBack(1);
// 目標(biāo)時(shí)間周期BAR偏移:
// 1--表示將目標(biāo)時(shí)間周期下的前1根K線數(shù)據(jù)作為與當(dāng)前Bar對應(yīng)的目標(biāo)時(shí)間周期下的K線數(shù)據(jù)
// 0--表示將目標(biāo)時(shí)間周期下的截止到目前為止的數(shù)據(jù)轉(zhuǎn)換為與當(dāng)前BAR對應(yīng)的目標(biāo)時(shí)間周期下K線數(shù)據(jù)
NumericRef oCurBar; // 目標(biāo)時(shí)間周期下的Bar索引
NumericRef oOPenHT; // 目標(biāo)時(shí)間周期下的開盤價(jià)
NumericRef oHighHT; // 目標(biāo)時(shí)間周期下的最高價(jià)
NumericRef oLowHT; // 目標(biāo)時(shí)間周期下的最低價(jià)
NumericRef oCloseHT; // 目標(biāo)時(shí)間周期下的收盤價(jià)
NumericRef oVolHT; // 目標(biāo)時(shí)間周期下的成交量
NumericRef oOpenIntHT; // 目標(biāo)時(shí)間周期下的持倉量
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 // 其他時(shí)間周期
{
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)
// 如果在目標(biāo)周期下,屬于另一根K線,則CurBar加1
{
barCnt = 1;
CurBar = CurBar[1] + 1;
OpenHT = Open;
HighHT = High;
LowHT = Low;
VolHT = Vol;
}Else
// 如果在目標(biāo)周期下,屬于同一根K線,則CurBar不變,但最高價(jià)和最低價(jià)要記錄價(jià)格的變化,成交量要累加
{
barCnt = barCnt[1] + 1;
CurBar = CurBar[1];
OpenHT = OpenHT[1];
HighHT = Max(HighHT[1],High);
LowHT = Min(LowHT[1],Low);
VolHT = VolHT[1] + Vol;
}
// 收盤價(jià)和持倉量總是取最新值
CloseHT = Close;
OpenIntHT = OpenInt;
}
// 上面的程序,在每根小周期的K線上,記錄了它所屬的大時(shí)間周期下的開高低收等值的變化。
// 接下來,要把在大的時(shí)間周期級別上,屬于同一根K線的開高低收這些數(shù)據(jù),記錄在這一組小周期K線的最后一根上。
barCntSum = barCnt ;
If(BarsBack == 0)
// 如果Bar偏移參數(shù)為0,則取每根小周期K線上保留的大時(shí)間周期截止到這根小周期K線為止的BAR數(shù)據(jù)
{
barCntSum = 0 ;
}Else If(BarsBack == 1)
// 如果Bar偏移參數(shù)為1,則取大時(shí)間周期的上一根K線的BAr數(shù)據(jù)
{
barCntSum = barCnt ;
}Else
// 如果BAR偏移參數(shù)為其他,則取大時(shí)間周期的指定偏移后的那根K線的BAR數(shù)據(jù)
{
For i = 2 To BarsBack
{
barCntSum = barCntSum + barCnt[barCntSum];
}
}
// 最后將相應(yīng)的K線數(shù)據(jù)作為引用參數(shù)返回
oCurBar = CurBar;
oOpenHT = OpenHT[barCntSum];
oHighHT = HighHT[barCntSum];
oLowHT = LowHT[barCntSum];
oCloseHT = CloseHT[barCntSum];
oVolHT = VolHT[barCntSum];
oOpenIntHT = OpenIntHT[barCntSum];
Return barCnt;
End
TB技術(shù)人員:
忘了說一句,以上代碼是在TB V4中編寫與調(diào)試的。
接下來,我們來實(shí)現(xiàn)跨周期的求和函數(shù)MtSummation,上面的函數(shù)中特地返回了一個(gè)值oCurBar,就是我上面提到的大周期下的BAR索引值,就是想為實(shí)現(xiàn)MtSummationFC留下的伏筆,等以后有時(shí)間再解決。現(xiàn)在先還是用最笨的循環(huán)累加的算法。
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
復(fù)制代碼
TB客服:
接下來,就可以實(shí)現(xiàn)計(jì)算跨周期簡單移動平均的函數(shù)MtMa。
Params
Numeric TimeFrame(1440); // 目標(biāo)時(shí)間周期參數(shù),參數(shù)說明參見MtBar
Numeric BarsBack(1); // 目標(biāo)時(shí)間周期BAR偏移參數(shù),說明見MtBar函數(shù)
Numeric Length(10); // 均線周期
NumericRef oMA; // 以目標(biāo)時(shí)間周期下的K線數(shù)據(jù)計(jì)算出的移動平均線
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
復(fù)制代碼
網(wǎng)友回復(fù):
現(xiàn)在可以舉個(gè)例子來說明,怎么用上面的幾個(gè)函數(shù)來做交易策略了。假如我們的策略如下:
1、我們以日線的均線交叉來判斷大趨勢,然后在5分鐘圖上來做交易;
2、日線的短期均線上穿長期均線,則只做多,不做空;反之只做空,不做多;
3、確定了大趨勢后,我們再根據(jù)5分鐘圖來判斷小趨勢,以決定進(jìn)場時(shí)機(jī)。我們?nèi)匀挥镁€來判斷,在多頭大趨勢下,如果5分鐘的短期均線上穿長期均線,則進(jìn)場做多,反穿出場,但不反手做空;在空頭大趨勢下,類似;
我們在5分鐘圖上調(diào)用剛才的函數(shù)的來實(shí)現(xiàn)。新建公式應(yīng)用TestMtMa,代碼如下:
Params
Numeric TimeFrame(1440); // 目標(biāo)時(shí)間周期參數(shù),參數(shù)說明參見MtBar
Numeric BarsBack(1); // 目標(biāo)時(shí)間周期BAR偏移參數(shù),說明見MtBar函數(shù)
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
復(fù)制代碼
網(wǎng)友回復(fù):
如果上面的策略,我們不想用日線均線來判斷大趨勢,而改用小時(shí)線來判斷,則只要將參數(shù)TimeFrame改為60, 就可以了。
打印本文
關(guān)閉窗口
主站蜘蛛池模板:
国产国产在线播放你懂的
|
三级免费黄色片
|
爱呦视频在线播放网址
|
国产嫩草影院精品免费网址
|
99在线小视频
|
打臀缝打肿扒开夹姜
|
亚洲人成在线播放网站
|
粉色视频在线观看www免费
|
国产在线h视频
|
91九色蝌蚪porny
|
成a人片亚洲日本久久
|
久久综合88熟人妻
|
欧美精品亚洲精品
|
北条麻妃在线视频
|
韩国电影禁止的爱善良的小子hd
|
国产美女一级高清免费观看
|
一级一看免费完整版毛片
|
日韩中文字幕在线视频
|
亚洲欧美另类一区
|
精品免费久久久久久成人影院
|
国产另ts另类人妖
|
2022天天操
|
天天干天天操天天摸
|
中文字幕在线免费看线人
|
明星造梦一区二区
|
亚洲欧美成人中文日韩电影
|
精品国产三级a∨在线
|
国产午夜视频高清
|
sss欧美一区二区三区
|
在打烊后仅剩两人接档泡面番
|
两个人看的日本高清电影
|
日本高清黄色片
|
亚洲区精品久久一区二区三区
|
狠狠爱天天综合色欲网
|
又粗又大又黄又硬又爽毛片
|
香蕉eeww99国产在线观看
|
国产精品久久久久久
|
99r在线视频
|
女欢女爱第一季
|
中国老人倣爱视频
|
日本免费www
|