예제 #1
0
        private void SignalObject_onScriptParameters(object sender, ScriptParametersEvent e)
        {
            __cOrderService = e.OrderService;
            __cParameters   = e.ScriptParameters;

            int           iCount = __cParameters.Count;
            List <string> sArgs  = __cProfile.Parameters;

            if (sArgs == null && iCount > 0)
            {
                ShowScriptParameters();
            }
            else
            {
                if (__bForceShowParameters)
                {
                    __bForceShowParameters = false;
                    ShowScriptParameters();
                }
                else
                {
                    try {
                        for (int i = 0; i < iCount; i++)
                        {
                            __cParameters[i].SetValue(sArgs[i]);
                        }

                        __cSignalObject.UpdateParameters();
                    } catch {
                        ShowScriptParameters();
                    }
                }
            }
        }
예제 #2
0
        /// <summary>
        ///   建構子
        /// </summary>
        /// <param name="service">AbstractOrderService 下單服務抽象類別</param>
        /// <param name="args">下單參數</param>
        /// <param name="openNextBar">是否開倉於下一根 Bars</param>
        internal OrderMarket(AbstractOrderService service, SOrderParameters args, bool openNextBar)
        {
            this.ID = System.Guid.NewGuid().GetHashCode();
            Contracts cContract = args.Lots;

            this.Info = new Order(args.Name, args.Action, OrderCategory.Market, (cContract.IsDefault) ? service.DefaultContracts : args.Lots, openNextBar, args.ExitTypeInfo);

            __cSender    = service as IOrderSender;
            __cPositions = service.Positions;
        }
예제 #3
0
		/// <summary>
		///   交易服務建立員
		/// </summary>
		/// <param name="instrument">商品資訊介面</param>
		/// <param name="args">交易服務組件設定參數</param>
		/// <param name="orderSource">交易服務來源名稱[預設:null](format: 交易組件名稱;交易服務類別名稱, null=使用預設交易服務來源類別名稱)</param>
		/// <param name="autoExecuteOnWork">是否由系統自動執行 OnWork 方法(預設=true, 如果為 false 則須由使用者自行呼叫 OnWork 方法)</param>
		protected void CreateTrader(IInstrument instrument, object args, string orderSource = null, bool autoExecuteOnWork = true) {
			bool bExist = false;
			string sSymbolId = instrument.Request.Symbol;
			lock (__cTradeServices) {
				bExist = __cTradeServices.ContainsKey(sSymbolId);
			}

			if (bExist) {  //如果交易服務已經存在
				SelectTrader(sSymbolId);  //直接選擇交易服務
				return;
			}

			int iDataStream = 1;
			if (__cTradeServices.Count > 0) {  //如果為 0 則表示尚未建立任何一個下單交易服務(如果 > 0 則將建立的 instrument 加入至 instruments 陣列內, 加入陣列的資料才會跟著 Bars 資料同步 Move Current 位置)
				iDataStream = AddDataStream(instrument);
			}

			orderSource = (orderSource == null) ? __cProperty.OrderSource : orderSource;
			AbstractOrderService cOrderService = OrderManager.Manager.CreateOrderService(orderSource);
			cOrderService.onResponse += OrderService_onResponse;
			cOrderService.SetInstrument(instrument as Instrument, iDataStream);
			cOrderService.SetDefaultContracts(__cProperty.DefaultContracts);
			cOrderService.AutoExecuteOnWork = autoExecuteOnWork;

			//設定傭金或手續費
			AbstractOrderService cBaseService = null;
			if (__cTradeServices.TryGetValue(this.Bars.Request.Symbol, out cBaseService)) {
				cOrderService.SetCommissions(cBaseService.Commissions);
			}

			if (args != null) {
				var cParameters = InputAttribute.GetParameters(cOrderService);
				if (cParameters.Count > 0) {
					var cProperies = args.GetType().GetProperties();

					Dictionary<string, object> cArgs = new Dictionary<string, object>(cProperies.Length);
					foreach (var cProperty in cProperies) {
						cArgs.Add(cProperty.Name, cProperty.GetValue(args, null));
					}

					foreach (var cParameter in cParameters) {
						object oValue = null;
						if (cArgs.TryGetValue(cParameter.Name, out oValue)) {
							cParameter.SetValue(oValue);
						}
					}
				}
				cOrderService.Initialize();  //初始化交易服務
			}

			lock (__cTradeServices) {
				__cTradeServices.Add(sSymbolId, cOrderService);
			}
			if (log.IsInfoEnabled) log.InfoFormat("[SignalObject.CreateTrader] Set \"{0}\" and create...  symbolId={1}", orderSource, sSymbolId);
		}
예제 #4
0
		/// <summary>
		///   選擇作用中的交易服務
		/// </summary>
		/// <param name="symbolId">商品代號</param>
		protected void SelectTrader(string symbolId) {
			lock (__cTradeServices) {
				AbstractOrderService cService = null;
				if (__cTradeServices.TryGetValue(symbolId, out cService)) {
					__cOrderService = cService;
					
					this.OrderCreator = __cOrderService as IOrderCreator;
					if (log.IsInfoEnabled) log.InfoFormat("[SignalObject.SelectTrader] Select trade services and OrderCreator...  symbolId={0}", symbolId);
				}
			}
		}
