Identifiant   Mot de passe       Oublie mot de passe?  Oublie login?  Creer un compte

Trading Automatique

Coder plus... pour gagner plus!

Forum Trading Auto

by pensera
Mar.13.10 17:46:51
by nvitale
Mar.13.10 11:58:15
by nvitale
Mar.11.10 21:08:44
by nvitale
Mar.10.10 17:08:38
by nvitale
Mar.08.10 23:27:41
by laurhaq
Mar.08.10 21:25:55
Animé par JoomlaMe
Programmation
Comment spécifier votre stratégie de trading à un développeur Envoyer

 

Depuis la création du service de programmation de Trading Automatique, nous avons travaillé avec de nombreux traders différents et nous avons fait le constat que la phase de spécification du système est souvent la plus délicate, voire la plus longue. Pour éviter les malentendus, nous avons mis en place un système de formulaire à remplir pour aider le trader à formuler sa demande, mais ceci n'est pas toujours efficace. Voici donc un petit article dont la lecture est conseillée avant de réaliser votre demande de programmation.

Tout d'abord, ayez bien à l'esprit que le programme va être codé par une personne qui n'a initialement pas la moindre idée de votre stratégie. Vous devriez donc spécifier tous les petits détails : comme les paramètres des indicateurs, la distance des ordres stops, le nombre maximal de positions ouvertes, l'algorithme de trailing stop, etc. Vos spécifications doit contenir la description de la marche à suivre en fonction de chaque évènement significatif : activation d'un ordre stop, apparition d'un signal d'entrée lorsqu'une position est déjà ouverte, que faire lors du redémarrage d'un EA après une déconnexion, etc.

Vous devriez comprendre que votre ordinateur ne peut ne deviner, ni assumer des décisions indépendantes. Il tradera seulement en fonction de vos règles. Si une situation non prévue par votre algorithme survient, voter EA ne fera rien.

Je sens bien que vous êtes en train de vous dire que ceci est logique et que vous l'avez bien compris. Pourtant ce n'est pas ce que nous observons en pratique. Prenons donc un exemple tiré de cet article disponible sur MQL4.com .

C'est un échange typique bien que largement exagéré pouvant survenir lorsqu'un trader commande un EA à un développeur qui n'ira pas plus loin que les spécifications fournies. Bien évidemment, nous ne réagissons pas comme ça et nous demanderons les détails supplémentaires. Mais le but ici est d'exagérer les erreurs pour les mettre en valeur. N'oubliez pas qu'au final, une spécification bien faite dès le départ permet de faire gagner du temps et donc de l'argent à la fois au trader et au développeur.

 

Trader :

Bonjour! Je veux commander un EA.
L'EA doit ouvrir une position au croisement de la MM(9) et MM(18). Si la moyenne rapide croise vers le haut la moyenne lente, une position Buy doit être ouverte. Et vice versa.
Combien ça coute?

 

Développeur :

Pour vous donner un devis, j'ai besoins des spécifications détaillées. Je dirais environ xx euros en fonctions de ce que j'ai là.

 

Trader :

Je vous ai déjà tout détaillé dans mon mail précédent. L'EA doit ouvrir une position au croisement de la MM(9) et MM(18). Si la moyenne rapide croise vers le haut la moyenne lente, une position Buy doit être ouverte. Et vice versa.

 

Développeur :

OK, voici votre EA.

 

Trader :

C'est quoi ce travail? Ce n'est pas un EA ça! Pourquoi il y a autant de positions ouvertes et jamais clôturées. Etes vous réellement un programmeur?

 

Développeur :

Le nombre de positions ouvertes correspond au nombre de croisements. Testez votre EA en mode visuel du backtest et vous verrez bien qu'une position est ouverte à chaque croisement.Si le croisement est vers le haut, une position BUY est ouverte, si le croisement est vers le bas c'est une position SELL. Votre spécification ne dit rien sur la fermeture des ordres.

 

