SlaveAccountModel() { if (!isInDesign) { syncronizeScheduler = new Schedulers.ThreadScheduler((s, e) => Log = e.Exception); } LocalTradesList = new ListCollectionView(LocalTrades = new ObservableCollection <Trade>()); AbsentTradesList = new ListCollectionView(AbsentTrades = new ObservableCollection <Trade>()); fwLocal = new FXW(this.CoreFX, t => { throw new NotImplementedException(); }); tradeRequestManager = new TradeRequestManager(fwLocal); CoreFX.LoggedIn += (s, e) => { //fwLocal.TradeAdded += fw_TradeAded; fwLocal.PriceChanged += fwLocal_PriceChanged; fwLocal.OrderRemoved += DoOrderRemoved; fwLocal.Error += fwLocal_Error; RaisePropertyChanged(() => IsLoggedIn); Log = new Exception("Account " + TradingAccount + " logged in."); }; CoreFX.LoginError += exc => { Log = exc; RaisePropertyChanged(() => IsLoggedIn); }; CoreFX.LoggedOff += (s, e) => { Log = new Exception("Account " + TradingAccount + " logged out."); RaisePropertyChanged(() => IsLoggedIn); //fwLocal.TradeAdded -= fw_TradeAded; fwLocal.PriceChanged -= fwLocal_PriceChanged; fwLocal.OrderRemoved -= DoOrderRemoved; fwLocal.Error -= fwLocal_Error; }; }
void OpenTrade(FXW fw, string pair, bool buy, int lots, double limit, double stop, Trade masterTrade) { string serverTradeID = masterTrade.Id; Func <string, bool> tradeExists = id => fw.GetTrade(serverTradeID) != null; if (!tradeExists(serverTradeID)) { if (masterTradesPending.Contains(serverTradeID) || masterTradesSynced.Contains(serverTradeID)) { return; } masterTradesPending.Add(serverTradeID); PendingOrder po = null; Action <object, RequestEventArgs> reqiesFailedAction = (s, e) => { if (po != null && e.RequestId == po.RequestId) { masterTradesPending.Remove(serverTradeID); po = null; Log = new Exception(e.Error); } }; Action <Order> orderRemovedAvtion = order => { var o = order.FixStatus; }; Action <object, ErrorEventArgs> errorAction = (s, e) => { if (serverTradeID == e.Remark) { masterTradesPending.Remove(serverTradeID); po = null; Log = e.Error; } }; var rfh = new EventHandler <RequestEventArgs>(reqiesFailedAction); var orh = new OrderRemovedEventHandler(orderRemovedAvtion); var erh = new EventHandler <ErrorEventArgs>(errorAction); try { fw.RequestFailed += rfh; fw.OrderRemoved += orh; fw.Error += erh; po = fw.FixOrderOpen(pair, buy, lots, limit, stop, serverTradeID); //if (po != null) pendingTrade.GetUnKnown().ErrorMessage = "Waiting for " + po.RequestId; var done = SpinWait.SpinUntil( () => { Thread.Sleep(100); return(masterTradesPending.Contains(serverTradeID) && po != null && tradeExists(serverTradeID)); }, TimeSpan.FromSeconds(secondsToWaitForTrade)); if (tradeExists(serverTradeID)) { masterTradesSynced.Add(serverTradeID); } } catch (Exception exc) { Log = exc; } finally { masterTradesPending.Remove(serverTradeID); fw.RequestFailed -= rfh; fw.OrderRemoved -= orh; fw.Error -= erh; } } OpenTradeSchedulers.Remove(serverTradeID); }
private void Window_Initialized(object sender, EventArgs e) { Dispatcher.Invoke(new Action(() => { cmbPair.ResetText(); cmbLotsToTradeBuy.ResetText(); cmbLotsToTradeSell.ResetText(); if (pair == "") { MessageBox.Show("Pair is not selected!"); return; } if (isMainWindow) { System.IO.File.Delete(logFileName); } fw = new Order2GoAddIn.FXCoreWrapper(app.FXCM); chartingWindow = new HedgeHog.Charting(this.Name, fw); corridorsWindow = new Corridors(this.Name); chartingWindow.TicksChanged += chartingWindow_TicksChanged; chartingWindow.PriceGridChanged += ProcessPrice; chartingWindow.PriceGridError += chartingWindow_PriceGridError; dataGrid1.AutoGeneratingColumn += new EventHandler <Microsoft.Windows.Controls.DataGridAutoGeneratingColumnEventArgs>(dataGrid1_AutoGeneratingColumn); RaisePropertyChanged(() => title); })); //Window w = sender as Window; //w.Height = Properties.Settings.Default.MainWindowSize.Height; //w.Width = Properties.Settings.Default.MainWindowSize.Width; //w.Top = Properties.Settings.Default.MainWindowPos.Y; //w.Left = Properties.Settings.Default.MainWindowPos.X; }
private void btnLogin_Click(object sender, RoutedEventArgs e) { if (_coreFx.LogOn("D31538164001", "8802", true)) { _fw = new O2G.FXCoreWrapper(_coreFx, t => { throw new NotImplementedException(); }); _fw.Error += new EventHandler <HedgeHog.Shared.ErrorEventArgs>(_fw_Error); _fw.OrderError += new EventHandler <O2G.OrderErrorEventArgs>(_fw_OrderError); Log = "Logged in."; } }
public void MyTestInitialize() { core.LoginError += new Order2GoAddIn.CoreFX.LoginErrorHandler(core_LoginError); o2g = new FXCoreWrapper(core); //if (!core.LogOn("6519040180", "Tziplyonak713", false)) UT.Assert.Fail("Login"); ////if (!core.LogOn("6519048070", "Toby2523", false)) UT.Assert.Fail("Login"); //if (!core.LogOn("65245768", "1962", false)) UT.Assert.Fail("Login"); if (!core.LogOn("D31712988001", "8482", true)) { UT.Assert.Fail("Login"); } //if (!core.LogOn("dturbo", "1234", true)) UT.Assert.Fail("Login"); o2g.OrderRemoved += new OrderRemovedEventHandler(o2g_OrderRemovedEvent); }
public void GetTrades() { var account = o2g.GetAccount(); Debug.WriteLine("StopAmount:{0}", account.StopAmount); var aID = account.ID; var pair = "USD/JPY"; var baseUnitSize = o2g.GetBaseUnitSize(pair); var pipCost = o2g.GetPipCost(pair); var lots = 10000; var pips = 10; MessageBox.Show(pips + " pips cost for " + lots + " of " + pair + " = " + FXW.PipsAndLotToMoney(pips, lots, pipCost, baseUnitSize)); o2g.GetTrades("").Where(t => t.Stop > 0).ToList() .ForEach(t => Debug.WriteLine("Id:{0},Stop:{1}", t.Id, t.Stop)); }