Articles Populaires

Choix De L'Éditeur - 2019

MQL4: Calcul des coefficients statistiques et leur utilisation pour l'optimisation des conseillers

Salutations les amis!

Il existe de nombreux coefficients statistiques différents qui reflètent l'un ou l'autre aspect de la qualité du système commercial. Et que se passera-t-il si nous optimisons le TS en fonction des valeurs de l'un de ces coefficients? Aujourd'hui, nous aborderons cette question dans une nouvelle leçon de programmation.

Critère d'optimisation personnalisé

Heureusement, MetaTrader offre la possibilité de tester les conseillers en utilisant des critères d'optimisation personnalisés. Vous pouvez trouver cette fonction dans les "Propriétés de Expert Advisor" sous l'onglet "Test":

Le paramètre lui-même en fonction duquel l'optimisation se produit est calculé dans le corps de l'expert à l'aide de la méthode spéciale onTester ().

Ratio de calmar

Voici un calcul du coefficient de calmar classique:

double OnTester () {double AvProfit = 0; double Kalmar = 0; if (TesterStatistics (STAT_PROFIT_TRADES)> 0) {AvProfit = NormalizeDouble (TesterStatistics (STAT_GROSS_PROFIT) / TesterStatistics (STAT_TRADES), Chiffres); Kalmar = NormalizeDouble (AvProfit / TesterStatistics (STAT_BALANCE_DD), chiffres); } return (Kalmar); }

Ce coefficient a été spécialement inventé pour évaluer l'efficacité d'une stratégie de trading particulière d'un trader. Selon de nombreux investisseurs, cela résout des problèmes assez complexes lors du choix d'un objet d'investissement.

Pour la première fois coefficient de calmar a été présenté dans l'un des plus célèbres magazines d'échanges à terme par l'auteur de la rubrique fiducie et investissement dans les fonds spéculatifs, Terry Young. Cet indicateur est basé sur un concept bien connu des traders sous le nom de drawdown.

Le principal inconvénient de cet indicateur est que le risque est déterminé par un seul événement (réduction maximale), réduisant ainsi sa signification statistique et sa représentativité. L'utilisation du prélèvement maximum comme une seule évaluation des risques peut entraîner des biais dans l'évaluation des résultats dus aux émissions. Par conséquent, vous pouvez légèrement modifier la formule en y entrant des données supplémentaires:

double OnTester () {double AvProfit = 0; double Kalmar = 0; if (TesterStatistics (STAT_PROFIT_TRADES)> 0) {AvProfit = NormalizeDouble (TesterStatistics (STAT_GROSS_PROFIT) / TesterStatistics (STAT_TRADES), Chiffres); } Kalmar = NormalizeDouble (-AvProfit * (TesterStatistics (STAT_CONPROFITMAX_TRADES)) / TesterStatistics (STAT_TRADES)) / (TesterStatistics (STAT_MAX_LOSSTRADE) * (TesterStatistics (STAT_CONLOSSMAX_TRADES)) retour (Kalmar); }

Coefficient de Sortino

De nombreuses métriques différentes sont utilisées pour évaluer les systèmes de trading. Chacun d'entre eux vise à identifier l'un ou l'autre facteur et l'un de ces indicateurs est le coefficient de Sortino.

Coefficient de Sortino il est d'usage de l'utiliser dans les cas où nous nous intéressons à la propagation des valeurs négatives des rendements. La méthode de calcul est très similaire au calcul du ratio de Sharpe. Si les rendements positifs et négatifs sont utilisés pour le ratio de Sharpe, seules les valeurs négatives sont utilisées pour le coefficient de Sortino.

Il convient de noter que Harry Markowitz, qui a développé la théorie moderne du portefeuille, a souligné l’importance d’utiliser les écarts négatifs comme mesure du risque. Un rendement positif a toujours un effet positif pour un investisseur, mais un rendement négatif représente un impact négatif et doit être étudié.

Ecrivons un code qui va calculer et renvoyer la valeur du coefficient de Sortino:

double OnTester () {double AvProfit = 0; double Sortino = 0; double AvLoss = 0; double MaxLoss = 0; if (TesterStatistics (STAT_PROFIT_TRADES)> 0) AvProfit = NormalizeDouble (TesterStatistics (STAT_GROSS_PROFIT) / TesterStatistics (STAT_PROFIT_TRADES), Chiffres); AvLoss = NormalizeDouble (TesterStatistics (STAT_GROSS_LOSS) / TesterStatistics (STAT_LOSS_TRADES), Chiffres); MaxLoss = NormalizeDouble (TesterStatistics (STAT_MAX_LOSSTRADE), Digits); Sortino = NormalizeDouble (((AvProfit-MaxLoss) / - AvLoss), Chiffres); retour (Sortino); }

Coefficient de train

Coefficient de train (Treynor 1965) est également appelé le rapport récompense / volatilité et représente le rapport entre les rendements excédentaires et le risque de marché. Contrairement au ratio de Sharpe, dans cet indicateur, la rentabilité ne correspond pas au risque général, mais uniquement au risque systématique (non diversifiable).

Plus les valeurs de l'indicateur Trainor sont élevées, plus le portefeuille de placements est géré de manière efficace. Par conséquent, les stratégies présentant les valeurs les plus élevées de l'indicateur Trainor sont sélectionnées. En règle générale, cet indicateur est utilisé pour créer des notations de portefeuille.

Jetons un coup d'oeil au code:

double OnTester () {double AvProfit = 0; double Treynor = 0; double AvLoss = 0; double MaxProfit = 0; if (TesterStatistics (STAT_PROFIT_TRADES)> 0) AvProfit = NormalizeDouble (TesterStatistics (STAT_GROSS_PROFIT) / TesterStatistics (STAT_PROFIT_TRADES), Chiffres); AvLoss = NormalizeDouble (TesterStatistics (STAT_GROSS_LOSS) / TesterStatistics (STAT_LOSS_TRADES), Chiffres); MaxProfit = NormalizeDouble (TesterStatistics (STAT_MAX_PROFITTRADE), Digits); Treynor = NormalizeDouble (((AvProfit-MaxProfit) / - AvLoss), chiffres); retour (Treynor); }

Ratio de Sharpe

Ratio de Sharpe est venu avec le célèbre économiste américain - William Sharp. C'est aujourd'hui l'un des indicateurs les plus couramment utilisés du ratio risque / rendement. Vous pouvez en savoir plus sur le ratio Sharpe dans un article séparé. Eh bien, regardons le code:

double OnTester () {double AvProfit = 0; double Sharp = 0; double ObLoss = 0; double MaxProfit = 0; if (TesterStatistics (STAT_PROFIT_TRADES)> 0) AvProfit = NormalizeDouble (TesterStatistics (STAT_GROSS_PROFIT) / TesterStatistics (STAT_PROFIT_TRADES), Chiffres); MaxProfit = NormalizeDouble (TesterStatistics (STAT_MAX_PROFITTRADE), Digits); ObLoss = NormalizeDouble (TesterStatistics (STAT_GROSS_LOSS), Digits); Sharp = NormalizeDouble (((AvProfit-MaxProfit) / - ObLoss), Chiffres); retourner (Sharp); }

Conclusion

Ainsi, vous pouvez optimiser toutes les statistiques de vos experts en négociation en utilisant des formules de divers coefficients statistiques généralement acceptés, ainsi qu'en écrivant les vôtres.

Laissez Vos Commentaires