_BuyOrSell問題,請小幫手看看問題出在哪

  •   355 
  • 最後發表   檸檬  2022 一月 19
檸檬 發文於   2021/01/14

程式新手之前都是複製現有的腳本再進行剪下貼上做修改,當然這邊的 _BuyOrSell也是爬文撿來的,

今天弄了一個「大戶散戶同向且K>D,量>1000時買進」的腳本如下

----------------------------------------------

input: _BuyOrSell(0), Length(9), RSVt(3), Kt(3);
SetInputName(1, "買進=1;賣出=2");
SetInputName(2, "天數");
SetInputName(3, "RSVt權數");
SetInputName(4, "Kt權數");

value1 = GetField("賣出特大單量","D") + GetField("賣出大單量","D");
value2 = GetField("買進特大單量","D") + GetField("買進大單量","D");
value3 = value2 - value1;

value4 = GetField("賣出小單量","D") + GetField("賣出中單量","D");
value5 = GetField("買進小單量","D") + GetField("買進中單量","D");
value6 = value5 - value4;

Value8 = GetQuote("總量(日)");
Value8 = GetQuote("DailyVolume");
Value8 = q_DailyVolume;

// KD指標, K值由下往上穿越D值
//
variable: rsv(0), k(0), _d(0);
SetTotalBar(maxlist(Length,6) * 3);
Stochastic(Length, RSVt, Kt, rsv, k, _d);

if value3 > 0 and value6 > 0 and k > _d and Value8>1000 then
    begin
          if _BuyOrSell =1 then ret = 1;
    end;

          if k < _d and _BuyOrSell = 2 then ret = 1;

----------------------------------

1進場2出場,完成後編譯沒問題,但跑回測出現失敗

如紅框處,賣出=2=1,下面賣出=2=2,然後無法進行回測,請問問題出在哪邊呢?

 

另外,希望以後貴公司能開發出「中文模組化的交易腳本編輯」,「當(如果)…且(或)…,則進行…,不然就…,then+1」,

我爬了一些文跟教學跟腳本,發現最大的問題就是教學沒有告訴初學者設定條件的基本語法的有哪些,哪個又是什麼時候要用在哪裡,什麼情形用哪個最快速省電腦效能,

完全不知道是要用if還是when(如果、當,中文意思接近吧?)、condition這些中的哪一個,舉個例「出現外盤特大單時+1」,新手就卡在不知道要用什麼「開頭」(我只會用if...and...then最簡單這些 ),例我卡關的點

Value1 = GetField("買進特大單量");
Value1 = GetField("BidVolume_XL");

if value1>=100(我只會寫有給予數值,上面的getfied還是用插入欄位)
then ret=1;

但上面是定義了value1>=100,如果我只是要系統預設的「出現外盤特大單」出現就+1(單量大小視系統對價格不同股張數定義,而不是我定義大於幾張,由我定義的話平平10張,20元的股跟200元的股總價差10倍),但我寫出的東西完全不能編譯,如下

Value1 = GetField("買進特大單量");<<<<<(插入欄位有特大單量,特大單金額,特大單成交次數,但好像都不是我要的只好選量)
Value1 = GetField("BidVolume_XL");

if value1 成立<<<這個成立要用什麼語法?卡關

Value1 = GetField("買進特大單量");
Value1 = GetField("BidVolume_XL");

then ret=1;<<<<系統跟我提示then之前還要有東西不能這樣用,但我也不知道「該用什麼」

這邊也請小幫手順便解惑,如果只是單純要「出現外盤特大單時」(或其他單一條件)出現就+1該怎麼寫,感謝小幫手。

排序方式: 標準 | 最新
XQ小幫手 發文於   2021/01/15

檸檬 您好

1. 關於您的策略

A: 有兩個問題

(1) GetQuote 報價欄位屬於即時資料

並不支援回測,請使用GetField 相關語法

(2)GetField("賣出特大單量","D")相關資料欄位,

