同一個指標,如何在XS同時寫進日與週在同一條件裡

  •   262 
  • 最後發表   ohhover  2023 十一月 03
ohhover 發文於   2023/10/02

例如MACD黃金交叉,如何在XS同時寫進日K與週K在同一條件裡,用以進行回測

 

非常感謝

排序方式: 標準 | 最新
XQ小幫手 發文於   2023/10/23

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語法的基礎和應用可以閱覽。

https://www.xq.com.tw/learn

謝謝。

ohhover 發文於   2023/10/23

 

XQ小幫手~

真是抱歉, 我敘述有瑕疵,同時向上的條件可能過於嚴苛~

應該是說, 有先後的問題

例如, 步驟1.   MACD已先出現黃金交叉, 然後  步驟2.     MACD再出現黃金交叉時買入

**********這樣有先後順序的話, 要怎麼修改上述, 再拜託小幫手解答 , 非常感謝您 !

 

XQ小幫手 發文於   2023/11/03

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

總之,有許多種寫法可以達成您想要的結果,

謝謝。

發表回覆
Close