交易腳本 跨頻率問題

  •   424 
  • 最後發表   AndyJian  2023 九月 06
AndyJian 發文於   2023/08/18

{日k條件}

variable: close_D(0) , sma_60_D(0) , sma_20_D(0) , sma_240_D(0) ;

 

close_D = GetField("收盤價", "D");

sma_60_D = average(close_D,60);

sma_20_D = average(close_D,20);

sma_240_D = average(close_D,240);

{日K斜率計算}

setbarBack(360);

var:Angle_D(0),Angle_sma60_D(0);

input: periods(3, "期數");//"計算期間"

Angle_D = Angle(Date[periods], Date);

Angle_sma60_D = linearRegAngle(sma_60_D,5);

 

condition15 = Angle_D > 0;

condition16 = Angle_sma60_D > 30 ;

condition17 = close_D[1] > sma_60_D[1];

 

if condition15 and condition16 and condition17 then begin

   if //執行15K頻率買入訊號條件then begin

   setposition(1)

   end;

end;

if condition15  and condition17 then begin

   if //執行15K頻率買入訊號條件 then begin

   setposition(1)

   end;

end;

以上是我的策略的大概程式碼,標的是小台近月全。
想請問的是,跑完回測後我去檢查發現,有在不符合當下日K條件的時候,15K卻進場做單了(以下例子),是我有那裡寫不對嗎,還請小幫手幫忙。

日K4月底到5月的情況是日/60下彎,價格也不再日/60上

但15K卻還是進場了



另外想請教的是如果想要算一個均線的斜率,並把它畫在圖上顯示,該怎麼做比較好,謝謝~

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

Hello AndyJian,

 

變數的執行頻率是跟著執行頻率的,所以 close_D[1] 不會是前一根日頻率的收盤價,而是前一根15分鐘Bar (使用15分鐘頻率) 的對應日頻率收盤價。

故計算出的sma都不會是日頻率均線。

 

如果要計算日頻率均線的話可以這樣寫:

sma_60_D = average(getfield("Close", "D"), 60);

 

回測報表上無法畫指標,不過您可以另外撰寫指標腳本並放在技術線圖上。

只要使用 plot 函數就可以把數值畫在線圖上。

AndyJian 發文於   2023/08/25

小幫手你好,我將以上改成

SetBackBar(360);

{大格局條件}

variable: close_D(0) , sma_60_D(0) , sma_20_D(0) ;

close_D = GetSymbolField("Future*1", "收盤價", "D");

sma_60_D = average(getField("收盤價", "D"),60);

sma_20_D = average(getField("收盤價", "D"),20);

condition15 = LinearRegslope(sma_60_D  ,5)>10;//日K60MA 上揚

condition16 = LinearRegslope(sma_20_D  ,5)>0;//日K20MA 上揚

condition17 = close_D > sma_60_D;

{進場條件1}

if condition16 and condition17 then begin 

if Position= 0 //15K進場條件  then begin

SetPosition(2,market);

end;

end else if Position= 0 //15K進場條件  then begin

SetPosition(1,market);

end;


但還是有發現在不符合日K狀況的情況下單

 

XQ小幫手 發文於   2023/08/30

Hello AndyJian,

 

和小幫手上面說的一樣問題,變數的頻率是跟著執行頻率。

所以 LinearRegslope(sma_60_D  ,5) 算出來的會是近5根Bar的 sma_60_D 斜率而非近5日的斜率。

 

建議您可以使用 xfmin_getvalue 取得近5天的數值放入陣列,並使用 ArrayLinearRegSlope 來計算陣列的斜率。

  • 按讚來自於
  • zxc88124
AndyJian 發文於   2023/08/31

小幫手你好 我試著用你上面的方法 打了以下

{大格局條件} 

Array:close_D_60[](0) , close_D_10[](0);

value6 = average(getfield("Close", "D"), 60);//日K60MA日平均線

value7 = average(getfield("Close", "D"), 10);//日K10MA日平均線

 

close_D_60[1] = xf_GetValue("D",value6,1);close_D_60[2] = xf_GetValue("D",value6,2);close_D_60[3] = xf_GetValue("D",value6,3);close_D_60[4] = xf_GetValue("D",value6,4);close_D_60[5] = xf_GetValue("D",value6,5);

close_D_10[1] = xf_GetValue("D",value7,1);close_D_10[2] = xf_GetValue("D",value7,2);close_D_10[3] = xf_GetValue("D",value7,3);close_D_10[4] = xf_GetValue("D",value7,4);close_D_10[5] = xf_GetValue("D",value7,5);

condition15 = ArrayLinearRegSlope(close_D_60 ,5)>0;//日K60MA 上揚

 

condition16 = ArrayLinearRegSlope(close_D_10 ,5)>0;//日K10MA 上揚

雖然沒有ERROR但這樣打好像不成立,會是空值,回測沒有東西。 Print也沒有看到任何值在Arrary裡面。換到指標測試也是NA。


想請教一下我該怎麼做?以及我看了xf_GetValue / xfmin_GetValue的介紹,是不是不支援小台近全?

那如果不支援近全的話,可以用加權給我個範例嗎?謝謝幫忙

XQ小幫手 發文於   2023/09/06

Hello AndyJian,

 

不好意思小幫手沒有注意到您是使用日夜盤期貨商品,xf 和 xfmin 的函數不支援日夜盤的期貨。

您腳本中宣告 array 時沒有給 array 的長度,接下來也沒有另外指定,所以會出錯。

舉例來說:

Array:close_D_60[5](0) , close_D_10[5](0);  //給予長度

 

value6 = average(getfield("Close", "D"), 60);//日K60MA日平均線

value7 = average(getfield("Close", "D"), 10);//日K10MA日平均線

 

close_D_60[1] = xf_GetValue("D",value6,1);

close_D_60[2] = xf_GetValue("D",value6,2);

close_D_60[3] = xf_GetValue("D",value6,3);

close_D_60[4] = xf_GetValue("D",value6,4);

close_D_60[5] = xf_GetValue("D",value6,5);

 

close_D_10[1] = xf_GetValue("D",value7,1);

close_D_10[2] = xf_GetValue("D",value7,2);

close_D_10[3] = xf_GetValue("D",value7,3);

close_D_10[4] = xf_GetValue("D",value7,4);

close_D_10[5] = xf_GetValue("D",value7,5);

 

condition15 = ArrayLinearRegSlope(close_D_60 ,5)>0;//日K60MA 上揚

condition16 = ArrayLinearRegSlope(close_D_10 ,5)>0;//日K10MA 上揚

 

if condition15 and condition16 then ret = 1;

 

這樣就可以正常執行。

附加文件

發表回覆
Close