如題: 以下程式碼無法修正這個錯誤
// Indicator: 進階破底拉回訊號
// Version: 2.4 (移除 Alert, 調整手動 Abs 的 If/Else 結構)
// Description: (同前)
Inputs:
LowPeriod(5, "破底K棒判斷期數"),
DojiBodyRatio(0.1, "十字線實體佔全幅比例上限");
Variables:
// --- Conditions for the K-candle at [1] (the "target K") ---
IsActualBlackK_Prev(false),
IsDoji_Prev(false),
Cond_A_KType_Prev(false),
Cond_B1_VolSeqIncrease_Before_Prev(false),
Cond_B2_PrevKVolSmallest(false),
Cond_B_VolumePattern_Prev(false),
IsTargetPattern_PrevK(false),
// --- Conditions for current candle [0] and relationship ---
IsCurrRedK(false),
IsCurrVolGreater(false),
IsPrevKLowest(false),
IsStrongPullBack(false),
SignalCondition(false);
// 使用 CurrentBar 進行K棒數量檢查
If CurrentBar <= 4 then Begin
Return;
End;
// === Step 1: 判斷前一根K棒 K[1] 的型態與量能 ===
IsActualBlackK_Prev = Close[1] < Open[1];
Var: Body_Prev(0), Range_Prev(0), O1_C1_Diff(0);
O1_C1_Diff = Open[1] - Close[1];
// 手動實現 Abs 功能 - 改寫 If/Else 結構
If O1_C1_Diff < 0 then
Begin
Body_Prev = -O1_C1_Diff;
End
Else
Begin
Body_Prev = O1_C1_Diff;
End;
Range_Prev = High[1] - Low[1];
If Range_Prev > 0 then
IsDoji_Prev = Body_Prev <= Range_Prev * DojiBodyRatio
else
IsDoji_Prev = Body_Prev == 0;
Cond_A_KType_Prev = IsActualBlackK_Prev or IsDoji_Prev;
Cond_B1_VolSeqIncrease_Before_Prev = Volume[4] < Volume[3] and Volume[3] < Volume[2];
Cond_B2_PrevKVolSmallest = Volume[1] < Volume[4];
Cond_B_VolumePattern_Prev = Cond_B1_VolSeqIncrease_Before_Prev and Cond_B2_PrevKVolSmallest;
IsTargetPattern_PrevK = Cond_A_KType_Prev and Cond_B_VolumePattern_Prev;
// === Step 2: 判斷其他訊號條件 (破底、目前紅K、紅K放量、強勢拉回) ===
IsCurrRedK = Close > Open;
IsCurrVolGreater = Volume > Volume[1];
If CurrentBar >= LowPeriod then
IsPrevKLowest = Low[1] = Lowest(Low, LowPeriod)[1]
else
IsPrevKLowest = false;
IsStrongPullBack = Close > Close[1];
// === Step 3: 綜合所有條件形成最終訊號 ===
SignalCondition = IsTargetPattern_PrevK and
IsPrevKLowest and
IsCurrRedK and
IsCurrVolGreater and
IsStrongPullBack;
If SignalCondition then
Begin
// 暫時使用最簡單的 Plot1 形式
Plot1(1, "進階破底拉回");
// Alert() 函數已移除,因為指標腳本不支援
End;
2 評論