nodetrader
Version:
trader framework based on nodectp
112 lines (97 loc) • 3.98 kB
JavaScript
const logger = require('./lib/logger').ctpapp;
const ntevent = require('./lib/ntevent');
const Class = require('iguzhi/class');
function Trade(ctp, userID) {
this.$superConstructor(arguments);
}
(function() {
this.OnRspUserLogin = function(data, rsp, nRequestID, bIsLast) {
logger.info('OnRspUserLogin : %j, %j, %s, %s', data, rsp, nRequestID, bIsLast);
// 投资者结算结果确认, 做完这一步才可以进行正常的交易
this.ctp.td.ReqSettlementInfoConfirm({
BrokerID: data.BrokerID,
InvestorID: data.UserID,
ConfirmDate: data.TradingDay,
ConfirmTime: data.SHFETime
}, this.ctp.nRequestID());
// 查询交易所信息
this.ctp.td.ReqQryExchange({}, this.ctp.nRequestID());
};
this.OnRspUserLogout = function(data, rsp, nRequestID, bIsLast) {
logger.info('OnRspUserLogout : %j, %j, %s, %s', data, rsp, nRequestID, bIsLast);
};
// 请求查询交易所响应
this.OnRspQryExchange = function(data, rsp, nRequestID, bIsLast) {
ntevent.emit('/trade/OnRspQryExchange', data, bIsLast);
// 查询产品信息
if (bIsLast) {
var me = this;
// 查询交易所和查询产品同属于查询接口, 时间间隔至少为1秒
setTimeout(function() {
me.ctp.td.ReqQryProduct({}, me.ctp.nRequestID());
}, 1000);
}
};
// 请求查询产品响应
this.OnRspQryProduct = function(data, rsp, nRequestID, bIsLast) {
ntevent.emit('/trade/OnRspQryProduct', data, bIsLast);
bIsLast && ntevent.emit('/market/SubscribeMarketData', this.ctp);
};
// 报单通知
this.OnRtnOrder = function(data) {
ntevent.emit('/trade/OnRtnOrder', data);
};
// 成交通知
this.OnRtnTrade = function(data) {
// 在这里查资金状况, 根据判断发出通知和出金改密操作
// 平仓: OffsetFlag==3, 开仓: OffsetFlag==0
// data.OffsetFlag != 0 && this.ctp.td.ReqQryTradingAccount(this.ctp.getAccountByUserID(data.InvestorID), this.ctp.nRequestID());
ntevent.emit('/trade/OnRtnTrade', data);
};
// 合约交易状态通知
this.OnRtnInstrumentStatus = function(data) {
// {
// "ExchangeID": "DCE",
// "ExchangeInstID": "i",
// "SettlementGroupID": "SG01",
// "InstrumentID": "i",
// "InstrumentStatus": "5",
// "TradingSegmentSN": 0,
// "EnterTime": "20:59:00",
// "EnterReason": "1"
// }
ntevent.emit('/trade/OnRtnInstrumentStatus', data);
logger.info('OnRtnInstrumentStatus: %j', data);
};
// 报单操作请求响应
this.OnRspOrderAction = function(data, rsp, nRequestID, bIsLast) {
ntevent.emit('/trade/OnRspOrderAction', data, rsp, nRequestID, bIsLast);
};
this.OnRspQryTradingAccount = function(data, rsp, nRequestID, bIsLast) {
// logger.info('OnRspQryTradingAccount: %j, %j, %s, %s', data, rsp, nRequestID, bIsLast);
ntevent.emit('/trade/OnRspQryTradingAccount', data, rsp, nRequestID, bIsLast);
};
// 请求查询投资者持仓响应
this.OnRspQryInvestorPosition = function(data, rsp, nRequestID, bIsLast) {
ntevent.emit('/trade/OnRspQryInvestorPosition', data, rsp, nRequestID, bIsLast);
logger.info('OnRspQryInvestorPosition: %j, %j, %s, %s', data, rsp, nRequestID, bIsLast);
};
this.OnRtnFromFutureToBankByFuture = function(data) {
logger.info('OnRtnFromFutureToBankByFuture: %j', data);
};
this.OnRtnFromBankToFutureByFuture = function(data) {
logger.info('OnRtnFromBankToFutureByFuture: %j', data);
// ctp.td.ReqTradingAccountPasswordUpdate({
// BrokerID: '4040',
// AccountID: '',
// OldPassword: '',
// NewPassword: '',
// CurrencyID: ''
// }, ctp.nRequestID());
};
this.OnRspTradingAccountPasswordUpdate = function(data, rsp, nRequestID, bIsLast) {
logger.info('OnRspTradingAccountPasswordUpdate: %j, %j, %s, %s', data, rsp, nRequestID, bIsLast)
};
}).call(Trade.prototype);
Class.inherit(Trade, require('./lib/trade'));
module.exports = Trade;