/// <summary> Чтение коллекции из файла в сериализованном виде. </summary> /// <param name="filename"></param> public void ReadCollectionFromFile(string filename) { Qlog.CatchException(() => { this.TimeLastSave = DateTime.Now; WFile file = new WFile(filename); if (!file.Exists()) { return; } //this.WasReadHistory = true; Stream stream = File.Open(filename, FileMode.Open); stream.Position = 0; var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); lock (syncLock) { this.ObjCollection.Collection = (List <CandleData>)binaryFormatter.Deserialize(stream); } stream.Close(); /* using (Stream stream = File.Open(filename, FileMode.Open)) * { * var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); * this.Collection = (List<CandleData>)binaryFormatter.Deserialize(stream); * }*/ }, filename, () => { return; }); }
private void MainForm_Load(object sender, EventArgs ev) { Form_MessageSignal.Parent = this; Qlog.CatchException(() => { dataGridPortfolios.Rows[0].Resizable = DataGridViewTriState.False; dataGridPositions.Rows[0].Resizable = DataGridViewTriState.False; dataGridViewStopOrders.Rows[0].Resizable = DataGridViewTriState.False; this.Trader.RegisterAllParamSec(); InitTimers(); this.InitPanelSignal(); this.InitPanelFastGap(); InitAutoOrders(); InitAutoStopLoss(); Trader.Objects.OnRun += () => { this.RegisterAllSecurity(); }; //Открытие торгового окна по найденному инструменту, по двойному щелчку dataGridFoundSec.DoubleClick += (s, e) => { foreach (DataGridViewRow row in dataGridFoundSec.SelectedRows) { if (row.Tag.NotIsNull()) { var sec = (Securities)row.Tag; this.ShowGraphicDepth(sec); } } }; //Открытие торгового окна по позиции, по двойному щелчку dataGridPositions.DoubleClick += (s, e) => { foreach (DataGridViewRow row in dataGridPositions.SelectedRows) { if (row.Tag.NotIsNull()) { var infoPos = ((string)row.Tag); if (!infoPos.Empty()) { var sec = GetSecCodeAndClass(infoPos); if (sec.NotIsNull()) { ShowGraphicDepth(sec); } } } } }; loadTextDescription(); this.WindowState = FormWindowState.Maximized; }, "", () => { MessageBox.Show("Error load form!"); }); }
/// <summary> /// Отменяет указанную стоп-заявку. /// </summary> /// <param name="sec"></param> /// <param name="OrderNumber">Номер заявки</param> /// <returns></returns> public int CancelStopOrder(Securities sec, decimal OrderNumber) { if (sec.Empty()) { return(-1); } if (OrderNumber <= 0) { return(-2); } Common.Ext.NewThread(() => { Qlog.CatchException(() => { Account acc = this.ConTerminal.Accounts.FirstOrDefault(a => !a.AccClasses.FirstOrDefault(c => c.Code == sec.Class.Code).Empty()); if (acc.Empty()) { return; } Random rnd = new Random(); //"|CLASSCODE|QJSIM|SECCODE|SBER|ORDER_KEY|3181375550|ACCOUNT|NL0011100043"; string[] Params = { "TRANS_ID", rnd.Next(1, 1000000).ToString(), "ACTION", "KILL_STOP_ORDER", "CLASSCODE", sec.Class.Code, "SECCODE", sec.Code, "ACCOUNT", acc.AccID, "STOP_ORDER_KEY", OrderNumber.ToString() }; this.SendTransaction(Params); }); }); return(-1); }
private void EventAllTrades(IEnumerable <Trade> trades) { Qlog.CatchException(() => { UpdateInfoAllTrades(trades); }); }
/// <summary> Получение формы со стаканом и графиком </summary> /// <param name="sec"></param> /// <returns></returns> public Form_GraphicDepth ShowGraphicDepth(Securities sec) { Qlog.CatchException(() => { var form = ListFormsDepth.FirstOrDefault(f => f.TrElement.Security == sec); if (form.IsNull()) { var elTr = this.DataTrading.AddOrFind(sec); if (elTr.NotIsNull()) { form = new Form_GraphicDepth(Trader, elTr, this); ListFormsDepth.Add(form); } //Инициализация закрытия form.FormClosed += (s, e) => { ListFormsDepth.Remove(form); }; } if (form.NotIsNull()) { form.Show(); form.WindowState = FormWindowState.Maximized; } return(form); }); return(null); }
private void buttonDelSign_Click(object sender, EventArgs e) { Qlog.CatchException(() => { //if (LastSecSignal.IsNull()) return; if (dataGridViewListSign.SelectedRows.NotIsNull()) { if (dataGridViewListSign.SelectedRows.Count > 0) { foreach (var row in dataGridViewListSign.SelectedRows) { if (row is DataGridViewRow) { var r = (DataGridViewRow)row; if (r.Tag is SignalMarket) { LastIndexSelectRow = r.Index - 1; SignalView.GSMSignaler.RemoveSignal((SignalMarket)r.Tag); } } } } } }); }
void EventPositions(IEnumerable <Position> pos) { Qlog.CatchException(() => { UpdateInfoPositions(); }); }
private void buttonAddSignVolume_Click(object sender, EventArgs e) { Qlog.CatchException(() => { //if (LastSecSignal.IsNull()) return; int timeFrame = 1; if (comboBoxSignTimeFrame.SelectedItem is SelectorTimeFrame) { timeFrame = ((SelectorTimeFrame)comboBoxSignTimeFrame.SelectedItem).TimeFrame; } DateMarket date = new DateMarket(DateTime.Now); var newSign = new SignalMarket() { Type = SignalMarket.TypeSignal.ByVolume, SecClass = LastSecSignal.ToString(), Volume = Convert.ToInt64(numericUpDownSignVolume.Value), TimeFrame = timeFrame, TimeAntiRepeat = date, Comment = textBoxSignComment.Text, Infinity = true }; SignalView.GSMSignaler.AddSignal(newSign); textBoxSignComment.Text = ""; }); }
/// <summary> /// Перемещение сигнала по списку /// </summary> /// <param name="isUp"></param> private void MoveSignal(bool isUp = true) { Qlog.CatchException(() => { if (dataGridViewListSign.SelectedRows.NotIsNull()) { if (dataGridViewListSign.SelectedRows.Count > 0) { foreach (var row in dataGridViewListSign.SelectedRows) { if (row is DataGridViewRow) { var r = (DataGridViewRow)row; if (r.Tag is SignalMarket) { if (isUp) { SignalView.GSMSignaler.MoveUp((SignalMarket)r.Tag); LastIndexSelectRow--; } else { SignalView.GSMSignaler.MoveDown((SignalMarket)r.Tag); LastIndexSelectRow++; } } } } } } UpdateGridSignals(); }); }
void EventPortfolio(IEnumerable <Portfolio> portf) { Qlog.CatchException(() => { UpdateInfoPortfolios(); }); }
/// <summary> Возвращает список рабочих инструментов </summary> /// <returns>Возвращает список инструментов</returns> public static IEnumerable <string> GetWorkingListSec(bool reloadList = false) { try { if (Global.ListLoadSec.NotIsNull() && !reloadList) { return(Global.ListLoadSec); } List <string> list = new List <string>(); var rootDir = Global.GetPathData(); System.IO.StreamReader openFile = new System.IO.StreamReader(rootDir + "\\" + FILE_WORKING_STOCK, true); while (!openFile.EndOfStream) { string line = openFile.ReadLine(); if (!line.Empty() && line != "") { list.Add(line); } } Global.ListLoadSec = list; return(Global.ListLoadSec); } catch (Exception e) { Qlog.Write(e.ToString()); } return(null); }
/// <summary> /// Создает стоп-заявки по кнопке /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonCreateStopOrder_Click(object sender, EventArgs e) { Qlog.CatchException(() => { decimal Price = numericUpDownStopPrice.Value; this.SetStopOrder(Price, Position.Data.CurrentNet); }); }
private void pictureBoxGraphic_Paint(object sender, PaintEventArgs e) { Qlog.CatchException(() => { var g = e.Graphics; g.CompositingQuality = CompositingQuality.GammaCorrected; GraphicStock.AllToCanvas(g); }); }
void ResetTableStopOrders() { Qlog.CatchException(() => { listRowsStopOrders.Clear(); dataGridViewStopOrders.Rows.Clear(); this.FilteringStopOrders(Trader.Objects.tStopOrders.ToArray()); }); }
/// <summary> Получает список хранящих в стеке данных </summary> /*public IEnumerable<string> DataStack * { * get * { * return this.Stack; * } * }*/ /// <summary> Добавить сообщение в стек. </summary> public void Add(string msg) { Qlog.CatchException(() => { mutexLock.WaitOne(); this.Stack.Add(msg); this.Last = msg; mutexLock.ReleaseMutex(); }); }
public Securities SearchSecurity(string secCode, string secClassCode) { Qlog.CatchException(() => { var sec = Trader.Objects.tSecurities.ToArray().FirstOrDefault(s => s.Code.Contains(secCode) && s.Class.Code.Contains(secClassCode) && !s.Class.Code.Contains("EMU")); return(sec); }); return(null); }
private void EventOrders(IEnumerable <Order> orders) { Qlog.CatchException(() => { this.ForEachWinDepth((formDepth) => { formDepth.EventAnyOrder(orders.Where(o => o.Sec == formDepth.TrElement.Security)); }); UpdateInfoOrders(orders); }); }
private void ConnectToolStripMenuItem_Click(object sender, EventArgs e) { ((ToolStripMenuItem)sender).Enabled = false; ChangeTextMainStatusBar("Загрузка базовых данных..."); Trader.Connect(); Trader.Objects.tTrades.OnNew += new MarketEvents <Trade> .eventElement(EventAllTrades); Trader.Objects.tSecurities.OnNew += new MarketEvents <Securities> .eventElement(EventNewSec); Trader.Objects.tMyTrades.OnNew += new MarketEvents <MyTrade> .eventElement(EventMyTrades); Trader.Objects.tOrders.OnNew += new MarketEvents <Order> .eventElement(EventOrders); Trader.Objects.tOrders.OnChange += new MarketEvents <Order> .eventElement(EventOrders); Trader.Objects.tStopOrders.OnNew += new MarketEvents <StopOrder> .eventElement(EventStopOrders); Trader.Objects.tStopOrders.OnChange += new MarketEvents <StopOrder> .eventElement(EventStopOrders); Trader.Objects.tPortfolios.OnNew += new MarketEvents <Portfolio> .eventElement(EventPortfolio); Trader.Objects.tPortfolios.OnChange += new MarketEvents <Portfolio> .eventElement(EventPortfolio); Trader.Objects.tPositions.OnNew += new MarketEvents <Position> .eventElement(EventPositions); Trader.Objects.tPositions.OnChange += new MarketEvents <Position> .eventElement(EventPositions); Trader.Objects.tQuote.OnChange += new MarketEvents <Quote> .eventElement(EventDepth);//ToolsQuote.eventQuote Trader.Objects.tTransaction.OnTransReply += new ToolsTrans.eventTrans((listReply) => { Qlog.CatchException(() => { if (listReply.Count() > 0) { TransReply r = listReply.Last(); //foreach (TransReply r in listReply) if (r != null) { statusStrip1.GuiAsync(() => { toolStripStatusLabel1.Text = r.ResultMsg; }); ForEachWinDepth((f) => { f.UpdateTransReply(r.ResultMsg); }); } } }); }); }
private void buttonRestartSignalPort_Click(object sender, EventArgs e) { Qlog.CatchException(() => { if (comboBoxPorts.SelectedItem.NotIsNull()) { string port = (string)comboBoxPorts.SelectedItem; SetPort(port); } SetCurrentPorts(); }); }
/// <summary> Событие новой заявки </summary> public void EventNewOrder(IEnumerable <Order> orders) { Qlog.CatchException(() => { if (TrElement.IsNull()) { return; } //Обновялем панель заявок UpdatePanelOrder(orders); }); }
void EventStopOrders(IEnumerable <StopOrder> stOrders) { Qlog.CatchException(() => { this.ForEachWinDepth((formDepth) => { formDepth.EventAnyOrder(stOrders.Where(o => o.Sec == formDepth.TrElement.Security)); }); this.FilteringStopOrders(stOrders); this.KilledSignalsByStopOrders(stOrders.ToArray()); }); }
/// <summary> /// Добавляет рабочий инструмент в конец файла /// </summary> /// <param name="secCode"></param> /// <returns></returns> public static IEnumerable <string> AddWorkingListSec(string secCode) { try { var rootDir = Global.GetPathData(); File.AppendAllText(rootDir + "\\" + FILE_WORKING_STOCK, secCode + "\r\n"); } catch (Exception e) { Qlog.Write(e.ToString()); } return(null); }
/// <summary> Обновляет список уровней </summary> private void UpdatePanelLevels(bool isNew = false) { Qlog.CatchException(() => { if (this.Levels.IsNull() || isNew) { numericUpDownPriceLevel.InitSecurity(Securities, -1000000); numericUpDownPriceLevel2.InitSecurity(Securities, -1000000); } RefrashLGridList(); UpdateGraphic(); }); }
private void ConnectToolStripMenuItem_Click(object sender, EventArgs e) { ((ToolStripMenuItem)sender).Enabled = false; ChangeTextMainStatusBar("Синхронизация с терминалом..."); Trader.Connect(); Trader.Objects.tTrades.OnNew += new Events.EventsBase <Trade> .eventElement(EventAllTrades); Trader.Objects.tOldTrades.OnNew += new Events.EventsBase <Trade> .eventElement(EventOldTrades); //Trader.Objects.tSecurities.OnNew += new Events.EventsBase<Securities>.eventElement(EventNewSec); Trader.Objects.tMyTrades.OnNew += new Events.EventsBase <MyTrade> .eventElement(EventMyTrades); Trader.Objects.tOrders.OnNew += new Events.EventsBase <Order> .eventElement(EventOrders); Trader.Objects.tOrders.OnChange += new Events.EventsBase <Order> .eventElement(EventOrders); Trader.Objects.tStopOrders.OnNew += new Events.EventsBase <StopOrder> .eventElement(EventStopOrders); Trader.Objects.tStopOrders.OnChange += new Events.EventsBase <StopOrder> .eventElement(EventStopOrders); Trader.Objects.tPortfolios.OnNew += new Events.EventsBase <Portfolio> .eventElement(EventPortfolio); //Trader.Objects.tPortfolios.OnChange += new Events.EventsBase<Portfolio>.eventElement(EventPortfolio); Trader.Objects.tPositions.OnNew += new Events.EventsBase <Position> .eventElement(EventPositions); Trader.Objects.tPositions.OnChange += new Events.EventsBase <Position> .eventElement(EventPositions); Trader.Objects.tTransaction.OnTransReply += new ToolsTrans.eventTrans((listReply) => { Qlog.CatchException(() => { if (listReply.Count() > 0) { if (OnNewReply.NotIsNull()) { OnNewReply(listReply); } Reply r = listReply.Last(); if (r.NotIsNull()) { this.LastMarketReply = r; ChangeTextMainStatusBar(r.ResultMsg); } } }); }); }
private void EventOldTrades(IEnumerable <Trade> trades) { Qlog.CatchException(() => { foreach (var t in trades) { var el = DataTrading.AddOrFind(t.Sec); if (el.NotIsNull()) { el.NewTrade(t); } } }); }
private bool SaveSignals() { return((bool)Qlog.CatchException(() => { lock (syncObj) { Stream stream = File.Open(this.GetFilename(), FileMode.Create); var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); binaryFormatter.Serialize(stream, this.Signals); stream.Close(); return true; } })); }
private void DataGridPositions_CellContentClick(object sender, DataGridViewCellEventArgs e) { Qlog.CatchException(() => { var senderGrid = (DataGridView)sender; if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex >= 0) { var sec = senderGrid.Rows[e.RowIndex].Tag != null ? (Securities)senderGrid.Rows[e.RowIndex].Tag : null; if (sec != null) { ShowGraphicDepth(sec); } } }); }
/// <summary> /// Выполняет какое либо действие для открытых окон /// </summary> /// <param name="action"></param> private void ForEachWinDepth(Action <Form_GraphicDepth> action) { Qlog.CatchException(() => { if (ListFormsDepth.NotIsNull() && ListFormsDepth.Count > 0) { foreach (var f in ListFormsDepth.ToArray()) { if (f.TrElement.NotIsNull()) { action(f); } } } }); }
private void EventNewSec(IEnumerable <Securities> listSec) { Qlog.CatchException(() => { Securities last = null; foreach (var s in listSec) { var el = DataTrading.AddOrFind(s); last = s; } if (last.NotIsNull()) { ChangeTextMainStatusBar(Trader.Objects.tSecurities.Count + " " + last.ToString()); } }); }
/// <summary> События в стакане </summary> /// <param name="listQuote"></param> /*void EventDepth(IEnumerable<Quote> listQuote) * { * Qlog.CatchException(() => * { * MThread.InitThread(() => * { * foreach (var q in listQuote) * { * var el = DataTrading.AddOrFind(q.Sec); * if (el.NotIsNull()) * { * el.LastQuote.Object = q; * } * } * }); * }); * }*/ private void EventMyTrades(IEnumerable <MyTrade> myTrades) { Qlog.CatchException(() => { foreach (var mTrade in myTrades) { this.ForEachWinDepth((formDepth) => { if (mTrade.Trade.Sec == formDepth.TrElement.Security) { formDepth.LoopControl(true); } }); } }); }