/// <summary>
 /// Gets stockpricesdata and index of specified ts. Returns true if index found.
 /// </summary>
 /// <param name="dataLoader"></param>
 /// <param name="stockName"></param>
 /// <param name="dataRange"></param>
 /// <param name="ts"></param>
 /// <param name="spData"></param>
 /// <param name="dataIndex"></param>
 /// <returns></returns>
 public static bool GetWithIndex(this ISystemDataLoader dataLoader, string stockName, StockDataRange dataRange, DateTime ts,
                                 out StockPricesData spData, out int dataIndex)
 {
     spData    = dataLoader.Get(stockName, dataRange, 0, ts, ts);
     dataIndex = spData.FindByTS(ts);
     return(dataIndex >= 0);
 }
Пример #2
0
 public SignalsProcessor(ISystemDataLoader dataLoader, ICommission commission, ISlippage slippage)
 {
     _dataLoader = dataLoader;
     _commission = commission;
     _slippage   = slippage;
     _rebalancer = new PositionsRebalancer(_dataLoader, _commission, _slippage);
 }
Пример #3
0
 public SystemDefinitionFactory(IStockDataProvider dataProvider, ISystemDataLoader dataLoader, ISlippage slippage, ICommission commission, ISystemExecutionLogger systemExecutionLogger)
 {
     _dataProvider          = dataProvider;
     _dataLoader            = dataLoader;
     _slippage              = slippage;
     _commission            = commission;
     _systemExecutionLogger = systemExecutionLogger;
 }
 public void SetUp()
 {
     _dataLoader           = SystemDataLoaderUtils.CreateSubstitute(PricesCount, LastDate);
     _commission           = CommissionUtils.CreateSubstitute();
     _slippage             = SlippageUtils.CreateSusbstitute();
     TestObj               = new PositionsRebalancer(_dataLoader, _commission, _slippage);
     _openPriceLevelCalled = false;
 }
        public void SetUp()
        {
            _dataProvider = StockDataProviderUtils.CreateSubstitute(DateTime.MinValue);
            _dataLoader   = SystemDataLoaderUtils.CreateSubstitute(2 * BackBufRange, BackBufRange, DateTime.Now.Date);
            TestObj       = new StocksDataPreloader(_dataProvider, _dataLoader);

            _stat = new StockStatMock("", BackBufRange);
        }
Пример #6
0
 public void SetUp()
 {
     _dataLoader           = SystemDataLoaderUtils.CreateSubstitute(PricesCount, LastDate);
     _commission           = CommissionUtils.CreateSubstitute();
     _slippage             = SlippageUtils.CreateSusbstitute();
     TestObj               = new SignalsProcessor(_dataLoader, _commission, _slippage);
     _signalSelectorCalled = false;
     _openPriceLevelCalled = false;
 }
 public SignalsBBTrendFunds(ISystemDataLoader dataLoader, IStockDataProvider dataProvider, ISystemExecutionLogger systemExecutionLogger)
 {
     _dataLoader            = dataLoader;
     _systemExecutionLogger = systemExecutionLogger;
     _dataRange             = StockDataRange.Monthly;
     _fundsData             = new BBTrendFundsData(_fundsNames.Length);
     BBTrendFundsDataCalculator.Initialize(_fundsData, _fundsNames, BBPeriod, BBSigmaWidth, HLPeriod, dataProvider);
     _rebalanceSignal = new ModNCounter(RebalanceInterval);
 }
 private float CalcActive(SystemState system, DateTime ts, ISystemDataLoader dataLoader)
 {
     return(system.PositionsActive.Sum(p =>
     {
         StockPricesData prices = dataLoader.Get(p.Stock.FullName, p.DataRange, p.IntradayInterval, ts, ts);
         int ix = prices.FindByTS(ts);
         return p.DirectionMultiplier() * prices.C[ix] * p.Volume;
     }));
 }
 /// <summary>
 /// Gets stockpricesdata and index of specified ts. Returns true if index found, and has required length of back buffer.
 /// </summary>
 /// <param name="dataLoader"></param>
 /// <param name="stockName"></param>
 /// <param name="dataRange"></param>
 /// <param name="ts"></param>
 /// <param name="requiredBackBufferLength"></param>
 /// <param name="spData"></param>
 /// <param name="dataIndex"></param>
 /// <returns></returns>
 public static bool GetWithIndex(this ISystemDataLoader dataLoader, string stockName, StockDataRange dataRange, DateTime ts, int requiredBackBufferLength,
                                 out StockPricesData spData, out int dataIndex)
 {
     if (GetWithIndex(dataLoader, stockName, dataRange, ts, out spData, out dataIndex))
     {
         return(dataIndex >= requiredBackBufferLength);
     }
     return(false);
 }
 public void SetUp()
 {
     _dataLoader               = SystemDataLoaderUtils.CreateSubstitute(PricesCount, LastDate);
     _commission               = CommissionUtils.CreateSubstitute();
     _slippage                 = SlippageUtils.CreateSusbstitute();
     TestObj                   = new PositionsCloser(_dataLoader, _commission, _slippage);
     _positionSelectorCalled   = false;
     _closePriceSelectorCalled = false;
 }
