不同頻率的判斷

  •   441 
  • 最後發表   Alex嘉  2024 四月 23
Alex嘉 發文於   2024/04/04

想請問一下

如果我在15分K 內 我要判斷 日K的MA27 和MA44 的數值 來判斷 是否在15分K 是否進場

假如日K是 MA27>MA44  且15分K 也是 MA27>MA44 我就進場,反之出場。

但我怎麼寫, 數值都和直接看圖的不對,而且我回測用的是 FIMTXN*1 ,但抓出來的數值 好像是日盤的。

想請小幫手幫忙查看一下這個笨問題。

 

var: day27(27),day44(44),days27(0),days44(0),ndays27(0),ndays44(0);


days27=xf_XAverage("D",GetField("Close","D"),days27);
days44=xf_XAverage("D",GetField("Close","D"),days44);


ndays27= average(closeD(0),days27);
ndays44=average(closeD(0),days44);


condition1= days27 > days44;
condition2=days27 < day44;
condition3=ndays27 > ndays44;
condition4=ndays27 < ndays44;
condition5= condition1 and condition3;
condition6= condition12 and condition4;


if position=0 and condition1 and condition3 then setposition(1);
if position=1 and condition2 and condition4 then setposition(0);

print (date,time,days27,days44,condition5,condition6);

 另外再請教一個問題  指標可以使用not  trueany來判斷 前幾根是否有部位,但交易好像不能用這個參數。

排序方式: 標準 | 最新
XS小編 發文於   2024/04/08

Hello Alex嘉,

 

小編不太確定,不過您的xf_XAverage裡面放的 Length 參數看起來應該有誤 (days27 / days44 又是xf_XAverage裡面的參數又是用來保存xf_XAverage計算結果的變數)。

另外資料讀取筆數應該不夠長,因為指數移動平均會需要約 (長度 + 1) * 3.5 期資料才能夠計算出正確的數值。

假設以 44 天來計算的話,那麼就會是 (44+1) * 3.5 = 157.5,要預讀並計算 158 天的資料,而您還需要換算成15分鐘。

日夜盤一天會是76根Bar,故會需要計算 158 * 76 = 12008 根Bar,而目前的自動交易無法設定這麼長的資料讀取筆數。

 

average(closeD(0),days27) 計算出來的也不會是 days27 日的日平均值,而是近 days27 根Bar的 closeD(0) 的平均值。

變數的頻率是跟著執行頻率的。

要計算日頻率的平均值的話,應該是 average(GetField("Close", "D"),days27)。

 

交易腳本可以使用trueany來判斷 (trueany的函數可以在內建函數腳本中確認),但須注意position[N]會是前N根Bar結束時的Position數值。

您可以將相關條件的前N期都一併印出確認。

Alex嘉 發文於   2024/04/11

應該說  我想要在一個策略內 分析 比如說 日線 均線黃金交叉 15分K黃金交叉 ,這樣我才進場,出場則相反,
但似乎怎麼寫出來,好像都不太對。 

請教一下小編
您說 
要計算日頻率的平均值的話,應該是 average(GetField("Close", "D"),days27)。

這串的意思是 把算出來的值 寫出days27嗎?

那如果改成15 or 30分 MACD的話呢?

XS小編 發文於   2024/04/15

Hello Alex嘉,

 

如同小編上面所說,要在15分鐘頻率上計算日頻率的指數移動平均,資料讀取筆數會不夠導致無法計算出相同的數值,故建議您使用移動平均的函數。

請參考 Average 函數的說明,第2個參數是移動平均的期數。

所以計算27日移動平均的話,應該會是 average(GetField("Close", "D"), 27)。

若您要用 days27 這個變數來保存的話,應該是 days27 = average(GetField("Close", "D"), 27);。

 

MACD 和指數移動平均一樣,是會用到前期值的指標 (且需要更長),現有的跨頻率函數 xf_MACD 很難在15分鐘頻率上計算出日頻率的資訊。

 

小編建議您先觀看網站上的教學區教學影片,裡面有XS語法的基礎和應用可以閱覽。

虎科大許教授 發文於   2024/04/15

xf_ 及 xfMin_ 的跨頻率函數,只支援個股,你交易的是期貨,資料對不齊是正常的。解決辦法:以xf_ 及 xfMin_ 函數做基礎,自行建立函數。

XS小編 發文於   2024/04/16

 Hello 虎科大許教授,

 

小編補充,xf_ 系列函數有作過調整,就小編所知是可以運作在期貨商品日以上的頻率。

但 xfmin_ 分鐘頻率還是不支援期貨商品沒有錯。

 

感謝您的熱心回覆。

Rabbit 發文於   2024/04/20

請問,如xfMin_CrossOver、xfmin_GetValue、xfmin_MACD等xfmin函數都不支援期貨嗎?

 

又,如何使用xf_、xfmin_函數去建立,還望指教。

例如,要在1分鐘日盤期貨看3分鐘Close是否大於Close[1]

又或者有任何的解決辦法嗎?

感謝

虎科大許教授 發文於   2024/04/21

這些函數在期貨運作看似正常,但其實數值是錯誤的。解決的唯一辦法就是修改函數或是自訂新的函數來專門處理期貨跨頻率問題。很多XQ使用者都把希望寄託在嘉實資訊的工程師,希望能幫忙解決問題,但他們的任務太多了,並無法滿足每一位使用者的需求,所以有些使用者可以自己處理的,像這種自訂函數,最好自己處理。只要把會使用到的函數複製到新的函數腳本,再做修改即可。處理這種跨頻率資料對齊的問題並不容易,需要對原本函數的運作邏輯有所了解,特別是會使用到的那些函數也必須配合修改。這應該是學過進階XS的人,才有能力做到。

XS小編 發文於   2024/04/23

 Hello Rabbit,

 

是的,xfMin 開頭的函數當初在撰寫時都是針對台股的環境,故使用在期貨上時會因為交易時間不同導致有所誤差。

因此在期貨商品上跨頻率需要自行另外撰寫。

 

小編會建議若是變數的話,要保存不同頻率前一根Bar的變數值可以用對應頻率的時間來判斷。

舉例來說,1分鐘頻率下紀錄變數value2在前一根5分鐘頻率Bar的數值會是:

var: _record(0);

value1 = getfield("Time", "5");

 

if value1 <> value1[1] then _record = value2[1];

 

其中 value1 <> value1[1] 就代表著在5分鐘頻率下已經過了1根Bar,故用 _record 來保存上一根Bar的 value2 的數值。

 

感謝 虎科大許教授 的熱心回覆。

發表回覆
Close