GetConditionStrategy
有效策略查詢
bool GetConditionStrategy(Account, StrategyType, StkCode, lng)
回傳:
| Type | Description |
|---|---|
| bool | True:此功能執行成功;False:此功能執行異常(結果請從回應事件 OnResponse 接收) |
Input Parameters
| Name | Type | Description | Memo |
|---|---|---|---|
| Account | string | 帳號 | 證券:S+分公司代號(4)+帳號(7) 例:S98875005091 期貨:F+分公司代號(7+3)+帳號(7) 例:FF021000P001234567 |
| StkCode | string | 商品代號 | 預設為空字串 空字串則全查 |
| Lng | enumLangType | 語系 | 參考列舉物件-語系 預設為 Normal- Normal:Big5 - UTF8:UTF8 - SC:簡體中文 |
Output Parameters
ConditionStrategyResult 有效策略查詢結果
| Name | Type | Description | Memo |
|---|---|---|---|
| ConditionStrategyList | List<ConditionStrategy> | 結果清單 |
ConditionStrategy 有效策略結果物件
| Name | Type | Description | Memo |
|---|---|---|---|
| Account | string | 帳號 | |
| StrategyType | StrategyType | 策略類型 | 參考列舉物件-條件單類別 |
| StrategyNo | string | 策略編號 | |
| OrdDateTime | DateTime | 設定日期 | |
| StrategyStatus | SStatus | 條件單狀態 | 參考列舉物件-策略狀態 |
| OrdStatus | string | 委託狀態 | |
| MarketType | string | 市場別 | |
| StkCode | string | 委託商品代號 | |
| Condition | string | 條件設定 | 母子單/多條件詳細條件,請至明細查詢 |
| OrderKind | string | 委託買賣種類 | 委託種類+買賣別+委託時效 |
| Price | string | 下單價格 | |
| OrderQty | long | 設定股數 | |
| DealQty | long | 成交股數 | |
| RestQty | long | 剩餘股數 | |
| SDate | string | 有效期限(起日) | yyyy/MM/dd |
| EDate | string | 有效期限(迄日) | yyyy/MM/dd |
| OrderTypeMsg | string | 下單方式 | |
| HighPx | double | 區間高點 | 僅移動鎖利用,預設0 |
| TriggerPx | string | 觸發價格 | 僅停損利、移動鎖利、二擇一用 其他單別顯示-- |
| DetailList | List<ConditionStrategyDetail> | 查詢明細清單 |
ConditionStrategyDetail 查詢明細物件
| Name | Type | Description | Memo |
|---|---|---|---|
| DealTime | string | 成交時間 | yyyy/MM/dd |
| OrderPrice | string | 委託價格 | |
| AveragePrice | double | 成交均價 | |
| DealQty | long | 成交股數 | |
| Memo | string | 備註 | |
| TrigTime | string | 觸發時間 | HH:mm 僅母子單、多條件用 其他單別顯示-- |
| TrigCondition | string | 觸發條件 | 僅母子單、多條件用 其他單別顯示-- |
Tip
註1:資料上限200筆
註2:API不提供長效單的有效策略查詢,長效單請透過其他電子平台查詢
範例
引用元件
import os, time, datetime, struct, pathlib, sys
from datetime import datetime
from pathlib import Path
from pythonnet import load
load("coreclr")
import clr, System
##透過Clr引用系統標準函式
clr.AddReference('System.Collections')
from System.Collections.Generic import List
##宣告增加模組、DLL的路徑(windows可抓取當前路徑 Linux跟MAC需指定路徑)
sys.path.append(Path(pathlib.Path(__file__).parent.resolve()))
if sys.platform == "win32":
os.add_dll_directory(Path(pathlib.Path(__file__).parent.resolve()))
##透過Clr引用YuantaSparkAPI.dll
##pythonnet引用元件不用加附檔名
try:
clr.AddReference("YuantaSparkAPI")
except Exception as e:
print(f"Error loading YuantaSparkAPI: {e}")
from YuantaOneAPI import (YuantaSparkAPITrader, enumLogType,
enumMarketType, enumEnvironmentMode, enumStkTickSelectType)
# 建立 API 物件
objYuantaSparkAPI = YuantaSparkAPITrader()
objYuantaSparkAPI.SetLogType(enumLogType.COMMON)
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using YuantaOneAPI;
YuantaSparkAPITrader objYuantaSparkAPI = new YuantaSparkAPITrader();
string Account = "S98875005091";
string Password = "1234";
enumEnvironmentMode enumEvenMode = enumEnvironmentMode.UAT;
objYuantaSparkAPI.OnResponse += objApi_OnResponse;
objYuantaSparkAPI.SetLogType(enumLogType.ALL);
objYuantaSparkAPI.Open(enumEvenMode);
Thread.Sleep(1000);
objYuantaSparkAPI.Login(Account, Password);
Thread.Sleep(1000);
// 策略類型:1:停損利 2:移動鎖利 3:二擇一 4:母子單 5:多條件
int strategyType = 1;
string stk = " "; // 空白表示查全部,填股票代號則查指定股票
objYuantaSparkAPI.GetConditionStrategy(Account, strategyType, stk);
Thread.Sleep(2000);
Onresponse
def on_response(intMark, dwIndex, strIndex, objHandle, objValue):
try:
result = ''
match intMark:
case 0: # 系統回應資訊
result = str(objValue)
case 1: # 查詢回應資訊
match strIndex:
case 'Login':
loginResult = objValue
status = loginResult.LoginStatus
strMsgCode = status.MsgCode # 訊息代碼
strMsgContent = status.MsgContent # 訊息內容
intCount = status.Count # 筆數
result = '{0},{1},帳號筆數:{2}\r\n'.format(strMsgCode,strMsgContent, str(intCount))
if strMsgCode == '0001' or strMsgCode == '00001' or intCount > 0 :
for i in objValue.LoginList:
result += f"{i.Account},{i.Name},{i.InvestorID},{i.SellerNo}\n"
case 'GetConditionStrategy':
GResult = objValue
gResult = GResult.ConditionStrategyList
result = ''
result += "有效策略查詢結果:\r\n"
for i in range(gResult.Count):
result += '{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},{14},{15},{16},{17},{18}\r\n'.format(
gResult[i].Account,gResult[i].StrategyType,gResult[i].StrategyNo,gResult[i].OrdDateTime,gResult[i].StrategyStatus,
gResult[i].OrdStatus,gResult[i].MarketType,gResult[i].StkCode,gResult[i].Condition,gResult[i].OrderKind,
gResult[i].Price,gResult[i].OrderQty,gResult[i].DealQty,gResult[i].RestQty,
gResult[i].SDate,gResult[i].EDate,gResult[i].OrderTypeMsg,gResult[i].HighPx,gResult[i].TriggerPx)
dList = gResult[i].DetailList
for j in range(dList.Count):
result += ' {0},{1},{2},{3},{4},{5},{6}\r\n'.format(
dList[j].DealTime,dList[j].OrderPrice,dList[j].AveragePrice,dList[j].DealQty,
dList[j].Memo,dList[j].TrigTime,dList[j].TrigCondition)
if result:
print('##================================================##\n')
print(result)
except Exception as error:
print(f"處理回應時發生錯誤: {error}")
objYuantaSparkAPI.OnResponse += on_response
#測試環境帳號:UAT 正式環境:PROD
objYuantaSparkAPI.Open(enumEnvironmentMode.UAT)
time.sleep(2)
objYuantaSparkAPI.Login('S98875005091', '1234')
time.sleep(2)
objYuantaSparkAPI.GetConditionStrategy('S98875005091', 1, " ") # 策略類型: 1:停損利 2:移動鎖利 3:二擇一 4:母子單 5:多條件 6:全部
while True:
time.sleep(2)
void objApi_OnResponse(int intMark, uint dwIndex, string strIndex, object objHandle, object objValue)
{
try
{
string strResult = "";
if (intMark == 0)
{
Console.WriteLine(Convert.ToString(objValue));
return;
}
if (intMark == 1)
{
if (strIndex == "Login")
{
var result = (LoginResult)objValue;
string strMsgCode = result.LoginStatus.MsgCode;
string strMsgContent = result.LoginStatus.MsgContent;
int intCount = result.LoginStatus.Count;
strResult += $"{strMsgCode}, {strMsgContent}{Environment.NewLine}";
if (strMsgCode == "0001" || strMsgCode == "00001")
{
strResult += $"帳號筆數: {intCount}{Environment.NewLine}";
result.LoginList.ForEach(r => strResult += $"{r.Account},{r.Name},{r.InvestorID},{r.SellerNo}\r\n");
}
else
{
Account = "";
}
Console.WriteLine("\n======================");
Console.WriteLine(strResult);
Console.WriteLine("======================\n");
return;
}
if (strIndex == "GetConditionStrategy")
{
var result = (ConditionStrategyResult)objValue;
try
{
strResult += "有效策略查詢:\r\n";
result.ConditionStrategyList?.ForEach(c =>
{
strResult += $"{c.Account} {c.StrategyType.GetDescriptionName()} {c.StrategyNo} {c.OrdDateTime:yyyy/MM/dd HH:mm:ss} " +
$"{c.StrategyStatus.GetDescriptionName()} {c.OrdStatus} {c.MarketType} {c.StkCode} {c.Condition} {c.OrderKind} {c.Price} {c.OrderQty}" +
$"{c.DealQty} {c.RestQty} {c.SDate} {c.EDate} {c.OrderTypeMsg} {c.HighPx} {c.TriggerPx}\r\n";
c.DetailList.ForEach(d =>
{
strResult += $"{d.DealTime} {d.OrderPrice} {d.AveragePrice} {d.DealQty} {d.Memo} {d.TrigTime} {d.TrigCondition}\r\n";
});
});
}
catch
{
strResult = "";
}
Console.WriteLine("\n======================");
Console.WriteLine(strResult);
Console.WriteLine("======================\n");
return;
}
}
Console.WriteLine($"[{strIndex}] {Convert.ToString(objValue)}");
}
catch (Exception exc)
{
Console.WriteLine("OnResponse Error: " + exc.Message);
}
}
Response Body
{
"Result": {
"ConditionStrategyList": [
{
"Account": "S98875005091",
"StrategyType": "3",
"StrategyNo": "k263F000000044",
"OrdDateTime": "2026/04/03 09:00:00",
"StrategyStatus": "1",
"OrdStatus": "0",
"MarketType": "TWSE",
"StkCode": "2885",
"Condition": "1",
"OrderKind": "B",
"Price": "46.2",
"OrderQty": "10",
"DealQty": "0",
"RestQty": "10",
"SDate": "2026/04/03",
"EDate": "2026/04/30",
"OrderTypeMsg": "限價",
"HighPx": "47.0",
"TriggerPx": "46.2",
"DetailList": [
{
"DealTime": "2026/04/03 10:30:00",
"OrderPrice": "46.2",
"AveragePrice": "46.2",
"DealQty": "0",
"Memo": "條件未觸發",
"TrigTime": "2026/04/03 10:30:00",
"TrigCondition": "價格>=46.2"
}
]
}
]
}
}