策略雷達的執行頻率&腳本的資料頻率

  •   1.3K 
  • 最後發表   Yakof  2020 八月 20
Yakof 發文於   2020/08/11

請問:XS腳本內寫[1]代表前一根K棒,比如說close[1]代表前一根K棒的收盤價,至於K棒的頻率是看策略雷達設定的指定頻率,如果指定頻率是日,close[1]就是前一日收盤價,如果指定頻率是60分,close[1]就是前一小時收盤價,我這樣的理解正確嗎?我有兩個問題,1.如果我希望指定每1分鐘執行,但是腳本裡的K棒要60分,要怎麼處理?2.close可以寫成close[0]嗎?因為有可能 [ ] 裡面想要寫從0開始LOOP...

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

Yakof大 您好

Q1:如果我希望指定每1分鐘執行,但是腳本裡的K棒要60分,要怎麼處理?

A:您可以使用跨頻率來取得資料 EX GetField("均價","60")  

後面的"60" 就是其他頻率

Q2:close可以寫成close[0]嗎?

A:可以的,close[0] 會等於 close

Yakof 發文於   2020/08/12

繼續請問:

1.多空方向的邏輯是?close[1]<close是多方而close[1]>close是空方嗎?

2.指定頻率就決定了此策略每多久執行一次,以及腳本內的K棒頻率對嗎?觸發設定有什麼地方有詳細說明嗎?它們的差異只能在盤中看得出來嗎?

3.資料讀取的筆數代表抓取最近多少根K棒資料備用嗎?如何確定合適的數字?我發現如果設定個一百或兩百的話,LOG檔裡面會看到一次就執行了幾十根甚至上百根K棒,如果設1的話,有的腳本只執行最後一根K棒,而有的腳本會說資料範圍不夠

4.print()只會寫到LOG檔嗎?沒辦法從那個畫面看到?

5.如果我一個腳本裡面有好幾個情況都會觸發警示,然後我希望能夠看得出來是哪一種狀況觸發的,除了靠LOG檔以外有其他方法嗎?

XQ小幫手 發文於   2020/08/13

Yakof大 您好

讓我一步一步為您解答

Q1: 多空方向的邏輯是?close[1]<close是多方而close[1]>close是空方嗎?

A: 所謂多空方是您策略觸發時,要做多還做空,如果您要股票創新高close[1]<close時放空,那就選空方

Q2:指定頻率就決定了此策略每多久執行一次,以及腳本內的K棒頻率對嗎?觸發設定有什麼地方有詳細說明嗎?它們的差異只能在盤中看得出來嗎?

A:是的頻率是指K棒的頻率,EX 五分K 日線 二十日線...;您可以看看這篇文章股價突破均線時的通知,是個實際範例;您也可以使用回測功能來檢視

Q3.資料讀取的筆數代表抓取最近多少根K棒資料備用嗎?如何確定合適的數字?我發現如果設定個一百或兩百的話,LOG檔裡面會看到一次就執行了幾十根甚至上百根K棒,如果設1的話,有的腳本只執行最後一根K棒,而有的腳本會說資料範圍不夠

A:資料讀取筆數主要是看您策略裡會需要撈取的過往資料長度而定,舉個例,你要算20MA ,那你一定要抓超過20根K棒才能算出正確數值,所以這個端看您的策略怎麼想而定,但小幫手正常都會設立比預期的大一點。

Q4.print()只會寫到LOG檔嗎?沒辦法從那個畫面看到?

A:您可以在C:\SysJust\XQLite\XS\Print 找到PRINT的TXT檔,或是當策略執行時,編碼器的「執行欄位」也會顯示

5.如果我一個腳本裡面有好幾個情況都會觸發警示,然後我希望能夠看得出來是哪一種狀況觸發的,除了靠LOG檔以外有其他方法嗎?

A:retmsg此語法能夠讓您在特定雷達觸發時跳出自訂文字,相關介紹提供給您retmsg

Yakof 發文於   2020/08/13

