public SignalsProcessor(ISystemDataLoader dataLoader, ICommission commission, ISlippage slippage)
 {
     _dataLoader = dataLoader;
     _commission = commission;
     _slippage   = slippage;
     _rebalancer = new PositionsRebalancer(_dataLoader, _commission, _slippage);
 }
示例#2
0
        public bool HandleOrder()
        {
            bool isSuccess = false;

            try
            {
                IOrderProcessor orderProcessor = OrderProcessorFactory.CreateOrderProcessor(_productType, _orderProcessorModel);

                if (orderProcessor != null)
                {
                    orderProcessor.ProcessOrder();

                    if (orderProcessor is ICommission)
                    {
                        ICommission commission = (ICommission)orderProcessor;
                        commission.GenerateCommission();
                    }
                    if (orderProcessor is IEmailSender)
                    {
                        IEmailSender emailSender = (IEmailSender)orderProcessor;
                        emailSender.SendEmail();
                    }

                    isSuccess = true;
                }

                return(isSuccess);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Some exception occurred");
                throw ex;
            }
        }
示例#3
0
 public void TestBookCommission()
 {
     payment    = PaymentFactory.GetPayment(PaymentTypeEnum.Book);
     commission = payment as ICommission;
     returnMsg  = commission.GenerateCommission();
     Assert.AreEqual(returnMsg, "Book Commission");
 }
 public void SetUp()
 {
     _dataLoader           = SystemDataLoaderUtils.CreateSubstitute(PricesCount, LastDate);
     _commission           = CommissionUtils.CreateSubstitute();
     _slippage             = SlippageUtils.CreateSusbstitute();
     TestObj               = new PositionsRebalancer(_dataLoader, _commission, _slippage);
     _openPriceLevelCalled = false;
 }
示例#5
0
 public SystemDefinitionFactory(IStockDataProvider dataProvider, ISystemDataLoader dataLoader, ISlippage slippage, ICommission commission, ISystemExecutionLogger systemExecutionLogger)
 {
     _dataProvider          = dataProvider;
     _dataLoader            = dataLoader;
     _slippage              = slippage;
     _commission            = commission;
     _systemExecutionLogger = systemExecutionLogger;
 }
示例#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 void SetUp()
 {
     _dataLoader               = SystemDataLoaderUtils.CreateSubstitute(PricesCount, LastDate);
     _commission               = CommissionUtils.CreateSubstitute();
     _slippage                 = SlippageUtils.CreateSusbstitute();
     TestObj                   = new PositionsCloser(_dataLoader, _commission, _slippage);
     _positionSelectorCalled   = false;
     _closePriceSelectorCalled = false;
 }
示例#8
0
        static void Main(string[] args)
        {
            var serviceProvider = new ServiceCollection()
                                  .AddSingleton <ICommission, AgentCommission>()
                                  .AddSingleton <IMembership, CustomerMembership>()
                                  .BuildServiceProvider();

            ICommission commission = serviceProvider.GetService <ICommission>();
            IMembership membership = serviceProvider.GetService <IMembership>();

            PaymentService paymentService = new PaymentService(commission, membership);
            PaymentResult  result;

            Console.WriteLine("Books");
            Product product = new Product()
            {
                Agent = 1, Amount = 1000.00, Category = 1, ProductId = 1, ProductType = "Books", ProductName = "Book 1"
            };

            result = paymentService.MakePayment(product);
            Console.WriteLine("---------------------------------------------------------------------");
            Console.WriteLine("Toys");
            Product product2 = new Product()
            {
                Agent = 1, Amount = 1000.00, Category = 1, ProductId = 1, ProductType = "", ProductName = "Toy 1"
            };

            paymentService.MakePayment(product2);
            Console.WriteLine("---------------------------------------------------------------------");
            Console.WriteLine("Video");
            Product product3 = new Product()
            {
                Agent = 1, Amount = 2000.00, Category = 2, ProductId = 1, ProductType = "", ProductName = "Learning To Ski"
            };

            paymentService.MakePayment(product3);
            Console.WriteLine("---------------------------------------------------------------------");
            Console.WriteLine("New Membership");
            Product product4 = new Product()
            {
                Agent = 1, Amount = 2000.00, Category = 3, ProductId = 1, ProductType = "New", ProductName = "Video"
            };

            paymentService.MakePayment(product4);
            Console.WriteLine("---------------------------------------------------------------------");
            Console.WriteLine("Upgrade Membership");
            Product product5 = new Product()
            {
                Agent = 1, Amount = 2000.00, Category = 3, ProductId = 1, ProductType = "Upgrade", ProductName = "Video"
            };

            paymentService.MakePayment(product5);
            Console.ReadLine();
            //Console.WriteLine("Hello World!");
        }
        private void btnOK_Click(object sender, EventArgs e)
        {
            int iIndex = comboRules.SelectedIndex;

            RuleBase cRule = new RuleBase();

            cRule.ClassName = __cRules[iIndex].ClassName;

            __cCommission     = __cOrderService.CreateCommission(cRule);
            this.DialogResult = DialogResult.OK;
        }
        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);
        }
