想請教各位大神,這個交易策略為什麼沒有觸發,是交易條件太嚴格嗎?還是語法有錯誤
// ------ 腳本類型:技術指標腳本 ------
// 策略邏輯: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) 分支
2 評論