コード例 #1
0
 public bool HasMarketDetails(string broker, string market)
 {
     lock (_marketDetailsList)
     {
         return(_marketDetailsList.ContainsKey(MarketDetails.GetKey(broker, market)));
     }
 }
コード例 #2
0
 public StrategyRunner(IBrokersCandlesService candleService, IMarketDetailsService marketDetailsService, IBroker broker, MarketDetails market)
 {
     _candleService        = candleService;
     _marketDetailsService = marketDetailsService;
     _broker = broker;
     _market = market;
 }
コード例 #3
0
 public void AddMarketDetails(MarketDetails marketDetails)
 {
     lock (_marketDetailsList)
     {
         _marketDetailsList[MarketDetails.GetKey(marketDetails.Broker, marketDetails.Name)] = marketDetails;
     }
 }
コード例 #4
0
        public MarketDetails GetMarketDetails(string broker, string market)
        {
            lock (_marketDetailsList)
            {
                _marketDetailsList.TryGetValue(MarketDetails.GetKey(broker, market), out var ret);

                return(ret);
            }
        }
コード例 #5
0
ファイル: TradeExtensions.cs プロジェクト: Hallupa/CommonCode
        public static decimal GetTradeProfit(this Trade trade, DateTime dateTimeUTC, Timeframe candlesTimeframe,
                                             IBrokersCandlesService candlesService, MarketDetails marketDetails, IBroker broker, bool updateCandles)
        {
            if (trade.EntryPrice == null || trade.EntryDateTime == null)
            {
                return(0M);
            }

            if (trade.CloseDateTime != null && trade.CloseDateTime.Value <= dateTimeUTC)
            {
                return(trade.Profit ?? 0M);
            }

            if (trade.EntryDateTime >= dateTimeUTC)
            {
                return(0M);
            }

            var latestCandle = candlesService.GetLastClosedCandle(
                trade.Market, broker, candlesTimeframe, dateTimeUTC, updateCandles);

            if (latestCandle != null && trade.PricePerPip != null)
            {
                var closePriceToUse = trade.TradeDirection == TradeDirection.Long
                    ? (decimal)latestCandle.Value.CloseBid
                    : (decimal)latestCandle.Value.CloseAsk;
                var profitPips       = PipsHelper.GetPriceInPips(trade.TradeDirection == TradeDirection.Long ? closePriceToUse - trade.EntryPrice.Value : trade.EntryPrice.Value - closePriceToUse, marketDetails);
                var totalRunningTime = (DateTime.UtcNow - trade.EntryDateTime.Value).TotalDays;
                var runningTime      = (trade.EntryDateTime.Value - dateTimeUTC).TotalDays;

                var tradeProfit = trade.PricePerPip.Value * profitPips +
                                  (!totalRunningTime.Equals(0.0) && trade.Rollover != null
                                      ? trade.Rollover.Value * (decimal)(runningTime / totalRunningTime)
                                      : 0M);

                return(tradeProfit);
            }

            return(0M);
        }
コード例 #6
0
        public List <Trade> CreateNewTrades(
            MarketDetails market,
            TimeframeLookup <List <CandleAndIndicators> > candlesLookup,
            List <Trade> existingTrades,
            ITradeDetailsAutoCalculatorService calculatorService,
            DateTime currentTime)
        {
            if (candlesLookup[Timeframe.M1].Count == 0)
            {
                return(null);
            }

            var candle = candlesLookup[Timeframe.M1][candlesLookup[Timeframe.M1].Count - 1];

            ProcessExistingTrades(existingTrades, currentTime, candle, candlesLookup);

            List <Trade> ret = null;

            for (var i = _trades.Count - 1; i >= 0; i--)
            {
                var t = _trades[i];
                if (t.OriginalTrade.OrderPrices.Count > 0 && t.OriginalTrade.OrderPrices[0].Date <= currentTime || t.OriginalTrade.EntryDateTime <= currentTime)
                {
                    if (ret == null)
                    {
                        ret = new List <Trade>();
                    }

                    ret.Add(t);
                    _trades.RemoveAt(i);
                }
            }

            if (ret != null)
            {
                ProcessExistingTrades(ret, currentTime, candle, candlesLookup);
            }

            return(ret);
        }
コード例 #7
0
        private void LoadMarketDetailsList()
        {
            using (new LogRunTime("Load market details list"))
            {
                lock (_marketDetailsList)
                {
                    var marketDetailsListPath = Path.Combine(_dataDirectoryService.MainDirectory, "MarketDetails.json");

                    if (File.Exists(marketDetailsListPath))
                    {
                        var data = JsonConvert.DeserializeObject <List <MarketDetails> >(
                            File.ReadAllText(marketDetailsListPath));

                        _marketDetailsList.Clear();
                        foreach (var d in data)
                        {
                            _marketDetailsList[MarketDetails.GetKey(d.Broker, d.Name)] = d;
                        }
                    }
                }
            }
        }
コード例 #8
0
ファイル: PipsHelper.cs プロジェクト: amitparmar01/CommonCode
 public static decimal GetPriceInPips(decimal price, MarketDetails market)
 {
     return(price / market.PointSize.Value);
 }