Пример #1
0
        // **********************************************************************
        // *                        Управление заявками                         *
        // **********************************************************************

        string SendOrder(char op, int price, int quantity, out int tid)
        {
            if (connected)
            {
                tid = ++transId;

                Trans2Quik.Result r = Trans2Quik.SEND_ASYNC_TRANSACTION(
                    "TRANS_ID=" + tid +
                    "; ACCOUNT=" + cfg.u.QuikAccount +
                    "; CLIENT_CODE=" + cfg.u.QuikClientCode + "//" + cfg.FullProgName +
                    "; SECCODE=" + secCode +
                    "; CLASSCODE=" + classCode +
                    "; ACTION=NEW_ORDER; OPERATION=" + op +
                    "; PRICE=" + Price.GetRaw(price) +
                    "; QUANTITY=" + quantity +
                    ";",
                    out error, msg, msg.Capacity);

                if (r == Trans2Quik.Result.SUCCESS)
                {
                    return(null);
                }
                else
                {
                    tid = 0;
                    return(msg.Length > 0 ? Trim(msg.ToString()) : r + ", " + error);
                }
            }
            else
            {
                tid = 0;
                return(NoConnectionText);
            }
        }
Пример #2
0
        // **********************************************************************

        public string KillOrder(long oid)
        {
            if (connected)
            {
                transId++;

                Trans2Quik.Result r = Trans2Quik.SEND_ASYNC_TRANSACTION(
                    "TRANS_ID=" + transId +
                    "; SECCODE=" + secCode +
                    "; CLASSCODE=" + classCode +
                    "; ACTION=KILL_ORDER; ORDER_KEY=" + oid +
                    ";",
                    out error, msg, msg.Capacity);

                if (r == Trans2Quik.Result.SUCCESS)
                {
                    return(null);
                }
                else
                {
                    return(msg.Length > 0 ? Trim(msg.ToString()) : r + ", " + error);
                }
            }
            else
            {
                return(NoConnectionText);
            }
        }
Пример #3
0
        // **********************************************************************

        void StatusCallback(Trans2Quik.Result evnt, int err, string m)
        {
            switch (evnt)
            {
            case Trans2Quik.Result.QUIK_DISCONNECTED:
                connecting.Change(0, cfg.QuikTryConnectInterval);
                break;

            case Trans2Quik.Result.DLL_DISCONNECTED:
                connected = false;
                connecting.Change(0, cfg.QuikTryConnectInterval);
                break;
            }
        }
Пример #4
0
        // **********************************************************************

        void StatusCallback(Trans2Quik.Result evnt, int err, string m)
        {
            switch (evnt)
            {
            case Trans2Quik.Result.QUIK_DISCONNECTED:
                SetStatus(Broken, m);
                connecting.Change(0, cfg.TryConnectInterval);
                break;

            case Trans2Quik.Result.DLL_DISCONNECTED:
                SetStatus(Broken, "Связь с терминалом разорвана");
                connected = false;
                connecting.Change(0, cfg.TryConnectInterval);
                break;
            }
        }
Пример #5
0
        // **********************************************************************
        // *                             Соединение                             *
        // **********************************************************************

        void TryConnect(Object state)
        {
            if (working)
            {
                try
                {
                    if (
                        Trans2Quik.SET_CONNECTION_STATUS_CALLBACK(StatusCallback, out error, msg, msg.Capacity) != Trans2Quik.Result.SUCCESS
                        ||
                        Trans2Quik.SET_TRANSACTIONS_REPLY_CALLBACK(TransactionReplyCallback, out error, msg, msg.Capacity) != Trans2Quik.Result.SUCCESS
                        )
                    {
                        mgr.ConnectionUpdate(TermConnection.None, msg.ToString());
                        return;
                    }

                    Trans2Quik.Result result = Trans2Quik.CONNECT(cfg.u.QuikFolder, out error, msg, msg.Capacity);
                    if (result != Trans2Quik.Result.SUCCESS && result != Trans2Quik.Result.ALREADY_CONNECTED_TO_QUIK)
                    {
                        mgr.ConnectionUpdate(TermConnection.None, msg.ToString());
                        return;
                    }
                }
                catch (Exception e)
                {
                    mgr.ConnectionUpdate(TermConnection.None, e.Message);
                    return;
                }

                connected = true;

                if (Trans2Quik.UNSUBSCRIBE_ORDERS() != Trans2Quik.Result.SUCCESS ||
                    Trans2Quik.UNSUBSCRIBE_TRADES() != Trans2Quik.Result.SUCCESS ||
                    Trans2Quik.SUBSCRIBE_ORDERS(cfg.u.ClassCode, cfg.u.SecCode) != Trans2Quik.Result.SUCCESS ||
                    Trans2Quik.START_ORDERS(OrderStatusCallback) != Trans2Quik.Result.SUCCESS ||
                    Trans2Quik.SUBSCRIBE_TRADES(cfg.u.ClassCode, cfg.u.SecCode) != Trans2Quik.Result.SUCCESS ||
                    Trans2Quik.START_TRADES(TradeStatusCallback) != Trans2Quik.Result.SUCCESS)
                {
                    mgr.ConnectionUpdate(TermConnection.Partial, "Соединение установлено неполностью");
                    return;
                }

                mgr.ConnectionUpdate(TermConnection.Full, "Соединение с сервером QUIK установлено");
            }

            connecting.Change(Timeout.Infinite, Timeout.Infinite);
        }
Пример #6
0
        // **********************************************************************
        // *                               Заявки                               *
        // **********************************************************************

        void TransactionReplyCallback(
            Trans2Quik.Result r,
            int err,
            int rc,
            int tid,
            double order_id,
            string msg)
        {
            if (r == Trans2Quik.Result.SUCCESS && rc == 3)
            {
                mgr.ActionReply(tid, (long)order_id, null);
            }
            else
            {
                mgr.ActionReply(tid, (long)order_id, msg.Length == 0 ? r + ", " + err : msg.ToString());
            }
        }
Пример #7
0
        // **********************************************************************
        // *                               Заявки                               *
        // **********************************************************************

        void TransactionReplyCallback(
            Trans2Quik.Result r,
            int err,
            int rc,
            int tid,
            double order_id,
            string msg)
        {
            if (TraderReplyHandler != null)
            {
                if (r == Trans2Quik.Result.SUCCESS && rc == 3)
                {
                    TraderReplyHandler(tid, (long)order_id, null);
                }
                else
                {
                    TraderReplyHandler(tid, (long)order_id, msg.Length > 0 ? Trim(msg) : r + ", " + err);
                }
            }
        }