Esempio n. 1
0
 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
     });
 }
Esempio n. 2
0
        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;
        }
Esempio n. 3
0
 public TradesProcessor(
     ILogger <TradesProcessor> logger,
     IOptions <AppSettings> settings,
     ITradesManager tradesManager) : base(settings, logger)
 {
     _tradesManager = tradesManager;
 }
Esempio n. 4
0
 public Report(ITradesManager fw)
 {
     this.fw = fw;
     try {
         InitializeComponent();
     } catch (Exception exc) {
         throw;
     }
 }
Esempio n. 5
0
        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);
            }
        }
Esempio n. 6
0
        //[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;
 }
Esempio n. 8
0
 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;
 }