Algorithmic Trading

Expert Advisors Engineered to Your Rules.

Your logic, implemented exactly, with the safeguards that live trading requires.

SessionBreakout.mq5MQL5
//+------------------------------------------------+
//| Session breakout, risk-based sizing            |
//+------------------------------------------------+
input double RiskPercent   = 0.5;   // risk per trade
input int    RangeStartHr  = 0;     // range window
input int    RangeEndHr    = 7;
input double MaxSpreadPts  = 18;

void OnTick()
{
   if(!IsNewBar() || SpreadPoints() > MaxSpreadPts) return;
   if(PositionsTotalFor(_Symbol, Magic) > 0)      return;

   Range r = SessionRange(RangeStartHr, RangeEndHr);
   if(!r.valid) return;

   double sl   = r.high - r.low;
   double lots = LotsForRisk(RiskPercent, sl);

   if(Close(1) > r.high) Buy(lots,  r.low,  r.high + 2*sl);
   if(Close(1) < r.low)  Sell(lots, r.high, r.low  - 2*sl);
}
Excerpt of an MQL5 Expert Advisor with risk-based position sizing

What goes into a production EA.

  • Entry and exit logic

    Implemented from a written specification, not from guesswork.

  • Risk controls

    Risk-based sizing, exposure caps, spread and slippage filters.

  • Multi-symbol, multi-timeframe

    One system coordinating several instruments and horizons.

  • Trade management

    Partial closes, trailing logic, break-even rules and session filters.

  • Logging

    Decisions recorded so behaviour can be explained after the fact.

  • Source delivered

    Commented source code and a parameter guide are part of the handover.

Readable code, predictable behaviour.

Small functions, explicit state and no hidden magic numbers. The EA you receive can be maintained by any competent MQL developer.

SessionBreakout.mq5MQL5
//+------------------------------------------------+
//| Session breakout, risk-based sizing            |
//+------------------------------------------------+
input double RiskPercent   = 0.5;   // risk per trade
input int    RangeStartHr  = 0;     // range window
input int    RangeEndHr    = 7;
input double MaxSpreadPts  = 18;

void OnTick()
{
   if(!IsNewBar() || SpreadPoints() > MaxSpreadPts) return;
   if(PositionsTotalFor(_Symbol, Magic) > 0)      return;

   Range r = SessionRange(RangeStartHr, RangeEndHr);
   if(!r.valid) return;

   double sl   = r.high - r.low;
   double lots = LotsForRisk(RiskPercent, sl);

   if(Close(1) > r.high) Buy(lots,  r.low,  r.high + 2*sl);
   if(Close(1) < r.low)  Sell(lots, r.high, r.low  - 2*sl);
}
Excerpt of an MQL5 Expert Advisor with risk-based position sizing

Historical backtesting, optimisation and simulation do not guarantee future trading results. We develop software to your specification. We do not provide trading signals or investment advice, and we make no promise of profitability.

Discuss Your Strategy.

Send us your rules in whatever form they exist today. We will tell you what is buildable, what is ambiguous and what it would take.