Hi Johnson,
您的XS選股編碼,資料讀取筆數設不夠長,故算出來的adx_value數值不正確,
怎麼知道自己的資料讀取筆數是否足夠呢?
在選股腳本中,可以參考 選股欄位放大鏡:談OutputField 此篇教學文章所述,
使用 OutputField 讓您可以在選股的結果畫面內增加想要顯示的欄位,
欄位的內容可以是任意的數值,或是字串。
所以除了可以拿來顯示商品的資料欄位之外,當然也可以拿來檢查腳本的執行狀態。
比方說您想要找 adx_value > 55 的股票,可是怎麼找出來的怪怪的呢?這時候 OutputField 就派上用場了。
若計算出來的數值怪怪的,且程式碼邏輯沒有錯誤,
這時候就可以將資料筆數調高一點,
或者查看系統內建腳本有沒有相關的技術指標,若有則可以參考相關的技術指標 settotalbar 寫法
所以,
小幫手將 settotalbar 設為與系統警示腳本_ADX趨勢成形一致(也就是此系統警示腳本的第7行)
並將此段挪至 SetInputName 下一行,最後使用 outputfield 將 adx_value 運算結果顯示在選股列表中,
察看與技術分析副圖指標DMI ADX14 數值相同。
完整修改選股腳本程式碼範例如下:
input: Length(14),conNum(55);
variable: pdi_value(0), ndi_value(0), adx_value(0);
SetInputName(1 , "天數");
settotalbar(maxlist(Length,6) * 13 + 8);
DirectionMovement(Length, pdi_value, ndi_value, adx_value);
if adx_value > conNum then ret=1;
outputfield1(adx_value,"當期adx");
另外,今日ADX > 昨日ADX 的選股程式碼 如何撰寫?
在 探討變數序列的觀念 的教學文章,有提到:
在腳本內的每一個計算後的數值,例如Value1, Value2,或是其他你自己命名的變數,
其實都是像Open,High,Low,Close一樣是一個時間序列。
而這個變數的前一筆的數值,就是腳本在上一根K棒執行時所產生的數值。
因此,只要今日ADX,也就是adx_value數值算對了,
在使用時間序列,也就是adx_value[1],就能代表這個變數的前一筆的數值,
故 ADX > 昨日ADX 為
adx_value > adx_value[1]
完整今日ADX > 昨日ADX 的選股腳本程式碼範例如下:
input: Length(14);
variable: pdi_value(0), ndi_value(0), adx_value(0);
SetInputName(1 , "天數");
settotalbar(maxlist(Length,6) * 13 + 8);
DirectionMovement(Length, pdi_value, ndi_value, adx_value);
if adx_value > adx_value[1] then ret=1;
outputfield1(adx_value,"當期adx");
outputfield2(adx_value[1],"前期adx");
以上呈請試試看,謝謝。
3 評論