均線在跨頻率(日線圖/周線圖)取值的問題

  •   533 
  • 最後發表   小荷包  2025 三月 20
小荷包 發文於   2025/03/17

 大大好:

均線在跨頻率(日線圖/周線圖)取值的問題

 程式碼如下:

Var:CloseDay(0),CloseWeek(0),CloseMonth(0) ;


SetTotalBar(100);


//股價站下日線圖的5ma/10ma/20ma/60ma
value1 = xf_WeightedClose("AD");           
CloseDay = xf_GetValue("AD",value1,0);  
condition1 = false;
if CloseDay < EMA(CloseDay,5) and CloseDay < EMA(CloseDay,10) and CloseDay < EMA(CloseDay,20) and CloseDay < EMA(CloseDay,60) then
Begin
    condition1 = true;
End;

//股價站下周線圖的20ma
value2 = xf_WeightedClose("AW");            
CloseWeek = xf_GetValue("AW",value2,0); 
condition2 = false;
if CloseWeek <  xf_EMA("AW", CloseWeek,20) then
Begin
    condition2 = true;
End;


//總結
//if condition1 and condition2 and condition3 and condition9 and condition8
if condition1 and condition2  then
Begin

    //print(file("C:\print\"),date,symbol,close);
    ret=1;
    print(file("c:\temp\xq_短線空方選股.log"),"選股日期:"+datetoString(date) );
    print(file("c:\temp\xq_短線空方選股.log"),"股票名稱:"+symbolName);
    print(file("c:\temp\xq_短線空方選股.log"),"股票代碼:"+symbol);

    print(file("c:\temp\xq_短線空方選股.log"),Text("上引線:",High-close) );
    print(file("c:\temp\xq_短線空方選股.log"),Text("實體棒:",close-open) );

    print(file("c:\temp\xq_短線空方選股.log"),Text("收盤價:",CloseDay) );
    print(file("c:\temp\xq_短線空方選股.log"),Text("EMA5:",xf_EMA("AD", CloseDay,5)) );
    print(file("c:\temp\xq_短線空方選股.log"),Text("EMA10:",xf_EMA("AD",CloseDay,10)) );
    print(file("c:\temp\xq_短線空方選股.log"),Text("EMA20:",xf_EMA("AD",CloseDay,20)) );
    print(file("c:\temp\xq_短線空方選股.log"),Text("EMA60:",xf_EMA("AD",CloseDay,60)) );

    print(file("c:\temp\xq_短線空方選股.log"),Text("周收盤價:",CloseWeek) );
    print(file("c:\temp\xq_短線空方選股.log"),Text("周EMA20:",xf_EMA("AW", CloseWeek,20)) );



End;



選出的股票.如恆大

log內容

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

選股日期:2025/03/14 
股票名稱:恆大 
股票代碼:1325.TW 
上引線:0.250000 
實體棒:0.200000 
收盤價:28.662500 
EMA5:29.143159 
EMA10:29.855960 
EMA20:30.802945 
EMA60:30.966845 
周收盤價:28.925000 
周EMA20:30.088750 
EPS=0.000000 
------------- 

 

 

我剛學習XS.所以有很多疑問??而且看很一堆文件.想不透

1.跨頻率

xf_WeightedClose("W");            //計算週線的加權平均價

計算週線的加權平均價.這個是什麼意思???

2.跨頻率
"D", "W", "M".我能猜得出來!!!
"AD", "AW", "AM" 什麼意思???
3.log內容

錯誤的數值如下:

日線圖EMA60

 周線圖EMA20   

這兩個...我修改很多次.就是想不透錯在哪???

         

 

 

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

(1)在週以下的頻率,例如日頻率,計算週的加權平均收盤價,就用xf_weightedClose("W")。它代表用週的最高價加週的最低價再加兩倍週的收盤價,然後一起除以4,得到的平均收盤價。

(2)有加A的,代表還原的意思,例如AD,代表還原日資料。AW代表還原週資料。

(3)計算EMA需要足夠的資料筆數,一般而言,你要比對技術分析圖表的EMA與你計算的EMA,基本上不會一樣,因為系統使用的資料筆數(全部資料)與你使用的資料筆數(100筆)不同。

  • 按讚來自於
  • eric19740521
小荷包 發文於   2025/03/17

大大:

感謝快速回復.我花了一個下午時間去釐清問題.

 

1.加權平均收盤價..這個太複雜了

我只要SMA

2.EMA.根據手冊說明

