抓2分時K資料來跟開盤第一根BAR做比較

  •   968 
  • 最後發表   chun0712  2021 六月 02
chun0712 發文於   2021/05/27

小幫手您好:

我想做一警示策略在兩分K內監測:

條件:

2分K內的K棒成交量大於開盤第一根且收盤價也收最高就跳警示.

在C++裡我很容易做到,只是XQ語法轉不出來,可否幫忙??

如下圖第一根是1038,到了9:14那一根成交量是1218然後就跳出警示.

PS:下圖第二根箭頭我標錯標到9:20,我需要的是K棒完整後的成交量,而不是逐筆洗價瞬間大於第一跟成交量就警示.

然後只要再次成交量大於前一次最大量且收最高就再觸發.

以下是我的程式碼:我今天開起來實驗2390好像不會警示! 感覺我盤中BAR收最高價是否有錯?

var:_BigV(0);

if date = currentdate then begin

    if time = 090000 then _BigV = volume//設定9點成交量為第一根BAR

    else if (volume > _BigV and close=highd(0)) then ret=1;  //成交量>9點開盤那根且收最高則觸發

_BigV = volume;  //觸發後 _BigV變數以剛剛的最大成交量做取代

end;

1.以今天27號來說要在9:58觸發

5/26號在9:20要觸發第一次

2.

3.我想要再完整K棒完成在做策略判斷,這樣觸發條件要選哪一個?

是 K棒單次觸發嗎? 逐筆洗價需不需要打勾呢?

 

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

Hello chun0712,

 

小幫手看了一下您的腳本應該是沒有問題的,所以您只要調整您的設定就可以了。

如果您希望當根 Bar 結束後才發警示的話,請不要勾逐筆洗價。

K棒單次觸發是為了避免有時逐筆洗價時連續觸發所以才有的,一根Bar只會觸發一次的限制。

觸發設定的細節可以參考此連結

  • 按讚來自於
  • CHUN0712
chun0712 發文於   2021/05/28

我今天用了print去驗證了我抓取的數值跟用手機警示驗證,確實沒有問題.

但是我今天比較晚開啟警示9:06分才開起所以我第一行code就沒有抓到9:00那一跟成交量.

所以我想知道,如果我要抓分時K內,當根Bar成交量最大的那一根Bar成交量值要怎麼寫?

<簡單來說我想抓2分K內單根Bar成交量創新高的值>

這樣我如果錯過第一根Bra值,我就可以改寫當根 成交量>先前Bar最大成交量

 

XQ小幫手 發文於   2021/05/28

Hello chun0712,

 

如果您要抓過去一段時間的成交量最大的那一根 Bar 的成交量的話可以使用 SimpleHighest 函數。

舉例來說:

value1 = SimpleHighest(Volume, 10);

value1 就是過去10根 Bar 中成交量最大的那一根。

亦可以搭配 GetBarOffset 函數使用來抓取今天開盤到腳本運行之間的相對位置。

 

另外,如果您的資料讀取筆數設定夠長的話,理論上來說早上9:00的成交量還是抓的到的,您可以將值print出來檢查即可得知。

  • 按讚來自於
  • CHUN0712
chun0712 發文於   2021/06/01

HI 小編:

請您再幫我檢查我的code抓9:00開盤那一根成交量是哪裡有問題?還是其他地方有誤?

1.您說的 SimpleHighest 指令我有去試,但是資料筆數如果設定10 會抓到昨天的吧? 如果是當日過去,當然設大一點是一定可以抓到9點那一根,但我看指令介紹應該是會抓到昨天尾盤的K棒吧?

2.我今天是在9點以前就開啟警示策略,而我發現到 大於開盤第一根BAR的成交量那一個條件並不成立.

觀察了跳出警示幾支股票都是,這個語法不難,只是我不太清楚系統指令抓資料的time與period是如何?

再麻煩小編或後台幫我確認這個小地方,謝謝!!

var:_BigV(0);

if date = currentdate then begin//確認日期為今日

    if time = 090000 then _BigV = volume//抓9點那一根成交量當第一筆資料

    else if (volume > _BigV and close=highd(0)) then ret=1;

_BigV = volume;

print(date,time,_BigV,close,highd(0)); 

end;

 

 

chun0712 發文於   2021/06/01

1.9:06分跳出警示,此時量為13張,但是9點那根是25張

2分K藍色箭頭標示處

 

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

 Hello chun0712,

 

1. 如同小幫手上次所說,您可以搭配 GetBarOffset 來使用。

所以您需要的是 SimpleHighest(Volume, GetBarOffset(date, 090000))

 

2. 您抓成交量的部分沒有錯。有問題的地方是在於腳本中儲存成交量的變數更新的方式。

小幫手幫您的腳本作了一些修正。

var:_BigV(0);

if date = currentdate then begin

    if time = 090000 then _BigV = volume

    else if (volume > _BigV and close=highd(0)) then begin

        ret=1;

        _BigV = volume;

        end;

    print(date,time,_BigV,close,highd(0)); 

    end;

 

您的 _BigV 應該是要在 ret = 1 的時候才更新。若是依照原本的寫法是每次都會更新。

  • 按讚來自於
  • CHUN0712
chun0712 發文於   2021/06/01

 感謝小幫手了解到我要表達的意思!

回覆1.:真心覺得函數查詢網頁那邊的說明實在太簡略了,範例也太少.例如 SimpleHighest函數 這邊寫期數,我完全不知道可以混用其他函數,真以為只能填數字! 真心建議可以建議公司把函數查詢那邊的說明與範例,再整理更詳細一點,常常我在寫你們家語言時遇到的問題是不曉得函數的功能與應用的範圍,而不是程式的架構與邏輯. 想信這部分能夠再更詳細,會減少許多使用著的發問,同時也可以減少小幫手的回覆量

回覆2.:這正是我要表達的意思,原來這邊是用begin與end 來取代C語言的{ }.

以上感謝,已解決我的問題!

XQ小幫手 發文於   2021/06/02

Hello chun0712,

 

感謝您的建議,會轉告相關人員作參考。

  • 按讚來自於
  • CHUN0712
發表回覆
Close