撰寫前一年盤整50%內與去年同期月營收年增率增加30%的選股腳本

  •   103 
  • 最後發表   Jack  1 週前
Jack 發文於   2017/09/14

大家好,

分享前一年盤整50%內(最高-最低)與去年同期月營收年增率增加30%的選股腳本,供參考

 

撰寫方式大致說明:

0. 會使用到時間序列的部分,取得前幾期的資料(取得前一年、去年同期)

1. 使用 setbarfreq 函數將資料頻率設定在月,避免調整錯誤

2. 使用 GetField 函數跨年頻率取得前一年最高價與前一年最低價,以便計算 "前一年盤整50%內" 的條件

3. 使用 月營收年增率 (選股欄位) 函數,以便計算 "去年同期的月營收年增率增加30%" 的條件

4. 使用 OutputField 函數,將相關數值列在選股中心列表中,以利檢驗數值正確(請參考 選股欄位放大鏡:談OutputField)

 

選股中心資料讀取筆數設定:

 

選股腳本範例如下:

//能有前一年盤整50%內(最高-最低),
//去年同期的月營收年增率增加30%
setbarfreq("M");
input:_Change(50,"盤整不超過(%)"),Sales_YoY_Percent(30,"月營收年增率增幅(%)");

value1 = (GetField("最高價","Y")[1] - GetField("最低價","Y")[1])/GetField("最低價","Y")[1] * 100;
value2 = GetField("月營收年增率")[12] + absvalue(GetField("月營收年增率")[12] * Sales_YoY_Percent/100);

condition1 = value1 <= _Change;
condition2 = GetField("月營收年增率") > value2;

if condition1 and condition2 and GetField("月營收年增率")[12] <> 0 then ret = 1;

outputfield(1,value1,"前一年盤整(最高-最低/最低)(%)");
outputfield(2,GetField("月營收年增率"),"當期月營收年增率(%)");
outputfield(3,GetField("月營收年增率")[12],"去年同期月營收年增率(%)");
outputfield(4,value2,"去年同期的月營收年增率增幅30%");

 

以上供大家參考,有問題歡迎詢問。

  • 按讚來自於
  • samkao26
排序方式: 標準 | 最新
CoolMan 發文於   2017/09/14

喔!選出來了,一共有158檔

CoolMan 發文於   2017/09/15

請問可以將年K, 變成月K,讓我自訂要往前選幾個月的盤整

Jack 發文於   2017/09/19

CoolMan 兄,

待我研究後,再向你說明。

Jack 發文於   2017/09/25

CoolMan 兄,

請問可以將年K, 變成月K,讓我自訂要往前選幾個月的盤整

不太明白你的意思,想跟你確認條件是否為:

   1. 前一個月盤整50%內(最高-最低)

   2. 可以自訂要往前選幾個月的盤整

   3. 去年同期的月營收年增率增加30%?這個條件是否還需要?

 

以上,回覆後我再繼續研究,謝謝。

CoolMan 發文於   2017/10/01

不好意思,現在才看到你的回文,真是太感激了

CoolMan 發文於   2017/10/01

 不好意思現在才看到你的回文。

1. 前一個月盤整50%內(最高-最低)--->幾個月和盤整幅度,都可以開放需求去設定。

2. 可以自訂要往前選幾個月的盤整

3. 去年同期的月營收年增率增加30%?這個條件是否還需要?---->這個還是需要的

感謝回覆

 

 

Jack 發文於   2017/10/05

CoolMan 兄,

依照你的需求,我嘗試修改程式碼大致撰寫修改邏輯為:

1. 使用 value 變數,儲存前N個月的最高價與最低價,以利運算前N個月盤整50%內(最高-最低)的條件。

2. 將 前N個月最高價 與 前N個月最低價 的數值,顯示在選股中心列表上,以利檢驗是否正確。

 

選股策略資料讀取筆數設定:約20筆,如下圖:

 

選股腳本程式碼範例如下,以上供參考:

setbarfreq("M");
input:N_Length(1,"前N個月盤整"),_Change(50,"盤整不超過(%)"),Sales_YoY_Percent(30,"月營收年增率增幅(%)");

value100 = highest(GetField("最高價"),N_Length);
value200 = lowest(GetField("最低價"),N_Length);

value1 = (value100 - value200)/value200 * 100;
value2 = GetField("月營收年增率")[12] + absvalue(GetField("月營收年增率")[12] * Sales_YoY_Percent/100);

condition1 = value1 <= _Change;
condition2 = GetField("月營收年增率") > value2;

if condition1 and condition2 and GetField("月營收年增率")[12] <> 0 then ret = 1;

outputfield(1,value1,"前N個月盤整(最高-最低/最低)(%)");
outputfield(2,value100,"前N個月最高價");
outputfield(3,value200,"前N個月最低價");
outputfield(4,GetField("月營收年增率"),"當期月營收年增率(%)");
outputfield(5,GetField("月營收年增率")[12],"去年同期月營收年增率(%)");
outputfield(6,value2,"去年同期的月營收年增率增幅30%");

 

 

  • 按讚來自於
  • F124269874
CoolMan 發文於   2017/10/05

感謝!立馬來使用

CoolMan 發文於   2017/10/05

想請問一下,條件變更需再到程式內重新編輯,無法直接從外面設定

Jack 發文於   2017/10/06

不用到程式內編譯,

直接在此介面輸入數字即可,若不能輸入,請按一下shift鍵,將中文改為英數模式,

Show More Posts 發表回覆
Close