求解,無法被宣告,語法問題

  •   306 
  • 最後發表   菜鳥韭菜想進步  2025 五月 18
菜鳥韭菜想進步 發文於   2025/05/15

 

 // --- 第二部分:初始化與每日重設邏輯 ---

// 判斷是否為新交易日

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;

 

 

排序方式: 標準 | 最新
菜鳥韭菜想進步 發文於   2025/05/15
菜鳥韭菜想進步 發文於   2025/05/15

目前遇到的問題,一段一段複製貼上,可以宣告。但是一次複製貼上整個策略腳本時,某些特並函數就無法被宣告

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

需要完整的程式碼,才有辦法幫你測試並找出問題。

菜鳥韭菜想進步 發文於   2025/05/16

// --- 策略腳本:隔日沖空 (完整整合版 v1) ---

 

// --- 第一部分:輸入參數與全域變數宣告 ---

Input: Inp_FixedMarketOpenTime(090000);   // 固定開盤時間 (HHMMSS)

Input: Inp_FixedMarketCloseTime(132500);  // 固定收盤時間 (HHMMSS)

Input: Inp_StopLossTicks(4);

Input: Inp_InitialProfitTicks(4);

Input: Inp_TrailingRetraceTicks(2);

Input: Inp_MinFirstBarVolume(500);

Input: Inp_OpenGapPercent(3);

Input: Inp_MaxEntryPeriodMinutes(30);

Input: Inp_ExitBeforeCloseMinutes(15);

Input: Inp_TimeBasedExitMinutes(60);

Input: Inp_Entry1TriggerBelowTicks(3);

 

// 全域變數

Var: Var_FixedMarketOpenTime(0);

Var: Var_FixedMarketCloseTime(0);

Var: Var_StopLossTicks(0);

Var: Var_InitialProfitTicks(0);

Var: Var_TrailingRetraceTicks(0);

Var: Var_MinFirstBarVolume(0);

Var: Var_OpenGapPercent(0);

Var: Var_MaxEntryPeriodMinutes(0);

Var: Var_ExitBeforeCloseMinutes(0);

Var: Var_TimeBasedExitMinutes(0);

Var: Var_Entry1TriggerBelowTicks(0);

 

Var: IsUserNewDay(false);

Var: MaxEntryAllowedTime(0);

Var: ForceExitMarketTime(0);

Var: CanTradeToday(false);

Var: FirstBarProcessed(false);

Var: FirstBarClosePrice(0);

Var: FirstBarHighPrice(0);

Var: AverageEntryPrice(0);

Var: InitialProfitTargetHit(false);

Var: LowestPriceSincePTReached(0);

Var: TimeProfitTargetFirstHit(0); // 記錄首次達到獲利目標的時間

 

// 時間計算所需的臨時變數

Var: baseHours_MEL(0);

Var: baseMinutes_MEL(0);

Var: totalBaseMinutes_MEL(0);

Var: newTotalMinutes_MEL(0);

Var: newHours_MEL(0);

Var: newMinutes_MEL(0);

Var: baseHours_FET(0);

Var: baseMinutes_FET(0);

Var: totalBaseMinutes_FET(0);

Var: newTotalMinutes_FET(0);

Var: newHours_FET(0);

Var: newMinutes_FET(0);

菜鳥韭菜想進步 發文於   2025/05/16

https://docs.google.com/document/d/1_2_oim-yvyS4P9lBrs83d0YEWfK-KxFpyuti57fWojg/edit?usp=sharing  

目前如果把程式碼拆開,一段一段複製上,可以編譯,但如果我複製貼上整個腳本,某特定文字,就無法被宣告,明明前面都可以編譯成功

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

你的程式使用了XS不認識的函數,例如Int,要改用floor函數。也錯誤使用MOD。另外,XS沒有全域變數,不曉得你這些全域變數要怎麼用。修改之後就可以編譯成功,請參閱附件。

附加文件

菜鳥韭菜想進步 發文於   2025/05/18

感謝許教授,萬分感謝

發表回覆
Close