summation有誤

  •   353 
  • 最後發表   小富  2024 七月 31
小富 發文於   2024/07/28

親愛的小編 &各位高手,

我在計算近三日法人買超時,使用了value2 = summation(getfield("法人買賣超張數","D"),3)  ,請問這樣的語法有誤嗎? 因為計算出來的近三日數值,有對有錯。我用outputfield列釋出三天的數值,卻又正確無誤。不知道究竟出錯在哪? 請各位協助,謝謝!!

我另外用系統的選股條件去排列,卻就會跑出正確的結果。

附加文件

排序方式: 標準 | 最新
小富 發文於   2024/07/29

我將summation去掉,改成逐日相加,結果竟然還是一樣。每天的資料都正確,但加總起來卻出錯了。

// 技術面、財務面、籌碼面綜合選股

input: shortMA(20,"短均線"),midMA(60,"中均線"),longMA(240,"長均線");

input: opr(5,"營業利益率基準"),pe(20,"本益比基準"),overbuy(1000,"法人買超基準");

var: epsf(0);

 

 

if average(close,shortMA)> average(close,midMA) and average(close,midMA) > average(close,longMA) and close>average(close,midMA) then Begin

  if Getfield("營業收入淨額","Q")> Getfield("營業收入淨額","Q")[1] then

     if Getfield("營業利益率","Q")>=opr then begin

    epsf = GetField("EPS","Q")*4;

value1 = close/epsf;

value2 = getfield("法人買賣超張數","D")+ getfield("法人買賣超張數","D")[1]+ getfield("法人買賣超張數","D")[2];

  end;

  if value1<pe and value2 > overbuy then ret =1;

outputField1(Getfield("營業利益率","Q"),"營業利益率%");

outputField2(value1,"PE");

outputField3(value2,"法人三天買超張數");

outputField4(getfield("法人買賣超張數","D"),"法人買超");

outputField5(getfield("法人買賣超張數","D")[1],"法人買超[1]");

outputField6(getfield("法人買賣超張數","D")[2],"法人買超[2]");

end;

跑出來的結果卻如附圖

還請幫忙更正,謝謝!

小陳

附加文件

虎科大許教授 發文於   2024/07/29

問題出在outputfield抓的法人買超、法人買超[1]、法人買超[2]的數值是最近三天的數值,而法人三天買超張數數值是符合條件往前總共三天的數值。以1603華電為例,20240712符合條件,0712的法人買超1154,0711法人買超35張,0710法人買超125,合計就是outputfield3的合計數值1314張。至於outputfield4,outputfield5,outputfield6,則是這三天,亦即0729、0726、0725,的數值。

小富 發文於   2024/07/30

哦! 感謝許教授解釋,了解您的意思。但這樣不就變成GedField資料日期無法控制了嗎? 或者我該如何修正? 謝謝!

虎科大許教授 發文於   2024/07/30

input: shortMA(20,"短均線"),midMA(60,"中均線"),longMA(240,"長均線");
input: opr(5,"營業利益率基準"),pe(20,"本益比基準"),overbuy(1000,"法人買超基準");
var: epsf(0);
if average(close,shortMA)> average(close,midMA) and average(close,midMA) > average(close,longMA) and close>average(close,midMA) then 
    Begin
        if Getfield("營業收入淨額","Q")> Getfield("營業收入淨額","Q")[1] then
            if Getfield("營業利益率","Q")>=opr then 
                begin
                    epsf = GetField("EPS","Q")*4;
                    value1 = close/epsf;
                    value2 = summation(getfield("法人買賣超張數","D"),3);
                    value3 = getbarOffset(date);                    
                end;
        if isLastBar and value1 < pe and value2 > overbuy then 
            begin
                ret =1;
                outputField1(value2,"法人三天買超張數");
                outputField2(getfield("法人買賣超張數","D")[value3],"法人買超");
                outputField3(getfield("法人買賣超張數","D")[value3+1],"法人買超[1]");
                outputField4(getfield("法人買賣超張數","D")[value3+2],"法人買超[2]");
            end;
    end;

小富 發文於   2024/07/30

感謝許教授的協助,謝謝!

小富 發文於   2024/07/30

不好意思,許教授,用這程式跑出來的結果,問題仍是一樣。因為跑出來第一檔1210大成就有誤(過去三天的資料都是賣超,但很奇怪summation的結果卻是1581。附件檔案為執行後的結果截圖。

附加文件

虎科大許教授 發文於   2024/07/30

我今天晚上執行的結果只有選出4檔股票,你卻選出13檔。請將選股中心原本的策略刪除,重新加入我寫的選股策略看看。

小富 發文於   2024/07/31

Dear 許教授,

我的確是刪掉原來的策略,直接將您的腳本貼上跑....但跑出來的結果也真的是13檔,還用另個帳號新開腳本執行...結果也是一樣。我自己仔細檢查不知道是否是另個邏輯上的錯誤。(請見附圖)....我後來打掉重練,改用condition的方式寫,就正確了。選出結果的確是四檔無誤。

真的非常感謝許教授的熱心協助,謝謝!!

小陳

附加文件

小富 發文於   2024/07/31

由於我無法貼上程式碼? (一直出現被檔的通知),所以改用附件貼圖方式,抱歉!

附加文件

虎科大許教授 發文於   2024/07/31

你改寫程式之後又犯了相同的錯誤。請仔細閱讀我前面的程式碼,了解程式背後是怎麼運作的,問題即可解決。

顯示更多回應 發表回覆
Close