Projet ouvert - tester-optimiser en interne

 
J'ai l'idée d'écrire mon propre testeur sous la forme d'un indicateur. L'exigence - avec un minimum de remaniement, le conseiller expert doit être adapté aux testeurs standard et aux testeurs autonomes. Pour ce faire, on ajoute le préfixe my aux constantes et fonctions standard. L'optimisation est également acceptable.
Le modèle est écrit, il est nécessaire d'implémenter les fonctions de trading en écrivant vos propres fonctions.
Qui est bon dans ce domaine - rejoignez-nous. Fonctions de négociation par la manipulation de tableaux. Nous avons également besoin d'un expert en dessin d'objets sur le graphique - utilisez des flèches/dessins pour représenter les niveaux d'ouverture, de stop et de prise de bénéfices.
Nous avons également besoin d'organiser la sortie de l'historique des commandes et des séries numériques dans un fichier pour ouvrir des graphiques dans Excel. En général, tout est très sérieux :)

J'ai pensé à tout en principe, mais je ne suis pas un universaliste.

Je peux suggérer des idées, si quelqu'un le souhaite. En outre, il est possible que la variante créée par soi-même, dans certains cas d'optimisation par les performances, soit capable de surpasser la variante construite.

//+------------------------------------------------------------------+
//|                                                   SelfTester.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 DarkBlue
#property indicator_color3 LawnGreen
//---- input parameters
extern int       mySpread=4;
extern int       BeginYear=2002;
extern int       BeginMonth=1;
extern int       BeginDay=1;
extern string    ReportName="report";
extern int       Param1=8;
extern int       Param2=13;
extern double    myDepo=10000.0;
extern double    mylots=0.1;
extern int       myTakeProfit=100.0;
extern int       myStopLoss=80.0;
extern int       myTrailingStop=20;
//---- buffers
double myBalance[];
double myEquity[];
double myProfit[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,myBalance);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,myEquity);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,myProfit);
   double TradeOrdersArray[100][14];
   double ClosedOrdersArray[2000][14];
   int myOrdersTotal=0;
   double myOrderOpenPrice=0.0;
   double myOrderLots=0.0; 
   string myOrderComment=""; 
   int myOrderMagicNumber;
   int myOrderOpenTime;
   double myOrderProfit=0.0;
   double myOrderStopLoss=0.0;
   double myOrderTakeProfit=0.0;
   int myOrderTicket;
   int myOrderType; 

   int myOP_BUY=0;
   int myOP_SELL=1;
   int myOP_BUYLIMIT=2;
   int myOP_BUYSTOP=3;
   int myOP_SELLLIMIT=4;
   int myOP_SELLSTOP=5;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//---- TODO: add your code here
   
//----
   return(0);
  }
//+------------------------------------------------------------------+




 
Je ne sais pas quel genre de charabia est apparu. Si quelqu'un le veut, je le posterai ailleurs sur un autre forum.
 
2 Rosh
Je ne sais pas vraiment ce que vous voulez dire avec cette présélection. À mon avis, vous voulez obtenir un ensemble de fonctions qui calculeront le profit et marqueront les points d'entrée/stop sur le graphique en même temps ? Et le moteur de décision sera différent pour chacun d'eux ?

Et quelques conseils :
extern int       BeginYear=2002


mieux vaut être remplacé par

extern string       BeginDate="2002.01.01 18:00"


- il est possible de travailler immédiatement avec une construction du type

Time[i] > StrToTime(BeginDate)



Oui et probablement des choses comme

double myOrderOpenPrice=0.0;
double myOrderLots=0.0; 


serait également plus pratique à stocker en tant que

#define LOTS 0;
#define OPEN_PRICE 1;

double MyOrder[2] = {0.0, 0.0};
.....................
MyOrder[OPEN_PRICE] = Open[i];
.....................
 


mais ce ne sont que des petites choses...

 
Filin, tu n'es pas dans ton assiette. Pourquoi définir la constante
?
#define LOTS 0;

Il s'agit de la variable d'entrée pour le testeur.

D'où cela vient-il ?

#define OPEN_PRICE 1;


Avez-vous remarqué que toutes ces variables (qui pourraient être mieux définies par des fonctions)

double myOrderOpenPrice=0.0;
double myOrderLots=0.0; 

Sont des jumeaux de la mql-4 intégrée. J'ai écrit que l'objectif est que notre testeur et le testeur embarqué comprennent l'EA
avec un minimum de retouches.

Le moteur de décision est le code EA. Et il sera facilement intégré dans cette EA. Le moteur du testeur est constitué de fonctions que je suggère à
de "remplacer", c'est-à-dire que nous prenons la fonction standard intégrée, par exemple OrderSend(), et l'utilisons pour écrire une fonction similaire complète - myOrderSend() . Et ainsi de suite.
Je vais écrire cette fonction ce soir pour la rendre plus claire.

