XQ操盤高手技術分析的ADX14跟函數的ADX相同嗎?

  •   780 
  • 最後發表   Johnson  2017 七月 28
Johnson 發文於   2017/07/27

你好,想請問,我想用XS編輯選股編碼(如下),想要篩選出今日的ADX>55的股票,但是結果卻出現很多ADX<55的股票(如圖),因此想請問我程式碼有寫錯嗎? 或是DirectionMovement的ADX跟XQ裡面的ADX14其實有差異? 如果有差異,請問我該怎麼改?

settotalbar(3);

input: Length(14),conNum(55); 

variable: pdi_value(0), ndi_value(0), adx_value(0);

 SetInputName(1 , "天數");

 DirectionMovement(Length, pdi_value, ndi_value, adx_value);

 if adx_value > conNum then ret=1;

另外,想請問,我想撰寫"今日ADX > 昨日ADX"的選股程式碼,請問要怎麼寫呢?

非常感謝你

排序方式: 標準 | 最新
XQ小幫手 發文於   2017/07/28

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");

 

以上呈請試試看,謝謝。

Johnson 發文於   2017/07/28

你好,非常感謝你的答覆與教學

還有小問題想問

關於資料讀取比數不夠長這問題,您幫我改成settotalbar(maxlist(Length,6) * 13 + 8);

其中maxlist為括弧內數值取最大(教學如http://xshelp.xq.com.tw/index.aspx?HelpName=MaxList&group=NUMBERFUNC)

想請問maxlist(Length,6),前面已經有設Length=14,如果我maxlist這樣設定,意思不就是"14跟6取最大值",那不就一定是14? 這邊寫個6的意義是?

還有後面的 * 13 + 8的意義是?

謝謝您的答覆

XQ小幫手 發文於   2017/07/28

HI Johnson,

settotalbar(maxlist(Length,6) * 13 + 8)

關於此段資料讀取筆數,小幫手是參考警示系統內建腳本_ADX趨勢成形一致,下去設定

您也可以自行設定您想要的資料筆數,

只要計算出來數值正確即可。

 

maxlist(Length,6),這是一個預防措施,如果您的天期,設的比6還要小,則會以6為主,

同理 * 13 + 8 也是預防措施,

這些都是確保資料筆數足夠,

計算出來的數值可以較為正確的一種機制,

 

所以,

資料筆數需要根據您的腳本,隨時做調整,

沒有固定的寫法與設定筆數,可以抓個大概筆數,確保腳本計算出來的數值是正確,

 

以上說明,謝謝。

 

發表回覆
Close