策略雷達腳本判斷日與月KD是否有觸發訊號?【跨頻率引用前期值,請記得使用Xf_GetValue引用前期值,並調整資料讀取範圍。】

  •   621 
  • 最後發表   Jack  2017 七月 14
Jack 發文於   2017/04/27

大家好,

如何撰寫【策略雷達腳本判斷日與月KD是否有觸發訊號?】

使用 當前一期的月K值 >= 85 且 當期的日K值黃金交叉日D值 則訊號觸發的例子,向大家說明,

 

注意!常犯錯的地方:

1. 跨頻率引用前期值,請記得使用 Xf_GetValue函數 引用前期值。

2. 資料讀取範圍,以系統內建腳本【KD高檔死亡交叉】來計算,日KD需要 27+8 筆,因此跨頻率取月KD約需要 27*30 + 8 筆,故資料讀取我設630筆。

 

警示程式碼範例腳本:

input: Length_D(9, "日KD期間");
input: Length_M(5, "月KD期間");
variable:rsv_d(0),kk_d(0),dd_d(0);
variable:rsv_M(0),kk_M(0),dd_M(0);

stochastic(Length_D, 3, 3, rsv_d, kk_d, dd_d);
xf_stochastic("m", Length_M, 3, 3, rsv_m, kk_m, dd_m);

value1 = xf_getvalue("M",kk_m,1);

if value1>=85 and kk_d crosses over dd_d
then ret=1;

print(date,kk_m,value1);

 

策略雷達相關設定如下圖:

 

跑出來的Print資料(日期、當期月K值、前一期月K值),應該會與該檔商品的技術分析頁面,月K值一樣。

 

以上,供參考。

  • 按讚來自於
  • CharlieBrown
排序方式: 標準 | 最新
狄倫 發文於   2017/04/28

您好:

請問:"日KD需要 27+8 筆,因此跨頻率取月KD約需要 27*30 + 8 筆,故資料讀取我設630筆。"

27+8,27*30+8,630  這幾個數字是怎得出的呢?

每次碰到資料範圍問題,都被搞糊塗了~謝謝~

Jack 發文於   2017/05/02

狄倫 兄:

27 + 8 是從系統警示腳本:KD高檔死亡交叉

SetTotalBar(maxlist(Length,6) * 3 + 8);

得知 = 9 * 3  + 8  = 27 + 8 。

 

27 * 30 + 8 , 是因為主頻率是日,但跨頻率取月資料,

假設1個月有30個營業日,所以 27 乘以 30 + 8 , 約等於讀取資料的範圍。

 

630 是 我自己設的資料讀取大約的範圍。

 

以上,提供參考。

狄倫 發文於   2017/07/13

JACK您好:

請問

1.警示腳本如果指定頻率為1分鐘,在此前提下想引用[60日的最高價]做運算,但資料筆數不可能設那麼大(我不知道邏輯上是不是270分鐘*60=16200),請問有沒有解決的方法?

2.另外我嘗試在1分鐘頻率下,使用 xf_GetValue函數想了解xf_GetValue代表意義,但print跑出來的值很奇怪,究竟 xf_GetValue函數與getfield函數有何不同呢?

 

 

我的測試腳本如下:頻率1分鐘,資料讀取200筆

value1 = Highest(xf_GetValue("D",High,1),60);

value2 = xf_GetValue("D",High,1);

value3 = GetField("High","D");

Print(value1,value2,value3);

Jack 發文於   2017/07/14

狄倫 兄,

依序回覆你的問題如下,提供參考:

警示腳本如果指定頻率為1分鐘,在此前提下想引用[60日的最高價]做運算...

使用以下範例警示腳本即可引用【60日的最高價】

setbackbar(60);
value1 = highest(GetField("最高價","D"),60);

程式碼邏輯說明:

先查看程式碼第二段

highest(GetField("最高價","D"),60); 

Highest為,以最新一筆資料為基準點,輸入要計算的期數,然後計算過去期數的極大值。

GetField 注意第二個參數傳入了 "D",代表要抓取日線頻率。當GetField函數內傳入了指定頻率時,則不管腳本執行的頻率是什麼,系統一定會回傳這個欄位指定的頻率內容。

故程式碼第二段為引用【60日的最高價】

回過頭來看第一段程式碼 

setbackbar(60);

setbackbar為,指定腳本執行時的最大引用資料範圍。

資料讀取範圍與腳本執行的關係 有說明,執行腳本時,除了資料讀取筆數這個參數會影響腳本執行的筆數之外,另外由於腳本內常常需要讀取之前的資料來做計算,例如在這裡要計算60日的最高價,會引用到前60根K棒的收盤價,所以在腳本要執行之前,系統除了要準備資料讀取範圍內的K棒資料之外,另外也需要往前多準備60根K棒資料。

 

...使用 xf_GetValue函數想了解xf_GetValue代表意義...

xf_GetValue 我都是用此函數來取 xf_技術指標 函數 所計算出來的前期值,

所以像是在1分鐘線圖取60日最高價,我就直接用

highest(GetField("最高價","D"),60); 

使用 GetField 來跨頻率取前期值(序列資料),

而 xf_技術指標 函數 計算出來的數值使用 xf_GetValue 來取前期值(序列資料)。

 

以上個人淺見,歡迎一起討論謝謝。

發表回覆
Close