龙听期货论坛's Archiver

龙听 发表于 2020-9-2 08:49

PowerLanguage 矩陣的應用

修改版 HighD/LowD
2017年5月起台指期多了夜盤交易的時段,可以稱為盤後盤、或是正確來說應該算是"盤前盤"吧!
當時段選擇為"標準"或是"Session New"時,其實一日K的起算是從15:00開始至隔天的13:45結束。
過往沒有+1 Session 時段時,在以分鐘K為單位的圖表視窗當中,可以使用函數 HighD/LowD/CloseD/OpenD 來呼叫較長時間維度的 PriceValue,但以上函數的時間切分點是在24:00,能不能順應現在的日K起算於15:00呢?
應用先前建立每個時段開始時reset的基礎,在搭配上使用矩陣、以及if…then的條件就可以寫一個改版的函數了,我取名為$V_HighD

[code]
inputs:
DaysBefore(Numericsimple);
arrays: aHighD[200](0);
if time = sess2firstbartime then
begin
    $Arrayshift(aHighd);
    aHighd[1] = aHighd[0];
    aHighd[0] = High;
end else
begin
    if High > aHighd[0] then aHighD[0] = High;
end;
if Daysbefore <= 200 and DaysBefore >= 0 then
$V_HighD = aHighd[DaysBefore] else
$V_HighD = -1;
[/code]

舉一個 HighD為例,剩下的 LowD/CloseD/OpenD 差不多依樣畫葫蘆就可以完成了。
咦!?但這裡面又用到了一個$Arrayshift函數,它的功能是把最新的值存入矩陣的[0]位置前,先把目前矩陣內存的值都往前移動一個位置,所以需要for迴圈來達成,動作很簡單的!

[code]
inputs:
pArray[X](NumericArrayRef);
vars: vI(0);
for vI = X downto 1
begin
    pArray[vI] = pArray[vI-1];
end;
[/code]

页: [1]