DIF-MACD 負轉正 正轉負

  •   839 
  • 最後發表   vic  2021 七月 09
vic 發文於   2019/01/26

範本裡頭

// DIF-MACD 負翻正

//

input: FastLength(12), SlowLength(26), MACDLength(9);

variable: difValue(0), macdValue(0), oscValue(0);

 

SetTotalBar((maxlist(FastLength,SlowLength,6) + MACDLength) * 3 + 8);

 

SetInputName(1, "DIF短期期數");

SetInputName(2, "DIF長期期數");

SetInputName(3, "MACD期數");

 

MACD(weightedclose(), FastLength, SlowLength, MACDLength, difValue, macdValue, oscValue);

Ret = oscValue Crosses Above 0;  (負轉正)

Ret = oscValue Crosses Below 0;  (正轉負)

 

這樣警示進出場寫這樣回測出來結果不對  需要賣出後買進 買進後賣出寫在一起同一隻

if oscvalue crosses below 0 then ret = 1;

if oscvalue crosses Above 0 then ret = 1;

 

 

排序方式: 標準 | 最新
XQ小幫手 發文於   2019/01/28

Hi vic,

您好,可以使用 inputkind 函數來控制此腳本為進場或出場,

然後撰寫 if 判斷該腳本設定為進場腳本時,走進場策略;該腳本設定為出場腳本時,走出場策略,

最後跑回測的時候,同一個腳本,記得設定好進/出場控制參數,

這樣回測結果應該就會比較像是「做多:買進後賣出 賣出後買進寫在一起同一隻」

 

注意:以下程式碼範例不適用在雷達盤中洗價,可以先自行嘗試改寫,

若有問題歡迎提出討論,以利給予撰寫方向。

 

警示腳本範例程式碼如下:

input:BSSwitch("Buy","進出場控制",inputkind:=dict(["進場","Buy"],["出場","Sell"]));

//DIF-MACD 負轉正 買進
//DIF-MACD 正轉負 賣出

input: FastLength(12), SlowLength(26), MACDLength(9);
variable: difValue(0), macdValue(0), oscValue(0);

SetTotalBar((maxlist(FastLength,SlowLength,6) + MACDLength) * 3 + 8);

SetInputName(1, "DIF短期期數");
SetInputName(2, "DIF長期期數");
SetInputName(3, "MACD期數");

MACD(weightedclose(), FastLength, SlowLength, MACDLength, difValue, macdValue, oscValue);

if BSSwitch = "Buy" then
    Ret = oscValue Crosses Above 0;

if BSSwitch = "Sell" then
    Ret = oscValue Crosses below 0;

 

範例的回測相關設定可以參考附檔:回測報告儲存檔案,

以上方向供您參考,謝謝。

附加文件

RYAN K 發文於   2021/07/08

小編您好 用您編譯過後的程式碼會出現問題在RET的部分無法編譯,想請問該怎麼調整

 

 

XQ小幫手 發文於   2021/07/09

Hello RYAN K,

 

此為警示腳本之範例,小幫手測試編譯是正常的。

猜測您應該是使用了其他腳本來編譯。

如果您是用交易腳本的話:

if BSSwitch = "Buy" then

    Ret = oscValue Crosses Above 0;

if BSSwitch = "Sell" then

    Ret = oscValue Crosses below 0;

修改為

if BSSwitch = "Buy" and position = 0 and filled = 0 and oscValue Crosses Above 0 then setposition(1, market); //如果沒有部位且達成條件的話買進1口

if BSSwitch = "Sell" and position > 0 and filled > 0 and oscValue Crosses below 0 then setposition(0, market); //如果有多方部位且達成條件的話將部位調整為0

附上編譯成功的圖。

您亦可以參考此頁面,有關於XS和自動交易功能的介紹。

附加文件

發表回覆
Close