只支援盤中雷達使用,暫不支援回測功能

目前還在開發中

XQ小幫手 發文於   2021/01/15

Value1 = GetField("買進特大單量"); <-------這個是以value1為變數來代替GetField("買進特大單量")的意思

value1>=100 <-------- 這個並非是定義 還是 "條件"

也就是您的value1 大於多少才觸發 

----

因為每一套程式語法都有自己一套邏輯與撰寫方式

python 的寫法 vba 的寫法 xs的寫法都有所不同

因為小幫手是從頭開始學習程式語言的

所以能理解您一開始學習的困惑點

建議您可以先從普通的邏輯開始打基礎 會比較有利能的撰寫

https://www.books.com.tw/products/0010769181?gclid=Cj0KCQiA9P__BRC0ARIsAEZ6irhD8yCT6_fu1wQxmAEH5kmNbJUctDw75Qxex5HmsOTiKCukLJBnHu8aAiD2EALw_wcB

這本為我們老闆所撰寫的入門書籍 ,提供給您參考

檸檬 發文於   2021/01/16

「只支援盤中雷達使用,暫不支援回測功能」

還有分喔原來是這樣,我以為能當警示用就能串聯下單。

這樣理解了,謝謝小幫手。

XQ小幫手 發文於   2021/01/18

檸檬 您好

您可以看這個位置區分可不可以回測

如果是可以回測的欄位,他就會有個回測的圖示

https://xshelp.xq.com.tw/XSHelp/?HelpName=%E8%B3%A3%E5%87%BA%E7%89%B9%E5%A4%A7%E5%96%AE%E9%87%8F&group=TVOLUME

  • 按讚來自於
  • DARKLYNN
WILSON022 發文於   2021/07/25

難怪我回測個老半天都沒東西,請問大概什麼時候可以有呢?

XQ小幫手 發文於   2021/07/29

Hello WILSON022,

 

目前只有選股中心回測可以使用特大單量的日頻率資料,交易中心和雷達的部分工程師還在努力。

小幫手會去追蹤相關進度。

感謝。

  • 按讚來自於
  • KKCHING
吾夜遊冥 發文於   2022/01/05

請問此欄位目前支援交易的回測分鐘頻率不包含1分鐘嗎?

目前我測試5分鐘與10沒問題但1分鐘則無資料

另外請問"大戶持股比例"是否無法用於交易回測?

謝謝

XQ小幫手 發文於   2022/01/07

Hello 吾夜遊冥,

 

小幫手這邊測試在2330.TW上都是沒有問題的。(參考附圖)

需要麻煩您提供回測錯誤的商品和時間。

另外需注意,大戶持股比例最低是週頻率資訊,所以在取用時建議您要指定頻率且取前期值會比較適合。

不然最少也需要作判斷看當週的資料是否已經更新,舉例來說:

if getfielddate("大戶持股比例", "W") = 0 then value1 = GetField("大戶持股比例", "W", param:= 100)[1] else value1 = GetField("大戶持股比例", "W", param:= 100);

在沒有當週資料時取用前期值。

附加文件

吾夜遊冥 發文於   2022/01/10

以下面程式碼為例,回測標的2330

在5分鐘頻率時,選逐筆洗價與否都可以有回測結果

但在1分鐘頻率時,若勾選逐筆洗價則交易為0

想知道原因,謝謝

 

XQ小幫手 發文於   2022/01/13

Hello 吾夜遊冥,

 

這是因為兩者回測運行的方式不同。

1分鐘頻率的逐筆回測是將1分鐘Bar拆分成OHLC來模擬,所以每根Bar會洗4次價。

1分鐘以上頻率的逐筆回測是將其拆分成1分鐘Bar來模擬,所以會根據每根Bar有幾分鐘就洗幾次。

而買進大單量和賣出大單量沒有提供1分鐘逐筆回測的資訊,因為無法找到OHLC對應的正確欄位資訊。

故回測會失敗。

顯示更多回應 發表回覆
Close