Пример #11
0
        public PriceCrossingSMA(IStockDataProvider dataProvider, ISystemDataLoader dataLoader,
                                ISlippage slippage, ICommission commission, ISystemExecutionLogger systemExecutionLogger)
        {
            _dataProvider          = dataProvider;
            _dataLoader            = dataLoader;
            _slippage              = slippage;
            _commission            = commission;
            _systemExecutionLogger = systemExecutionLogger;

            SystemParams.Set(PriceCrossingSMAParams.StockName, "");
            SystemParams.Set(PriceCrossingSMAParams.SMAPeriod, 20);
        }
Пример #12
0
        public BBTrendFunds(IStockDataProvider dataProvider, ISystemDataLoader dataLoader,
                            ISlippage slippage, ICommission commission, ISystemExecutionLogger systemExecutionLogger)
        {
            _dataProvider          = dataProvider;
            _dataLoader            = dataLoader;
            _slippage              = slippage;
            _commission            = commission;
            _systemExecutionLogger = systemExecutionLogger;

            //SystemParams.Set(BBTrendParams.StockName, "");
            //SystemParams.Set(BBTrendParams.BBPeriod, 20);
            //SystemParams.Set(BBTrendParams.BBSigmaWidth, 2f);
        }
        //private readonly ModNCounter _rebalanceSignal;

        public SignalsBBTrendMultiFunds(ISystemDataLoader dataLoader, IStockDataProvider dataProvider, ISystemExecutionLogger systemExecutionLogger)
        {
            _aggressiveFunds = _fundsNames.Select((_, i) => i > 0).ToArray();
            if (_fundsNames.Length != _aggressiveFunds.Length)
            {
                throw new Exception("_fundsNames != _aggressiveFunds");
            }

            _dataLoader            = dataLoader;
            _systemExecutionLogger = systemExecutionLogger;
            _dataRange             = StockDataRange.Monthly;
            _fundsData             = new BBTrendFundsData(_fundsNames.Length);
            BBTrendFundsDataCalculator.Initialize(_fundsData, _fundsNames, BBPeriod, BBSigmaWidth, HLPeriod, dataProvider);
            //_rebalanceSignal = new ModNCounter(RebalanceInterval);
        }
        public SignalsPriceCrossingSMA(string stockName, StockDataRange dataRange, int smaPeriod, ISystemDataLoader dataLoader, IStockDataProvider dataProvider, IMMSignalVolume signalVolumeCalculator)
        {
            _dataRange              = dataRange;
            _smaPeriod              = smaPeriod;
            _dataLoader             = dataLoader;
            _dataProvider           = dataProvider;
            _signalVolumeCalculator = signalVolumeCalculator;

            _stock   = _dataProvider.GetStockDefinition(stockName);
            _statSMA = new StatSMA("")
                       .SetParam(StatSMAParams.Period, new MOParamInt()
            {
                Value = _smaPeriod
            });
        }
        public void SetUp()
        {
            _dataProvider           = StockDataProviderUtils.CreateSubstitute(DateTime.MinValue);
            _dataLoader             = SystemDataLoaderUtils.CreateSubstituteWithConstantPriceInRange(PricesCount, StartingPrice, PriceRange, LastDate);
            _dataDefinitionProvider = Substitute.For <ISystemDataDefinitionProvider>();
            _signalGeneratorOnOpen  = Substitute.For <ISignalGeneratorOnOpen>();
            _signalGeneratorOnClose = Substitute.For <ISignalGeneratorOnClose>();
            _commission             = CommissionUtils.CreateSubstitute();
            _slippage = SlippageUtils.CreateSusbstitute();
            _mmPositionCloseCalculator = Substitute.For <IMMPositionCloseCalculator>();
            _systemState = new SystemState()
            {
                Cash = InitialCash
            };

            _slippage.CalculateOpen(default, default, default, default).ReturnsForAnyArgs(args => args.ArgAt <float>(3));
        public void SetUp()
        {
            _dataLoader = Substitute.For <ISystemDataLoader>();
            _testSys    = new SystemState()
            {
                Cash = CashValue
            };
            _stockPrices = new StockPricesData(1);
            _testObj     = new SystemValueCalculator();

            _stockPrices.TS[0] = CurrentTS;
            _stockPrices.C[0]  = PriceL;
            _dataLoader
            .Get(Arg.Compat.Any <string>(), Arg.Compat.Any <StockDataRange>(), Arg.Compat.Any <int>(), Arg.Compat.Any <DateTime>(), Arg.Compat.Any <DateTime>())
            .Returns(_stockPrices);
        }
 public void SetUp()
 {
     _stock = new StockDefinition()
     {
         Type = StockType.Stock
     };
     _stock2  = new StockDefinition();
     _testObj = new SystemState()
     {
         Cash = CashValue
     };
     _stockPrices      = new StockPricesData(1);
     _dataLoader       = SystemDataLoaderUtils.CreateSubstitute(_stockPrices);
     _commission       = CommissionUtils.CreateSubstitute(Commission);
     _slippage         = SlippageUtils.CreateSusbstitute();
     EntrySignal.Stock = _stock;
 }
Пример #18
0
        public SimplexMultiFunds(IStockDataProvider dataProvider, ISystemDataLoader dataLoader,
                                 ISlippage slippage, ICommission commission, ISystemExecutionLogger systemExecutionLogger)
        {
            _dataProvider          = dataProvider;
            _dataLoader            = dataLoader;
            _slippage              = slippage;
            _commission            = commission;
            _systemExecutionLogger = systemExecutionLogger;

            SystemParams.Set(SimplexMultiFundsParams.AvgProfitRange, 3);
            SystemParams.Set(SimplexMultiFundsParams.AvgChangeRange, 6);
            SystemParams.Set(SimplexMultiFundsParams.AcceptableSingleDD, 0.1);
            SystemParams.Set(SimplexMultiFundsParams.RiskSigmaMultiplier, 2.0);
            SystemParams.Set(SimplexMultiFundsParams.MaxSinglePositionSize, 0.8);
            SystemParams.Set(SimplexMultiFundsParams.MaxPortfolioRisk, 0.8);
            SystemParams.Set(SimplexMultiFundsParams.TruncateBalanceToNthPlace, 3);
        }
Пример #19
0
        public FormMain()
        {
            InitializeComponent();
            _msgDisplay              = new MsgDisplay(this, "MarketOps");
            _dataProvider            = DataProvidersFactory.GetStockDataProvider();
            _systemDataLoader        = SystemDataLoaderFactory.Get(_dataProvider);
            _systemExecutionLogger   = new SystemExecutionLoggerToTextBox(edtSimDataLog);
            _configSystemDefinitions = ConfigSystemDefsLoader.Load();
            _systemDefinitionFactory = new SystemDefinitionFactory(_dataProvider, _systemDataLoader, new SlippageNone(), new CommissionNone(), _systemExecutionLogger);
            StatsFactories.Initialize();

            dbgPositions.OnPositionClick += dbgPositions_OnPositionClick;

            this.Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath);
            tcCharts.TabPages.Clear();
            PrepareStockDataRangeSource();
            InitializeSim();
            LoadConfig();
        }
