lu0811 發表於 11-12-27 18:24

請教AmiBroker高手,關於時間函數。

AmiBroker的時間函數有 month()、day()、Hour()、Minute() 、Second() 等..
現在小弟想利用 function 自訂15分鐘的函數,請問要如何寫?

謝謝大大們。
{:5_260:}

lu0811 發表於 11-12-28 08:55

例如BarsSince(Hour() != Ref(Hour(),-1));
小弟想將其改為BarsSince(15分鐘() != Ref(15分鐘(),-1));

感恩~
{:5_260:}

yccecily 發表於 11-12-28 13:51

回復 2# lu0811

程式片段供您參考,不知合不合用


TM = T1 * in1Minute;
SetChartOptions(0,0,chartGrid30|chartGrid70);
TimeFrameSet(TM);
M15O                 = Open;
M15H                        = High;
M15L                         = Low;
M15C                        = Close;
TimeFrameRestore();

lu0811 發表於 11-12-28 14:04

回復 3# yccecily
謝謝yccecily大您的程式碼。{:5_260:}

不過小弟是需要function來自訂函數,弄成類似像Hour()的函數,自訂一個 fifteenMinute()。

enochyu 發表於 11-12-28 23:37

本帖最後由 enochyu 於 11-12-28 11:46 PM 編輯

野人獻曝一下 ~ {:4_91:}

------
建立一個 function 如下

function getMinuteBlock( _minuteUnit )
{
    _eyMinuteBlock = -1;
    if ( ( _minuteUnit > 0 ) && ( _minuteUnit < 600 ) )
      _eyMinuteBlock = floor( ( ( Hour() * 60 )+ Minute() ) / _minuteUnit );
    return _eyMinuteBlock;
}


說明:
以24H為概念,假設以 15M 為單位,
--> 00:00:00 ~ 00:14:59 傳回 0
--> 00:15:00 ~ 00:29:59 傳回 1
--> 00:30:00 ~ 00:44:59 傳回 2
... 以此類推。

------

為單位使用範例

getMinuteBlock( 15 );
// 假設於5分鐘線圖中,該K棒時間為09:00,則回傳值為 36
// 假設於5分鐘線圖中,該K棒時間為09:05,則回傳值為 36
// 假設於5分鐘線圖中,該K棒時間為09:10,則回傳值為 36
// 假設於5分鐘線圖中,該K棒時間為09:15,則回傳值為 37 ... 以此類推

Ref( getMinuteBlock( 15 ), -1 );
// 假設於5分鐘線圖中,該K棒時間為09:00,則回傳值為 35
// 假設於5分鐘線圖中,該K棒時間為09:05,則回傳值為 36
// 假設於5分鐘線圖中,該K棒時間為09:10,則回傳值為 36
// 假設於5分鐘線圖中,該K棒時間為09:15,則回傳值為 36 ... 以此類推



為單位使用範例

getMinuteBlock( 6 );
// 假設於5分鐘線圖中,該K棒時間為09:00,則回傳值為 90
// 假設於5分鐘線圖中,該K棒時間為09:05,則回傳值為 90
// 假設於5分鐘線圖中,該K棒時間為09:10,則回傳值為 91
// 假設於5分鐘線圖中,該K棒時間為09:15,則回傳值為 92 ... 以此類推

Ref( getMinuteBlock( 6 ), -1 );
// 假設於5分鐘線圖中,該K棒時間為09:00,則回傳值為 89
// 假設於5分鐘線圖中,該K棒時間為09:05,則回傳值為 90
// 假設於5分鐘線圖中,該K棒時間為09:10,則回傳值為 90
// 假設於5分鐘線圖中,該K棒時間為09:15,則回傳值為 91 ... 以此類推


------

所以此函式可以視您的需求,傳入任意的分鐘單位(需介於1~599),即會回傳 00:00:00 至該根K棒的[單位數]。

請笑納 ~

lu0811 發表於 11-12-28 23:49

本帖最後由 lu0811 於 11-12-29 12:33 AM 編輯

回復 5# enochyu

萬分感謝enochyu大,經小弟測試後完全可以。
enochyu大真是太太太強了!!

再次致上感謝之意~~
{:5_260:}

enochyu 發表於 11-12-29 00:12

回復 6# lu0811


you are wellcome ~ ^o^


若覺得函式名稱太長想讓名稱變得與內建的 Minute() 較接近,可以變化如下,

// 底層函式
function getMinuteBlock( _minuteUnit )
{
    _eyMinuteBlock = -1;
    if ( ( _minuteUnit > 0 ) && ( _minuteUnit < 600 ) )
      _eyMinuteBlock = floor( ( ( Hour() * 60 )+ Minute() ) / _minuteUnit );
    return _eyMinuteBlock;
}

// 以 為單位之函式
function Minute2()
{
    return getMinuteBlock( 2 );
}

// 以 為單位之函式
function Minute3()
{
    return getMinuteBlock( 3 );
}

// ...


// 以 為單位之函式
function Minute15()
{
    return getMinuteBlock( 15 );
}

// ... 以此類推,任君高興自己定義囉!


------

使用方式,

Minute15();    // 結果同 getMinuteBlock( 15 );
Ref( Minute15(), -1 );    // 結果同 Ref( getMinuteBlock( 15 ), -1 );


------

請參考。

lu0811 發表於 11-12-29 00:22

本帖最後由 lu0811 於 11-12-29 12:32 AM 編輯

回復 7# enochyu

原 getMinuteBlock() 就已經很完美了,

想不到enochyu大除此之外還再附贈一個加強版。

一樣讚啦!這個加強版經小弟測試後一樣OK。
{:5_260:}

kilroy 發表於 11-12-29 01:04


you are wellcome ~ ^o^
若覺得函式名稱太長想讓名稱變得與內建的 Minute() 較接近,可 ...
enochyu 發表於 11-12-29 12:12 AM http://www.coco-in.net/images/common/back.gif


   enochyu 大大真是太厲害了
   大大會寫外期下單機嗎
   有機會的話,合作一下 {:4_113:}

saucer 發表於 11-12-29 01:09

我有喔 ~ 用 VC 寫的捏

kilroy 發表於 11-12-29 02:49

我有喔 ~ 用 VC 寫的捏
saucer 發表於 11-12-29 01:09 AM http://www.coco-in.net/images/common/back.gif


   讚喔!

enochyu 發表於 11-12-29 08:04

回復 9# kilroy


外期下單這部分小弟很有興趣,若有機會合作小弟也很樂意,只是個人時間上沒這麼彈性,怕耽誤寬大的賺錢良機 ~ 哈哈 {:4_140:}

套您一句話 "功成不必在我,在各人的的修為",相信有能力(時間)分享絕對是一種幸福 ~ {:4_209:}

kilroy 發表於 11-12-29 14:22

我有喔 ~ 用 VC 寫的捏
saucer 發表於 11-12-29 01:09 AM http://www.coco-in.net/images/common/back.gif


   只要是有 API的函數庫等資料
   大大都可以寫得出來嗎

   P.S. 不管國內外期貨商

---

   讚喔! {:4_113:}

GnuHomot 發表於 11-12-29 22:08

回復 8# lu0811

我比較好奇這可以怎麼用??跟改TimeFrame有什麼不一樣的應用嗎?

lu0811 發表於 11-12-29 22:43

回復 14# GnuHomot
BarsSince(15分鐘() != Ref(15分鐘(),-1));
就是2樓說的用法啊。
頁: [1]
查看完整版本: 請教AmiBroker高手,關於時間函數。