如何在回測中加入大盤的MACD

  •   447 
  • 最後發表   Soweon  2022 六月 24
Soweon 發文於   2019/08/13

請問如何在回測中

加入當大盤的 日級別 MACD OSC為正值時

才選出個股

謝謝 !

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

 

您好,可以使用GetSymbolField分別取得大盤(TSE.TW)相關資料,再依照MACD函數將值帶入並計算結果,例如:

input:mashortlength(12,"短期數"),longlength(26,"長期數"),macdlength(9,"MACD平滑期數");
Var:TSEClose(0),TSEHigh(0),TSELow(0),WeightedTSEClose(0);
TSEClose=GetSymbolField("TSE.TW","收盤價","D");
TSEHigh=GetSymbolField("TSE.TW","最高價","D");
TSELow=GetSymbolField("TSE.TW","最低價","D");

WeightedTSEClose=(2 * TSEClose + TSEHigh + TSELow) / 4;
value1 = MACD(WeightedTSEClose,mashortlength,longlength,macdlength,value2,value3,value4);
ret =1;
outputfield(1,value2,"DIF");
outputfield(2,value3,"MACD");
outputfield(3,value4,"OSC");

 

篩選結果如下圖,謝謝。

您可以依照您的需求加入判斷,以利您後續操作,謝謝。

 

瘋狂北極熊 發文於   2020/09/11

hi~請教一下,也是想用大盤MACD來參考,但是發現算出來的值,跟實際值不一樣,不知道是怎麼了?我是直接COPY你的那一段程式

XQ小幫手 發文於   2020/09/11

瘋狂北極熊 您好

主要是資料讀取筆數的問題喔!

您應該是設太小才會發生此問題

input:mashortlength(12,"短期數"),longlength(26,"長期數"),macdlength(9,"MACD平滑期數");
Var:TSEClose(0),TSEHigh(0),TSELow(0),WeightedTSEClose(0);
SetTotalBar((maxlist(mashortlength,longlength,6) + MACDLength) * 4);
TSEClose=GetSymbolField("TSE.TW","收盤價","D");
TSEHigh=GetSymbolField("TSE.TW","最高價","D");
TSELow=GetSymbolField("TSE.TW","最低價","D");

WeightedTSEClose=(2 * TSEClose + TSEHigh + TSELow) / 4;
value1 = MACD(WeightedTSEClose,mashortlength,longlength,macdlength,value2,value3,value4);
ret =1;
outputfield(1,value2,"DIF");
outputfield(2,value3,"MACD");
outputfield(3,value4,"OSC");

請使用以上的程式碼跑看看,

我直接在語法中建立正確的筆數

瘋狂北極熊 發文於   2020/09/11

非常感謝,解決了~

  • 按讚來自於
  • b24524658
小尼 發文於   2022/06/21

請問小幫手, 如果是要使用大盤"昨天" 或前天的MACD的DIF, MACD和OSC,應該怎麼寫呢?

   

XQ小幫手 發文於   2022/06/24

Hello 小尼,

 

您可以使用 [n] 的方式取得前n期的資訊。

舉例來說,上面的腳本中:

value2[1] 就會是前一期的DIF。

value3[1] 就會是前一期的MACD。

value4[1] 就會是前一期的OSC。

 

小幫手建議您,可以先看一下網站上教學區,裡面有XS語法的基礎和應用。

發表回覆
Close