Пример #20
0
        public SignalsBBTrend(string stockName, StockDataRange dataRange, int bbPeriod, float bbSigmaWidth, ISystemDataLoader dataLoader, IStockDataProvider dataProvider, IMMSignalVolume signalVolumeCalculator)
        {
            _dataRange              = dataRange;
            _bbPeriod               = bbPeriod;
            _bbSigmaWidth           = bbSigmaWidth;
            _dataLoader             = dataLoader;
            _dataProvider           = dataProvider;
            _signalVolumeCalculator = signalVolumeCalculator;

            _stock  = _dataProvider.GetStockDefinition(stockName);
            _statBB = new StatBB("")
                      .SetParam(StatBBParams.Period, new MOParamInt()
            {
                Value = _bbPeriod
            })
                      .SetParam(StatBBParams.SigmaWidth, new MOParamFloat()
            {
                Value = bbSigmaWidth
            });
        }
Пример #21
0
 public SystemProcessor(
     IStockDataProvider dataProvider,
     ISystemDataLoader dataLoader,
     ISystemDataDefinitionProvider dataDefinitionProvider,
     ISignalGeneratorOnOpen signalGeneratorOnOpen,
     ISignalGeneratorOnClose signalGeneratorOnClose,
     ICommission commission,
     ISlippage slippage,
     IMMPositionCloseCalculator mmPositionCloseCalculator)
 {
     _dataProvider           = dataProvider;
     _dataLoader             = dataLoader;
     _dataDefinitionProvider = dataDefinitionProvider;
     _signalGeneratorOnOpen  = signalGeneratorOnOpen;
     _signalGeneratorOnClose = signalGeneratorOnClose;
     _commission             = commission;
     _slippage = slippage;
     _mmPositionCloseCalculator = mmPositionCloseCalculator;
     _signalsProcessor          = new SignalsProcessor(_dataLoader, _commission, _slippage);
     _positionCloser            = new PositionsCloser(_dataLoader, _commission, _slippage);
 }
