SQOrder Class MAE/MFE Properties Returning 0

6 réponses

seaton

Client, bbp_participant, communauté, 161 réponses.

Visiter le profil

Il y a 8 ans #114154

Je viens de jouer avec mon premier graphique et j'ai fait un MAE vs % Gain, tout est assez simple et direct (j'adore la possibilité d'étendre BTW) cependant la classe SQOrders semble renvoyer 0 pour les propriétés MAE et MFE ?

 

Je viens d'essayer de joindre le fichier et le forum ne me le permet pas, je l'ai donc collé ci-dessous.  

 

BTW serait bien d'avoir une section dans le forum pour permettre le partage des extensions, car je suis heureux de partager les miennes.

package com.strategyquant.extend.TradeAnalysisPanes ;

import java.util.ArrayList ;


import org.jfree.chart.JFreeChart ;


import com.strategyquant.lib.charts.common.SQChart ;
import com.strategyquant.lib.charts.common.SQScatterChart ;
import com.strategyquant.lib.charts.common.duration.TimeDuration ;
import com.strategyquant.lib.language.L ;
import com.strategyquant.lib.results.SQData ;
import com.strategyquant.lib.results.SQOrder ;
import com.strategyquant.lib.results.SQOrderList ;
import com.strategyquant.lib.results.SQResultsGroup ;
import com.strategyquant.lib.settings.SQConst ;
import com.strategyquant.lib.snippets.TradeAnalysisChartPane ;


public class MAEvsGainChart extends TradeAnalysisChartPane {
//private ArrayList timeDurationList ;


public MAEvsGainChart() {
this.name = L.t("MAE vs Trade Outcome (% Gain)") ;
}


@Override
public JFreeChart drawChart(SQResultsGroup strategyResult, SQData data) {
SQScatterChart chart = new SQScatterChart() ;
chart.xLegend = L.t("% Gain") ;
      chart.yLegend = L.t("MAE") ;


if(strategyResult==null) {
return chart.render() ;
}


ArrayList trades = computeData(strategyResult, data) ;


for(int trade=0 ; trade<trades.size() ; trade++) {
double[] values = trades.get(trade) ;


if(values[1]<0) {
chart.add("losers", values[1], values[0]) ;
} else {
chart.add("winners", values[1], values[0]) ;
}
}


//chart.setDurationDomainAxis(true) ;
chart.setSeriesColor("losers", SQChart.COLOR_RED) ;
chart.setSeriesColor("winners", SQChart.COLOR_GREEN) ;


return chart.render() ;
}


private ArrayList computeData(SQResultsGroup strategyResult, SQData data) {
ArrayList trades = new ArrayList() ;


SQOrderList orderList = filterOrders(strategyResult, data) ;


for(SQOrder order : orderList) {
double[] values = new double[2] ;
values[0] = order.MAE ;
values[1] = order.PctPL ;


trades.add(values) ;
}


return trades ;
}
}

0

Tamas

Client, bbp_participant, community, sq-ultimate, 73 réponses.

Visiter le profil

Il y a 8 ans #132436

Bonjour seaton,

 

il devrait être facile à calculer MAE/MFE si vous en avez besoin pour votre rapport.

Ils doivent être calculés pour un ensemble particulier d'ordres.

 

Obtenir d'abord les commandes  

SQOrderList orderList = filterOrders(strategyResult, data) ;

 

puis calculer le MAE pour chaque ordre.

for(SQOrder order : orderList) {

   ordre.MAE = valeur ;

}

 

Je vous prie d'agréer, Madame, Monsieur, l'expression de mes salutations distinguées,

Tomas

0

seaton

Client, bbp_participant, communauté, 161 réponses.

Visiter le profil

Il y a 8 ans #132454

Merci Thomas,

 

J'avais supposé à tort que la MAE et la MFE de chaque ordre étaient déjà calculées.

 

Remerciements

0

seaton

Client, bbp_participant, communauté, 161 réponses.

Visiter le profil

Il y a 8 ans #132455

En fait, en me rendant au travail aujourd'hui, j'ai réfléchi à cette question et il n'y a aucun moyen de calculer le MAE/MFE à partir de SQAnalyser car ces chiffres doivent être capturés pendant la transaction/le backtest et ne peuvent donc pas être calculés par SQAnalyser.

 

Comme les données que je charge proviennent de backtests MT4 que j'ai sauvegardés, cette information ne sera pas disponible car je suis presque sûr que le backtester MT4 ne la fournit pas, mais avec les backtests SQ, je pense qu'elle est calculée en interne et je vais donc la tester.

0

seaton

Client, bbp_participant, communauté, 161 réponses.

Visiter le profil

Il y a 8 ans #132456

Je viens de confirmer que c'est bien le cas :

 

MAE/MFE est calculé dans Strategy Quant et n'est PAS dans les backtests MT4, c'est juste une des nombreuses déficiences de MT4 en tant que plateforme.

0

seaton

Client, bbp_participant, communauté, 161 réponses.

Visiter le profil

Il y a 8 ans #132459

Cela m'a conduit au problème suivant.

 

Comment Strategy Quant calcule-t-il les MAE/MFE puisqu'ils semblent incorrects ?

 

1) Le MAE est indiqué comme un nombre positif, il ne devrait jamais être supérieur à 0, alors que l'EMF ne devrait jamais être inférieur à 0.

2) Les valeurs du MAE et du MFE semblent très similaires, je suis donc un peu sceptique à leur égard.

 

Ces résultats proviennent d'une stratégie StrategyQyant chargée dans SQ Analysis, avec des résultats similaires pour différentes stratégies.

 

0

tomas262

Administrateur, sq-ultimate, 2 réponses.

Visiter le profil

Il y a 8 ans #132484

Cela doit être vérifié. J'obtiens également des valeurs différentes de MAE/MFE dans l'analyseur lorsque j'essaie d'importer une stratégie générée dans SQ.

0

Affichage de 6 réponses de 1 à 6 (sur un total de 6)