Trader :

J'ai oublié de vous le dire: si il y a une position ouverte, elle devrait être fermée lors d'un croisement inverse. Seulement une position peut être ouverte à un moment donnée. Et pour chaque position un stop loss devrait être placé à une distance paramétrable.

 

Developpeur :

OK, ceci est beaucoup plus clair. Voici la nouvelle version.

 

Trader :

Pourquoi il y a une position Buy ouverte ici? Il n'y a pas de croisement!

Developpeur :

Il y avait bien un croisement mais il a disparu. Le graphique ne reflète que les valeur des indicateurs sur les barres fermées et vous devez regarder le graphique en temps réel pour voir évoluer au fur et à mesure la valeur de l'indicateur sur la dernière barre. Croyez mi, il y avait bel et bien une intersection au moment de l'ouverture de la barre.

Si vous le souhaitez, nous pouvons modifier l'EA pour qu'il prenne en compte la valeur des indicateurs seulement à la clôture des bougies. De cette manière, tous les signaux seront visibles sur le graphique.


Trader :

Essayons.
Et puis je optimiser les valeurs des moyennes mobiles, des stop loss et take profit?


Developpeur :

Voici la troisième version :
- la recherche des signaux est réalisée sur les bougies clôturées (1ère et 2 ème)
- les paramètres des moyennes mobiles, stop loss et take profit sont désormais tous des paramètres à part entière que vous pouvez modifier et optimiser comme bon vous semble.


Trader :

Maintenant ça ressemble à ce que je désirais réellement. Mais quand je démarre plusieurs EAs, seulement l'un des deux trade. Et de temps en temps ils ferment les positions des autres EAs!


Developpeur :

Dans cette quatrième version j'ai ajouté la séparation des ordres en fonction du magic number. Si vous démarrez plusieurs EAs sur une même paire, mettez une valeur de magic number différente pour chaque EA.


Trader :

C'est enfin parfait.

 

Pour conclure cet exemple, voici ce que doivent être les spécifications pour que le programmeur fournisse l'équivalent de la quatrième version au premier coup (faisant économiser donc au passage de l'argent au trader) :

 

  • L'EA devrait contrôler seulement ses positions et ne devrait pas interagir avec les positions ouvertes manuellement.
  • Si il n'y a pas une position en cours :
    • si la MM courte croise à la hausse la MM lente, une position BUY est ouverte;
    • si la MM courte croise à la baisse la MM lente, une position SELL est ouverte;
  • Si il y a une position ouverte par l'EA :
    • position BUY:
      • si la MM rapide croise la MM longue à la baisse, la position Buy est cloturée et une position Sell est ouverte.
    • position SELL:
      • si la MM rapide croise la MM longue à la hausse, la position Buy est cloturée et une position Sell est ouverte.
  • Les paramètres des MM (période, etc) doivent être des paramètres modifiables
  • Les valeurs des indicateurs doit être calculées en fonction du timeframe affiché par le graphique.
  • La tailles des positions est déterminée par un paramètre modifiable
  • Les stop loss et take profit sont placés à l'ouverture de l'ordre et leur valeur doit être modifiable par paramètres.
  • Il devrait y avoir un paramètre permettant d'activer ou de désactiver les EAs

 

Afin d'aider ce processus de spécification nous fournissons un formulaire à remplir. Si toutefois, même aidé par notre formulaire, écrire sur papier et mettre en forme l'ensemble des règles de votre programme de trading vous semble insurmontable ou que vous avez des questions, n'hésitez pas à nous contacter. Nous ne sommes pas des programmeurs robots tel que décrit dans cet exemple et du moment que vous avez compris le message de cet article, nous serons heureux de travailler avec vous pour vous aider à y voir plus clair.

 
Documentation MQL5 auto générée Envoyer

Article original en VO ici venant du blog Metatrader 5 Blog traduit et adapté par Trading Automatique.

