在選股策略中能否找出 KD 黃金交叉的日期

  •   739 
  • 最後發表   Mark Wu  2017 十月 26
Mark Wu 發文於   2017/10/23

你好,想請教在選股模組中能否找出 KD 黃金交叉日期,我透過以下程式,用 while 迴圈下去比對,日期卻錯誤。

我初步想法是,判斷今天 K > D,然後用迴圈去往回比較一直找到 K[i+1]>D[i+1] == false 的那一天,那麼 i 那一天應該就是黃金交叉的日期,然後透過 GetFiledDate("收盤價")[i] 來取得,當日日期。

但是出來的結果還真的差很遠,不知如何修正,煩請建議。謝謝。

variable: rsv(0), k(0), _d(0), j(0);

Stochastic(KDLength, RSVt, Kt, rsv, k, _d);

if JType = 0 then
    j = 3 * k - 2 * _d
else
    j = 3 * _d - 2 * k;

condition = k > _d;

if k > _d Then
vars:i(1), date1(0);
Begin
    While k[i] > _d[i]
    Begin
        i=i+1;
    End;
    date = getfielddate("收盤價", "D")[i];
End;
OutputFiled(1, date, 0, "KDJ 黃金交叉日期");

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

Hi Mark wu,

不需要用到迴圈,

因為XS架構在選股,是每根K棒都會跑執行一次腳本,並用時間序列的方式記錄每根K棒執行的結果。

 

運用如上所述的時間序列架構,即可使用

if k crosses above _d then value100 = 0 else value100 += 1;

在 黃金交叉時 將K棒第幾根的變數歸0;其他狀況則該變數累加,最後用 Date[ value100 ] 就可以取得 最近KD黃金交叉的日期囉!

 

KD參數是9 天數、3 RSVt權數、3 Kt權數 時,資料讀取筆數請設定為 30 筆,計算出來的KD才會是正確的數值唷~

 

選股腳本範例:

input: Length(9), RSVt(3), Kt(3);
variable: rsv(0), k(0), _d(0);

SetInputName(1, "天數");
SetInputName(2, "RSVt權數");
SetInputName(3, "Kt權數");

Stochastic(Length, RSVt, Kt, rsv, k, _d);

if k crosses above _d then value100 = 0 else value100 += 1;

if value100 > 0 then ret = 1;
outputfield1(date[value100],"黃金交叉日期");

 

方才執行選股後的畫面如下:

 

以上範例提供參考唷~ 

Mark Wu 發文於   2017/10/24

了解了,我來測試看看。謝謝你。

  • 按讚來自於
  • b24524658
Mark Wu 發文於   2017/10/25

小幫手,感謝你,成功了!可是我還是有些疑問:

1. value100 == 0 的情況

if value100 > 0 then ret = 1;

 是否應改為

if value100 >= 0 then ret = 1;

 否則如果當天黃金交叉將找不出來。

 

2. date[value100] 到底代表什麼?

如果按照網路上說明, date 代當期(當天)日期, date[1] 代表前一期日期,那麼為什麼 date[value100] 為何是黃金交叉的日期?所以我才認為必須用迴圈去讀取前一期的資料然後比對出是否黃金交叉。

因為找到的例子中,都是找出今天是黃金交叉的情況。這個實在不了解,能否請您再多解釋一下,或者有哪些參考資源可以讓我閱讀。感謝。

 

Mark

XQ小幫手 發文於   2017/10/26

Hi Mark Wu,

關於問題1. :

可以,小幫手只是提供範例,您可以嘗試修改看看,

不過您說的應該是沒錯的,試試看沒有問題,就是對的囉~

 

關於問題 2.  

因為黃金交叉的時候, value100 = 0 ;

沒有黃金交叉的時候, value100 會累加。

 

假設今天為 10/25,某檔股票在 10/23 發生黃金交叉,

10/23:value100 = 0

10/24:value100 = 1

10/25:value100 = 2;date[ value100 ] = date[ 2 ] 就會抓到 10/23 的日期。

 

故關鍵在,黃金交叉的時候,value100( 抓取相對位置的變數 )歸0,之後用 date[value100] 取相對位置K棒的日期,就代表是最近的黃金交叉囉~

 

 

發表回覆
Close