当前位置:网站首页>Hello CTP (IV) - CTP transaction API
Hello CTP (IV) - CTP transaction API
2022-06-25 04:03:00 【Tianshan old demon】
One 、CTP transaction API brief introduction
1、CTP transaction API brief introduction
CThostFtdcTraderApi transaction API The interface contains CThostFtdcTraderApi and CThostFtdcTraderSpi, adopt CThostFtdcTraderApi towards CTP Send operation request , adopt CThostFtdcTraderSpi receive CTP Operation response .
2、CTP API Transaction process
(1) establish CTP API example
CThostFtdcTraderApi *pTradeApi = CThostFtdcTraderApi::CreateFtdcTraderApi(dirName);
API Instances are used to initiate various requests , Such as connecting to the server 、 The user login 、 declaration form 、 cancel the order 、 Query position 、 Query funds, etc .
(2) establish CTP API Callback instance
CFtdcTradeSpi *pTradeSpi = new CFtdcTradeSpi(pTradeApi, this);
Developers need to implement the last issue CThostFtdcTraderSpi class , Override class methods , Handle CTP All kinds of data returned by the server .
(3) Register callback instance
pTradeApi->RegisterSpi(pTradeSpi);
(4) Connect to the front-end server
pTradeApi_->RegisterFront((char *)serverAddr_.c_str());
pTradeApi_->Init();
After the connection request is sent ,OnFrontConnected() Will respond to the request .
(5) Identity Authentication
Before the user logs in ,CTP The server needs to authenticate the client , The client can only request login after passing the authentication .
Whether the identity authentication function is enabled can be configured on the settlement platform used by the business personnel of the futures company . Futures companies can choose to turn off the identity authentication function , Then the client does not have to authenticate . Otherwise, the futures company needs to maintain the authentication code of the client program on the settlement platform (AuthCode).
The function interface used to request identity authentication is ReqAuthenticate( Request authentication ) and OnRspAuthenticate( The authentication response returned by the server ).
(6) The user login
OnRspAuthenticate() The login function can be called inside the function pTradeApi->ReqUserLogin() Complete the user login operation .
After successful login ,OnRspUserLogin In the parameter pRspUserLogin Contains a leading number (FrontID)、 Session number (SessionID)、 Maximum entry number (MaxOrderRef).
Prefix number : The number of the front-end machine to which the client is connected .
Session number : The connection session number of the client connected to the front-end processor .
Maximum entry number : Each entry has a unique and non repetitive number (OrderRef). If the client does not assign a value , Server automatic assignment ; If the client assigns a value , Can be obtained from MaxOrderRef Step up one by one , Prevent duplication with other entries , You can also specify a unique non duplicate number according to the time stamp .
adopt ReqUserLogout Log out of the system , Will break the existing link first , Re create a new link , After logging in again SessionID Reset , therefore MaxOrderRef Will come back from 0 Count .
(7)Topic subscribe
OnRspUserLogin() In function subscription Topic After completion , You can place orders normally .
pTradeApi_->SubscribePublicTopic(THOST_TERT_QUICK);
pTradeApi_->SubscribePrivateTopic(THOST_TERT_QUICK);
CTP Public flow and private flow provide three subscription methods ,
TERT_RESTART: Retransmission from this trading day .
TERT_RESUME: The sequel received since last time .
TERT_QUICK: Send only the logged in content .
As domestic futures need to confirm the settlement results of investors when they log in for the first time within the trading day , Therefore, it is necessary to request the investor to confirm the settlement result when the login is successful .
int ReqSettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, int nRequestID);
(8) Declaration operation
virtual int ReqOrderInsert(CThostFtdcInputOrderField *pInputOrder, int nRequestID) = 0;
The declaration operation is as follows :
CThostFtdcInputOrderField reqField;
memset(&reqField, 0, sizeof(CThostFtdcInputOrderField));
// Entry conditions
pTradeApi_->ReqOrderInsert(&reqField, orderInsertReqId_);
You need to fill in the trading direction correctly 、 Open up 、 close a position 、 market price 、 Fixed price 、 Number of consignments 、 Entrusted price, etc , call ReqOrderInsert() declaration form .
Call function ReqOrderInsert After the declaration , If in CTP The end-to-end capital verification and warehouse inspection can not pass , The client will call back the function OnRspOrderInsert and OnErrRtnOrderInsert; If it passes, call back once first OnRtnOrder.
CTP Then report the report to the exchange , If the exchange fails to pass the capital verification, it will return an error to CTP, The client will call back OnRtnOrder; If the exchange checks correctly, it will call back again OnRtnOrder.
InvestorID: Investor code
InstrumentID: Contract code
Direction: Business direction
CombOffsetFlag: Kaiping logo
CombHedgeFlag: Speculative hedging identification
LimitPrice: Price
VolumeTotalOriginal: Number
TimeCondition: Validity type
OrderPriceType: Price terms of the entry
VolumeCondition: Volume type
MinVolume: Minimum volume
ContingentCondition: The trigger condition
StopPrice: Stop-loss price
IsSwapOrder: Interchange single mark
ExchangeID: Exchange code
(9) Entry response
void CFtdcTradeSpi::OnRspOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
CTP To simplify logic , In fact, it will not be recalled after the declaration , Will be in CTP Callback when the check fails .
(10) Order status return
void CFtdcTradeSpi::OnRtnOrder(CThostFtdcOrderField *pOrder);
When the delegate status changes , Will be recalled . Common delegation statuses include : Unknown 、 No deal is still in the queue 、 Some deals are still in the queue 、 Complete deal, etc . One entry , If the quantity is large , Generally, not all transactions are completed at one time , It will be sold in multiple batches , So it will be called back again and again . With constant callback , The number of delegates returned each time 、 volume 、 Data such as remaining quantity will change constantly .
(11) Transaction return
void CFtdcTradeSpi::OnRtnTrade(CThostFtdcTradeField *pTrade);
Each piece of information returned is transaction information , Including trading volume 、 The closing price 、 Transaction costs, etc .
- CTP Declaration instruction
1、OrderPriceType Order price type
Fixed price (LimitPrice): The execution price must be equal to or better than the limit price specified in the entrustment , That is, only match with the counterparty whose price in the matching queue is equal to or better than the pricing ,CTP identification THOST_FTDC_OPT_LimitPrice.
market price (AnyPrice): Entrustment can be executed at any price available in the market , That is, it can be matched with any counterparty entry in the matching queue ,CTP identification THOST_FTDC_OPT_AnyPrice.
Best price (BestPrice): Only with the top in the matchmaking queue 1 Match up with the counterparty's quotation at a price ,CTP identification THOST_FTDC_OPT_BestPrice.
Five market prices (FiveLevelPrice): There is a certain price protection belt , Only with the top of the matchmaking queue 5 Match up with the counterparty's quotation at a price ,CTP identification THOST_FTDC_OPT_FiveLevelPrice.
2、TimeCondition Time condition
THOST_FTDC_TC_IOC: Do it now , Otherwise, cancel
THOST_FTDC_TC_GFS: This section is valid
THOST_FTDC_TC_GFD: Effective on that day
THOST_FTDC_TC_GTC: Valid until revoked
THOST_FTDC_TC_GFA: Call auction is valid
3、VolumeCondition Volume conditions
Any number (AV): Execute... In the maximum number possible ,CTP identification THOST_FTDC_VC_AV.
Minimum quantity (MV): Delegates contain a minimum number that must be executed , If the execution is unsuccessful, the delegation is completely cancelled ,CTP identification THOST_FTDC_VC_MV.
All the quantity (CV): The entrustment must be executed in full according to the specified quantity , If the execution is unsuccessful, the delegation is completely cancelled ,CTP identification THOST_FTDC_VC_CV.
- ContingentCondition The trigger condition
THOST_FTDC_CC_Immediately: The declaration is valid immediately .
THOST_FTDC_CC_Touch: Stop loss orders .
THOST_FTDC_CC_TouchProfit: Profit stop sheet .
THOST_FTDC_CC_ParkedOrder: Pre paid Bill . Embedded bill refers to embedded in CTP Server side , It requires non trading time to report , Automatically report to the exchange after the opening of the market .
5、 Price limit list
LIMIT Ordinary limit order : After placing the order , Within a specified time frame ( This section is valid 、 Valid on the same day, etc ), Waiting for the number of orders to be completed .
FAK(Fill And kill): After the declaration is received by the exchange , The exchange will scan the market , How many hands can be traded immediately under the current market, that is, how many hands can participate in the matching transaction , The remaining quantity shall be withdrawn immediately .
FOK(Fill Or Kill): After the declaration is received by the exchange , The exchange will scan the market , If under the current market conditions, all orders can be traded immediately , Then the entry will participate in the matching transaction , Otherwise, it shall be revoked immediately .
3、 ... and 、 declaration form
1、 declaration form
The declaration refers to the passing of the order to buy and sell futures contracts API Function to CTP Counter ,CTP After receiving the order, the counter will conduct a series of checks , After passing the inspection, it will be sent to the exchange .
CTP There is no need to write declaration flow control logic in the whole declaration process , because CTP There is no limit on the frequency of entry , But there are query frequency restrictions ; Eason trading API There is no frequency limit , The declaration has a frequency limit .
Call function ReqOrderInsert After the declaration , If in CTP End verification failed , The client will call back the function OnRspOrderInsert and OnErrRtnOrderInsert; If CTP If the client verification passes, it will call back once first OnRtnOrder,CTP Then report the report to the exchange ; If the exchange fails the verification , Return an error to CTP, The client will call back OnRtnOrder; If the exchange passes the verification , Will call back again OnRtnOrder.
virtual int ReqOrderInsert(CThostFtdcInputOrderField *pInputOrder, int nRequestID) = 0;
CThostFtdcInputOrderField Used to fill in the entry parameters ,nRequestID Number used to fill in the order request .
BrokerID: Brokerage code
InvestorID: Investor code
ExchangeID: Exchange code ,CFFEX、CZCE、DCE、INE、SHFE
InstrumentID: Contract code
OrderPriceType: Entry price type
Direction: Business direction
LimitPrice: Price
VolumeTotalOriginal: Number
CombOffsetFlag: Combined leveling sign ,THOST_FTDC_OF_Open It's opening ,THOST_FTDC_OF_Close It's closing / Yesterday ,THOST_FTDC_OF_CloseToday It's Pingjin .
CombHedgeFlag: Portfolio speculative hedging flag
ContingentCondition: The trigger condition , Usually it is THOST_FTDC_CC_Immediately, That is, the declaration is valid immediately .THOST_FTDC_CC_Touch and THOST_FTDC_CC_TouchProfit It's a stop loss and profit order , You need the support of the exchange to fill in .THOST_FTDC_CC_ParkedOrder It's an embedded Bill .
TimeCondition: Validity type ,THOST_FTDC_TC_GFD Means effective on that day , The order will be hung on the exchange until the transaction or closing is automatically cancelled .THOST_FTDC_TC_IOCIOC Yes, complete immediately, or cancel
VolumeCondition: Volume type
MinVolume: Minimum volume .
ForceCloseReason: Qiang Ping's reason
Fixed price GFD single :
CThostFtdcInputOrderField orderfield = { 0};
strcpy(orderfield.BrokerID, "9999");
strcpy(orderfield.InvestorID, "000001");
strcpy(orderfield.ExchangeID, “SHFE”);
strcpy(orderfield.InstrumentID, "au1912");
orderfield.OrderPriceType = THOST_FTDC_OPT_LimitPrice;
orderfield.Direction = THOST_FTDC_D_Sell;
orderfield.LimitPrice = 400.0;
orderfield.VolumeTotalOriginal = 10;
orderfield.ContingentCondition = THOST_FTDC_CC_Immediately;
orderfield.CombOffsetFlag[0] = THOST_FTDC_OF_Open;
orderfield.CombHedgeFlag[0] = THOST_FTDC_HF_Speculation;
orderfield.TimeCondition = THOST_FTDC_TC_GFD ;
orderfield.VolumeCondition = THOST_FTDC_VC_AV;
orderfield.ForceCloseReason = THOST_FTDC_FCC_NotForceClose;
int ret = g_pTradeapi->ReqOrderInsert(&orderfield, 0);
Fixed price FOK single :
CThostFtdcInputOrderField orderfield ={ 0};
strcpy(orderfield.BrokerID, "9999");
strcpy(orderfield.InvestorID, "000001");
strcpy(orderfield.ExchangeID, “SHFE”);
strcpy(orderfield.InstrumentID, "au1912");
orderfield.OrderPriceType = THOST_FTDC_OPT_LimitPrice;
orderfield.Direction = THOST_FTDC_D_Sell;
orderfield.LimitPrice = 400.0;
orderfield.VolumeTotalOriginal = 10;
orderfield.ContingentCondition = THOST_FTDC_CC_Immediately;
orderfield.CombOffsetFlag[0] = THOST_FTDC_OF_Open;
orderfield.CombHedgeFlag[0] = THOST_FTDC_HF_Speculation;
orderfield.TimeCondition = THOST_FTDC_TC_IOC;
orderfield.VolumeCondition = THOST_FTDC_VC_CV;
orderfield.ForceCloseReason = THOST_FTDC_FCC_NotForceClose;
int ret = g_pTradeapi->ReqOrderInsert(&orderfield, 0);
2、 Orders index
Entry request and entry return usually use the following fields to determine an order .
FrontID: Prefix number
SessionID: Session number
OrderRef: Entry reference
ExchangeID: Exchange code
TraderID: Exchange trader code
OrderLocalID:CTP Local entry number
OrderSysID: Exchange Order No
(1)FrontID + SessionID + OrderRef
FrontID yes CTP Background prefix , SessionID Is the number of the session link , The login success report will return FrontID and SessionID, This session does not change in the connection .
OrderRef Return the corresponding field filled in when the customer's declaration request , If not ,CTP The field is automatically incrementally assigned . therefore , You can use... Every time you report FrontID + SessionID + OrderRef Form a key Deposit a unique entry in the local id , When a return is returned , The original request entry can be found according to the three fields in the return , Update the current status of the original request entry with the status in the return . During cancellation, three fields can be filled into the fields corresponding to the request for cancellation .
When the customer's order is closed ,CTP Will push OnRtnTrade Transaction return , There is no... In the transaction return FrontID and SessionID Field , Only OrderRef Field .
(2)ExchangeID + TraderID + OrderLocalID
OrderLocalID yes CTP Order number , The customer cannot change .OrderLocalID stay ExchangeID、TraderID Monotonically increasing when two fields are fixed , Each return is returned to the customer .
3)ExchangeID + OrderSysID
OrderSysID It is the unique number assigned by the exchange to the order when the entry is reported to the exchange . The first arrival of the entry request CTP, After passing the risk control, return to the... Page 1 individual OnRtnOrder Return , It has not been reported to the exchange at this time , So in return OrderSysID It's empty . When canceling, you can use OrderSysID Specify order .
There are two schemes for order index maintenance in development :
(1) Use... When reporting FrontID + SessionID + OrderRef Maintain the entry , When the first 2 individual OnRtnOder After you come back , Find the original entry , take OrderSysID Fill in the local entry , Use later ExchangeID + OrderSysID Maintenance order .
(2) Local maintenance OrderRef Field , In the current trading day, no matter how many links have been monotonously increasing , Per basis OrderRef You can determine the only entry . But Multi Strategy and multi link transactions may have problems , It's going to involve multiple API Between links OrderRef Fields are synchronized with each other .
3、 Correct return
After the declaration request , If CTP If the check is passed, the correct return will be returned , Only callback OnRtnOrder function ( If there is a transaction, it will be recalled separately OnRtnTrade function ). The callback parameter type is CThostFtdcOrderField.
OrderStatus: Entry status
OrderSubmitStatus: Declaration submission status
StatusMsg: State information
VolumeTotalOriginal: The original quantity is the entry
VolumeTraded: Number of transactions today , Cumulative order volume
VolumeTotal: The remaining quantity , The remaining outstanding quantity of the order
OrderStatus The order status is as follows :
THOST_FTDC_OST_AllTraded: All transactions
THOST_FTDC_OST_PartTradedQueueing: Some deals are still in the queue THOST_FTDC_OST_PartTradedNotQueueing: Some transactions are not in the queue
THOST_FTDC_OST_NoTradeQueueing: No deal is still in the queue
THOST_FTDC_OST_NoTradeNotQueueing: No deal is not in the queue
THOST_FTDC_OST_Canceled: cancel the order
THOST_FTDC_OST_Unknown: Unknown
THOST_FTDC_OST_NotTouched: Not yet triggered
THOST_FTDC_OST_Touched: Triggered
4、CTP Rejection
If the declaration is CTP Direct rejection , Callbacks OnRspOrderInsert and OnErrRtnOrderInsert function .
OnRspOrderInsert Is the callback received by the current reporter ,OnErrRtnOrderInsert It is the callback that all session links under the account will receive .
5、 The exchange refused to order
The Declaration passed CTP After the counter risk control inspection is reported to the exchange , Rejected by the exchange , Only callback functions OnRtnOrder, Orders will be cancelled passively .
Return OnRtnOrder Medium OrderStatus by THOST_FTDC_OST_Canceled cancel the order ,OrderSubmitStatus by THOST_FTDC_OSS_InsertRejected The declaration has been rejected , It means that the order is rejected by the exchange ( In the state of passive cancellation ),StatusMsg There is a specific reason for rejection of the transaction in the field .
6、 Transaction return
Declaration return means that the status of each declaration is updated CTP Send back to API User messages , Transaction return refers to every transaction of an order CTP The transaction notification message sent back to the user . If there is a transaction, it must correspond to the change of entry status , Therefore, there will be an order return before the transaction return .
CThostFtdcTradeField The fields are as follows :
ExchangeID: Exchange code
TradeID: Transaction No
Direction: Business direction
TradeID: The number of each transaction by the exchange , Because the two transaction numbers of each other's counterparties at the time of transaction are the same in exchanges other than Zheng Shangsuo , So we need to add Direction Field .
OrderRef: Entry reference
OrderSysID: Exchange entry No
TraderID: Exchange trader code
OrderLocalID:CTP Local entry number
InstrumentID: Contract code
Direction: Business direction
OffsetFlag: Kaiping sign
Price: Closing price
Volume: Number of deals
Four 、 cancel the order
1、 cancel the order
call ReqOrderAction after , If in CTP End verification passed , It will call back OnRtnOrder And submit the cancellation order to the exchange ; If in CTP End verification failed , It will call back OnRspOrderAction and OnErrRtnOrderAction. If the exchange passes the verification , Through OnRtnOrder Return the cancellation return ; If the exchange fails the verification , Through OnRtnOrder and OnErrRtnOrderAction Return to the exchange to cancel the order and refuse to return .
virtual int ReqOrderAction(CThostFtdcInputOrderActionField * pInputOrderAction, int nRequestID) = 0;
CTP The return of the declaration OrderSysID It's right aligned , Cancellation must be filled in with CTP The consistency of return .OrderSysID The significant bits are 12 Bytes , When canceling the order, fill in the right alignment .
If at the time of reporting OrderRef Assign values to customers themselves , The same value shall be assigned when canceling the order . If you fill in the blank when reporting , be CTP Will automatically assign ,OrderRef Also right aligned . When canceling the order, you should also fill in the right alignment as it is .
2、 Error returns
If the cancellation is CTP Or the exchange refuses to order , Callbacks OnRspOrderAction or OnErrRtnOrderAction function , Print the parameters in the callback function pRspInfo You can know the reason for rejection .
3、 Correct return
If the cancellation request passes CTP Check , Back to the first 1 individual OnRtnOrder For the declaration at CTP The present state of , And the last time I received OnRtnOrder Agreement . Back to the first 2 individual OnRtnOrder Indicates that the entry has been successfully cancelled , In the cancellation return OrderSubmitStatus by THOST_FTDC_OSS_Accepted,OrderStatus by THOST_FTDC_OST_Canceled.
5、 ... and 、CTP Inquire about
1、 Fund inquiry
virtual int ReqQryTradingAccount(CThostFtdcQryTradingAccountField *pQryTradingAccount, int nRequestID) = 0;
virtual void OnRspQryTradingAccount(CThostFtdcTradingAccountField *pTradingAccount, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
2、 Position inquiry
virtual int ReqQryInvestorPosition(CThostFtdcQryInvestorPositionField *pQryInvestorPosition, int nRequestID) = 0;
CThostFtdcQryInvestorPositionField No required fields , Fill in the fields InstrumentID, If you just want to check the position of a contract , You can just fill in nstrumentID Field ; If you don't fill in any fields , Query all position records of the current account .
CThostFtdcQryInvestorPositionField qrypositionfield = {0};
pTradeApi->ReqQryInvestorPosition(&qrypositionfield, 0);
Position query response function :
void CFtdcTradeSpi::OnRspQryInvestorPosition(CThostFtdcInvestorPositionField *pInvestorPosition, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
The position data under the account will not be returned all at once , But return in batches , Developers need to make summary calculations according to the multi space direction .
The returned result is in the first parameter pInvestorPosition in , Parameter type is CThostFtdcInvestorPositionField, Yes 6 One field can distinguish the only position record , As the key value of position record (Key).
InstrumentID: Contract code
BrokerID: Brokerage code
InvestorID: Investor code
PosiDirection: Long and short positions ,PosiDirection Is enumerated values ,'2' Indicates a long position ;'3' Indicates a short position , Positions in different directions of the same contract are CTP Is returned through different records .
HedgeFlag: Speculative hedging flag
PositionDate: Position date ,‘1’ Indicates the position on the current trading day ;‘2’ It means history warehouse ( Yesterday warehouse ).
Last issue 、 The energy center divides today's warehouse and yesterday's warehouse into two records , according to PositionDate You can distinguish between today's warehouse and yesterday's warehouse , according to PosiDirection Distinguish between short and long positions .
Today's and yesterday's positions on other futures exchanges are on a record , according to PosiDirection Distinguish between short and long positions .
Position: Total position under current key value , Changes as customers open and close their positions
TodayPosition: The number of new positions today under the current key value , With the change of customers' opening positions today
YdPosition: Yesterday position under current key value , Is a static value , Is the historical position of the contract at the beginning of the current trading day , It will not decrease as the customer closes yesterday's position ; The current actual yesterday's position is Position-TodayPosition.
LongFrozen: Long freeze
ShortFrozen: Short freeze
Freezing refers to the quantity of orders that have been submitted but not traded , For long positions , Long freeze refers to the number of newly opened long positions that are not traded , Short position freeze refers to the number of open long position orders ; Short positions are the opposite .
3、 Delegate query
virtual int ReqQryOrder(CThostFtdcQryOrderField *pQryOrder, int nRequestID) = 0;
virtual void OnRspQryOrder(CThostFtdcOrderField *pOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
4、 Transaction inquiry
virtual int ReqQryTrade(CThostFtdcQryTradeField *pQryTrade, int nRequestID) = 0;
virtual void OnRspQryTrade(CThostFtdcTradeField *pTrade, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
边栏推荐
- [team learning] SQL programming language notes - task04
- 严重的PHP缺陷可导致QNAP NAS 设备遭RCE攻击
- 驻波比计算方法
- 《Missing Parts》NFT 作品集第 5 系列上线 The Sandbox 市场平台
- Monitoring pancakeswap new token
- web3.eth. Getpendingtransactions() returns null?
- Standing at the center of the storm: how to change the engine of Tencent
- Winxp kernel driver debugging
- ZABBIX installation pit avoidance Guide
- DevEco Studio 3.0编辑器配置技巧篇
猜你喜欢

Deveco studio 3.0 editor configuration tips

Crawler crawls Sina Weibo data

Lu Qi invests in quantum computing for the first time

(超详细onenet TCP协议接入)arduino+esp8266-01s接入物联网平台,上传实时采集数据/TCP透传(以及lua脚本如何获取和编写

1.初识半音阶口琴

Crawler grabs the idea of reading on wechat

老叶的祝福

opencv 红色区域在哪里?

BSC parsing input data of transaction

BGP biplane architecture
随机推荐
opencv是开源的吗?
《悉达多》:一生之书,可以时常反刍
Demonstration of combination of dream CAD cloud map and GIS
Development of trading system (III) - risk control system
Mstp+vrrp+ospf implements a three-tier architecture
About PLSQL error initialization failure
現在,耳朵也要進入元宇宙了
Disassembly of Weima prospectus: the electric competition has ended and the intelligent qualifying has just begun
cesium 图形标注圆形、正方形、多边形、椭圆等
MySQL modifies and deletes tables in batches according to the table prefix
北大换新校长!中国科学院院士龚旗煌接任,15岁考上北大物理系
“语法糖”——我的编程新知
OpenSUSE environment PHP connection Oracle
【Harmony OS】【ARK UI】ETS 上下文基本操作
智慧风电:数字孪生 3D 风机智能设备运维
墨天轮访谈 | IvorySQL王志斌—IvorySQL,一个基于PostgreSQL的兼容Oracle的开源数据库
【Rust投稿】从零实现消息中间件(6)-CLIENT
数学分析_笔记_第3章:极限
Windows 2003 64 bit system PHP running error: 1% is not a valid Win32 Application
zabbix的安装避坑指南