예제 #5
0
        /// <summary>
        ///   建構子
        /// </summary>
        /// <param name="service">AbstractOrderService 下單服務抽象類別</param>
        /// <param name="args">下單參數</param>
        internal OrderPriced(AbstractOrderService service, SOrderParameters args)
        {
            this.ID = System.Guid.NewGuid().GetHashCode();
            Contracts cContract = args.Lots;

            this.Info = new Order(args.Name, args.Action, OrderCategory.Limit, (cContract.IsDefault) ? service.DefaultContracts : args.Lots, false, args.ExitTypeInfo);

            __cEntrusts = (service as IOrderEntrust).Entrusts;

            __cSender    = service as IOrderSender;
            __cPositions = service.Positions;
        }
 public AuthenticationService(
     IHttpService httpService,
     NavigationManager navigationManager,
     ILocalStorageService localStorageService,
     IWebSocketService webSocketService,
     AbstractOrderService orderService
     )
 {
     _httpService         = httpService;
     _navigationManager   = navigationManager;
     _localStorageService = localStorageService;
     _webSocketService    = webSocketService;
     _orderService        = orderService;
 }
예제 #7
0
		/// <summary>
		///   釋放交易服務所有資源
		/// </summary>
		/// <param name="symbolId">商品代號</param>
		/// <param name="freeInstrument">是否一併釋放商品資訊類別[預設:false](true=一併釋放, false=不釋放保留於快取內)</param>
		protected void DestroyTrader(string symbolId, bool freeInstrument = false) {
			lock (__cTradeServices) {
				AbstractOrderService cService = null;
				if (__cTradeServices.TryGetValue(symbolId, out cService)) {
					SelectTrader(this.Bars.Request.Symbol);  //選擇預設交易服務

					if (freeInstrument) {
						cService.Bars.Dispose();
					}
					cService.Dispose();

					RemoveDataStream(cService.DataStream);  //將資料從 Instruments 內移除

					__cTradeServices.Remove(symbolId);
					if (log.IsInfoEnabled) log.InfoFormat("[SignalObject.DestroyTrader] Destroy trade services and disposed...  symbolId={0}, freeInstrument={1}", symbolId, freeInstrument);
				}
			}
		}
예제 #8
0
        internal void SetParameters(AbstractOrderService orderService, List <InputAttribute> args)
        {
            __cParameters   = args;
            __cOrderService = orderService;

            int iCount = 0;

            if (__cOrderService != null)
            {
                List <ICommission> cCommissions = __cOrderService.Commissions;
                if (cCommissions != null)
                {
                    iCount = cCommissions.Count;
                    for (int i = 0; i < iCount; i++)
                    {
                    }
                }
            }

            if (args != null)
            {
                iCount = args.Count;
                for (int i = 0; i < iCount; i++)
                {
                    InputAttribute cInput = args[i];

                    _ParameterInfo cParameter = new _ParameterInfo();
                    cParameter.Comment = (cInput.Comment == null) ? cInput.Name : cInput.Comment;
                    cParameter.Value   = cInput.Value.ToString();
                    if (cInput.IsEnum)
                    {
                        cParameter.Items = Enum.GetNames(cInput.Value.GetType());
                    }
                    else if (cParameter.Value.StartsWith("True") || cParameter.Value.StartsWith("False"))
                    {
                        cParameter.Items = __sBooleans;
                    }

                    source.Add(cParameter);
                }
            }
        }
예제 #9
0
        /// <summary>
        ///   建立下單元件服務
        /// </summary>
        /// <param name="orderSource">下單來源名稱(format: 下單組件名稱;下單服務類別名稱)</param>
        /// <returns>返回值:AbstractOrderService類別</returns>
        public AbstractOrderService CreateOrderService(string orderSource)
        {
            AbstractOrderService cOrderService = null;

            if (orderSource != null)
            {
                string[] sOrderParams = orderSource.Split(';');                  //格式:元件模組名稱;下單服務名稱
                OrderServiceInformation cOrderInfo = null;
                lock (__cOrderServiceInfos) {
                    __cOrderServiceInfos.TryGetValue(sOrderParams[0], out cOrderInfo);
                }

                if (cOrderInfo != null)
                {
                    string   sPath     = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
                    Assembly cAssembly = Assembly.LoadFile(Path.GetFullPath(sPath + "\\" + cOrderInfo.Location));
                    Type     cType     = cAssembly.GetType(sOrderParams[1]);

                    cOrderService = Activator.CreateInstance(cType) as AbstractOrderService;
                    cOrderService.Load();                       //讀取資訊
                }
            }
            return(cOrderService);
        }
예제 #10
0
 /// <summary>
 ///   設定下單服務元件(需要設定佣金參數, 所以必須傳出)
 /// </summary>
 /// <param name="service">下單服務元件</param>
 internal void SetOrderService(AbstractOrderService service)
 {
     __cOrderService = service;
 }
        internal frmCommissionRuleSettings(AbstractOrderService orderService)
        {
            InitializeComponent();

            __cOrderService = orderService;
        }
예제 #12
0
 public ServicesHub(AbstractOrderService orderService)
 {
     Services.Add("OrderService", orderService);
 }