Пример #22
0
        public SignalsSimplexMultiFunds(ISystemDataLoader dataLoader, IStockDataProvider dataProvider, ISystemExecutionLogger systemExecutionLogger, MOParams systemParams)
        {
            _avgProfitRange            = systemParams.Get(SimplexMultiFundsParams.AvgProfitRange).As <int>();
            _avgChangeRange            = systemParams.Get(SimplexMultiFundsParams.AvgChangeRange).As <int>();
            _acceptableSingleDD        = systemParams.Get(SimplexMultiFundsParams.AcceptableSingleDD).As <double>();
            _riskSigmaMultiplier       = systemParams.Get(SimplexMultiFundsParams.RiskSigmaMultiplier).As <double>();
            _maxSinglePositionSize     = systemParams.Get(SimplexMultiFundsParams.MaxSinglePositionSize).As <double>();
            _maxPortfolioRisk          = systemParams.Get(SimplexMultiFundsParams.MaxPortfolioRisk).As <double>();
            _truncateBalanceToNthPlace = systemParams.Get(SimplexMultiFundsParams.TruncateBalanceToNthPlace).As <int>();

            _aggressiveFunds = _fundsNames.Select((_, i) => i > 0).ToArray();
            if (_fundsNames.Length != _aggressiveFunds.Length)
            {
                throw new Exception("_fundsNames != _aggressiveFunds");
            }

            _dataLoader            = dataLoader;
            _systemExecutionLogger = systemExecutionLogger;
            _dataRange             = StockDataRange.Monthly;
            _fundsData             = new SimplexFundsData(_fundsNames.Length);
            SimplexFundsDataCalculator.Initialize(_fundsData, _fundsNames, dataProvider);
        }
Пример #23
0
 public static void CalcCurrentValue(this SystemState systemState, DateTime ts, ISystemDataLoader dataLoader)
 {
     systemState.Equity.Add(new SystemValue()
     {
         Value = new SystemValueCalculator().Calc(systemState, ts, dataLoader),
         TS    = ts
     });
 }
