虎科大許教授 您好
因為這幾天測試了一下程式後(有啟動自動洗價),發現程式還是不會於08:59:45去得到試搓價格,然後於08:59:55進行漲停價掛單,後來我修改了一下程式碼如下(於09:00:00收到開盤價後,經過漲跌幅判斷,確定後進場):
// 設定變數
value1 = GetField("Close", "D")[1]; // 前日收盤價
value2 = value1 * 1.1; // 漲停價
value3 = value1 * 1.03; // 前日股價的3%
// 買入股價的上限值
value5 = value1 * 1.055; // 前日股價的5.5%
// 出場變數
value6 = GetField("Open", "D"); // 當日開盤價
// 以金額計算交易數量
input: ordersize_w(250, "每筆交易金額(萬)");
var: order_price(0); // 預期委託價格
var: order_qty(0); // 換算後數量
var: condition_met(False); // 判斷條件是否成立
// 移動停利設定
input: drawback_percent(1, "最高點回跌(%)");
// 執行交易
if Position = 0 and Filled = 0
and CurrentTime = 090000 // 開盤後的第一根 K 棒
and value6 > value3 // 判斷開盤價是否大於前日股價的3%
and value6 < value5 // 判斷開盤價是否小於前日股價的5.5%
then begin
order_price = AddSpread(value2, 1); // 設定漲停價
order_qty = (ordersize_w * 10000) / (order_price * 1000); // 計算交易數量
SetPosition(order_qty, order_price); // 以指定價格買入指定數量
Print("Buy order placed at price: ", order_price, ", quantity: ", order_qty);
end;
// 移動停利
if Position <> 0 and Filled <> 0 then begin
var: intrabarpersist myMax(0);
if High > myMax then myMax = High;
if Close <= myMax * (1 - drawback_percent / 100) then SetPosition(0, market);
Print("Stop loss triggered at price: ", Close);
end else if Close < value6 then begin
SetPosition(0, MARKET); // 分K收盤小於開盤價就全部市價賣出
Print("Sell order placed at market price due to Close < Open");
end else if Close = value2 then begin
SetPosition(0, MARKET); // 分K收盤等於漲停價以市價全部賣出
Print("Sell order placed at market price due to Close = Limit Up");
end else if CurrentTime = 132300 then begin
SetPosition(0, MARKET); // 收盤前市價賣出
Print("Sell order placed at market price before market close");
end;
//這兩天測試程式碼,結果也沒有觸發去執行程式,以今天為例(亞航),程式今天應該要可以執行,卻沒有觸發,實在是不知道為什麼
9 評論