想詢問篩選adx當天穿越-di之寫法

  •   335 
  • 最後發表   olerud1011  2021 十一月 10
olerud1011 發文於   2019/07/04

大家晚安,自己參考別人的寫法,只寫得出篩出當天adx>-di的標的,

但自己希望可以篩出當天才剛adx>-di的(即前一天adx<前一天的-di,當天的adx>當天的-di),不知道在xq該怎麼執行

先謝謝大家

input:Length(14),Threshold(17.5);

 

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

 

settotalbar(Length*11);

 

setinputname(1,"期數");

setinputname(2,"穿越值");

 

directionmovement(length,pdi_value,ndi_value,adx_value);

 

if adx_value>Threshold and adx_value>ndi_value and pdi_value>ndi_value and pdi_value>adx_value and volume>1000 

 

then ret = 1;

另若想寫今天的+di>前一天的+di 不知道在XQ怎麼撰寫比較合適,謝謝

 

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

Hi olerud1011,

自己希望可以篩出當天才剛adx>-di的(即前一天adx<前一天的-di,當天的adx>當天的-di)

您好,可以使用 CrossOver 語法來撰寫看看,例如:

if adx_value cross over ndi_value then ret = 1;

 

另若想寫今天的+di>前一天的+di 不知道在XQ怎麼撰寫比較合適

可以使用序列資料的方式撰寫,例如:

if pdi_value > pdi_value[1] then ret = 1;

相關介紹請參考此篇文章「基本架構介紹:什麼是XS

 

以上方向與說明供參考,謝謝。

James Ya 發文於   2021/11/04

請問

Threshold(17.5)

穿越值為何是17.5呢?

穿越等於是交叉的意思嗎

XQ小幫手 發文於   2021/11/08

Hello James Ya,

 

Threshold 參數並不是穿越值,而是該用戶設定的一個條件門檻: adx值需要大於17.5。

穿越就相當於交叉,不過交叉沒有方向性。

所以 cross over (向上穿越)和 cross under (向下穿越)出現的狀況都會是交叉。

James Ya 發文於   2021/11/08

原來如此~感謝回覆

所以說上面所提問的:ADX當天穿越-DI之寫法

是不是如下所寫呢??

 

input:Length(14),Threshold(17.5);

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

settotalbar(Length*11);

setinputname(1,"期數");

setinputname(2,"穿越值");

directionmovement(length,pdi_value,ndi_value,adx_value);

if adx_value>Threshold and adx_value>ndi_value and pdi_value>ndi_value and pdi_value>adx_value and volume>1000 and adx_value cross over ndi_value

then ret = 1;

 

另想請問,若是ADX當週穿越-DI的寫法,則該修改或添加甚麼呢?

還是說用上面的寫法,在選股中心的條件內將"日"調成"週'也可以?

還有ADX的值想要設定為6的話則該怎麼寫呢?(+DI與-DI依然均為14情況下)

 

XQ小幫手 發文於   2021/11/10

Hello James Ya,

 

是的,您的寫法是除了adx向上穿越-di外還加上其他許多條件。

如果您要單純穿越的話:

input:Length(14);

setinputname(1,"期數");

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

settotalbar(Length*11);

 

directionmovement(length,pdi_value,ndi_value,adx_value);

 

if adx_value cross over ndi_value then ret = 1;

// adx 向上穿越 -di

// if adx_value cross under ndi_value then ret = 1;

// adx 向下穿越 -di

 

ADX 當週穿越 -DI,這樣看起來您的頻率應該還是用日。(DMI要用日頻率計算)

那您可以在將條件改寫為

if adx_value cross over ndi_value then value1 = WeekOfYear(date);  //當adx向上穿越ndi時紀錄那是該年的第幾個禮拜

if WeekOfYear(date) = value1 then ret = 1; //如果還在同個禮拜的話篩選出來

 

如果您ADX的計算長度要設為6,其他的要設為14的話,另外計算一個長度為6的DMI就可以了。

input:Length1(14, "期數1"), Length2(6, "期數");

variable:pdi_value1(0),ndi_value1(0),adx_value1(0), pdi_value2(0),ndi_value2(0),adx_value2(0);

settotalbar(maxlist(Length1, length2)*11);

 

directionmovement(Length1,pdi_value1,ndi_value1,adx_value1);

directionmovement(Length2,pdi_value2,ndi_value2,adx_value2);

 

if adx_value2 cross over ndi_value1 then value1 = WeekOfYear(date);  //當6期adx向上穿越14期ndi時紀錄那是該年的第幾個禮拜

if WeekOfYear(date) = value1 then ret = 1; //如果還在同個禮拜的話篩選出來

 

小幫手建議您可以先閱讀官網的教學區,裡面有XS語法的教學與應用。

發表回覆
Close