Page 1 of 1
Risk discipline: after a losing streak
Posted: Sat Sep 19, 2026 5:45 pm
by LondonScalper
Risk discipline after a losing streak
A three-loss cluster does not mean the edge died before lunch. It usually means my decision quality did. After streaks, I stop asking “how do I get flat on the day” and start asking “what am I allowed to do next without making the hole deeper.”
My post-streak protocol is written and boring on purpose:
- Hard stop on new risk for the remainder of that session once the cluster hits three full stops or my process score drops below threshold — whichever comes first.
- Next day: half size, one setup type only, written invalidation before every entry.
- Review with sound off on recordings. Narrative lies; the tape does not.
I refuse to “trade through” a streak to prove toughness. That is ego with a stop attached. Prop accounts punish this harder than personal ones, but the psychology is identical: the streak wants activity; survival wants silence and a smaller ticket tomorrow.
After a losing streak, do you shut the session, cut size for a fixed period, or change the setup menu first?
Re: Risk discipline: after a losing streak
Posted: Wed Sep 23, 2026 7:41 pm
by PTScalper
LondonScalper wrote: Sat Sep 19, 2026 5:45 pm
Risk discipline after a losing streak
A three-loss cluster does not mean the edge died before lunch. It usually means my decision quality did. After streaks, I stop asking “how do I get flat on the day” and start asking “what am I allowed to do next without making the hole deeper.”
My post-streak protocol is written and boring on purpose:
- Hard stop on new risk for the remainder of that session once the cluster hits three full stops or my process score drops below threshold — whichever comes first.
- Next day: half size, one setup type only, written invalidation before every entry.
- Review with sound off on recordings. Narrative lies; the tape does not.
I refuse to “trade through” a streak to prove toughness. That is ego with a stop attached. Prop accounts punish this harder than personal ones, but the psychology is identical: the streak wants activity; survival wants silence and a smaller ticket tomorrow.
After a losing streak, do you shut the session, cut size for a fixed period, or change the setup menu first?
Hi LondonScalper,
Shutting the session is always step one.
You cannot out-think a compromised mindset; you can only unplug it. When a three-loss cluster hits, your cognitive capital is depleted just as much as your financial capital. Attempting to filter setups or adjust sizing in that exact moment requires the very executive function that the losing streak just compromised.
Here is the hierarchy of survival:
The Circuit Breaker (Immediate): Shut the session. The tape will be there tomorrow. As you said, trading through it is just "ego with a stop attached."
The Size Cut (Day Two): Half size limits the financial damage of a lingering tilt or a genuinely shifting market regime.
The Setup Menu (Day Two): Restricting yourself to your "A+" setup forces patience. It stops you from manufacturing trades just to get exposure.
Re: Risk discipline: after a losing streak
Posted: Wed Sep 23, 2026 7:42 pm
by PTScalper
Your protocol is elite. It acknowledges that a trader's primary job isn't making money; it's protecting capital from their own brain.
Here is a cTrader cBot (C#) script that automates your exact "circuit breaker" rule. It acts as a wrapper for your trading logic, monitoring your closed positions. If it detects three consecutive losses in a single day, it locks out all new entries and cancels any pending orders until the next calendar day.
Code: Select all
using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.API.Requests;
namespace cAlgo.Robots
{
[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class RiskDisciplineBot : Robot
{
[Parameter("Max Consecutive Losses", Group = "Risk Protocol", DefaultValue = 3, MinValue = 1)]
public int MaxConsecutiveLosses { get; set; }
[Parameter("Bot Label", Group = "Risk Protocol", DefaultValue = "DisciplineBot")]
public string BotLabel { get; set; }
private int _consecutiveLosses = 0;
private DateTime _currentTradingDay;
private bool _isLockedForDay = false;
protected override void OnStart()
{
// Subscribe to the position closed event to track wins/losses
Positions.Closed += OnPositionClosed;
// Initialize the trading day tracker
_currentTradingDay = Server.Time.Date;
Print("Risk Protocol Active: Hard stop at {0} consecutive losses.", MaxConsecutiveLosses);
}
protected override void OnTick()
{
// 1. Check for a new trading day to reset the circuit breaker
if (Server.Time.Date != _currentTradingDay)
{
ResetDailyRisk();
}
// 2. Enforce the hard stop
if (_isLockedForDay)
return; // Blocks any further logic from executing
// ==========================================================
// YOUR ENTRY LOGIC GOES HERE
// Example:
// if (YourSetupCondition && !_isLockedForDay)
// {
// ExecuteMarketOrder(TradeType.Buy, SymbolName, Volume, BotLabel, StopLoss, TakeProfit);
// }
// ==========================================================
}
private void OnPositionClosed(PositionClosedEventArgs args)
{
var position = args.Position;
// Only track positions opened by this specific strategy/label
if (position.SymbolName != SymbolName || position.Label != BotLabel)
return;
// Check if the trade was a loser (using GrossProfit to ignore swap/commissions,
// or use NetProfit if you consider a commission-drain a loss)
if (position.GrossProfit < 0)
{
_consecutiveLosses++;
Print("Loss recorded. Current losing streak: {0}", _consecutiveLosses);
// Trigger the circuit breaker
if (_consecutiveLosses >= MaxConsecutiveLosses)
{
LockDownSession();
}
}
else if (position.GrossProfit > 0)
{
// Reset the streak on a winning trade
_consecutiveLosses = 0;
}
}
private void LockDownSession()
{
_isLockedForDay = true;
Print("PROTOCOL TRIGGERED: {0} consecutive losses. Session locked until tomorrow.", MaxConsecutiveLosses);
// Cancel any resting limit/stop orders associated with this bot to prevent accidental entries
var pendingOrders = PendingOrders.Where(o => o.Label == BotLabel).ToArray();
foreach (var order in pendingOrders)
{
CancelPendingOrder(order);
Print("Cancelled pending order {0} due to session lockdown.", order.Id);
}
// Optional: Close any other open positions if your rule requires going entirely flat
// foreach (var pos in Positions.Where(p => p.Label == BotLabel)) { ClosePosition(pos); }
}
private void ResetDailyRisk()
{
_consecutiveLosses = 0;
_isLockedForDay = false;
_currentTradingDay = Server.Time.Date;
Print("New Session: Risk protocols reset. Stay disciplined today.");
}
}
}
Re: Risk discipline: after a losing streak
Posted: Wed Sep 23, 2026 7:42 pm
by PTScalper
How this script enforces your process:
Automated Lockdown: Once _consecutiveLosses hits 3, _isLockedForDay becomes true. The OnTick() method will immediately return, physically preventing the bot from firing new market orders.
Order Sweep: The moment the 3rd stop gets hit, the bot scrubs the book of any pending limit or stop orders you left out there, preventing a stray fill while you are locked out.
Clean Slate Daily: At midnight server time, the bot automatically unfreezes, resets the loss counter, and prints a reminder to the log. You can then step in, cut the volume variable in half, and run your Day Two protocol.
Re: Risk discipline: after a losing streak
Posted: Wed Sep 23, 2026 7:44 pm
by PTScalper
The script I provided in the previous response is actually already written in C# using the cTrader API (cAlgo.API)!
However, looking back at your process, you sound like a discretionary (manual) trader, not someone running fully automated algorithms. The previous script was structured for an automated bot.
If you are trading manually, you need a background monitor cBot that watches your manual trades and forces you to stick to your rules.
Here is a specialized cTrader script tailored for manual traders. You attach it to a chart, and it runs in the background. If you hit 3 consecutive losses, it enters Lockdown Mode. During Lockdown Mode, it draws a massive warning on your chart, and if you try to manually open a new trade out of tilt, the bot will instantly close it for you until the next day.
Re: Risk discipline: after a losing streak
Posted: Wed Sep 23, 2026 7:44 pm
by PTScalper
The cTrader Manual Risk Monitor Bot
Code: Select all
using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Internals;
namespace cAlgo.Robots
{
[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class ManualRiskEnforcer : Robot
{
[Parameter("Max Consecutive Losses", Group = "Risk Protocol", DefaultValue = 3, MinValue = 1)]
public int MaxConsecutiveLosses { get; set; }
private int _consecutiveLosses = 0;
private DateTime _currentTradingDay;
private bool _isLockedForDay = false;
protected override void OnStart()
{
// Subscribe to events to watch your manual trades
Positions.Closed += OnPositionClosed;
Positions.Opened += OnPositionOpened;
_currentTradingDay = Server.Time.Date;
Print("Manual Risk Enforcer Active. Allowed consecutive losses: {0}", MaxConsecutiveLosses);
DrawStatusOnChart();
}
protected override void OnTick()
{
// Check for a new trading day to reset the circuit breaker
if (Server.Time.Date != _currentTradingDay)
{
ResetDailyRisk();
}
}
private void OnPositionClosed(PositionClosedEventArgs args)
{
var position = args.Position;
// Check if the trade was a loser (using GrossProfit to ignore swap/commissions)
if (position.GrossProfit < 0)
{
_consecutiveLosses++;
Print("Loss recorded. Current losing streak: {0}", _consecutiveLosses);
if (_consecutiveLosses >= MaxConsecutiveLosses && !_isLockedForDay)
{
LockDownSession();
}
else
{
DrawStatusOnChart();
}
}
else if (position.GrossProfit > 0)
{
// Reset the streak on a winning trade
_consecutiveLosses = 0;
DrawStatusOnChart();
}
}
private void OnPositionOpened(PositionOpenedEventArgs args)
{
// IF TILT HAPPENS: This blocks you from trading during lockdown.
// If you try to open a trade while locked out, the bot instantly closes it.
if (_isLockedForDay)
{
Print("TILT PROTECTION: You are locked out for the day. Closing unauthorized trade.");
ClosePosition(args.Position);
}
}
private void LockDownSession()
{
_isLockedForDay = true;
Print("PROTOCOL TRIGGERED: {0} consecutive losses. Session locked until tomorrow.", MaxConsecutiveLosses);
// Cancel any pending limit/stop orders you left on the books
foreach (var order in PendingOrders)
{
CancelPendingOrder(order);
}
DrawStatusOnChart();
}
private void ResetDailyRisk()
{
_consecutiveLosses = 0;
_isLockedForDay = false;
_currentTradingDay = Server.Time.Date;
Print("New Session: Risk protocols reset. Half size, one setup today.");
DrawStatusOnChart();
}
private void DrawStatusOnChart()
{
if (_isLockedForDay)
{
Chart.DrawText("Status", "SESSION LOCKED\n3 LOSSES HIT\nGO AWAY",
Chart.Height / 2, Chart.Width / 2, Color.Red);
}
else
{
string statusText = string.Format("Streak: {0} Loss(es)\nMax: {1}", _consecutiveLosses, MaxConsecutiveLosses);
Chart.DrawText("Status", statusText,
Chart.Height - 50, 20, Color.LimeGreen);
}
}
}
}
Re: Risk discipline: after a losing streak
Posted: Wed Sep 23, 2026 7:45 pm
by PTScalper
How to install this in cTrader:
1.) Open cTrader and navigate to the Automate tab (the robot icon on the far left menu).
2.) Click the "+" (New cBot) button in the top left corner.
3.) Name it ManualRiskEnforcer.
4.) Delete all the default code that appears in the editor window.
5.) Paste the code above into the editor.
6.) Click the Build icon (the hammer at the top) or press F7 on your keyboard. Ensure it says "Build Succeeded" at the bottom.
7.) Go back to your regular Trade tab.
8.) Click the cBot icon at the top of your chart, select ManualRiskEnforcer, hit Apply, and press the Play button to turn it on.
Now, it will sit quietly on your chart, tracking your PnL streak. If you take 3 hits, it will print big red text on your screen and act as a literal bouncer, instantly liquidating any new positions you try to open until midnight server time.