運用交易語法撰寫進場取得未平倉成本出場

2021-03-19 10:03:18
交易語法上線後,大家都躍躍欲試想運用自己的策略來撰寫交易語法,猜想大家最常碰到的問題應該是怎麼撰寫自動進出場的交易動作語法,所以此篇文章將使用期貨與股票的兩個簡易案例,來介紹撰寫方向提供給大家參考。

期貨商品範例

  • 執行商品:台股指數近月(FITXN*1)
  • 執行頻率:1 分鐘
  • 交易帳號:期-模擬交易(內建)-01
  • 其他自動交易策略設定:皆為預設
  • 進場條件:當「目前商品的『無』預期部位,且收盤價 - 開盤價 >= 上漲點數」則進場掛一筆「市價買進1口」的委託單。
  • 出場條件:當「目前商品的『有』預期部位,且商品目前的未平倉成本 - 收盤價 >= 跌破點數」則出場掛一筆「市價平倉持有口數」的委託單。
期貨交易腳本語法的撰寫架構與說明如下:
input:_GoalPrice(30,"上漲點數"),_StopLost(50,"跌破點數");
var:InCondition(false),OutCondition(false);

//僅支援分鐘
if barfreq <> "Min" then raiseRunTimeError("僅支援分鐘");

//InCondition為進場條件,當「收盤價 - 當日開盤價 >= 上漲點數」時,InCondition為True,否則為False。
InCondition = close - GetField("開盤價", "D") >= _GoalPrice;

//OutCondition為出場條件,當「商品目前的未平倉成本 - 收盤價 >= 跌破點數」時,OutCondition為True,否則為False。
OutCondition = filledAvgPrice - close >= _StopLost;

//當「目前商品的預期部位是0,且進場條件為Ture」則將目前商品的預期部位設為1,委託價格使用市價。
//也就是送出一筆「市價買進1口」的委託單。
if position = 0 and InCondition then setposition(1,market);

//當「目前商品的預期部位非0,且出場條件為Ture」則將目前商品的預期部位設為0,委託價格使用市價。
//也就是送出一筆「市價平倉持有口數」的委託單。
if position <> 0 and OutCondition then setposition(0,market);

股票商品範例

  • 執行商品:元大台灣50(0050)
  • 執行頻率:1 分鐘
  • 交易帳號:證-模擬交易(內建)-01
  • 其他自動交易策略設定:皆為預設
  • 進場條件:當「目前商品的『無』預期部位,且K棒為實體紅K(close > open)」則進場掛一筆「市價買進1口」的委託單。
  • 出場條件:當「目前商品的『有』預期部位,且商品的損益(%)達停損停利」則出場掛一筆「市價平倉持有口數」的委託單。
股票交易腳本語法的撰寫架構與說明如下:
input:_StopProfit(5,"停利X%"),_StopLost(5,"停損Y%");
var:plratio(0),InCondition(false),OutCondition(false);

//僅支援分鐘
if barfreq <> "Min" then raiseRunTimeError("僅支援分鐘");

//plratio為「計算損益(%)」
//請注意:因無庫存時「FilledAvgPrice」為0,此時會有分母為0計算有誤的狀況,故需要判斷當FilledAvgPrice非0時,運算損益。
//註:FilledAvgPrice是「商品目前的未平倉成本」
if FilledAvgPrice <> 0 then
 plratio = 100 * (Close - FilledAvgPrice) / FilledAvgPrice
else
 plratio = 0;

//InCondition為進場條件,當K棒為實體紅K「close > GetField("開盤價", "D")」則InCondition為True,否則為False。
InCondition = close > GetField("開盤價", "D");

//OutCondition為出場條件,當「損益(%)達停損停利」時,OutCondition為True,否則為False。
OutCondition = plratio >= _StopProfit or plratio <= -1 * _StopLost;

//當「目前商品的預期部位是0,且進場條件為Ture」則將目前商品的預期部位設為1,委託價格使用市價。
//也就是送出一筆「市價買進1張」的委託單。
if position = 0 and InCondition then setposition(1,market);

//當「目前商品的預期部位非0,且出場條件為Ture」則將目前商品的預期部位設為0,委託價格使用市價。
//也就是送出一筆「市價平倉持有張數」的委託單。
if position <> 0 and OutCondition then setposition(0,market);