是否可於交易的程式編輯內使用GetQuote("委買1"),抓到試搓時間的委買價格

  •   392 
  • 最後發表   hello10282000  2024 十二月 31
hello10282000 發文於   2024/12/26

請問是否可於交易的程式編輯內使用GetQuote("委買1"),抓到試搓時間的委買價格

程式如下,這樣是不是可以在08:59:45秒得到("委買1")資料,進而去判斷是否自動進場買入

// 設定變數
value1 = GetField("Close", "D")[1]; // 前日收盤價
value3 = value1 * 1.03; // 前日股價的3%

// 取得當日委買及委賣價格
value4 = GetQuote("買進1", "D"); // 委買價格
value5 = GetQuote("賣出1", "D"); // 委賣價格

// 計算委買委賣平均價
value6 = (value4 + value5) / 2; // 委買委賣平均價

// 以金額計算交易數量
input: ordersize_w(250, "每筆交易金額(萬)");

var: order_price(0); // 預期委託價格
var: order_qty(0); // 換算後數量

// 進場條件
if Position = 0 and Filled = 0
   and CurrentTime = 085945 // 08:59:45
   and value6 > value3 // 判斷委買委賣平均價是否大於前日股價的3%
then begin
    order_price = AddSpread(value2, 1); // 設定漲停價
    order_qty = (ordersize_w * 10000) / (order_price * 1000); // 計算交易數量
    SetPosition(order_qty, order_price); // 以指定價格買入指定數量
end;

排序方式: 標準 | 最新
虎科大許教授 發文於   2024/12/26

目前試撮期間XQ只提供試撮成交日期、試撮成交時間、試撮成交價及試撮成交量。沒有試撮的委買及委賣相關資料。

hello10282000 發文於   2024/12/26

虎科大教授好

是否我直接改成如下

 

value4 = GetQuote("試搓成交價"); // 試搓成交價
再進場條件那邊修改如下,即可於我想要的時間去作出後續判斷呢?

 

/ /進場條件

 

if Position = 0 and Filled = 0

 

and CurrentTime = 085945 // 08:59:45

 

 

and value4 > value3 // 判斷委買委賣平均價是否大於前日股價的3%

虎科大許教授 發文於   2024/12/26

(1)試撮成交價:q_SimulatedTradePrice

(2)記得啟動自動洗價。

hello10282000 發文於   2024/12/26

虎科大許教授

收到,感謝。

hello10282000 發文於   2024/12/31

虎科大許教授 您好

因為這幾天測試了一下程式後(有啟動自動洗價),發現程式還是不會於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;



//這兩天測試程式碼,結果也沒有觸發去執行程式,以今天為例(亞航),程式今天應該要可以執行,卻沒有觸發,實在是不知道為什麼

虎科大許教授 發文於   2024/12/31

漲停價不應該用昨天收盤價乘以1.1。以亞航為例,昨天收盤35.8,乘以1.1是39.38。今天的漲停價是39.35,價格不可能來到39.38,因此不會觸發訊號。漲停價應該用value2=getField("漲停價","D");

設定自動洗價,還需要注意設定的洗價時段是否就是你要交易的時段,且間隔秒數是否合適,例如用1秒鐘洗價一次。若設定合宜,則

value4=q_SimulatedTradePrice; 應該就是洗價時候的撮合成交價。

hello10282000 發文於   2024/12/31

感謝 虎科大許教授
那我將再將程式加入Floor在計算張數那邊(無條件捨去為整數),這樣也比較不會出現小數點的張數,感謝。

虎科大許教授 發文於   2024/12/31

下單的張數加不加Floor來去除小數點,都是一樣的,系統會自動處理。

hello10282000 發文於   2024/12/31

原來是這樣,感謝虎科大許教授。

發表回覆
Close