我是使用內建技術分析寫的程式碼,在執行時會一直跳出"目標部位與目前部位相同且價格不變 以下指令不予執行"但這段程式有使用回測功能進行檢測是有正常交易的一旦加入判斷式之後會導致整體績效大幅降低,想請問是否還要加入判斷式?還是說就一直讓他出現"目標部位與目前部位相同且價格不變 以下指令不予執行"這樣會有甚麼影響嗎?
1.需要加入判斷式嗎?
2.若不加判斷式會有什麼問題?
3.若要加入判斷式請問有哪些程式碼可以參考呢?
目標部位與目前部位相同且價格不變 以下指令不予執行
- 347
- 最後發表 Jhin 2024 七月 10
會有這種錯誤,一般是條件沒寫好,造成系統一直下相同的委託單。若一直出現這個問題,XQ可能會中斷策略執行。你把程式貼上來,我來幫忙診斷。
// 宣告參數 input: FastLength(12, "DIF短期期數"), SlowLength(26, "DIF長期期數"), MACDLength(9, "MACD期數"); variable: difValue(0), macdValue(0), oscValue(0); // 資料讀取筆數設定 SetTotalBar((maxlist(FastLength,SlowLength,6) + MACDLength) * 3 + 8); MACD(weightedclose(), FastLength, SlowLength, MACDLength, difValue, macdValue, oscValue); // 多方進場策略:DIF-MACD由負轉正。出場策略:DIF-MACD由正轉負。 if oscValue Crosses Above 0 then setposition(1); if oscValue Crosses below 0 then setposition(0); // 宣告變數 Input: Length(14, "期數"), AvgLength(9, "平滑期數"), OverSold(-100, "超賣值"); Variable: cciValue(0), cciMAValue(0); // 資料讀取筆數設定 SetTotalBar(maxlist(AvgLength + Length + 1,6) + 11); cciValue = CommodityChannel(Length); cciMAValue = Average(cciValue, AvgLength); // 多方進場策略:平滑CCI死亡交叉超賣值。出場策略:平滑CCI黃金交叉超賣值。 if cciMAValue Crosses Below OverSold then setposition(1); if cciMAValue Crosses above OverSold then setposition(0);
再麻麻煩您查看
我發現兩個問題:
(1)你用兩個SetTotalBar,只有第二個會被執行。不論第一個SetTotalBar(113),或是第二個SetTotalBar(35),筆數都太少,計算的MACD數值是錯誤的。
(2)之所以一直跳出"目標部位與目前部位相同且價格不變 以下指令不予執行",主要是你四個下單的條件,都沒有用position進行控制。改成下面的寫法就不會有這個問題:
if position=0 and oscValue Crosses Above 0 then setposition(1);
if position>0 and oscValue Crosses below 0 then setposition(0);
if position=0 and cciMAValue Crosses Below OverSold then setposition(1);
if position>0 and cciMAValue Crosses above OverSold then setposition(0);
4 評論