ReadTicks

  •   40 
  • 最後發表   異想天開  4 週前
異想天開 發文於   2024/08/08

小弟想要計算兩筆TICK的成交價差異,在相差大於3個TICK時發出警告

使用了READTICKS函數,但發現好像會漏抓

像是佳龍在8/7 09:53時分時明細上兩筆TICK差已經符合策略但卻沒顯示

var: OneTick(0);

IF C<10 then OneTick=0.01;
IF C>=10 and C<50 then OneTick=0.05;
IF C>=50 and C<100 then OneTick=0.1;
IF C>=100 and C<500 then OneTick=0.5;
IF C>=500 and C<1000 then OneTick=1;
IF C>=1000 then OneTick=5;



var: intrabarpersist readtick_cookie(0);    
     array: tick_array[500, 11](0);         


    var: idx(0);
    value50 = ReadTicks(tick_array, readtick_cookie);
    for idx = 1 to value50 begin
        IF 
            tick_array[1, 2] >= 090100 
        and (tick_array[2, 3] - tick_array[1, 3]) >= 3*OneTick 
        THEN 
        BEGIN
            RET=1;
        END;
    end;



附上警示圖片、明細、原始碼,還請解惑,謝謝!!!

排序方式: 標準 | 最新
虎科大許教授 發文於   2024/08/08

幾個問題:

(1)readtick_cookie是上次洗價的序號,你的程式沒有賦予它數值,它就一直是預設的0。

(2)你的迴圈內容,沒有任何陳述句與計數變數idx有關,這代表永遠只在比較相同資料。

異想天開 發文於   2024/08/08

因為我只是要比較最新TICK與上一個TICK的成交價差異,看網頁上說明
// tick_array[1, ..] 是洗價當時最新的一筆
// tick_array[2, ..] 是前一筆(往前算第2筆)

思考很久教授您講解的問題許久,但還是一直無從下手,不知道如何去改程式碼
如果這樣理解是錯誤的,想請問有什麼資源可以參考嗎?

關於READTICK的文章真的好少...

最後謝謝教授熱心解惑!!!

XS小編 發文於   2024/08/14

Hello 異想天開,

 

ReadTicks 函數會抓上次運算到這次運算間的Tick資訊 (最多只能抓到陣列的大小)。

用在回測上,最低就是一分鐘頻率,所以每次運算就會是該分鐘的Tick資訊。

您標示的時間分別在 095250 跟 092357,分段在兩分鐘,所以在 095200 這根Bar運算時只會抓到 095250 以前的Tick資訊,在 095300 這根Bar運算時則是 095357 以後的資料。

故回測上是不會出現的。

 

for idx = 1 to value50 begin ... 這邊由於內部的條件都是檢查相同的資訊 (tick_array[1, 2] >= 090100 和 (tick_array[2, 3] - tick_array[1, 3]) >= 3*OneTick),故不需要使用 for 迴圈。

 

您可以參考XS編輯器裡的 ReadTicks 函數,裡面有比較詳細的說明。

 

感謝 虎科大許教授 的熱心回覆。

發表回覆
Close