策略雷達條件結構是否有問題

  •   149 
  • 最後發表   油條  2021 七月 27
油條 發文於   2021/07/20

小編好:

我目前測試XS都是以當沖策略盤中監控的狀況,CDP的條件沒有問題,但"K"棒跟"量"的部分(邏輯是:爆量以後在當日最高價的地方收黑1分K、大戶買賣力判斷小於0或內盤大於外盤),在condition2 and condition3,雖然在編碼有成功,但加上去以後執行,就跳不出來了,如果可以請指導進行策略回測

 

 

input: buffer(0, "壓力區間寬度");

var:CDP(0),AH(0),AL(0),NH(0),NL(0);

 

if barfreq <> "Min" then raiseruntimeerror("請運行在分鐘頻率上 (最好是1分鐘)");

 

CDP = (getfield("High", "D")[1] + getfield("Low", "D")[1] + getfield("Close", "D")[1] * 2) / 4;

AH = CDP + (getfield("High", "D")[1] - getfield("Low", "D")[1]);

AL = CDP - (getfield("High", "D")[1] - getfield("Low", "D")[1]);

NH = 2 * CDP  - getfield("Low", "D")[1];

NL = 2 * CDP  - getfield("High", "D")[1];

 

//回測不支援日頻率,所以將其改為60分鐘,如果用在即時時可以用日頻率

value1 = GetField("賣出特大單量","60") + GetField("賣出大單量","60");

value2 = GetField("買進特大單量","60") + GetField("買進大單量","60");

value3 = value2 - value1;

 

condition1 = (getfield("Close", "1") cross over (NH + buffer) or getfield("Open", "1") cross over (NH + buffer)) ;

//1分鐘開盤價或收盤價突破NH + buffer 之上且收黑

condition2 = value3 < 0 or getfield("內盤量", "1") > getfield("外盤量", "1");

//大戶買賣力為正數或內盤量大於外盤量

condition3 = highest(high, GetBarOffset(date, 090000)) > getfield("Close", "1") and getfield("Volume", "1") >  Average(getfield("Volume", "1")[1], 5) * 3; 

//價格不突破今日高點且爆量(1分鐘成交量 > 5分鐘平均量的3倍)

condition4 = getfield("Open", "D") < NH;

condition5 = getfield("Open", "D") >CDP;

//(依照CDP逆勢操作法,本策略先判斷CDP<當日開盤價<NH,在開盤價附近或突破NH及時作空)

condition6 = getfield("Open", "D") > getfield("Close", "D")[1];

// 開平盤以上

if condition1  and condition4 and condition5 and condition6  then begin

    print(file("c:\XS\print\"),NH,symbol,date,currenttime,value3);

ret = 1;

end;

//進場訊號整理(在突破NH上面爆量收黑):

//CDP<開盤價<NH

//1分K突破NH+0爆量,見到本日高點爆量收黑K

//大戶買賣力為正數或內盤量大於外盤量

//

 

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

Hello 油條,

 

麻煩您提供雷達腳本的時候只要提供您提問的那一個雷達與腳本就好。

 

小幫手回測了您提供的腳本,就算加入了condition2和condition3,5424 在 7/22 09:40 這根突破NH還是抓得出來。

由於您要的並不是這一根,而是這一根達成後的某一根。

所以您可以用變數來儲存是否有達成過,再以此變數去判斷之後的條件是否有達成。

另外需注意的一點是"當日最高價"只能是"到目前的Bar為止是當日最高價"。

因為您無法取得未來的值,所以只能以目前為止的最高價來當作基準。

附上小幫手修改的腳本供您參考,這樣即可抓出 09:40 那根Bar。

附加文件

油條 發文於   2021/07/22

小幫手好,附上策略原檔及補充說明,已寄到客服信箱,懇請賜復

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

Hello 油條,

 

由於您已經知道是 condition2 與 condition3 條件不符合。

建議您將此兩項condition所用之數值print出來檢查看為何不符合。

像是在腳本最後新增一行:

print(date, time, value3, getfield("內盤量", "1"), getfield("內盤量", "1"), highest(high, GetBarOffset(date, 090000)),

getfield("Close", "1"), getfield("Volume", "1"), Average(getfield("Volume", "1")[1], 5) * 3);

如此便將所有有用到的值印出,接著只要檢查有問題的時間點就可以知道問題為何。

 

如果您還是找不出問題所在的話,麻煩您提供 策略雷達匯出檔並勾選(包含)警示腳本(此腳本即可)、您覺得應該要觸發但未觸發的商品和時間點(讓小幫手測試)、XQ Log來檢驗。

Log資料夾(預設路徑:C:\SysJust\XQLite\LOG)直接壓縮後提供即可。

您可以直接將檔案上傳,如果檔案過大的話也可以Mail至客服信箱 XQservice@XQ.com.tw且附上 討論文章連結網址(小幫手才能盡早處理)。

感謝。

發表回覆
Close