選股策略的條件設定問題

  •   90 
  • 最後發表   Tyler  2025 九月 12
Tyler 發文於   2025/09/06

兩個問題如下:

問題1.自訂的選股策略中,其中一個條件使用的是選股腳本"最近15日創60日新高",並在編輯條件欄位中設定資料讀取為60日

 

但進去XScript編輯器中觀察此選股腳本,發現該腳本內容在左下角的位置仍然為資料讀取10,如下圖紅框標示

 

此紅框處的資料讀取10,我無法變更也不懂怎麼變更,不確定腳本這樣的顯示狀態是否有真正讀取到60日資料去做判斷,另問這樣此腳本真正讀取的資料數量是10日還是60日?我要的效果是設定創X日新高就要能夠讀取到X日的資料才準確

 

 

問題2.在另一個選股策略中我設定了"週漲幅前100名"及"月漲幅前100名"這兩個條件,但跑出來的選股結果,週漲幅及月漲幅的名次排行順序是一模一樣,好像這兩條件是一樣似的,這顯然不對啊,如下圖,請問如何讓此兩條件正確發揮篩選效果?謝謝

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

(1)在腳本的第一行加入SetTotalBar(60);

(2)試著寫程式,用Rank處理。

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

9/5收盤價是本週的收盤價,也是本月的收盤價,所以週與月的結果及排名都相同。

Tyler 發文於   2025/09/08

我想要的是週漲幅排行=最近5日漲幅排行,月漲幅排行=最近30日或22日漲幅排行,請問這個選股條件在XQ內建條件有選項可勾選嗎?還是也要自己另寫成腳本才能加入條件?

Tyler 發文於   2025/09/08

在腳本的第一行加入SetTotalBar(60);之後

1.XScript編輯器中,左下角欄位中原本資料讀取欄位固定為10的數值就不見了

2.原先在編輯選股條件的頁面可單獨設定資料讀取為天數,現在這個設定方式沒有了

如下圖

這樣不曉得是否正確?

虎科大許教授 發文於   2025/09/08

你可以在『新增選股策略』視窗的四個分頁,分別輸入排行,就可看到選股可用的排行條件。你要的最近5日漲幅排行條件應該沒有。需要寫程式處理。要善用XQ的功能,僅靠手動選擇條件,很是受限。既然有心用程式交易,應該去學習XS。

既然程式強制設定讀取資料筆數為60筆,當然沒有必要讓使用者更改讀取筆數。(1)與(2)的情況是正常的。

 

虎科大許教授 發文於   2025/09/08

其實,XS是很簡單的程式語言,學起來很容易。解決問題也相當輕鬆。以你的需求,最近5天漲幅排行及22天漲幅排行都在前10名的程式,可簡單撰寫如下:

setBarFreq("D");
setBackBar(22);
setTotalBar(1);
rank rankW desc //由大到小排序
    begin
        value1=rateOfChange(c,5);
        ret=value1;
    end;
rank rankM desc //由大到小排序
    begin
        value1=rateOfChange(c,22);
        if rankW.pos>10 then value1=-999999;
        ret=value1;
    end;
if rankM.pos<=10 then ret=1;
outputField1(rateOfChange(c,5),"5日漲跌幅");
outputField2(rankW.pos,"5日漲跌幅排名");
outputField3(rateOfChange(c,22),"22日漲跌幅");
outputField4(rankM.pos,"22日漲跌幅排名");

Tyler 發文於   2025/09/10

了解,那這樣第一個問題"最近15日創X日新高"同時讀取X日資料的問題應該算是解決了,謝謝

 

至於第二個問題,我想取的是同時符合"5日漲幅前100名+22日漲幅前100名"的股票

我確實沒找到在XQ內建的選股條件之中有符合的,謝謝虎科大許教授幫我寫出各取前10名的框架給我

我本身不會寫XS語法,參照網路上範例及上一段語法自行改寫如下:

setBarFreq("D");
setBackBar(22);
setTotalBar(1);
rank rank_Week desc //由大到小排序
    begin
        retval=RateOfChange(close,5);
    end;
rank rank_Month desc //由大到小排序
    begin
        retVal=RateOfChange(close,22);
    end;
if rank_week.pos<=100 and rank_month.pos<=100 then 
    begin
        retval=1;
    end;

outputField1(RateOfChange(close,5),"5日漲跌幅");
outputField2(rank_week.pos,"5日漲跌幅排名");
outputField3(RateOfChange(close,22),"22日漲跌幅");
outputField4(rank_month.pos,"22日漲跌幅排名");

有編譯成功,應該是可以了,再麻煩幫我看一下做個確認,感謝

 

虎科大許教授 發文於   2025/09/10

這樣OK。

  • 按讚來自於
  • azureos
XS小編 發文於   2025/09/12

Hello Tyler,

 

小編補充,編輯器裡的資料讀取是當您將選股腳本加入策略時,預設的筆數。

當您在策略中調整過後,策略就會依造設定的數值作運算,而非編輯器裡的顯示的數值。

發表回覆
Close