"有一些指標,例如EMA均線,或是MACD指標,由於計算時會不斷的引用前一筆計算的數值做累計的平均,像這樣子的腳本,就會需要一個比較大的資料讀取筆數。"

我發覺這個只會讓我的選股走偏了

其實我只是簡單選股而已.思考了.SMA就可以了

3.

1)資料讀取筆數區間

發覺設1時.只會執行一次

發覺設5時.只會執行5次.也就是5天內符合的列出

但至少MA60

Average(Close,60)

這個我還以為資料讀取筆數區間60

計算會導致錯誤..實際測試.正常

 

2)程式加上這個

SetTotalBar(60);

 

SMA...實際測試.正常

 

4.目前是使用日線圖.等下再加上周線圖

 

 

 

 

虎科大許教授 發文於   2025/03/17

(1)跨頻率計算SMA,只要將跨頻率資料賦予Average函數即可。跨頻率計算20週的SMA:

value1=average(getField("收盤價","W"),20);

(2)只要是資料庫有的數據,不必讀取那麼多筆資料,也可以抓到資料。

  • 按讚來自於
  • eric19740521
小荷包 發文於   2025/03/18

大大:

感謝再次回復..

我有修改了程式碼.加入周頻率

 

發文前的程式碼如下:

Var:CloseDay(0),CloseWeek(0),CloseMonth(0) ;

//在日頻率的腳本加
setBarFreq("D");
//setTotalBar(1500);

//股價站下日線圖的5ma/10ma/20ma/60ma
condition1 = false;
if Close < Average(Close,5) and Close < Average(Close,10) and Close < Average(Close,20) then
Begin
    condition1 = true;
End;

//在周頻率的腳本加
//setBarFreq("W");
//setTotalBar(1500);
SetBackBar(30, "W");

//在周頻率的腳本加SetTotalBar(5000);
//股價站下周線圖的20ma
//CloseWeek = getfield("close","W");
CloseWeek = CloseW(0);
value1 = CloseW(0)+CloseW(1)+CloseW(2)+CloseW(3)+CloseW(4)+CloseW(5)+CloseW(6)+CloseW(7)+CloseW(8)+CloseW(9)+CloseW(10);
value1 = value1+CloseW(11)+CloseW(12)+CloseW(13)+CloseW(14)+CloseW(15)+CloseW(16)+CloseW(17)+CloseW(18)+CloseW(19);
value2 = value1/20;

condition2 = false;
if CloseWeek <  Average(CloseWeek ,20) then
Begin
    condition2 = true;
End;


//N 日簡單移動平均數值(SMA)=N 日收盤價加總/ N 日

//總結
//if condition1 and condition2 and condition3 and condition9 and condition8
if condition1 and condition2  then
Begin

    //print(file("C:\print\"),date,symbol,close);
    ret=1;

//省略log..print...省略..貼文有字數限制

End;



 

貼文有字數限制...我省略了省略log..print...省略..

目前發覺到有幾個問題:

1.正要發文時..看到教授的文

知道周MA20是程式碼錯物..

CloseWeek = CloseW(0);
Average(CloseWeek ,20) 

用教授的.就正常了

average(getField("收盤價","W"),20)

 

 

2.關於周日跨頻問題

使用日頻率之前..我設了這個

setBarFreq("D");

setTotalBar(10);   

setTotalBar..設定10

只需要當天顯示即可..

(log檔案內..發覺10天內符合結果會跑出來..設少一點..程式會快一點)

 

使用周頻率之前..我設了這個

SetBackBar(30, "W");

讀取30各棒(周線圖)

 

不知道是否符合邏輯???

 

 

 

 

 

虎科大許教授 發文於   2025/03/18

讀取的資料筆數越多,當然跑起來越慢。你的情況使用的都是資料庫裡面的資料,用預設的10筆即可。SetBackBar(30, "W");應該也可以省略。

  • 按讚來自於
  • eric19740521
小荷包 發文於   2025/03/18

感謝大大!!!!我再去測試.非常感謝你

XS小編 發文於   2025/03/20

Hello 小荷包,

 

小編補充,關於資料讀取筆數(settotalbar) 和 資料引用筆數(setbackbar),可以參考 資料讀取範圍與腳本執行的關係 裡的說明。

若您使用的是選股,那麼資料引用筆數並不用另外設定,因為選股預設就是拉出所有的資訊。

至於頻率的設定可參考 GetField 欄位說明。

發表回覆
Close