示例#11
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);
        }
示例#12
0
		/// <summary>
		///   計算所有傭金規則
		/// </summary>
		/// <param name="order">ITradeOrder 介面</param>
		/// <returns>返回值: double[](0=佣金, 1=手續費)</returns>
		protected double[] CalculateCommissions(ITradeOrder order) {
			double[] dValues = new double[2]; 
			if (__cCommissions != null) {
				int iCount = __cCommissions.Count;
				for (int i = 0; i < iCount; i++) {
					ICommission cCommission = __cCommissions[i];
					int iIndex = ((int) cCommission.RuleType) - 128;  //佣金起始為 128(減去 128 可得到陣列的索引值)
					
					dValues[iIndex] += cCommission.Calculate(order);
				}
			}
			return dValues;
		}
        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()
 {
     _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;
 }
        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);
        }
示例#16
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);
 }
示例#17
0
        public static void Open(this SystemState systemState, DateTime ts, PositionDir dir, float price, float volume, StockDefinition stock, Signal signal, ISlippage slippage, ICommission commission)
        {
            float openPrice = systemState.CalculateSlippageOpen(slippage, stock.Type, ts, signal.Direction, price);

            systemState.Open(stock, dir, ts, openPrice, volume, systemState.CalculateCommission(commission, stock.Type, signal.Volume, openPrice), signal.DataRange, signal.IntradayInterval, signal);
        }
 public Book(ICommission commission)
 {
     this.commission = commission;
 }
示例#19
0
 public PaymentFactory(ICommission commissionPayment, IMembership membership, INotification notification)
 {
     _commission   = commissionPayment;
     _membership   = membership;
     _notification = notification;
 }
示例#20
0
 public static float CalculateCommission(this SystemState systemState, ICommission commission, StockType stockType, float volume, float price)
 {
     return(commission.Calculate(stockType, volume, price));
 }
 public PositionsCloser(ISystemDataLoader dataLoader, ICommission commission, ISlippage slippage)
 {
     _dataLoader = dataLoader;
     _commission = commission;
     _slippage = slippage;
 }
示例#22
0
 public static float CalculateCommission(this SystemState systemState, ICommission commission, Signal signal, float price)
 {
     return(systemState.CalculateCommission(commission, signal.Stock.Type, signal.Volume, price));
 }
示例#23
0
 public static float CalculateCommission(this SystemState systemState, ICommission commission, int positionIndex, float price)
 {
     return(systemState.CalculateCommission(commission, systemState.PositionsActive[positionIndex].Stock.Type, systemState.PositionsActive[positionIndex].Volume, price));
 }
示例#24
0
 public static void Open(this SystemState systemState, DateTime ts, PositionDir dir, float price, Signal signal, ISlippage slippage, ICommission commission)
 {
     systemState.Open(ts, dir, price, signal.Volume, signal, slippage, commission);
 }
示例#25
0
 public BookRule()
 {
     _packingSlip = new Operations.Operations();
     _commision   = new Operations.Operations();
 }
示例#26
0
 public static void ReducePosition(this SystemState systemState, int positionIndex, DateTime ts, float price, float volume, Signal signal, ISlippage slippage, ICommission commission)
 {
     systemState.AddToPosition(positionIndex, ts, price, -volume, signal, slippage, commission);
 }
示例#27
0
        public static void AddToPosition(this SystemState systemState, int positionIndex, DateTime ts, float price, float volume, Signal signal, ISlippage slippage, ICommission commission)
        {
            Position pos = systemState.PositionsActive[positionIndex];

            systemState.Close(positionIndex, ts, price, slippage, commission);
            if (pos.Volume + volume > 0)
            {
                float openPrice = systemState.CalculateSlippageOpen(slippage, ts, signal, price);
                systemState.Open(signal.Stock, pos.Direction, ts, openPrice, pos.Volume + volume, systemState.CalculateCommission(commission, signal, openPrice), signal.DataRange, signal.IntradayInterval, signal);
            }
        }
示例#28
0
 public static void CloseAll(this SystemState systemState, DateTime ts, float price, ISlippage slippage, ICommission commission)
 {
     while (systemState.PositionsActive.Count > 0)
     {
         systemState.Close(0, ts, price, slippage, commission);
     }
 }
示例#29
0
 public MMSignalVolumeForAllCash(ICommission commission)
 {
     _commission = commission;
 }
示例#30
0
        public static void Close(this SystemState systemState, int positionIndex, DateTime ts, float price, ISlippage slippage, ICommission commission)
        {
            float closePrice = systemState.CalculateSlippageClose(slippage, ts, positionIndex, price);

            systemState.Close(positionIndex, ts, closePrice, systemState.CalculateCommission(commission, positionIndex, closePrice));
        }