// --- 第二部分:初始化與每日重設邏輯 ---
// 判斷是否為新交易日
If Date <> Date[1] Then
IsUserNewDay = true
Else
IsUserNewDay = false;
// 如果是新交易日,執行初始化
If IsUserNewDay Then Begin
// 1. 將 Inputs 的值賦給 Variables 中的 Var_ 前綴臨時變數
Var_FixedMarketOpenTime = Inp_FixedMarketOpenTime;
Var_FixedMarketCloseTime = Inp_FixedMarketCloseTime;
Var_StopLossTicks = Inp_StopLossTicks;
Var_InitialProfitTicks = Inp_InitialProfitTicks;
Var_TrailingRetraceTicks = Inp_TrailingRetraceTicks;
Var_MinFirstBarVolume = Inp_MinFirstBarVolume;
Var_OpenGapPercent = Inp_OpenGapPercent;
Var_MaxEntryPeriodMinutes = Inp_MaxEntryPeriodMinutes;
Var_ExitBeforeCloseMinutes = Inp_ExitBeforeCloseMinutes;
Var_TimeBasedExitMinutes = Inp_TimeBasedExitMinutes;
Var_Entry1TriggerBelowTicks = Inp_Entry1TriggerBelowTicks;
// 2. 重設每日狀態變數
CanTradeToday = false;
FirstBarProcessed = false;
FirstBarClosePrice = 0;
FirstBarHighPrice = 0;
AverageEntryPrice = 0;
InitialProfitTargetHit = false;
LowestPriceSincePTReached = 0;
TimeProfitTargetFirstHit = 0;
// 3. 計算 MaxEntryAllowedTime (最晚允許進場時間)
baseHours_MEL = Int(Var_FixedMarketOpenTime / 10000);
baseMinutes_MEL = Int((Var_FixedMarketOpenTime Mod 10000) / 100);
totalBaseMinutes_MEL = baseHours_MEL * 60 + baseMinutes_MEL;
newTotalMinutes_MEL = totalBaseMinutes_MEL + Var_MaxEntryPeriodMinutes;
newHours_MEL = Int(newTotalMinutes_MEL / 60);
newMinutes_MEL = newTotalMinutes_MEL Mod 60;
MaxEntryAllowedTime = newHours_MEL * 10000 + newMinutes_MEL * 100; // 秒數設為00
// 4. 計算 ForceExitMarketTime (強制出場時間)
baseHours_FET = Int(Var_FixedMarketCloseTime / 10000);
baseMinutes_FET = Int((Var_FixedMarketCloseTime Mod 10000) / 100);
totalBaseMinutes_FET = baseHours_FET * 60 + baseMinutes_FET;
newTotalMinutes_FET = totalBaseMinutes_FET - Var_ExitBeforeCloseMinutes;
newHours_FET = Int(newTotalMinutes_FET / 60);
newMinutes_FET = newTotalMinutes_FET Mod 60;
ForceExitMarketTime = newHours_FET * 10000 + newMinutes_FET * 100; // 秒數設為00
// 5. (可選) 輸出調試訊息
Print("新交易日:" + Text(Date));
Print("固定開盤時間 (Var_FixedMarketOpenTime): " + Text(Var_FixedMarketOpenTime));
Print("最晚允許進場分鐘數 (Var_MaxEntryPeriodMinutes): " + Text(Var_MaxEntryPeriodMinutes));
Print("計算後最晚進場時間 (MaxEntryAllowedTime): " + Text(MaxEntryAllowedTime));
Print("固定收盤時間 (Var_FixedMarketCloseTime): " + Text(Var_FixedMarketCloseTime));
Print("收盤前出場分鐘數 (Var_ExitBeforeCloseMinutes): " + Text(Var_ExitBeforeCloseMinutes));
Print("計算後強制出場時間 (ForceExitMarketTime): " + Text(ForceExitMarketTime));
Print("開盤跳空百分比條件 (Var_OpenGapPercent): " + Text(Var_OpenGapPercent) + "%");
// 6. 檢查每日級別的進場前置條件: 開盤價是否高於前一日收盤價N%
// 假設 OpenD(0) 是當日開盤價,CloseD(1) 是前一日收盤價
If OpenD(0) >= CloseD(1) * (1 + Var_OpenGapPercent / 100) Then
CanTradeToday = true
Else
CanTradeToday = false;
If CanTradeToday = false Then
Print("今日不滿足開盤跳空條件 (開盤價 " + Text(OpenD(0)) + " 未高於 前收 " + Text(CloseD(1)) + " 的 " + Text(Var_OpenGapPercent) + "%)。")
Else
Print("今日滿足開盤跳空條件,準備交易。");
End; // 結束 If IsUserNewDay 的 Begin 區塊
// 如果當日條件不滿足 (例如跳空不符),則不執行後續任何K棒的邏輯
If CanTradeToday = false Then Return;
7 評論