Il y a quelques temps, Paul (phampton) a présenté sur son blog la création d'une documentation MQL5 étendue grâce à l'utilisation d'outils comme Doxygen et HTML Help. Cette documentation inclut la hiérarchie des classes et méthodes pour tout le code contenu dans le répertoire de MQL5 comme les indicateurs et les fichiers d'inclusion .mqh


C'est un bon moyen à destination des développeurs habitués à la programmation objet pour apprendre rapidement le MQL5. Vous pourrez en outre la mettre à jour avec vos propres classes et fonctions. Voici quelques captures de la documentation :


mql5 metatrader 5 extended documentation



mql5 metatrader 5 extended documentation



mql5 metatrader 5 extended documentation



mql5 metatrader 5 extended documentation

 

Paul a déjà compilé la documentation et vous pouvez la trouver ici.

Si vou souhaitez apprendre comment réaliser un telle documentation, je vous recommande la lecture du post de Paul.

 
Transformer MQL4 en MQL5 automatiquement Envoyer

Article original en VO ici venant du blog Metatrader 5 Blog traduit et adapté par Trading Automatique.

Remarque suites aux nombreuses questions reçues par mails : ce script a pour possibilité d'aider la conversion. Il n'est donc pas suffisant en lui même pour la majorité des EAs et il faudra mettre la main dans le code pour continuer ou finir le travail.

Un script qui convertit du code  MQL4 en MQL5 a été développé par Keiji et Circlesquares sur le forum MQL4.

Tout d'abord, téléchargez les fichiers suivant et placez les dans votre répertoire Metatrader 4 / experts / include :

- mt4accountinfo.mqh
- mt4string.mqh
- mt4datetime.mqh
- mt4objects_1.mqh
- mt4timeseries_2.mqh

Rewrite MQL 4 to MQL 5 Script

 



Maintenant, téléchargez la dernière version du script de ré écriture et placez le dans votre répertoire Metatrader 4 / experts / scripts :

- mq4to5rewrite_sample_v4_2.mq4

La prochaine étape est de placer votre EA, indicateur ou script codé en MQL4 et que vous voulez convertir en MQL5 dans le dossier Metatrader 4 / experts / files.

