例如MACD黃金交叉,如何在XS同時寫進日K與週K在同一條件裡,用以進行回測
非常感謝
Hello, ohhover.
這部分可以用xf_MACD來達成,跨頻率的計算MACD,
https://xshelp.xq.com.tw/XSHelp/?HelpName=xf_MACD&group=FREQUENCYFUNC
這邊還有一點要注意,
例如:8353 10/3日頻率是MACD黃金交叉,但是週頻率現在回頭看是隔週才黃金交叉,
實際上在10/3下午的時候日頻率,週頻率當時都是黃金交叉的。
input: FastLength(12), SlowLength(26), MACDLength(9);
variable: difValue(0), macdValue(0), oscValue(0);
variable: difValueW(0), macdValueW(0), oscValueW(0);
SetTotalBar((maxlist(FastLength,SlowLength,6) + MACDLength) * 4 * 5);
SetInputName(1, "DIF短期期數");
SetInputName(2, "DIF長期期數");
SetInputName(3, "MACD期數");
MACD(weightedclose(), FastLength, SlowLength, MACDLength, difValue, macdValue, oscValue);
xf_MACD("W", xf_weightedclose("W"), FastLength, SlowLength, MACDLength, difValueW, macdValueW, oscValueW);
if
difValue cross over macdValue
and difValueW cross over macdValueW
then
ret = 1;
強調一下這邊是寫在日頻率上,如果是寫在其他頻率要注意資料長度是否足夠,
網站上有教學區,裡面有XS語法的基礎和應用可以閱覽。
謝謝。
Hello, ohhover.
那可以用原本給您的腳本修改,
週KDMACD黃金交叉後,會有什麼特徵,oscValueW > 0
故可以改成
input: FastLength(12), SlowLength(26), MACDLength(9);
variable: difValue(0), macdValue(0), oscValue(0);
variable: difValueW(0), macdValueW(0), oscValueW(0);
SetTotalBar((maxlist(FastLength,SlowLength,6) + MACDLength) * 4 * 5);
SetInputName(1, "DIF短期期數");
SetInputName(2, "DIF長期期數");
SetInputName(3, "MACD期數");
xf_MACD("D", xf_weightedclose("D"), FastLength, SlowLength, MACDLength, difValue, macdValue, oscValue);
xf_MACD("W", xf_weightedclose("W"), FastLength, SlowLength, MACDLength, difValueW, macdValueW, oscValueW);
if
oscValueW > 0
and difValueW cross over macdValueW
then
ret = 1;
但是小幫手實測以後發現這樣很慢(您也可以將日頻率計算MACD的部分由xf_MACD(...)改為MACD(...)去計算看有沒有變的比較迅速),
所以決定分成兩個XS選股腳本放到同一個選股策略,比較快
下面這個是週K MACD黃金交叉"後"的,也就是oscValue > 0
input: FastLength(12), SlowLength(26), MACDLength(9);
variable: difValue(0), macdValue(0), oscValue(0);
setbarfreq("W");
SetTotalBar((maxlist(FastLength,SlowLength,6) + MACDLength) * 4);
SetInputName(1, "DIF短期期數");
SetInputName(2, "DIF長期期數");
SetInputName(3, "MACD期數");
MACD(weightedclose(), FastLength, SlowLength, MACDLength, difValue, macdValue, oscValue);
Ret = oscValue > 0;
再搭配系統內建的MACD黃金交叉(跑日頻率)

當然,還有個寫法就是利用BarsLast(...)函數,去紀錄上次週K黃金交叉發生的位置,幾週內要發生日KMACD黃金交叉,
https://xshelp.xq.com.tw/XSHelp/?HelpName=BarsLast&group=DATERELFUNC
總之,有許多種寫法可以達成您想要的結果,
謝謝。
3 評論