Algorithmic Trading
Expert Advisors Engineered to Your Rules.
Your logic, implemented exactly, with the safeguards that live trading requires.
//+------------------------------------------------+
//| 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);
}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.
//+------------------------------------------------+
//| 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);
}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.