策略雷達KD值低於20黃金交叉且成交價越過10天的高點

  •   695 
  • 最後發表   ForisChang  2017 七月 08
ForisChang 發文於   2017/07/05

策略雷達KD值低於20黃金交叉且成交價越過10天的高點

以下是我從現有的程序內修改過來

但無法編譯

麻煩各位高手指教

如何修改

謝謝

//KD值低於20黃金交叉(雷達)

//

Input:Length(9), RSVt(3), Kt(3), Threshold(20);

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

 

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

 

SetInputName(1, "天數");

 

SetInputName(2, "RSVt權數");

 

SetInputName(3, "Kt權數");

 

SetInputName(1, "期數");

SetInputName(2, "低檔值");

SetInputName(3, "日期區間");

 

 

KDValue = KD(Close, Length);

If KDValue Crosses Above Threshold and

   KDValue > Highest(KDValue, RSVt) and

   Close <= Lowest(Close, RSVt) then

   Ret = 1;

 

 

//成交價越過10天的高點(雷達)

//

SetTotalBar(10);

 

value1=truerange();

value2=highest(value1,10);

 

if value1 > value2[1] and 

   value1 > value1[1] and 

   close*1.01 > high and 

   close > close[1]

then ret=1;

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

你好:

   你計算KD的方式不對喔。請參考 Stochastic - (系統函數) 函數說明網頁。

ForisChang 發文於   2017/07/06

我修改成以下的程序

用1分鐘回測結果一直是0

還有哪個部分需修改嗎??

//KD低檔黃金交叉(雷達)

//

input: Length(9);

SetInputName(1, "資料期數");

input: RSVt(3);

SetInputName(2, "K值平滑期數");

input: Kt(3);

SetInputName(3, "D值平滑期數");

input: LowBound(20);

SetInputName(1, "低檔區");

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

 

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

 

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

 

if k crosses over _d and k<LowBound

then ret=1;

 

//成交價越過10天的高點(雷達)

//

SetTotalBar(10);

 

value1=truerange();

value2=highest(value1,10);

 

if value1 > value2[1] and 

   value1 > value1[1] and 

   close*1.01 > high and 

   close > close[1]

then ret=1;

XQ小幫手 發文於   2017/07/07

你好:

    如果回測成功執行,但結果為0,表示你的策略並無符合條件的股票,因此沒有進出場紀錄,因此需要調整你的策略邏輯

另外你的腳本有幾點問題如下:

第一點:SetTotalBar 設定一次即可,而且必須大於你資料需要用到的資料長度,請參考資料讀取範圍與腳本執行的關係

第二點:你原本的寫法,在K值穿越過D值後,當條件達成後,後面的就程式碼就不會觸發了

第三點:truerange 是計算價格波動性,但你要的是成交價大於前10天的高點,所以此寫法應該無法達到你要的效果,請參考TrueRange - (系統函數)

 

小幫手試著按照你的需求,修改了一下腳本,腳本修改後範例如下:

//KD低檔黃金交叉(雷達)

//

input: Length(9);

SetInputName(1, "資料期數");

input: RSVt(3);

SetInputName(2, "K值平滑期數");

input: Kt(3);

SetInputName(3, "D值平滑期數");

input: LowBound(20);

SetInputName(1, "低檔區");

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



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



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




//成交價越過10天的高點(雷達)

//



value1=highest(high,10);



if 

k crosses over _d and k < LowBound   //K值穿越D值,且K值小於LowBound 

and close > value1[1]                       //收盤價大於10天內的最高價


then ret=1;

 

以上說明。

 

ForisChang 發文於   2017/07/08

謝謝!!稍微懂了!!

發表回覆
Close