XS 請問要如何計算時間?

  •   341 
  • 最後發表   Albert3919  2025 五月 19
Albert3919 發文於   2025/05/19

假設股票漲了5%列入觀察,假設後3分鐘股價沒有漲超過7%就進場放空,放空後隔5分鐘回補,請問我要怎麼紀錄進場的時間,然後計算3分鐘或5分鐘後的時間?

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

用TimeDiff或TimeAdd函數判斷。

Albert3919 發文於   2025/05/19

不知道為什麼回測後交易次數完全是0,是我TimeDiff用錯了嗎?

// 可調整參數

input: watch_percent(5, "觀察漲幅%"); // 觀察股票的漲幅門檻

input: skip_percent(7, "不放空的漲幅%"); // 若漲超過此幅度則不放空

input: wait_minutes(3, "觀察後等待分鐘"); // 觀察後等待多久進場

input: exit_minutes(5, "放空後回補分鐘"); // 放空後多久回補

 

// 控制變數 

var: intrabarpersist watch_time(0); // 觀察時間點

var: intrabarpersist entry_time(0); // 進場時間點

var: intrabarpersist is_watched(false); // 是否已進入觀察狀態

 

// 設定計算需要的K線數量

SetTotalBar(3);

 

// 如果日期變更,重置所有狀態變數

if GetFieldDate("Date") <> GetFieldDate("Date")[1] then begin

    watch_time = 0;

    entry_time = 0;

    is_watched = false;

end;

 

// 1. 判斷是否達到觀察條件(漲超過5%)

if not is_watched and Close > GetField("參考價", "D") * (1 + watch_percent/100) then begin

    watch_time = Time;

    is_watched = true;

end;

 

// 2. 若已經列入觀察,且已經經過指定觀察時間

if is_watched and watch_time > 0 and Position = 0 and Filled = 0 then begin

    // 檢查是否已經過了觀察等待時間

    if TimeDiff(Time, watch_time, "M") >= wait_minutes then begin

        // 檢查股價是否漲超過7%,若超過則不放空

        if Close <= GetField("參考價", "D") * (1 + skip_percent/100) then begin

            // 進場放空

            SetPosition(-1, MARKET);

            entry_time = Time;

        end else begin

            // 漲幅過高,取消觀察

            is_watched = false;

            watch_time = 0;

        end;

    end;

end;

 

// 3. 若已經放空,且已經經過指定的時間,則回補

if Position = -1 and entry_time > 0 then begin

    if TimeDiff(Time, entry_time, "M") >= exit_minutes then begin

        // 回補平倉

        SetPosition(0, MARKET);

        // 重置狀態

        watch_time = 0;

        entry_time = 0;

        is_watched = false;

    end;

 

end;

虎科大許教授 發文於   2025/05/19

使用什麼頻率回測?

Albert3919 發文於   2025/05/19

我使用的是日頻率,感謝

虎科大許教授 發文於   2025/05/19

日頻率不可以用Time,它永遠是0。

Albert3919 發文於   2025/05/19

改為1分K就可以了! 感謝您!

發表回覆
Close