public async Task <bool> Sell(List <int> ids) { List <TradeCloseModel> closes = new List <TradeCloseModel>(); SymbolInfoSE symbol = null; while (symbol == null) { symbol = await MT4Service.Instance.GetSymbolInfoAsync(ApplicationCommon.SymbolName); } foreach (var item in ids) { closes.Add(new TradeCloseModel() { OrderTicket = item, Price = symbol.Ask }); } TradeCloseResponseModel[] responses = await Instance.TradeCloseAllAsync(closes.ToArray()); foreach (var item in responses) { if (item.ErrorCode == -1) { return(false); } } return(true); }
/// <summary> /// 更新Symbol报价 /// </summary> /// <param name="symbol"></param> private void StartSymbolUpdate(string symbol) { Task.Factory.StartNew(() => { while (true) { try { SymbolInfoSE model = Core.CustomService.Service.GetSymbolInfo(symbol); if (model == null) { continue; } this.bid = model.Bid; this.ask = model.Ask; if (priceList.Count > 10) { priceList = new ConcurrentQueue <double>(); } if (isMon == true) { //priceList.Enqueue((bid + ask) / 2); if (bid > 1000 && ((decimal)bid - (decimal)ask) <= (decimal)0.5) { priceList.Enqueue(bid); } } this.BeginInvoke((MethodInvoker)(() => { this.Text = string.Format("symbol:{0} bid:{1} ask:{2} update:{3} queue:{4}", model.Symbol, bid.ToString(), ask.ToString(), DateTime.Now, priceList.Count); })); Thread.Sleep(100); } catch (Exception ex) { _log.Error(ex); } } }); }
public async Task <bool> Buy(string loginId, int volume) { SymbolInfoSE symbol = null; while (symbol == null) { symbol = await MT4Service.Instance.GetSymbolInfoAsync(ApplicationCommon.SymbolName); } var trade = new TradeTransInfoSE() { OrderBy = int.Parse(loginId), Volume = volume * 100, StopLoss = 0, Cmd = 0, TakeProfit = 0, Order = 0, IeDeviation = 0, Symbol = ApplicationCommon.SymbolName, Price = symbol.Ask }; MT4OperResult result = await Instance.TradeTranscationOpenAsync(trade); return(result.ErrorCode != -1); }
private async void btnOpen_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(txtVlome.Text) || comCmd.SelectedItem == null || cmbSymbol.SelectedItem == null) { MessageBox.Show("请填写完整开仓信息"); } else { string cmd = comCmd.SelectedItem.ToString().Trim(); int intcmd = 0, volume = 0; double price = 0; List <TradeOpenModel> trades = new List <TradeOpenModel>(); SymbolInfoSE symbol = Core.CustomService.Service.GetSymbolInfo(cmbSymbol.SelectedItem.ToString()); if (symbol == null) { MessageBox.Show("获取Symbol信息失败,请重试!"); return; } //转化买卖方向 if (!int.TryParse(txtVlome.Text, out volume)) { MessageBox.Show("请填写正确的手数"); return; } if (cmd == "sell") { price = symbol.Bid; intcmd = 1; } else { price = symbol.Ask; } foreach (DataGridViewRow row in dataGridViewOpenData.Rows) { int loginid = Convert.ToInt32(row.Cells["LoginId"].Value); TradeOpenModel trade = new TradeOpenModel(); trade.Symbol = cmbSymbol.SelectedItem.ToString().ToUpper(); trade.Cmd = intcmd; trade.StopLoss = 0; trade.TakeProfit = 0; trade.OrderBy = loginid; trade.Volume = volume * 100; trade.Order = 0; trade.IeDeviation = 0; trade.Expiration = DateTime.Now; trade.Price = price; trades.Add(trade); } loading.ShowLoading(); TradeOpenRsponseModel[] responseModels = await Core.CustomService.Service.TradeOpenAllAsync(trades.ToArray()); loading.HideLoading(); StringBuilder sbMessage = new StringBuilder(); foreach (TradeOpenRsponseModel response in responseModels) { if (response.ErrorCode == -1) { _log.Fatal(JsonConvert.SerializeObject(response)); sbMessage.AppendFormat("Account :{0} Message:{1}", response.OpenModel.OrderBy, response.ErrorDescription); sbMessage.AppendLine(); continue; } else { _log.Info(JsonConvert.SerializeObject(response)); } } if (sbMessage.Length == 0) { MessageBox.Show("批量开仓成功!"); this.Close(); } else { MessageBox.Show("开仓失败账户:\r\b" + sbMessage.ToString()); } } }