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(); } } } }
/// <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; }
/// <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); }
/// <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); } } }
/// <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; }
/// <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); } } }
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); } } }
/// <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); }
/// <summary> /// 設定下單服務元件(需要設定佣金參數, 所以必須傳出) /// </summary> /// <param name="service">下單服務元件</param> internal void SetOrderService(AbstractOrderService service) { __cOrderService = service; }
internal frmCommissionRuleSettings(AbstractOrderService orderService) { InitializeComponent(); __cOrderService = orderService; }
public ServicesHub(AbstractOrderService orderService) { Services.Add("OrderService", orderService); }