Ouvrez alors Metatrader 4 et lancez le script. Comme vous pouvez vous en apercevoir vous devez renseigner le nom (sans l'extention) de votre fichier .mq4 et sélectionner si c'est un indicateur (0), un EA (1) ou un script (2).

Rewrite MQL 4 to MQL 5 Script


Dans mon cas, je souhaite convertir un indicateur MQL4 nommé ang_DCT :

Rewrite MQL 4 to MQL 5 Script



Maintenant, pressez le bouton OK et si tout est converti, le message suivant apparait.

 

Rewrite MQL 4 to MQL 5 Script



Ensuite, allez dans votre répertoire  Metatrader 4 / experts / files et récupérez votre fichier .mq5 :

Rewrite MQL 4 to MQL 5 Script



Ouvrez le fichier avec MetaEditor 5 et compilez-le :

Rewrite MQL 4 to MQL 5 Script



Essayez de corriger les erreurs apparaissant avec la table de conversion MQL4 à MQL5 et la dernière version du guide utilisateur traduite par Google MQL5 user guide, ou bien détendez vous et demandez à un professionnel.

 

 
Les indicateurs personnels en MQL5 - partie 1 Envoyer


Depuis la sortie Beta de Metatrader 5, nous pouvons commencer à tester petit à petit les nouvelles fonctionnalités. Le but de cet article n'est pas de voir tout ce qui a changé entre MQL4 et MQL5, mais seulement de partir sur un exemple particulier: celui des indicateurs personnels. Nous allons donc laisser de coté la programmation orientée objet qui nécessitera plus qu'un simple article. Cet article se veut plus particulièrement à destination de ceux qui ont une certaine expérience de la programmation MQL4 et souhaitent prendre connaissance des nouveautés et différences de la programmation d'indicateur entre MQL4 et MQL5. Etant donné sa taille, l'article est séparé en plusieurs parties.

Source : Step On New rails : Custom indicators in MQL5

I La structure générale


La structure générale des indicateurs n'a pas changé par rapport à MQL4. Comme auparavant, il y a 3 fonctions : pour l'initialisation, le traitement des données et la fermeture.

De la même manière que précédemment, beaucoup de propriétés des indicateurs peuvent être définies avec le mot clé #property. Les propriétés et les paramètres d'entrée sont comme autrefois définies dans un contexte global.

Prenons comme exemple l'implémentation de l'indicateur coloré RSI. Voici la version tronquée dont la versions entière peut se trouver dans le fichier Color_RSI.mq5 disponible sur l'article original.

Voyons les diverses parties du code :

//+------------------------------------------------------------------+
//|                                                    Color_RSI.mq5 |
//+------------------------------------------------------------------+

// information properties
#property copyright "TheXpert"
#property link      " Cette adresse email est protégée contre les robots des spammeurs, vous devez activer Javascript pour la voir. "
#property version   "1.00"

// Indicator description -- the total length should not exceed 511 characters with CR symbols

#property description "Indicator programming demo in MQL5"
#property description "RSI indicator custom painting"

 

Les propriétés spécifiées dans le code sont aussi accessibles via le le panel d'information de l'indicateur (l'onglet "common" de la table de propriétés). Cela ressemble à cela :

 

 

 

Ces propriétés sont celles des indicateurs classiques. Les autres peuvent être trouvées dans l'aide.

// the indicator properties
#property indicator_separate_window // indicator will be displayed in the separate subwindow

//#property indicator_minimum 0
//#property indicator_maximum 100

#property indicator_buffers 2 // buffers used
#property indicator_plots 1 // buffers displayed

#property indicator_color1 DarkSalmon, DeepSkyBlue // we use 2 colors
#property indicator_type1 DRAW_COLOR_LINE // and special color style

 

Voici les paramètres d'entrée de l'indicateur (le mot clé input remplace le mot clé extern) et les variables golbales (à ne pas confondre avec les variables globales du terminal client). Les paramètres d'entrée sont donc spécifiés par le mot clé input.

Désormais il est possible de créer des énumérations pour les paramètres d'entrée ce qui est utile pour empêcher l'utilisateur de rentrer des données incorrectes.

Par exemple, le paramètre appelé AppliedPrice sera affiché dans une liste déroulante proposant les différentes valeurs possibles.

 

Par exemple, l'énumération suivante :

//...
enum DayOfWeek
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
};

input DayOfWeek Day;

//...

 

sera affichée de la manière suivante :

 

int OnInit()
{

// set the indicator buffers
// set Values as a buffer for displaying
SetIndexBuffer(0, Values, INDICATOR_DATA);
// set ValuesPainting as buffer for colors
SetIndexBuffer(1, ValuesPainting, INDICATOR_COLOR_INDEX);

// Set beginning of Values buffer drawing
PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, RSIPeriod);
// Set indicator name
IndicatorSetString(INDICATOR_SHORTNAME, "Color RSI(" + string(RSIPeriod) + ")");
// Set empty value for Values buffer
PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, EMPTY_VALUE);
// Set colors for the buffer
PlotIndexSetInteger(0, PLOT_LINE_COLOR, 0, Down);
PlotIndexSetInteger(0, PLOT_LINE_COLOR, 1, Up);

RSIHandle = iRSI(NULL, 0, RSIPeriod, AppliedPrice);

ArrayResize(BufferForCopy, 3);

// Set the indexation order for buffers (as series)
ArraySetAsSeries(Values, true);
ArraySetAsSeries(ValuesPainting, true);
ArraySetAsSeries(BufferForCopy, true);

