keymaker 發表於 13-9-28 17:20

請問 AmiBroker 如何取得昨天高點所在棒形序號

這幾天 AB 的客服系統忽然掛了..因此發表這個問題..求助於 coco-in 的高手..

預設條件如下 (或基本想法):
1. 時間週期 = 1分盤
2. 可能用到函數 HHV, DateNum,.....





Sirius 發表於 13-9-28 19:51

棒形序號是什麼?

keymaker 發表於 13-9-28 20:50

Sirius 發表於 13-9-28 19:51 static/image/common/back.gif
棒形序號是什麼?

假設,現在有 10 根 k 棒,每根 k 棒,按照由左而右的次序給予編號:
因此,第1根 k 棒的棒形序號 = 1;第2根 k 棒的棒形序號 = 2;
剩下的部份以此原理類推..希望這樣說明您可以了解

kilroy 發表於 13-9-29 02:04

keymaker 發表於 13-9-28 20:50 static/image/common/back.gif
假設,現在有 10 根 k 棒,每根 k 棒,按照由左而右的次序給予編號:
因此,第1根 k 棒的棒形序號 = 1;   ...

Hi,

寫條件去判斷

用這行去算當根第幾根K
Bars = 1 + BarsSince( Day()!= Ref(Day(), -1));

Count = valuewhen(當日最高, Bars);

就可以知道最高K是第幾根K了

而當日最高的判斷

小弟隨手寫一下 (相信有更簡單的方式去判斷,不過我呆 XD)


範例

DH = TimeFrameGetPrice("H", inDaily);
Bars = 1 + BarsSince( Day()!= Ref(Day(), -1));
Counts = ValueWhen( H == DH, bars);


LastDayHighOfBars = Ref(Counts, -1);



應該是無誤啦 XD 參考看看了

keymaker 發表於 13-9-29 11:04

本帖最後由 keymaker 於 13-9-29 11:42 編輯

Bars = 1 + BarsSince( Day()!= Ref(Day(), -1)); //算出換日後的棒形序號
//但是呢..沒有算出..全域性的棒形序號...
//所謂..全域性的棒形序號..例如..有10000根 k 棒..那您得到的 Bars 都是 1
//再者..Day() 算出來的部份在1分盤沒辦法用...
//無論如何..非常感謝您發揮助人之心...告訴大家您的智慧與解答........

kilroy 發表於 13-9-29 12:10

keymaker 發表於 13-9-29 11:04
Bars = 1 + BarsSince( Day()!= Ref(Day(), -1)); //算出換日後的棒形序號
//但是呢..沒有算出..全域性的棒 ...

LastDayHighOfBars 這個值是當日第幾跟k

再參考看看吧

keymaker 發表於 13-9-29 16:24

kilroy 發表於 13-9-29 12:10 static/image/common/back.gif
LastDayHighOfBars 這個值是當日第幾跟k

再參考看看吧
Counts = ValueWhen( H == DH, bars); 可以比對今日 k 而找到 DH 最後位於今日第幾根 k 確實沒錯..

只是..若要宣告一個變數記錄(在 1 分盤)此 Counts 發生於昨日的最後值..不知有何想法(語法)..

kilroy 發表於 13-9-29 16:31

keymaker 發表於 13-9-29 16:24 static/image/common/back.gif
Counts = ValueWhen( H == DH, bars); 可以比對今日 k 而找到 DH 最後位於今日第幾根 k 確實沒錯..

只是. ...

Hi,

小弟簡單說一下

DH = TimeFrameGetPrice("H", inDaily);            //取日線高點 (日線高點會是所有分線中的高點)
Bars = 1 + BarsSince( Day()!= Ref(Day(), -1));   //以日為基礎,每日重新計算K線數(序號?)
Counts = ValueWhen( H == DH, bars);            //當某根分線K高點等於日線高點時,取當根K之K棒數(序號?)

LastDayHighOfBars = Ref(Counts, -1);               //取昨日高點發生時,該K線的棒數(序號?)


所以LastDayHighOfBars 就是樓主你要的 "昨天高點所在棒形序號"


用 printf("%g", LastDayHighOfBars);來觀察昨日高點處在昨日的第幾根K


參考語法:valuewhen


這樣應該有幫助到大大才是,參考看看了~~

keymaker 發表於 13-9-29 21:19

kilroy 發表於 13-9-29 16:31 static/image/common/back.gif
Hi,

小弟簡單說一下

以台指期 2013/09/26 以及 09/27 兩天為例...時間週期定在 15-minute 可見 2013/09/26 高點在第3根, 2013/09/27 高點在第2根

當 k 棒進行到 2013/09/27 第1根時, Counts=2=今高, LastDayHighOfBars=3=昨高 (非常完美)
當 k 棒進行到 2013/09/27 第2根時, Counts=2=今高, LastDayHighOfBars=2=今高
於是無法一直取得「昨天高點所在棒形序號」..


enochyu 發表於 13-9-29 23:26

本帖最後由 enochyu 於 13-9-29 23:28 編輯

小弟獻醜一下。

要回文時發現,keymaker大又有新回應,我好像把需求複雜化了,寫成下圖所示


程式碼_IsIntraday          = ( Interval() < inDaily );
_DateLine            = Day() != Ref( Day(), -1 );
_BarIndexOfDay       = BarsSince( _DateLine ) + 1;
_LastDayBarCount   = Ref( _BarIndexOfDay, -1 * _BarIndexOfDay );
_LastDayHHVBars      = HHVBars( H, _LastDayBarCount );
_BarSinceLastDayHHV= ( Ref( _LastDayHHVBars, -1 * _BarIndexOfDay ) + _BarIndexOfDay ) * _IsIntraday;
---
小弟就不在簡化程式了,若未會意錯,以keymaker大的需求只要再加上下述程式碼,
_LastDayHighBarIndex = _LastDayBarCount - Ref( _LastDayHHVBars, -1 * _BarIndexOfDay );
該變數(_LastDayHighBarIndex)就是你要的值,參考看看。



keymaker 發表於 13-9-30 13:54

傳說中的...隱弄客...出現了...........請容敝人做好實驗之後再回文....

keymaker 發表於 13-9-30 14:45

同樣以台指期 2013/09/26 以及 09/27 兩天為例...
時間週期定在 15-minute...
可見 2013/09/26 高點在第3根, 2013/09/27 高點在第2根...

於是..當k棒到達 2013/09/27 第2根時...隱弄客大所創作之..

_BarSinceLastDayHHV=20=目前k棒距離昨高20根(完美)
_LastDayHighBarIndex=3=今高位於今日第3根(完美)

不過...若要取得「昨高所在 BarIndex()」...就尚未達成須求...(不好意思{:4_90:})

enochyu 發表於 13-9-30 15:02

keymaker 發表於 13-9-30 14:45 static/image/common/back.gif
同樣以台指期 2013/09/26 以及 09/27 兩天為例...
時間週期定在 15-minute...
可見 2013/09/26 高點在第3根 ...

建議可以使用函數及變數,自行試試,會更有感覺{:4_153:}
LastValue()
BarIndex()
_BarSinceLastDayHHV


祝 順心

keymaker 發表於 13-10-1 10:15

本帖最後由 keymaker 於 13-10-1 10:34 編輯

發帖後...目前已經出現兩位神人...(總之是幫助了大家...該給 + 評分)

keymaker 發表於 13-10-1 10:39

看來下次必須想出更 exciting 的題目...(例如..型態學操作之類的)
頁: [1]
查看完整版本: 請問 AmiBroker 如何取得昨天高點所在棒形序號