protected override void OnTick() { if (RunInfo.Active) { RunInfo.EnsureAllClosed(); } //Put your core logic here if (c.EntryParameters.EntryMode == EntryMode.Continuous) { } else if (c.EntryParameters.EntryMode == EntryMode.Volume) { if (!RunInfo.Active && LastTempValue != Bars.TickVolumes.Last(1)) { LastTempValue = Bars.TickVolumes.Last(1); Print("TickVolume.Last(1): {0} - VolumeThreshold.Max: {1}", LastTempValue.ToString(), c.EntryParameters.TickVolumeThreshold.Max.ToString()); } if (!RunInfo.Active && Bars.TickVolumes.Maximum(3) <= c.EntryParameters.TickVolumeThreshold.Max.FallbackIfZero(TickVolumeThresholdMax)) { RunInfo.InitializeGrids(); Print("Grids: {0}", String.Join("-", RunInfo.Grids.Select(x => x.EstimatedPricing.ToString()).ToArray())); Print("OriginalAsk: {0}", RunInfo.OriginalAsk.ToString()); Print("UpperGroundStartingPoint: {0}", RunInfo.UpperGroundStartingPoint.ToString()); Print("OriginalBid: {0}", RunInfo.OriginalBid.ToString()); Print("UnderGroundStartingPoint: {0}", RunInfo.UnderGroundStartingPoint.ToString()); RunInfo.PlaceGridOrders(); } else if (RunInfo.Active) { if (TextTotalNetProfit == null) { TextTotalNetProfit = Chart.DrawText("TotalNetProfit", "Total Net Profit: " + RunInfo.TotalNetProfit.ToString("#0.00"), Bars.OpenTimes.LastValue, Bars.HighPrices.LastValue, Color.White); } else { TextTotalNetProfit.Text = "Total Net Profit: " + RunInfo.TotalNetProfit.ToString("#0.00"); } RunInfo.AnalyzeConditionalClosure(); } } else if (c.EntryParameters.EntryMode == EntryMode.BollingerBandsDistance && RunInfo.Active) { if (TextTotalNetProfit == null) { TextTotalNetProfit = Chart.DrawText("TotalNetProfit", "Total Net Profit: " + RunInfo.TotalNetProfit.ToString("#0.00"), Bars.OpenTimes.LastValue, Bars.HighPrices.LastValue, Color.White); } else { TextTotalNetProfit.Text = "Total Net Profit: " + RunInfo.TotalNetProfit.ToString("#0.00"); } RunInfo.AnalyzeConditionalClosure(); } else if (c.EntryParameters.EntryMode == EntryMode.TimeRangeOfTheDay) { var CurrentTime = c.EntryParameters.TimeOfTheDay.TimeMode == DateTimeMode.Local ? Time.ToLocalTime() : Time; var IsCycleOkay = c.EntryParameters.TimeOfTheDay.MaximumCycle <= 0 || RunInfo.RunningCycle < c.EntryParameters.TimeOfTheDay.MaximumCycle; if (!RunInfo.Active) { if (CurrentTime > CurrentTime.Date.Add(c.EntryParameters.TimeOfTheDay.StartTimeSpan) && CurrentTime < CurrentTime.Date.Add(c.EntryParameters.TimeOfTheDay.EndTimeSpan)) { RunInfo.InitializeCycle(); RunInfo.InitializeGrids(); Print("Grids: {0}", String.Join("-", RunInfo.Grids.Select(x => x.EstimatedPricing.ToString()).ToArray())); Print("OriginalAsk: {0}", RunInfo.OriginalAsk.ToString()); Print("UpperGroundStartingPoint: {0}", RunInfo.UpperGroundStartingPoint.ToString()); Print("OriginalBid: {0}", RunInfo.OriginalBid.ToString()); Print("UnderGroundStartingPoint: {0}", RunInfo.UnderGroundStartingPoint.ToString()); RunInfo.PlaceGridOrders(); } } else { if (TextTotalNetProfit == null) { TextTotalNetProfit = Chart.DrawText("TotalNetProfit", "Total Net Profit: " + RunInfo.TotalNetProfit.ToString("#0.00"), Bars.OpenTimes.LastValue, Bars.HighPrices.LastValue, Color.White); } else { TextTotalNetProfit.Text = "Total Net Profit: " + RunInfo.TotalNetProfit.ToString("#0.00"); } RunInfo.AnalyzeConditionalClosure(); } } }