return(0);
}


OnInit est la fonction d'initialisation de l'indicateur. Ici on configure les buffers et leurs propriétés ainsi que les variables qui ne peuvent être définies dans les propriétés générales ou qui doivent être allouées dynamiquement. Il y a aussi une initialisation des données initiales, incluant l'assignement des "handle" qui sont nécessaires aux indicateurs.

// Function for data calculation
// note that the function parameters can be renamed
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime& time[],
const double& open[],
const double& high[],
const double& low[],
const double& close[],
const long& tick_volume[],
const long& volume[],
const int& spread[])
{
int toCount = (int)MathMin(rates_total, rates_total - prev_calculated + 1);

if (prev_calculated < 0 || prev_calculated > rates_total)
{
toCount = rates_total;
}

int copied = CopyBuffer(RSIHandle, 0, 0, toCount, Values);
if (copied == -1)
{
Print("Error while data copying. Error №", GetLastError());
return 0;
}

// Coloring. Yes, now it became so simple
for (int i = toCount - 2; i >= 0; --i)
{

if (Values[i + 1] != EMPTY_VALUE &&
Values[i] > Values[i + 1])   ValuesPainting[i] = 1;
else                             ValuesPainting[i] = 0;
}

return rates_total;
}

 

OnCalculate est la fonction qui traite et calcule les données. Cette fonction peut être de deux types. Ici nous avons la forme standard. Les détails sont ci-dessous.

Fonction:

// the function is not obligatory in a code
/*
void
OnDeinit()
{}
*/


OnDeinit est la fonction de fermeture de l'indicateur. Souvent il est nécessaire de libérer les ressources comme par exemple les "handles" vers des fichiers.

 

II Deux concepts d'indicateurs


Le premier est le standard, c'est à dire celui que nous connaissions de MQL4, avec seulement une petite différence. C'est la fonction OnCalculate qui est appelée en lieu et place de la fonction Start. Pour la forme standard, cela ressemble à :

int OnCalculate(const int rates_total, // Arrays size
const int prev_calculated, // Bars processed on the previous call
const datetime& time[], // Data for the current chart and timeframe...
const double& open[],
const double& high[],
const double& low[],
const double& close[],
const long& tick_volume[],
const long& volume[],
const int& spread[])
{
return rates_total;
}

 

Afin de réduire la quantité de code nécessaire à la copie de données, les données du graphique sont passées directement en tant que tableau dans les paramètres de la fonction. En outre, le nombre de bougies disponibles est passé en premier paramètre et le nombre de bougies traitées après le dernier appel (ou 0) est le second paramètre.

La valeur 0 peut être passée au premier appel de l'indicateur, ainsi que lorsque de nouvelles valeurs sont chargées ou en cas de manque de données. Ce paramètre est un remplacement (alternative ou équivalent, à vous d'en juger) de la fonction IndicatorCounted() qui était pratique pour de nombreux développeurs.

Le second concept est le remplacement et l'expansion des fonctions de type  i<…>OnArray de MQL4. Il y a un indicateur de ce type dans l'exemple forunir mar Metaquotes "Custom Moving Average". Ce type d'indicateurs est destiné au traitement des données dépendant des choix de l'utilisateur, incluant donc les indicateurs personnels.

La fonction pour le traitement des données des indicateurs de ce type est la suivante :

int OnCalculate (const int rates_total, // the size of the price[] array
const int prev_calculated, // bars calculated in the previous call
const int begin, // where notional data start from
const double& price[] // data array for calculation
);
{
return rates_total;
}

Le dernier paramètre de la fonction correspond aux données sélectionnées par l'utilisateur pour traitement. Si vous souhaitez réaliser un inidcateur avec de nombreux buffers, le premier buffer sera passé pour le traitement des données.

 

 