Vous devez être plus minutieux, plus minutieux... :)

 
Je ne sais pas quel genre de charabia est apparu. Si quelqu'un le veut, je le posterai sur un autre forum quelque part.

Ceci est apparu il n'y a pas longtemps. Lors du transfert de texte depuis MQL, les lettres russes apparaissent de cette manière. La même chose que FronPage fait avec les lettres russes.
 
Je pensais que les lettres cursives seraient reconverties en lettres russes lorsque je copierais et collerais dans le fichier indicateur. Il s'est avéré que non. Je vais le poster sur un autre forum ce soir
et je posterai le lien.
 
Rosh,
Vous ne pouvez pas effacer les déchets ?
C'est impossible à regarder.
Il doit s'agir d'un problème de forum, d'hébergement ou de MT lors de la copie de scripts avec du texte russe.
 
Il est possible de faire des tests de cette manière. Et c'est suffisant. Mais, malheureusement, vous n'obtiendrez pas l'universalisme.
J'ai passé quelques semaines sur de tels tests. À première vue, cela semble simple. Vous obtenez un ensemble de fonctions standard et c'est parti.
Mais cet ensemble n'est rien d'autre qu'une graine : ouverture/fermeture, calcul des profits/pertes, dessin de flèches/tiges.
Le principal et le plus important est l'algorithme d'ouverture/fermeture, qui, disons-le, a déjà été décrit dans certains Expert Advisor. Vous ne pouvez pas glisser et déposer cet algorithme
dans son intégralité. Vous ne pouvez le faire qu'en partie. Et ensuite le suivi "sans erreur" du code résultant... De plus, toutes sortes de rebondissements sont associés à ce processus...
toutes sortes de bricolages... En bref, nous finissons par écrire un programme distinct sur le même sujet en partant de zéro pour la deuxième fois. Après tout ça, en une seconde, vous obtenez
soit un résultat insatisfaisant, soit les flèches sont au mauvais endroit, soit elles se referment aux mauvais endroits. Ensuite, vous revenez au texte du programme et réessayez...
Votre cerveau fonctionne au lieu d'un débogueur, vous vous transformez en moniteur pendant un moment... Finalement, au troisième jour, le test fonctionne
semble bien, mais vous êtes convaincu que la stratégie n'est "pas bonne". Et à ce stade, c'est à peu près tout ! Parce que tester la stratégie suivante de cette façon
il n'y a aucune envie de tester la prochaine stratégie. Pourquoi ai-je écrit tout cela ? L'idée est séduisante. Et en principe, cela fonctionne. Mais, croyez-moi, ce n'est pas quelque chose
ça ne va pas marcher. Si nous parlons d'un modèle, il doit s'agir d'un modèle très fondamental, c'est-à-dire d'une conception très décente et bien pensée. En général,
le programme n'est pas le plus facile. Et si quelqu'un après avoir lu cet opus ne cassera pas une lance dans le cadre du décrit, c'est à dire utiliser ce mon...
Si quelqu'un utilise ma petite, mais néanmoins pratique, expérience et avance sans perdre de temps, quelque chose peut fonctionner. Alors tous ceux qui souffrent
(moi y compris) se cotiseront pour construire un monument à l'auteur. :)
 
OK, je vais faire une fonction dans la soirée (comme promis), tout sera plus clair. Pour l'instant, mon opinion est qu'avec un testeur correctement conçu, il sera possible de
pour utiliser des conseillers experts natifs avec quelques modifications cosmétiques. La première "victime" est MACD_sample.mq4 .
 
Rosh, <br / translate="no">les ordures ne peuvent-elles pas être effacées ?
C'est impossible à regarder.
Il doit s'agir d'un problème de forum, d'hébergement ou de MT lors de la copie de scripts avec du texte russe.


"Poubelle" a été supprimé. Les programmeurs savent probablement combien il est ennuyeux d'écrire (des commentaires) :).

Quelqu'un sait-il - j'ai correctement défini ces constantes sur la base de la norme ?
  int myOP_BUY=0;
   int myOP_SELL=1;
   int myOP_BUYLIMIT=2;
   int myOP_BUYSTOP=3;
   int myOP_SELLLIMIT=4;
   int myOP_SELLSTOP=5;


Signification des valeurs spécifiques.

 
Je suis un imbécile, pourquoi réinventer la roue. Faisons simple :

   int myOP_BUY=OP_BUY;
   int myOP_SELL=OP_SELL;
   int myOP_BUYLIMIT=OP_BUYLIMIT;
   int myOP_BUYSTOP=OP_BUYSTOP;
   int myOP_SELLLIMIT=OP_SELLLIMIT;
   int myOP_SELLSTOP=OP_SELLSTOP;


Cependant, je ne connais pas la réaction du compilateur à l'avance, laissera-t-il passer les constantes commerciales dans le corps de l'indicateur ou non ?
Il est fort probable que ce soit le cas.

Raison: