コード例 #1
0
ファイル: MtClient.cs プロジェクト: wildbunny/MT
        public async Task PlaceOrder()
        {
            var subscription = _realmProxy.Services.GetSubject <NotifyResponse>($"user.updates.{_notificationId}")
                               .Subscribe(info =>
            {
                if (info.Account != null)
                {
                    Console.WriteLine("Account changed");
                }

                if (info.Order != null)
                {
                    Console.WriteLine("Order changed");
                }

                if (info.AccountStopout != null)
                {
                    Console.WriteLine("Account stopout");
                }

                if (info.UserUpdate != null)
                {
                    Console.WriteLine($"User update: accountAssetPairs = {info.UserUpdate.UpdateAccountAssetPairs}, accounts = {info.UserUpdate.UpdateAccounts}");
                }
            });

            var data = await _service.InitData(_token);

            try
            {
                var request = new OpenOrderRpcClientRequest
                {
                    Token = _token,
                    Order = new NewOrderClientContract
                    {
                        AccountId  = data.Demo.Accounts[0].Id,
                        FillType   = OrderFillTypeContract.FillOrKill,
                        Instrument = "BTCUSD",
                        Volume     = 1
                    }
                };

                var order = await _service.PlaceOrder(request.ToJson());

                if (order.Result.Status == 3)
                {
                    Console.WriteLine($"Order rejected: {order.Result.RejectReason} -> {order.Result.RejectReasonText}");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }

            Console.WriteLine("Press enter");
            Console.ReadLine();
            subscription.Dispose();
        }
コード例 #2
0
        public async Task <IEnumerable <OperationResult> > PlacePendingOrders(string accountId, string instrument, int numOrders, decimal currentBid)
        {
            var operations = new List <OperationResult>();

            for (var i = 0; i < numOrders; i++)
            {
                try
                {
                    var request = new OpenOrderRpcClientRequest
                    {
                        Token = _token,
                        Order = new NewOrderClientContract
                        {
                            AccountId         = accountId,
                            FillType          = OrderFillTypeContract.FillOrKill,
                            Instrument        = instrument,
                            Volume            = 1,
                            ExpectedOpenPrice = currentBid * 0.9m
                        }
                    };

                    LogInfo($"Placing order {i + 1}/{numOrders}: [{instrument}]");
                    var res = new OperationResult
                    {
                        Operation = "PlacePendingOrders",
                        StartDate = DateTime.UtcNow
                    };
                    var order = await _service.PlaceOrder(request.ToJson());

                    res.EndDate = DateTime.UtcNow;
                    res.Result  = order.Result;
                    operations.Add(res);

                    LogInfo(order.Result.Status == 3
                        ? $";{res.Duration};Order rejected: {order.Result.RejectReason} -> {order.Result.RejectReasonText}"
                        : $";{res.Duration};Order placed: {order.Result.Id} -> Status={order.Result.Status}");
                }
                catch (Exception ex)
                {
                    LogError(ex);
                }
                // Sleep TransactionFrequency
                Thread.Sleep(GetRandomTransactionInterval());
            }
            return(operations);
        }