void HuobiApp::submitLimitOrder(const char *symbol, OrderSide side, double price, double amount, const char *userId) { int ts = timestamp(); FIX44::NewOrderSingle message; message.set(Account(_publicKey)); if (userId) message.set(ClOrdID(userId)); else message.set(ClOrdID("HuobiOrder")); message.set(Price(price)); message.set(MinQty(amount)); message.set(OrdType(OrdType_LIMIT)); message.set(Symbol(symbol)); message.set(Side(side == OrderBuy ? Side_BUY : Side_SELL)); message.set(TransactTime()); message.setField(IntField(957, ts)); message.setField(StringField(958, _publicKey)); char str[1024]; sprintf(str, "access_key=%s&amount=%s&coin_type=%d&created=%d&method=%s&price=%s&secret_key=%s", _publicKey.c_str(), float2str(amount).c_str(), getCoinType(symbol), ts, side == OrderBuy ? "buy" : "sell", float2str(price).c_str(), _privateKey.c_str()); message.setField(StringField(959, md5::MD5String(str, false))); Session *session = Session::lookupSession(_sessionID); if (session) session->send(message); }
void FieldMap::addGroup( int field, const FieldMap& group, bool setCount ) { QF_STACK_PUSH(FieldMap::addGroup) FieldMap * pGroup = new FieldMap( group.m_fields.key_comp() ); *pGroup = group; m_groups[ field ].push_back( pGroup ); Groups::iterator i = m_groups.find( field ); if( setCount ) setField( IntField( field, i->second.size() ) ); QF_STACK_POP }
void HuobiApp::requestOrderStatus(const char *symbol, const char *orderId, OrderSide side) { int ts = timestamp(); FIX44::OrderStatusRequest message; message.set(Account(_publicKey)); message.set(ClOrdID(orderId)); message.set(Symbol(symbol)); message.set(Side(side == OrderBuy ? Side_BUY : Side_SELL)); message.setField(IntField(957, ts)); message.setField(StringField(958, _publicKey)); char str[1024]; sprintf(str, "access_key=%s&coin_type=%d&created=%d&id=%s&method=order_info&secret_key=%s", _publicKey.c_str(), getCoinType(symbol), ts, orderId, _privateKey.c_str()); message.setField(StringField(959, md5::MD5String(str, false))); Session *session = Session::lookupSession(_sessionID); if (session) session->send(message); }
std::string& Message::toString( std::string& str, int beginStringField, int bodyLengthField, int checkSumField ) const { int length = bodyLength( beginStringField, bodyLengthField, checkSumField ); m_header.setField( IntField(bodyLengthField, length) ); m_trailer.setField( CheckSumField(checkSumField, checkSum(checkSumField)) ); #if defined(_MSC_VER) && _MSC_VER < 1300 str = ""; #else str.clear(); #endif /*small speculation about the space needed for FIX string*/ str.reserve( length + 64 ); m_header.calculateString( str ); FieldMap::calculateString( str ); m_trailer.calculateString( str ); return str; }