 Know tell me that it is correct ?
I wish the takeprofit and the stoploss function as selection criteria protected override double GetFitness(GetFitnessArgs args)
{
//maximize count of winning trades and minimize count of losing trades
return (args.NetProfit * args.WinningTrades * TakeProfit) / (args.MaxEquityDrawdownPercentages * StopLoss);
} Robots do not cry! 
 I discovered how powerful custom criteria .
The example below was exactly what I was looking for optimization.
Test and tell me what you think ? protected override double GetFitness(GetFitnessArgs args)
{
//maximize count of winning trades and minimize count of losing trades
return (Math.Pow(args.NetProfit, 3) * Math.Pow(args.WinningTrades, 2) * TakeProfit) / (Math.Pow(args.MaxEquityDrawdownPercentages, 2) * Math.Pow(StopLoss, 2) * args.MaxEquityDrawdown);
//return (args.NetProfit * args.WinningTrades) / (args.MaxEquityDrawdownPercentages * StopLoss);
} Robots do not cry! 
 Always found problems in optimization keep Takprofit greater than the stoploss and still have a consistent gain. The modification below by dividing the (takeprofit / stoploss), he seeks the best results tend to keep esssa major / minor relationship. And put the end to keep both (if possible) lower, as in my case use in M15. It Works ... Robots do not cry! 
 protected override double GetFitness(GetFitnessArgs args)
{
//maximize count of winning trades and minimize count of losing trades
return (Math.Pow(args.NetProfit, 3) * Math.Pow(args.WinningTrades, 2) * (TakeProfit/StopLoss)) / (Math.Pow(args.MaxEquityDrawdownPercentages, 2) * TakeProfit * StopLoss * args.MaxEquityDrawdown);
//return (args.NetProfit * args.WinningTrades) / (args.MaxEquityDrawdownPercentages * StopLoss);
} Robots do not cry! 
 
 
 // MultiCharts Custom Criteria: Pessimistic Return on Margin (PROM) by Robert Pardo
// Change the value below to your account size
var AccountSize = 10000;
/* The code below can be left untouched */
// check for errors / wrong values
if (AccountSize < 1  StrategyPerformance.WinningTrades == 0 
StrategyPerformance.LosingTrades == 0) {
return 0;
}
var sqrtWins = Math.sqrt(StrategyPerformance.WinningTrades);
var sqrtLosses = Math.sqrt(StrategyPerformance.LosingTrades);
return ( ((StrategyPerformance.AvgWinningTrade * (StrategyPerformance.WinningTrades  sqrtWins) ) 
( StrategyPerformance.AvgLosingTrade * (StrategyPerformance.LosingTrades + sqrtLosses) )) /
AccountSize) * 100; Robots do not cry! 
 How I call this method and what arguments I will put to them? protected override double GetFitness(GetFitnessArgs args) cjdduarte said: I discovered how powerful custom criteria .
The example below was exactly what I was looking for optimization.
Test and tell me what you think ? protected override double GetFitness(GetFitnessArgs args)
{
//maximize count of winning trades and minimize count of losing trades
return (Math.Pow(args.NetProfit, 3) * Math.Pow(args.WinningTrades, 2) * TakeProfit) / (Math.Pow(args.MaxEquityDrawdownPercentages, 2) * Math.Pow(StopLoss, 2) * args.MaxEquityDrawdown);
//return (args.NetProfit * args.WinningTrades) / (args.MaxEquityDrawdownPercentages * StopLoss);
}

 
 Hi. How will you go about calculating the AvgWinning or AvgLosing trade? cjdduarte said: // MultiCharts Custom Criteria: Pessimistic Return on Margin (PROM) by Robert Pardo
// Change the value below to your account size
var AccountSize = 10000;
/* The code below can be left untouched */
// check for errors / wrong values
if (AccountSize < 1  StrategyPerformance.WinningTrades == 0 
StrategyPerformance.LosingTrades == 0) {
return 0;
}
var sqrtWins = Math.sqrt(StrategyPerformance.WinningTrades);
var sqrtLosses = Math.sqrt(StrategyPerformance.LosingTrades);
return ( ((StrategyPerformance.AvgWinningTrade * (StrategyPerformance.WinningTrades  sqrtWins) ) 
( StrategyPerformance.AvgLosingTrade * (StrategyPerformance.LosingTrades + sqrtLosses) )) /
AccountSize) * 100;