Пример #24
0
 public static void CalculateTrendsAndExpectations(BBTrendFundsData data, DateTime ts, StockDataRange dataRange, ISystemDataLoader dataLoader)
 {
     for (int i = 0; i < data.Stocks.Length; i++)
     {
         if (!dataLoader.GetWithIndex(data.Stocks[i].FullName, dataRange, ts, data.StatsBB[i].BackBufferLength, out StockPricesData spData, out int dataIndex))
         {
             continue;
         }
         BBTrendType lastTrend = data.CurrentTrends[i];
         data.CurrentTrends[i] = BBTrendRecognizer.BBTrendRecognizer.RecognizeTrend(spData, data.StatsBB[i], dataIndex, data.CurrentTrends[i], out float trendStartLevel);
         if (lastTrend != data.CurrentTrends[i])
         {
             data.UpTrendStartValues[i] = trendStartLevel;// spData.H[dataIndex];
             data.TrendLength[i]        = 0;
         }
         data.TrendLength[i]++;
         BBTrendExpectation lastExpectation = data.CurrentExpectations[i];
         data.CurrentExpectations[i] = BBTrendRecognizer.BBTrendRecognizer.GetExpectation(spData, data.StatsBB[i], dataIndex, data.CurrentTrends[i]);
         data.ExpectationChanged[i]  = (lastExpectation != data.CurrentExpectations[i]);
     }
 }
 public float Calc(SystemState system, DateTime ts, ISystemDataLoader dataLoader)
 {
     return(CalcActive(system, ts, dataLoader) + system.Cash);
 }
Пример #26
0
        public static void CalculateMaxValuesAndStops(BBTrendFundsData data, float stopWidth, DateTime ts, StockDataRange dataRange, ISystemDataLoader dataLoader)
        {
            for (int i = 0; i < data.Stocks.Length; i++)
            {
                if (data.CurrentTrends[i] != BBTrendType.Up)
                {
                    data.UpTrendMaxValues[i]  = float.MinValue;
                    data.UpTrendStopValues[i] = float.MinValue;
                    continue;
                }

                if (!dataLoader.GetWithIndex(data.Stocks[i].FullName, dataRange, ts, out StockPricesData spData, out int dataIndex))
                {
                    continue;
                }
                //data.UpTrendMaxValues[i] = Math.Max(spData.H[dataIndex], data.UpTrendMaxValues[i]);
                data.UpTrendMaxValues[i]  = Math.Max(spData.C[dataIndex], data.UpTrendMaxValues[i]);
                data.UpTrendStopValues[i] = data.UpTrendMaxValues[i] * (1f - stopWidth);
            }
        }
        public static (StockPricesData pricesData, int pricesDataIndex) GetPricesDataAndIndex(this ISystemDataLoader dataLoader, string stockName, StockDataRange dataRange, int intradayInterval, DateTime ts)
        {
            StockPricesData data = dataLoader.Get(stockName, dataRange, intradayInterval, ts, ts);

            return(data, data.FindByTS(ts));
        }
Пример #28
0
        public static void CheckStops(BBTrendFundsData data, DateTime ts, StockDataRange dataRange, ISystemDataLoader dataLoader)
        {
            for (int i = 0; i < data.Stocks.Length; i++)
            {
                if (data.CurrentTrends[i] != BBTrendType.Up)
                {
                    data.StoppedOut[i] = false;
                    continue;
                }

                if (!dataLoader.GetWithIndex(data.Stocks[i].FullName, dataRange, ts, out StockPricesData spData, out int dataIndex))
                {
                    continue;
                }
                if (data.StoppedOut[i])
                {
                    data.StoppedOut[i] = (spData.C[dataIndex] <= data.StoppedOutValues[i]) || !PriceAbovePrevMaxH(data, i, dataIndex, spData.C[dataIndex]);
                }
                else
                {
                    data.StoppedOut[i] = (spData.C[dataIndex] <= data.UpTrendStopValues[i]);
                }
            }
        }
Пример #29
0
 public StocksDataPreloader(IStockDataProvider dataProvider, ISystemDataLoader dataLoader)
 {
     _dataProvider = dataProvider;
     _dataLoader   = dataLoader;
 }
Пример #30
0
 public SystemRunner(IStockDataProvider dataProvider, ISystemDataLoader dataLoader)
 {
     _dataProvider = dataProvider;
     _dataLoader   = dataLoader;
 }