策略問題解方

  •   292 
  • 最後發表   菜鳥韭菜想進步  2025 五月 11
菜鳥韭菜想進步 發文於   2025/05/10

想請教各位大神,這個交易策略為什麼沒有觸發,是交易條件太嚴格嗎?還是語法有錯誤

// ------ 腳本類型:技術指標腳本 ------

// 策略邏輯:5,10,20MA在60MA下,MACD零軸下金叉且OSC持續翻正(至少3次),紅K收盤站上5,10,20MA時觸發訊號

 

// --- 參數設定 ---

Inputs:

    ShortMAPeriod1(5),       // 短週期均線1

    ShortMAPeriod2(10),      // <<---- 修改:短週期均線2 (原20改為10)

    ShortMAPeriod3(20),      // <<---- 修改:短週期均線3 (原60改為20)

    LongMAPeriod(60),        // <<---- 修改:長週期均線 (原120改為60)

    MACD_FastLength(12),     // MACD 快線EMA週期

    MACD_SlowLength(26),     // MACD 慢線EMA週期

    MACD_SignalLength(9),    // MACD 訊號線 (DEA/DEM) EMA週期

    OSC_Sustain_Count(3),    // MACD柱狀體大於0的持續期數

    SignalMarkerOffsetFactor(0.5); // 訊號標記繪製在低點下方多少百分比的價格距離

 

// --- 變數宣告 ---

Variable:

    MA5(0), MA10(0), MA20(0), MA60(0), // 修改變數名以對應新的均線週期

    DIF_Value(0), MACD_Line_Value(0), OSC_Value(0),

    Is_OSC_Positive_Sustained(False),

    Is_ShortMAs_Below_LongMA(False),      // 修改變數名

    Is_MACD_Below_Zero(False),

    Is_DIF_Above_MACDLine(False),

    Is_Strong_RedK_Breakout_ShortMAs(False), // 修改變數名

    PlotMarker_Y_Position(0);

 

// --- 計算移動平均線 ---

MA5 = Average(Close, ShortMAPeriod1);

MA10 = Average(Close, ShortMAPeriod2); // <<---- 修改

MA20 = Average(Close, ShortMAPeriod3); // <<---- 修改

MA60 = Average(Close, LongMAPeriod);   // <<---- 修改

 

// --- 計算 MACD ---

DIF_Value = XAverage(Close, MACD_FastLength) - XAverage(Close, MACD_SlowLength);

MACD_Line_Value = XAverage(DIF_Value, MACD_SignalLength);

OSC_Value = DIF_Value - MACD_Line_Value;

 

// --- 判斷條件 ---

Begin

    Variable: idx(0), countOSC(0);

 

    countOSC = 0;

    For idx = 0 to OSC_Sustain_Count - 1 Begin

        If OSC_Value[idx] > 0 Then

            countOSC = countOSC + 1;

    End;

    If countOSC >= OSC_Sustain_Count Then

        Is_OSC_Positive_Sustained = True

    Else

        Is_OSC_Positive_Sustained = False;

 

    // 均線背景條件: 5, 10, 20MA 仍在 60MA 下方

    Is_ShortMAs_Below_LongMA = MA5 < MA60 and MA10 < MA60 and MA20 < MA60; // <<---- 修改

 

    // MACD條件

    Is_MACD_Below_Zero = DIF_Value < 0 and MACD_Line_Value < 0;

    Is_DIF_Above_MACDLine = DIF_Value > MACD_Line_Value;

 

    // 強勢紅K突破條件: 紅K收盤站上5MA, 10MA, 20MA

    If Close > Open and

       Close > MA5 and

       Close > MA10 and // <<---- 修改

       Close > MA20 Then // <<---- 修改

        Is_Strong_RedK_Breakout_ShortMAs = True

    Else

        Is_Strong_RedK_Breakout_ShortMAs = False;

End;

 

// --- 設定繪圖標記的位置 和 繪製訊號標記 ---

If  Is_ShortMAs_Below_LongMA and

    Is_MACD_Below_Zero and

    Is_DIF_Above_MACDLine and

    Is_OSC_Positive_Sustained and

    Is_Strong_RedK_Breakout_ShortMAs Then

    Begin

        PlotMarker_Y_Position = Low * (1 - SignalMarkerOffsetFactor/100);

 

        // ** 嘗試使用最少的參數調用 Plot1,只傳遞 Value 和 Name **

        // ** 您需要從 XQ Help (xshelp.xq.com.tw) 中確認 Plot1 是否可以這樣調用 **

        // ** 以及如何正確設定顏色、樣式(圓圈/點)、寬度 **

        Plot1(PlotMarker_Y_Position, "訊號");

    End

Else

    NoPlot(1); // ** 確認 XQ 是否支援 NoPlot(1) 或類似指令 **

                // 如果不支援,則移除此 Else NoPlot(1) 分支

 

排序方式: 標準 | 最新
虎科大許教授 發文於   2025/05/10

(1)你的程式是可以繪製指標的。只是指標的標記並不正確。

(2)MACD指標,系統有,直接使用就好。不要自己運算。

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

好的,我重新試試看,感謝您

發表回覆
Close