I set up a chart with an active strategy in a workspace. I've set the timeframe of the strategy to a relatively short term (~2 months) but I'm getting a huge number of emails (hit the Outlook limit of 500 per day) sent from the strategy notifying me of signals.
Is there something I can do in the code to limit the signals to the current day only?
Is there something I can do in the code to limit the signals to the current day only?
Rename
Sure. Don't allow the SendEmail() statement to get hit 500 times.
You should be processing the signals in the BacktestComplete() method.
You should be processing the signals in the BacktestComplete() method.
For an [nearly complete] good start, use this method.
CODE:
// make sure these are at the top using System.Collections.Generic; using System.Linq; using System.Text; public override void BacktestComplete() { // process the signals if (Backtester.Orders.Count > 0) { StringBuilder sb = new System.Text.StringBuilder(); sb.AppendLine("Signal Count = " + Backtester.Orders.Count.ToString()).AppendLine().AppendLine("Exits ------------- Type\tPrice\tWeight\t\tValue"); string fmt = "{0,-6}{1,-6}{2,-8}{3,-8}{4,-8:N2}{5,-8:N4}{6}"; List<Transaction> sells = Backtester.Orders.Where(x => x.IsExit).OrderBy(w => w.Weight).ToList(); if (sells != null) for (int n = sells.Count - 1; n >= 0; n--) { Transaction t = sells[n]; double tradevalue = t.Bars.LastValue * t.Quantity; string signal = String.Format(fmt, t.TransactionType, t.Quantity, t.Bars.Symbol, t.OrderType, t.OrderPrice, t.Weight, tradevalue.ToString("C2", System.Globalization.CultureInfo.CurrentCulture)); sb.AppendLine(signal); } sb.AppendLine().AppendLine("Entries ----------- Type\tPrice\tWeight\t\tValue"); List<Transaction> buys = Backtester.Orders.Where(x => x.IsEntry).OrderBy(w => w.Weight).ToList(); if (buys != null) for (int n = buys.Count - 1; n >= 0; n--) { Transaction t = buys[n]; double tradevalue = t.Bars.LastValue * t.Quantity; string signal = String.Format(fmt, t.TransactionType, t.Quantity, t.Bars.Symbol, t.OrderType, t.OrderPrice, t.Weight, tradevalue.ToString("C2", System.Globalization.CultureInfo.CurrentCulture)); sb.AppendLine(signal); } WriteToDebugLog(sb.ToString()); //now do your send email stuff here //SendEmail(... messageText: sb.ToString()); } }
Thanks, Cone. I'll give this a try over the weekend.
I like the idea of building the details shown in the Quotes window (from the Transaction instances) into a string that can be emailed. And you even sort the Transactions. Nice touch.
The StringBuilder datatype does allow '\n' newline characters in a string, so you may be able to eliminate the empty AppendLine() calls for a '\n' character when you want a blank line.
The StringBuilder datatype does allow '\n' newline characters in a string, so you may be able to eliminate the empty AppendLine() calls for a '\n' character when you want a blank line.
CODE:
Backtester.Orders.Count.ToString()).AppendLine("\nExits ------------- Type\tPrice\tWeight\t\tValue"); //Backtester.Orders.Count.ToString()).AppendLine().AppendLine("Exits ------------- Type\tPrice\tWeight\t\tValue");
Your Response
Post
Edit Post
Login is required