/// <summary> /// Constructor. /// </summary> /// <param name="setupid">Identifies the strategy</param> /// <param name="type">Buy (+1) or Sell (-1)</param> /// <param name="tick">Condition to start trade</param> /// <param name="discount">Discount on brokage commission</param> public Trade(int type, Tick tick, Setup setup) { this.Id = Guid.NewGuid(); this.SetupId = setup.SetupId; this.Type = type; this.Symbol = tick.Symbol; this.EntryTime = tick.Time; this.EntryValue = tick.Value; this.Slippage = setup.Slippage; this.IStatus = Status.Idle; this.AssetClass = tick.GetClass(); this.MinVar = tick.GetMinVar(); this.Unit = tick.GetUnit(); var commissions = tick.GetCommissions(); var rebate = Math.Min(1, Math.Max(0, 1 - setup.Discount / 100)); this.BkrFixComm = commissions[0] * rebate; _bkrvarcomm = commissions[1] * rebate; _bspvarcomm = commissions[2]; this.State = "WhiteSmoke"; this.IsDayTrade = setup.DayTradeDuration > 0; this.CloseTime = tick.Time.Date.AddDays(1).AddSeconds(-1); this.SetQnty(setup.Capital); this.SetLoss(setup.StaticLoss); this.SetGain(setup.StaticGain); this.GetNetResult(null); // Clean up "initial" NetResult }
private void OnTickArrived(object sender, DdeAdviseEventArgs e) { var value = 0m; if (TickArrived == null || !decimal.TryParse(e.Text, out value)) { return; } if (BvspTime.Hour < 9 || value == 0) { return; } Task.Factory.StartNew(() => { var symbol = e.Item.Split('.')[0].Split(';')[0]; var dde = e.Item.Contains(";") ? "CMA" : "NPC"; if (dde == "CMA") { symbol = symbol.Substring(4); } var tick = new Tick(symbol, BvspTime, value); if (BvspTime.Hour == 9) { if (!tick.GetClass().Contains("BMF")) { return; } } TickArrived(tick); //NotifyOMS(tick.ToString() + " from " + dde); _lasttime[dde] = tick.Time; //if (!IsDeveloper) return; //Table.Execute(TableOperation.InsertOrReplace(tick)); }); }