public static Trade Create(ITradesManager tradesManager, string pair, double pipSize, int baseUnitSize, Func <Trade, double> commissionByTrade) { return(new Trade() { Pair = pair, PipSize = pipSize, BaseUnitSize = baseUnitSize, CommissionByTrade = commissionByTrade, TradesManager = tradesManager }); }
public static double GetEntryOrderLimit(ITradesManager tm, IList <Trade> trades, int lot, bool addProfit, double currentLoss) { if (trades.IsEmpty()) { return(0); } var lotOld = trades.Sum(t => t.Lots); currentLoss = currentLoss.Abs(); var profitInPips = 0.0; if (addProfit) { if (currentLoss == 0) { currentLoss = Math.Max(0, trades.Sum(t => t.LimitAmount)); } else { profitInPips = Math.Max( trades.Select(t => t.StopInPips).Where(s => s < 0).OrderBy(s => s).FirstOrDefault().Abs(), trades.Select(t => t.LimitInPips).Where(l => l > 0).OrderBy(s => s).FirstOrDefault().Abs() ) * lotOld / lot; } } var stopLoss = currentLoss - trades.Sum(t => t.StopAmount); return(tm.MoneyAndLotToPips(stopLoss, lot, trades[0].Pair).Abs() + profitInPips);// +curentlimit; }
public TradesProcessor( ILogger <TradesProcessor> logger, IOptions <AppSettings> settings, ITradesManager tradesManager) : base(settings, logger) { _tradesManager = tradesManager; }
public Report(ITradesManager fw) { this.fw = fw; try { InitializeComponent(); } catch (Exception exc) { throw; } }
public static void LoadBars(ITradesManager fw, string pairToLoad, Action <object> progressCallback = null) { var pairsToLoad = new RequestPairForHistoryMessage(); GalaSoft.MvvmLight.Messaging.Messenger.Default.Send(pairsToLoad); foreach (var pair in pairsToLoad.Pairs) { AddTicks(fw, pair.Item2, pair.Item1, DateTime.Now.AddYears(-1), progressCallback); } }
//[MethodImpl(MethodImplOptions.Synchronized)] public static void AddTicks(ITradesManager fw, int period, string pair, DateTime dateStart, Action <object> progressCallback) { try { #region callback ActionBlock <Action> saveTickActionBlock = new ActionBlock <Action>(a => a()); Action <RateLoadingCallbackArgs <Rate> > showProgress = (args) => { SaveTickCallBack(period, pair, progressCallback, saveTickActionBlock, args); args.IsProcessed = true; }; #endregion var offset = TimeSpan.FromMinutes(period); using (var context = new ForexEntities()) { if (dateStart > DateTime.MinValue) { var dateMin = new DateTime(context.t_Bar.Where(b => b.Pair == pair && b.Period == period).Min(b => (DateTimeOffset?)b.StartDate).GetValueOrDefault().DateTime.Ticks, DateTimeKind.Utc); if (dateMin.IsMin()) { dateMin = DateTime.Now; } var dateEnd = dateMin.Subtract(offset); if (dateStart < dateMin) { fw.GetBarsBase(pair, period, 0, dateStart, dateEnd, new List <Rate>(), null, showProgress); } } var q = context.t_Bar.Where(b => b.Pair == pair && b.Period == period).Select(b => b.StartDate).DefaultIfEmpty().Max(); if (dateStart == DateTime.MinValue && q == DateTimeOffset.MinValue) { throw new Exception("dateStart must be provided there is no bars in database."); } var p = period == 0 ? 1 / 60.0 : period; dateStart = q.LocalDateTime.Add(p.FromMinutes()); } if (period == 0) { dateStart = dateStart.Max(DateTime.Now.AddYears(-1)); } fw.GetBarsBase(pair, period, 0, dateStart, DateTime.Now, new List <Rate>(), null, showProgress); } catch (Exception exc) { GalaSoft.MvvmLight.Messaging.Messenger.Default.Send <LogMessage>(new LogMessage(exc)); } }
public AutoTradingProcessor( IOptions <AppSettings> settings, ILogger <AutoTradingProcessor> logger, IOrderProcessor orderProcessor, IBalanceManager balanceManager, ITradesManager tradesManager, IOrderManager orderManager, IBookManager bookManager, IDealManager dealManager, DealProcessor dealProcessor, NatsConnector connector) : base(settings, logger) { _logger = logger; _orderProcessor = orderProcessor; _balanceManager = balanceManager; _dealManager = dealManager; _tradesManager = tradesManager; _orderManager = orderManager; _dealProcessor = dealProcessor; _bookManager = bookManager; _connector = connector; _settings = settings; }
public TradeRequestManager(ITradesManager fw) { this.fw = fw; openQueueScheduler = new Schedulers.ThreadScheduler((s, e) => RaiseTradeRequestManagerEvent(e.Exception)); }
public TradeController(ITradesManager manager, ILog log) { this.log = log; this.manager = manager; }