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

XS 請問要如何計算時間?
- 341
- 最後發表 Albert3919 2025 五月 19
用TimeDiff或TimeAdd函數判斷。
不知道為什麼回測後交易次數完全是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;
使用什麼頻率回測?
我使用的是日頻率,感謝
日頻率不可以用Time,它永遠是0。
改為1分K就可以了! 感謝您!
6 評論