跨頻率問題,以及過濾可現買現沖或是雙向現沖股票

  •   335 
  • 最後發表   liubig  2022 七月 29
liubig 發文於   2022/07/18

如題
我想在自動交易中心寫一個策略

進場:
1.於早上9:00~9:05內進場
2.當天開盤價大於60分K的MA20

出場:
1.5分K的收盤價小於5分K的MA20

以上XS要如何撰寫以及自動交易中心的執行頻率應該設定多少呢?

因需要當沖應如何設定所有可以雙向現沖的股票,或是只能先買現沖的股票

 

附件我是這樣撰寫,但回測出來一直不如自己預期

再麻煩小幫手協助
謝謝您

附加文件

排序方式: 標準 | 最新
musashi 發文於   2022/07/18

建議用小頻率抓大頻率,例如5分K頻率去抓60分K。

標的雙向現沖可以用以下函數判斷

GetSymbolInfo

 

liubig 發文於   2022/07/19

musashi 大您好! 感謝您的建議,之後我改成這樣

Value1 = q_PreTotalVolume;
//進場點
condition1= currenttime >= 090000 and currenttime <= 090500;
condition2=GetSymbolInfo(" 先買現沖");
condition3=getField(" open","60") > getField("open","60")[1];
condition4= value1 > 1000;

//出場點
condition11 =close cross Below Average(close, 5);

if position=0 and condition1 and condition2 and condition3 and condition4
then setposition(1,market,label:="buy");

if position =1 and condition11
then setposition(0,market,label:="sell");

自動交易中心 頻率改為5分鐘 原始值,逐筆洗價啟動
策略部位計算起點: 不指定 資料讀取筆數 100

這樣似乎也無法回測,能麻煩您幫我看看嗎 謝謝您

musashi 發文於   2022/07/19

 你的腳本要附加語意說明才能夠知道腳本是否有錯,我猜你的意思應該是以下腳本吧

//09000到090459之間,備註:回測currenttime=time
condition1 = currenttime >= 090000 and currenttime < 090500;
//是否先買現沖
condition2 = GetSymbolInfo("先買現沖");
//今日開盤大於60分K開盤價MA20
condition3 = getField("open","D") > round(average(getField("open","60"),20),2);
//成交量>1000
condition4 = volume > 1000;

//出場點
//成交價 死亡交叉 收盤價MA20
condition11 = close cross Below Average(close, 20);

if  position= 0 
and filled  = 0
and condition1 
and condition2 
and condition3 
and condition4
then setposition(1,market,label:="buy");//做多進場

if  position=1
and filled  =1 
and condition11
then setposition(0,market,label:="sell");//做多平倉

liubig 發文於   2022/07/19

是的!!!
感謝M大!

另外可以額外請教您
運算子 <、=、>以及 cross below、above等等使用時機嗎?
我能理解如果要確切知道兩條線,是否已經貫穿需要用到cross
但如果像以上程式碼 condition11 一邊是固定數值並非"線"的概念,cross below跟 < 的概念跟方法是否通用呢?

再麻煩您幫我解答了謝謝~

musashi 發文於   2022/07/20

用收盤價和均線舉例解釋,cross below函數會判斷前一根K棒【收盤價 >= 均線】,當根K棒【收盤價 < 均線】,兩者都符合才會讓condition=true(成立)

//以下兩種寫法是相同意思
condition11 = close cross Below Average(close, 20);

if   close[1] >= Average(close[1], 20)
and  close    <  Average(close, 20)
then condition11 = true     //兩個條件同時成立
else condition11 = false;   //兩個條件只要有一個不成立

liubig 發文於   2022/07/22

非常感謝您詳細解說!!

  • 按讚來自於
  • musashi3560010
XQ小幫手 發文於   2022/07/29

Hello liubig,

 

您腳本無法回測是因為 q_PreTotalVolume 是報價欄位,無法用在回測。

昨量的話您可以改用 getfield("Volume", "D")[1]。

 

關於 cross above 和 cross under 您可以參考 XSHelp 上的說明

 

網站上有教學區,裡面有XS語法的基礎和應用可以閱覽。

 

感謝 musashi 的熱心回覆。

發表回覆
Close