關於寫函數

  •   50 
  • 最後發表   CL  2025 七月 28
CL 發文於   2025/07/27

我參考內建的xfmin_MACD函數,想把它改寫一個使用簡單平均值的跨頻MACD函數,想要修改的行數,我用**標出

原始內建函數如下:

input:
    FreqType(string),        //引用頻率
    Price(numericseries),     
    FastLength(numericsimple), SlowLength(numericsimple), MACDLength(numericsimple),
    DifValue(numericref), MACDValue(numericref), OscValue(numericref);

**DifValue = xfMin_XAverage(FreqType, Price, FastLength) - xfMin_XAverage(FreqType, Price, SlowLength);
**MACDValue = xfMin_XAverage(FreqType, DifValue, MACDLength);
OscValue = DifValue - MACDValue;

xfMin_macd = 1;

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

我想把打**的那兩行修改成如下:

//計算兩條簡單平均值的差

DifValue =  Average(getfield("close",FreqType), FastLength) - Average(getfield("close",FreqType), SlowLength); 

//把某個頻率下,過去K棒的平均值計算出來

sumValue=0;
For i = 0 to MACDLength-1
       begin
           sumValue = sumValue + xf_GetValue("1",value1,i);
       end;

MACDValue = sumValue/MACDLength;     

 

但是按下編譯鈕後出現的第一個錯誤是"函數getfield:第二個參數應該是string"

所以我想知道要怎麼寫才能把string傳進函數讓getfield使用。(PS. 我沒有任何程式設計的背景,所以只是用我能理解的方式去寫)

感謝幫忙

排序方式: 標準 | 最新
虎科大許教授 發文於   2025/07/27

GetField第二個參數賦予的必須是有數值的常數。

CL 發文於   2025/07/28

不好意思,不太懂。我的理解是,第二個參數是字串格式的頻率,可以是文字,比如說getfield("close","D")。

不過我是想要知道如果要getfield的參數,是否能以input的形式傳給它使用,如果可以的話,要怎麼寫。感謝。

虎科大許教授 發文於   2025/07/28

GetField第二個參數必須是有數值的常數,不可用參數或變數處理。

你可以這樣寫:

value1=GetField("收盤價", "D");

但不可以這樣寫:

input: FreqType("D","頻率");

value1=GetField("收盤價", FreqType);

發表回覆
Close