策略雷達中,與基準商品的比較

  •   328 
  • 最後發表   河馬  2018 三月 21
河馬 發文於   2018/03/08

你好

策略雷達中有關於基準商品的參照,如果我想讓商品與基準商品比較指標,能夠做到嗎?

例如基準商品設定為大盤,基準腳本設5日均線

然後商品策略中想讓商品的5日均線斜率大於大盤的5日均線斜率時觸發,該怎樣寫?

謝謝

排序方式: 標準 | 最新
XQ小幫手 發文於   2018/03/08

Hi 河馬,

其實可以使用跨商品語法( GetSymbolField ),應該就可以做到您所描述的策略條件,若撰寫上仍有問題,歡迎詢問,謝謝。

河馬 發文於   2018/03/08

你好

我有試過跨商品語法,但隨著使用指標的複雜度,會使策略腳本變得很龐大,也不容易debug

執行策略的時候容易記憶體不足,也容易出錯

我有次腳本中參照大盤雙KD向上,跑回測可以跑出勝率,因此加入策略雷達執行

不知道是不是因為跨商品又跨頻率,結果執行紀錄出現最大引用筆數不足的訊息,我把筆數一直加到2000筆都還是出現訊息,但是把腳本拆開執行卻正常

因此我才會詢問基準商品參照的部分,建議可以比照函數,可以回傳數值給策略用,這樣個別的腳本也比較好寫

謝謝

XQ小幫手 發文於   2018/03/09

Hi 河馬,

謝謝您的說明,

基準商品的相關教學,請查看以下連結文章

進階篇: 基準參照商品的應用

如果您是想要用基準商品來替代跨商品跨頻率的語法,應該是沒辦法替代的,

若有問題,歡迎再詢問,謝謝。

----

或許,您能提供

不知道是不是因為跨商品又跨頻率,結果執行紀錄出現最大引用筆數不足的訊息,我把筆數一直加到2000筆都還是出現訊息,但是把腳本拆開執行卻正常

您所述的狀況腳本程式碼法,以利小幫手協助您,看看是否可以解決您的問題,謝謝。

 

河馬 發文於   2018/03/09

 你好,小幫手

程式碼因為執行不順,已經被我刪了,只調整了大盤的部分用在基準商品參照。

我不是要用基準商品來代替跨商品語法,畢竟可能有人要跨多個商品

貴司也是因為大部份人下單都會參照指數動向等等,所以才設計了基準商品的功能,

所以也許可以將功能延申的更齊全,把他當成跨商品的特例 (只跨一個商品時),以上建議

XQ小幫手 發文於   2018/03/09

好的,謝謝您的建議,我們會繼續努力!

河馬 發文於   2018/03/20

小幫手你好

我最近抽空利用XQ裡的雙KD向上寫了一個參照大盤KD的跨商品程式碼,執行策略時會出現我說的問題,提供給你們參考。

其中大盤的部份就算另寫成自訂函數也是一樣的結果。

//大盤KD
//大盤日KD
variable:lasttwkd(0),lasttwdd(0),rsvtwd(0), ktwd(0), dtwd(0), maxd(0), mind(0);
if xf_getdtvalue("D", Date) <> xf_getdtvalue("D", Date[1]) then
begin
    lasttwkd = ktwd[1];
    lasttwdd = dtwd[1];
end;

maxd=highest(GetSymbolField("tse.tw","最高價","D"),9);
mind=lowest(GetSymbolField("tse.tw","最低價","D"),9);

if maxd<>mind then rsvtwd=(GetSymbolField("tse.tw","收盤價","D")-mind)/(maxd-mind)*100
else rsvtwd=50;

if currentbar = 1 then
  begin
  ktwd=50;
  dtwd=50;
  end
else
  begin
ktwd=lasttwkd*2/3+rsvtwd/3;
dtwd=lasttwdd*2/3+ktwd/3;
  end;

//大盤週KD
variable:lasttwkw(0),lasttwdw(0),rsvtww(0), ktww(0), dtww(0), maxw(0), minw(0);
if xf_getdtvalue("W", Date) <> xf_getdtvalue("W", Date[1]) then
begin
    lasttwkw = ktww[1];
    lasttwdw = dtww[1];
end;

maxw=highest(GetSymbolField("tse.tw","最高價","W"),5);
minw=lowest(GetSymbolField("tse.tw","最低價","W"),5);

if maxw<>minw then rsvtww=(GetSymbolField("tse.tw","收盤價","W")-minw)/(maxw-minw)*100
else rsvtww=50;

if currentbar = 1 then
  begin
  ktww=50;
  dtww=50;
  end
else
  begin
ktww=lasttwkw*2/3+rsvtww/3;
dtww=lasttwdw*2/3+ktww/3;
  end;

//大盤雙KD向上
condition6=ktwd > dtwd;
condition7=xf_getvalue("W", ktww, 1)>xf_getvalue("W", dtww, 1);

//KD
input: Length_D(9, "日KD期間");
input: Length_W(5, "周KD期間");

variable:rsv_d(0),kk_d(0),dd_d(0);
variable:rsv_w(0),kk_w(0),dd_w(0);

stochastic(Length_D, 3, 3, rsv_d, kk_d, dd_d);
xf_stochastic("W", Length_W, 3, 3, rsv_w, kk_w, dd_w);

condition1 = kk_d crosses above dd_d;       // 日KD crosses over
condition2 = xf_GetBoolean("W",xf_crossover("W", kk_w, dd_w),1);    // 周KD crosses over
condition3 = average(volume[1], 5) >= 1000;
condition4 = kk_d[1] <= 30;                          // 日K 低檔
condition5 = xf_getvalue("W", kk_w, 1) <= 50;        // 周K 低檔

// 成交量判斷
Condition99 = Average(Volume[1], 100) >= 1000;

if condition1 
and condition2 
and condition3 
and condition4 
and condition5 
and condition99
and condition6
and condition7
then ret=1;

 

XQ小幫手 發文於   2018/03/20

Hi 河馬,

謝謝您提供的資訊,

待小幫手查看後,再向您說明,謝謝。

XQ小幫手 發文於   2018/03/21

Hi 河馬,

您好,謝謝您的建議,看了您的程式碼之後,確實會有您所提到的問題,

警示策略雷達的部分,我們之後會朝多條件的方向努力!謝謝。

發表回覆
Close