請教小幫手有關月MACD XQ語法寫法

  •   616 
  • 最後發表   KKuramas  2022 三月 27
KKuramas 發文於   2022/03/14

小幫手您好,

想要寫一個月資料MACD 的OSC>0 向上 ;DIF>MACD; 日資料 DIF> MACD 且 OSC向上的語法,寫下語法後發現跑出來的資料並不符合。是否可以請小幫手協助幫忙?

input:FastLength(12), SlowLength(26), MACDLength(9),Length(5),period(12,"天數"),period2(50,"天數");

variable:difValue(0), macdValue(0), oscValue(0),VolumeLimit(500);

xf_macd("D",xf_weightedclose("D"), FastLength, SlowLength, MACDLength, difValue, macdValue, oscValue);

xf_macd("W",xf_weightedclose("W"),FastLength, SlowLength, MACDLength, value5, value6, value7);

xf_macd("M",xf_weightedclose("M"),FastLength, SlowLength, MACDLength, value11, value12, value13);

condition1 = difValue >= macdValue;

condition2 = oscValue >= oscValue[1];

condition3 = value13 >=0;

value20 = getfield("Date", "M");

if value20 <> value20[1] then value21 = value13[1];

condition4 = value13 >= value21; 

value20 = getfield("Date", "M");

if value20 <> value20[1] then value23 = value11;

value20 = getfield("Date", "M");

if value20 <> value20[1] then value24 = value12;

condition5 = value23 >= value24;

if condition1 and condition2  and condition3 and condition4 and condition5  then ret=1;

 

排序方式: 標準 | 最新
XQ小幫手 發文於   2022/03/17

Hello KKuramas,

 

小幫手認為應該是因為您的資料讀取筆數不足導致計算出來的數值有誤,建議您可以實際print出來檢查。

這是因為MACD是種需要用到前期值來計算的指標,所以若資料長度不足的話算出來就不會正確。

假設您是使用日頻率當作基準點的話,那麼會需要大約 (maxlist(FastLength,SlowLength,6) + MACDLength) * 4 * 22 筆預讀筆數計算出來的月MACD才會是正確的。

所需長度您可以參考選股腳本中的設定,然後再乘以一個月約有幾個開盤日來計算。

還有若需要取不同頻率的前期值,您可以參考 xf_GetValue 函數。

 

若設定後且確認print出來的MACD數值是正確的但還是篩選出錯誤商品,麻煩您提供 策略雷達匯出檔並勾選(包含)警示腳本、錯誤的商品以及時間點等相關資訊 以及 XQ Log 來檢驗。

Log資料夾(預設路徑:C:\SysJust\XQLite\LOG)直接壓縮後提供即可。

您可以直接將檔案上傳,如果檔案過大的話也可以Mail至客服信箱 XQservice@XQ.com.tw且務必附上 討論文章連結網址(小幫手才能盡早處理)。

感謝。

KKuramas 發文於   2022/03/19

謝謝萬能的小幫手回覆。 試著用 xf_GetValue寫法,還是無法跑出結果(功力不夠)。是不是能請萬能小幫手提供協助是否語法有錯誤的地方。感謝小幫手~

1. 月osc 值大於零

2. 月osc值大於月OSC前一月值

3.月dif值  大於 月macd值

4. 日OSC 大於前一天OSC

---------------------------------------------------------------------------------------------

 

input:FastLength(12), SlowLength(26), MACDLength(9),Length(5);

 

variable:difValue(0), macdValue(0), oscValue(0);

 

SetTotalBar((maxlist(FastLength,SlowLength,6) + MACDLength) * 4 * 22 );

xf_macd("D",xf_weightedclose("D"), FastLength, SlowLength, MACDLength, difValue, macdValue, oscValue);

xf_macd("M",xf_weightedclose("M"),FastLength, SlowLength, MACDLength, value11, value12, value13);

value130 = xf_GetValue("M",value13,1);      

condition1 = value13 > value130;             //月osc值大於月OSC前一月值

condition2 = value13 > o;                         //osc 值大於零

condition3 = value11 > value12;               //月dif值  大於 月macd值

condition4 = oscValue >= oscValue[1];    //日OSC 大於前一天OSC

if condition1 and condition2 and condition3 then ret=1;

 

小木可 發文於   2022/03/19

倒數第四行,您把 0 (零) 打成 o ( 被當成開盤價 OPEN ),會不會是這邊出問題呢?

 

---

2025年最新XQ全球贏家優惠碼 推薦碼:7377WZB

 

 

XQ小幫手 發文於   2022/03/23

Hello KKuramas,

 

小幫手用您提供的腳本測試過,應該是如同小木可所說的0寫成o,導致condition2無法觸發所以沒有結果。

修改後回測可以跑出結果。(參考附圖)

 

感謝 小木可 的熱心回覆。

附加文件

KKuramas 發文於   2022/03/27

可以了 ,謝謝小幫手以及小木可,

發表回覆
Close