請問連續外盤成交的寫法,以下的程式碼,可以嗎?

  •   427 
  • 最後發表   鄭揪  2024 十二月 06
鄭揪 發文於   2024/12/04

請問小編和教授,對於連續外盤成 交的寫法,在參考眾多的說明後,這樣的寫法是否可行?

麻煩請解惑!!!感恩感恩

 

// 確保為 1 分鐘線頻率

if barFreq <> "min" or barInterval <> 1 then

    raiseRunTimeError("請設定 1 分鐘頻率");

 

input: TickCountThreshold(5, "連續外盤成交次數"), VolumeThreshold(100, "成交量閾值");

var: _outTickCount(0), _outVolume(0), _lastClose(0);

 

// 初始化變數

_outTickCount = 0;

_outVolume = 0;

_lastClose = Close;

 

// 判定是否為外盤成交

if Close > _lastClose then begin

    _outTickCount = _outTickCount + 1;

    _outVolume = _outVolume + Volume;

end else begin

    // 重置計數,因為沒有連續外盤成交

    _outTickCount = 0;

    _outVolume = 0;

end;

 

// 判斷條件是否滿足

if _outTickCount >= TickCountThreshold and _outVolume >= VolumeThreshold then begin

    Plot(1, Close, "轉折信號", checkbox:=1);

end;

 

// 更新上一筆的收盤價

_lastClose = Close;

 

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

你這樣寫,有好幾個問題:

(1)累計外盤次數及外盤量以及記錄上一個Tick的成交價等變數需要用intraBarPersist宣告。

(2)你初始化變數的做法,會讓每個Tick的變數值都歸零,由於上一個Tick的數值沒被保留,所以無法累加。

(3)快市時,Tick可能漏接的問題也沒處理。

(4)到底有幾筆外盤成交,是Tick進來之後,往前回溯才可得知。

(5)連續三筆外盤大單(假設超過100是大單),可簡單撰寫如下,不過,這種寫法不夠週延,遇到小單插隊會或大單被拆開成兩筆以上成交時,結果會不如預期。要準確地處理需要花點時間上課學習。

condition1=TrueAll(getField("內外盤","Tick")=1 and getField("成交量","Tick")>100,3);

XS小編 發文於   2024/12/06

Hello 鄭揪,

 

小編補充,除了 虎科大許教授 的建議外,若有需要處理 Tick 頻率的資料,可以參考 ReadTicks 函數的寫法。

發表回覆
Close