大伊人青草狠狠久久-大伊香蕉精品视频在线-大伊香蕉精品一区视频在线-大伊香蕉在线精品不卡视频-大伊香蕉在线精品视频75-大伊香蕉在线精品视频人碰人
打印本文
關(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ù)代碼貼出來,請(qǐng)大家試用,也歡迎大家提出修改意見。
總體思路:
1、小周期調(diào)用大周期的數(shù)據(jù);
2、具體方法是新編一個(gè)函數(shù),用來根據(jù)小周期下的數(shù)據(jù)推算出大周期的BAR數(shù)據(jù),為了省事,計(jì)算時(shí),會(huì)將大周期下的開高低收以及成交量和持倉(cāng)量等數(shù)據(jù)都算出來,然后將這些數(shù)據(jù)通過引用參數(shù)返回。當(dāng)然有的朋友可能只需要一個(gè)收盤價(jià)就可以了,那樣的話,可以自行修改這個(gè)函數(shù),把多余的數(shù)據(jù)去掉;
3、返回的大周期數(shù)據(jù)將以序列變量的形式保留在對(duì)應(yīng)的小周期K線上,以便以后調(diào)用;
4、另外為了便于大周期的數(shù)據(jù)計(jì)算出來后的回溯使用,函數(shù)會(huì)將小周期下當(dāng)前BAR到大周期下的前一個(gè)BAR的最后一個(gè)小周期BAR需要回溯的BAR數(shù)目,作為函數(shù)的結(jié)果返回。這句話,不容易描述清楚,估計(jì)大家聽起來也費(fèi)力,但沒關(guān)系,后面用例子來解釋,知道這回事就行了。
5、另外還增加了一個(gè)返回值(也是通過引用參數(shù)返回),表示的是當(dāng)前小周期K線對(duì)應(yīng)的大周期K線在整個(gè)大周期中的索引值。舉例來說,5分鐘圖,樣本數(shù)300,那轉(zhuǎn)換成30分鐘周期圖,總共應(yīng)該是50根K線,那最新一根5分鐘圖對(duì)應(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對(duì)應(yīng)的目標(biāo)時(shí)間周期下的K線數(shù)據(jù)
// 0--表示將目標(biāo)時(shí)間周期下的截止到目前為止的數(shù)據(jù)轉(zhuǎn)換為與當(dāng)前BAR對(duì)應(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í)間周期下的持倉(cāng)量
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à)和持倉(cāng)量總是取最新值
CloseHT = Close;
OpenIntHT = OpenInt;
}
// 上面的程序,在每根小周期的K線上,記錄了它所屬的大時(shí)間周期下的開高低收等值的變化。
// 接下來,要把在大的時(shí)間周期級(jí)別上,屬于同一根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ì)算跨周期簡(jiǎn)單移動(dòng)平均的函數(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ì)算出的移動(dòng)平均線
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、我們以日線的均線交叉來判斷大趨勢(shì),然后在5分鐘圖上來做交易;
2、日線的短期均線上穿長(zhǎng)期均線,則只做多,不做空;反之只做空,不做多;
3、確定了大趨勢(shì)后,我們?cè)俑鶕?jù)5分鐘圖來判斷小趨勢(shì),以決定進(jìn)場(chǎng)時(shí)機(jī)。我們?nèi)匀挥镁€來判斷,在多頭大趨勢(shì)下,如果5分鐘的短期均線上穿長(zhǎng)期均線,則進(jìn)場(chǎng)做多,反穿出場(chǎng),但不反手做空;在空頭大趨勢(shì)下,類似;
我們?cè)?分鐘圖上調(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); // 大周期的長(zhǎng)期均線周期
Numeric Length3(10); // 小周期的短期均線周期
Numeric Length4(20); // 小周期的長(zhǎng)期均線周期
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) // 大周期均線金叉,多頭趨勢(shì)
{
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) // 大周期均線死叉,空頭趨勢(shì)
{
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í)線來判斷,則只要將參數(shù)TimeFrame改為60, 就可以了。
打印本文
關(guān)閉窗口
主站蜘蛛池模板:
豆国产97在线 | 中国
|
在线观看亚洲国产
|
午夜性爽视频男人的天堂在线
|
免费一级毛片清高播放
|
亚洲精品丝袜在线一区波多野结衣
|
久青草视频免费视频播放线路1
|
日本免费一区二区久久人人澡
|
精品亚洲综合在线第一区
|
成人香蕉视频
|
久久精品亚洲精品一区
|
亚洲一区在线免费
|
国产精品亚洲片在线观看麻豆
|
亚洲一区二区三区欧美
|
欧美一级特黄一片免费
|
毛片片
|
在线成人天天鲁夜啪视频
|
国产精品久久久久久一区二区
|
国产精品一区二区久久不卡
|
羞羞视频免费观看网站
|
9999人体做爰大胆
|
成人精品一区二区三区中文字幕
|
欧美精品v欧洲高清
|
久久精品中文字幕一区
|
亚洲偷自拍另类图片二区
|
精品久久一
|
久久久久久久久久爱
|
美女久久
|
曰本还a大片免费无播放器 曰本黄色录像
|
久久精品视频大全
|
国产精品高清在线观看93
|
2021天天干
|
亚洲精品国产免费
|
奇米第四777
|
老司机福利精品
|
久操视频免费观看
|
超碰v
|
久久精品国产亚洲a不卡
|
草草影院第一页yycccom
|
99精品在免费线视频
|
亚洲精品你懂的
|
99热这里只有精品6免费
|