下面是我想要做的一個當沖策略(第一次做當沖策略,希望能跟大家多多交流),遇到一些問題:
1. 抓3分K棒的低點做為進場的條件,但看起來進場的條件好像都不是在跌破3分K的低點後進場的
=>我在想會不會是抓低點時出現問題,導致抓到錯誤的低點,進而在錯誤的時間點進場
2. 想請教利用交易系統的回測,在商品那邊選擇選股的話,他是會用昨日的條件去做選股再進行回測嗎,還是會直接用當天的資料去回測呢
3. 這個策略我目前是打算使用1分K做為交易的主要頻率~
// ============================================================
// 漲停跳空失敗 當沖放空策略 (1分K專用)
// 進場:昨漲停 + 今開高門檻 + 跌破第一根3分K低點 + 10:00前
// 出場:SwingHigh動態追蹤止損(收盤突破) / 2倍風險止盈(盤中觸價)
// ============================================================
input: _MaxAmount(10, "單筆上限金額(萬元)"); // 進場資金上限,單位萬元
input: _GapPct(3, "開高門檻(%)"); // 今開相對昨收漲幅門檻
input: _CutTime(100000, "最後進場時間(HHMMSS)"); // 僅此時間前允許新開倉
input: _TpMult(2, "止盈倍數"); // 目標=止損風險的幾倍
var: intrabarpersist _FirstLow(0); // 開盤後第一根已收完3分K低點
var: intrabarpersist _StopPrice(0); // 動態追蹤止損價
var: intrabarpersist _EntryPrice(0); // 進場價
var: intrabarpersist _TargetPrice(0); // 止盈目標價
var: intrabarpersist _Lots(0); // 進場張數
var: _NewSwing(0); // 暫存最近SwingHigh
// ------------------------------
// 0. 每日開盤重置狀態 (跨日第一根K棒清空前一日殘留)
// ------------------------------
if date <> date[1] then begin
_FirstLow = 0;
_StopPrice = 0;
_EntryPrice = 0;
_TargetPrice = 0;
_Lots = 0;
end;
// ------------------------------
// 1. 取開盤後第一根已收完的3分K低點
// [1]=已收完的前一根3分K;Time>090300 確保第一根3分K已收完
// ------------------------------
if _FirstLow = 0 and GetField("最低價", "3")[1] > 0 and Time > 090300 then
_FirstLow = GetField("最低價", "3")[1];
// ------------------------------
// 2. 前置條件檢查
// ------------------------------
// 昨日漲停:昨收 = 昨日漲停價 (漲停價直接取欄位,勿自算)
condition1 = Close[1] = GetField("漲停價", "D")[1];
// 今日開高:今開相對昨收漲幅 >= 門檻
condition2 = (OpenD(0) - Close[1]) / Close[1] * 100 >= _GapPct;
// ------------------------------
// 3. 進場判斷 (市價放空)
// ------------------------------
if position = 0
and condition1
and condition2
and _FirstLow > 0
and Close < _FirstLow // 跌破第一根3分K低點
and Time < _CutTime // 10:00:00前
then begin
// 張數計算:無條件捨去,以張為單位;為0則不進場
_Lots = IntPortion(_MaxAmount * 10000 / (Close * 1000));
if _Lots > 0 then begin
_EntryPrice = Close;
// 初始止損 = 最近SwingHigh(左右各3根確認) 往上1檔
// AddSpread 依台股價格級距自動加tick,勿自算
_NewSwing = SwingHigh(High, 3, 3, 3, 1);
if _NewSwing > 0 then
_StopPrice = AddSpread(_NewSwing, 1)
else
_StopPrice = AddSpread(High, 1); // 找不到轉折高的保底
// 止盈目標 = 進場價 - (止損 - 進場價) * 倍數
_TargetPrice = _EntryPrice - (_StopPrice - _EntryPrice) * _TpMult;
SetPosition(-_Lots * 1000);
end;
end;
// ------------------------------
// 4. 持倉中:動態追蹤止損 (只收緊,不放寬)
// ------------------------------
if position <> 0 then begin
_NewSwing = SwingHigh(High, 3, 3, 3, 1);
// 出現更低的新SwingHigh 才下修止損
if _NewSwing > 0 and AddSpread(_NewSwing, 1) < _StopPrice then
_StopPrice = AddSpread(_NewSwing, 1);
end;
// ------------------------------
// 5. 出場判斷 (先止盈、後止損)
// 止盈:盤中觸價即出(用Low);止損:收盤確認才出(用Close)
// ------------------------------
if position <> 0 then begin
if Low <= _TargetPrice then
SetPosition(0)
else if Close >= _TargetPrice then
SetPosition(0);
end;

這張圖是他抓的其中一檔進出場的資料,有蠻多都是類似的情況的,想麻煩大大幫我看看是不是哪裡做錯了
1 評論