La valeur First Indicator's Data de l'énumération signifie que l'indicateur sera appliqué sur le premier indicateur attaché à la fenêtre sélectionnée du graphique.

La valeur Previous Indicator's Data signifie que l'indicateur sera appliqué sur le dernier indicateur attaché à la fenêtre sélectionnée du graphique.

Ces indicateurs peuvent être utilisés pour assembler des piles entières. Par exemple, l'indicateur Custom Moving Average a la possibilité de réaliser un triple lissage des cours en appliquant le premier indicateur sur les données du graphique, le second sur le premier et le troisième sur le second :

Il y a de nombreux indicateurs standards qui mettent en oeuvre ce concept particulier. C'est pourquoi, lorsque vous apercevez la demande de paramètre applied_price_or_handle :

cela signifie que l'indicateur en question peut traiter les données de l'utilisateur. Le handle de ces données doit être passée en paramètre applied_price_or_handle.

En utilisant la même méthode il est possible d'organiser le traitement des données directement dans le code de l'indicateur :

{
// ...
RSIHandle = iRSI(NULL, 0, RSIPeriod, AppliedPrice);
SmoothHandle = iMA(NULL, 0, SmoothPeriod, 0, MODE_EMA, RSIHandle);
// ...
}

 

Il y a  une nouvelle application de ce concept : la possibilité d'écrire des indicateurs en tant que service unniversel. Un exemple d'un tel type est attaché dans le fichier Direction_Brush.mq5.

 

les résultats sont présentés dans le graphique ci dessus. La coloration de la direction est dans ce cas séparé comme une entité indépendante et implémentée dans un autre indicateur.

Leur universalité est certainement limitée dans la mesure où ils ne sont applicables seulement sur le buffer 0 de l'indicateur sur lequel ils sont attachés. Toutefois je pense qe ceci restera très utile.

Par conséquent, lorsque vous écrivez un indicateur personnel, vous devriez désormais le prendre en compte en mettant les données principales de l'indicateur dans le buffer 0 afin de le rendre compatible avec les services universels et vous permettre d'une certaine manière de ne plus avoir besoin de les recoder dans chaque indicateur. Outre les traitements propres de l'indicateur, la plupart des opérations externes pourront être réalisées les indicateurs universels.

L'étendue des applications n'est pas si faible que ce qu'il peut paraître :

  • colorier les caractéristiques des indicateurs (tops, directions, lniveaux, segments, etc.);
  • différent signaux dans différentes conditions;
  • collecter et afficher des statistiques - par exemple la distribution de données;
  • la construction d'indicateurs universels qui peuvent être calculés pour un buffer comme par exemple les moyennes mobiles, zigzag, etc.

 

Ceci n'est évidemment pas une liste exhaustive de toutes les possibilités mais seulement celles qui me viennent immédiatement à l'esprit. De nombreuses autres mises en oeuvre devraient voir le jour grâce à l'imagination collective de la communauté.

La suite dans la partie 2 de cet article si cela vous intéresse (commentaires...).

 

Traduction et Adaptation: Nicolas Vitale
"MQL5 and Metatrader  are trade marks of MetaQuotes Software Corp. and all related materials are reserved for MetaQuotes"

 
MQL4 pour les nuls Envoyer

 

Il n'est jamais trop tard pour se mettre à la programmation et à MQL4! Si l'arrêt de la traduction du cours MQL4 vous a laissé sur votre faim, voici de quoi vous consoler.  En attendant que MQL5 soit complètement opérationnel, voici un guide d'apprentissage de MQL4 traduit par Henri Baltzer du site Eole Trading que tout le monde peut remercier. Vous pouvez retrouver les différents chapitres sur le forum d'Eole ici.

MQL4 Pour Les Nuls

 

 
<< Début < Précédent 1 2 3 4 5 6 Suivant > Fin >>

Page 1 sur 6

Articles en rapport :

 
Joomla 1.5 Templates by Joomlashack