跨頻率MFI

  •   173 
  • 最後發表   CL  2023 六月 03
CL 發文於   2023/05/29

你好

 

我試著把技術指標裡的MFI改成跨頻率 不過出來的數值不太一樣 想請教一下修改的地方哪裡有問題。

 

這是原本技術指標腳本裡的MFI:

 

-------------------------------------------------------

 

// XQ: MFI指標

 

Input: Length(6);

 

variable: tp(0), tv(0), utv(0), dtv(0), pmf(0), nmf(0), mfivalue(0);

 

SetInputName(1, "天數");

 

tp = TypicalPrice;

 

tv = tp * Volume;

 

if tp > tp[1] then

 

  begin

 

utv = tv;

 

dtv = 0;

 

  end

 

else

 

  begin

 

utv = 0;

 

dtv = tv;

 

  end;

 

pmf = Average(utv, MinList(CurrentBar, length));

 

nmf = Average(dtv, MinList(CurrentBar, length));

 

if CurrentBar < Length or (pmf + nmf) = 0 then

 

mfivalue = 50

 

else 

 

mfivalue = 100 * pmf /(pmf + nmf);

 

Plot1(mfivalue, "MFI");

 

--------------------------------------------------------------------------------------

 

我試著改成在60分鐘頻率以下看60分鐘的MFI指標 有一個地方我不知道要怎麼改(打*的地方) 請工程師指教:(我知道Average函數需要用數列,但我不知道變數的數列要怎麼寫)

 

Input: Length(6);

 

variable: tp(0), tv(0), utv(0), dtv(0), pmf(0), nmf(0), mfivalue(0);

 

tp = (getfield("high","60")+getfield("low","60")+getfield("close","60"))/3;

 

tv = xfMin_GetValue("60",tp,0) * getfield("Volume","60");

 

if xfMin_GetValue("60",tp,0) > xfMin_GetValue("60",tp,1) then

 

  begin

 

utv = tv;

 

dtv = 0;

 

  end

 

else

 

  begin

 

utv = 0;

 

dtv = tv;

 

  end;

 

*pmf = Average(utv, MinList(xf_GetCurrentBar("60"), Length));

 

*nmf = Average(dtv, MinList(xf_GetCurrentBar("60"), length));

 

if xf_GetCurrentBar("60") < Length or (pmf + nmf) = 0 then

 

mfivalue = 50

 

else 

 

mfivalue = 100 * pmf /(pmf + nmf);

 

 

 

Plot1(mfivalue, "MFI");

 

 -------------------------------------------------------------

感謝

不知道哪裡還需要修改 所以想麻煩工程師幫我看一下

 

感恩

排序方式: 標準 | 最新
XQ小幫手 發文於   2023/06/01

 Hello CL,

 

要計算變數跨頻率的平均,小幫手會建議您使用陣列保存所需期數的跨頻率變數值,再使用 Array_Sum 加總後處以期數。

舉例來說:

array: pmfA[](0), nmfA[](0);

Array_SetMaxIndex(pmfA, length);

Array_SetMaxIndex(nmfA, length);

 

for value1 = 1 to length begin

    pmfA[value1] = xfMin_GetValue("60", utv, value1 - 1);

nmfA[value1] = xfMin_GetValue("60", dtv, value1 - 1);

    end;

 

pmf = array_sum(pmfA, 1, length) / length;

nmf = array_sum(nmfA, 1, length) / length;

 

這樣就會計算出60分鐘頻率的變數平均值。

CL 發文於   2023/06/03

原來如此 要使用陣列 我懂了 感謝工程師

發表回覆
Close