不好意思,關於資料讀取筆數那個問題,我從LOG檔裡面觀察的感覺是,讀取筆數越多,LOG檔裡面寫的東西越多,看起來好像是如果筆數設100,每次檢查都檢查100根K,如果設200就每次都檢查200根K,但是其實最後決定要不要觸發警示的是最後一根K,那前面多跑那麼多是何用意?

XQ小幫手 發文於   2020/08/13

再舉個例子給您聽看看

假設台積電近5日價格 100 105 110 115 120 

那要算五日平均的話就必須取前面幾天的收盤價才能算出來100+105+110+115+120/5 ,

如果你資料讀取筆數取1天 那數值就會有問題

所以才會說您必須去設定合乎您需要的區間。

Yakof 發文於   2020/08/13

讀取資料筆數必須大於腳本內的計算會用到的筆數,這我可以理解,比如說我腳本裡面如果會用到布林通道,天期是20,資料讀取筆數就應該超過20,但我不解的是,警示策略在執行時,不是拿最近一根K棒當基準開始做計算判斷嗎?我從LOG檔裡面看起來,好像是把前面的幾十根K棒都丟進去跑了檢查,但是只有最後一根K棒符合判斷邏輯時會觸發警示,我有看到前面K棒符合而最後一根不符合的就不會觸發警示,我是在好奇為什麼前面要多跑那麼多

另外你給的股價通過均線那個範例影片我有看,但是他也只提到連續觸發+逐筆洗價一種方式而已,不過我想我真正的問題是,我原本以為指定頻率代表K棒的時間頻率,也代表策略的執行頻率,也就是說5分的頻率就每5分鐘執行一次,60分的頻率就每60分執行一次,後來我多觀察一段時間後發現指定頻率好像跟執行的頻率無關,那我就好奇策略的執行頻率是如何決定的?是不是跟觸發設定有關?我剛開始接觸時在盤後做測試,發現只有單次洗價跑得出東西,其他都不行,所以想問是不是單次洗價代表把目前能讀取到的資料全部跑一次,而其他模式都必須在盤中,靠K棒內容發生改變的時候才觸發檢查?

XQ小幫手 發文於   2020/08/14

Yakof大  您好

A1: 其實這是可以調整的,因為系統預設的資料讀取筆數為200筆,在策略雷達的內容中,有資料讀取筆數可以做修改

所以會像您說的會有過多過去的資料,

而因為XS的程式是以時間序列為基礎,

簡單來說就是有K棒就會偵測,

所以才會有你說的這種現象。

A2. 所以5分頻率,是指一根K棒的組成是5分鐘的累積,並不是像BREAK 一樣,停5分鐘再執行,

頻率是建設在您想用哪種頻率的線圖來執行您的策略,

而會不會執行觸發,單純是看您設定的標準來決定。

A3:因為策略雷達的運行基礎是建立在有TICK (成交)才會執行,

而盤後盤的交易量過少,當無交易時就不會執行,所以才會有你所說的跑不出東西的狀況

單次洗價,主要是拿來做檢測有沒BUG使用,他的概念是把當下的成交數字都拿來跑一遍

關於所謂的TICK 可以參考這篇文章,有做詳細說明TICK

Yakof 發文於   2020/08/14

Input: X(60,"頻率(分)"), Y(90,"天期");
value1 = average(getfield("close", NumToStr(X,0)), Y);

編譯失敗,訊息說GETFIELD的第二個參數要是STRING,但是NumToStr不就是轉成STRING嗎?

XQ小幫手 發文於   2020/08/14

Yakof大 您好

getfield 的撰寫只能是固定文字 也就是像 "D" 這樣

例如 GetField("收盤價","5")  

您的 NumToStr(X,0),沒有"" 就不是他規定的格式了

所以才無法使用

Yakof 發文於   2020/08/14

那不就是第二個參數不能設為INPUT讓前端輸入了嗎?有其他辦法嗎?

顯示更多回應 發表回覆
Close