Affichage des articles dont le libellé est apprendre mql4. Afficher tous les articles
Affichage des articles dont le libellé est apprendre mql4. Afficher tous les articles

samedi 26 février 2011

Un premier indicateur customisé

Dans MetaEditor, allez dans 'File', 'New', puis 'Custom Indicator'. Donnez lui le nom que vous souhaitez et cliquez sur 'Suivant', 'Suivant', 'Terminer'.


Pour entrer tout de suite dans le vif du sujet, prenons un exemple d' indicateur.


Le Code :
#property copyright "Forex Automatique 2011"      // copyright
#property link "http://forex-automatique.blogspot.com/"
#property indicator_chart_window      // s' affiche sur le graphique
#property indicator_buffers 1         // nombre de Buffers

double Buff1[];           

int init()                       
  {
   SetIndexBuffer(0, Buff1);        // assignation de l' array Buff1 au buffer
   SetIndexStyle(0, DRAW_LINE, EMPTY, 2, Red);
   return                    
  }

int start()                       
  {              
   int i = Bars;                      // nombre de périodes 
   while(i >= 0)                   
     {
      Buff1[i] = High[i]            // valeur du Buffer pour chaque période
      i--;                   
     }
   return;                        
  }

Explications :
Dans ce code, le mot "Buffer" apparaît plusieurs fois. Les buffers sont indispensables pour créer des indicateurs en MQL4. Ce sont des espaces mémoire qui contiennent toutes les valeurs que prend un indicateur.
Le buffer est un array, sa déclaration est réalisée par :
double Buff1[];            
et 
SetIndexBuffer(0, Buff1);  

La fonction SetIndexStyle définit la forme de l' indicateur.
SetIndexStyle(int index, int type, int style=EMPTY, int width=EMPTY, color = CLR_NONE)

   - index est le numéro du buffer de l' indicateur associé ( doit être compris entre 0 et 7 ).

   - type est la forme sous laquelle doit se présenter l' indicateur. Au choix parmi :

ConstanteValeurDescription
DRAW_LINE0Ligne
DRAW_SECTION1Sections
DRAW_HISTOGRAM     2Histogramme
DRAW_ARROW3Symboles
DRAW_ZIGZAG4Zig-Zag
DRAW_NONE12              Ne rien dessiner

   - style voir en-dessous.

   - width est la grosseur des lignes ( 1, 2, 3, 4, ou 5 ).
Si width est égal à 1 et que l' indicateur est une ligne, la variable style peut prendre les valeurs suivantes :

ConstanteValeurDescription
STYLE_SOLID 0Ligne continue
STYLE_DASH 1Ligne discontinue
STYLE_DOT 2Pointillés
STYLE_DASHDOT 3
STYLE_DASHDOTDOT     4

   - color est la couleur que prendra l' indicateur.


Dans notre exemple de code, l' indicateur est une courbe attachée au graphique qui suit le plus haut de chaque période. Pour l' installer, cliquez sur 'Compile'. L' indicateur se trouve alors dans l' onglet 'Indicateurs Programmés' de la fenêtre 'Navigateur'.



Si on modifie certaines parties du code, la forme de l' indicateur change radicalement...
Avec des symboles à la place de la courbe :

Dans une fenêtre séparée :
( remplacement de #property indicator_chart_window par #property indicator_separate_window ).

En histogramme :

Initialisation et Déinitialisation

Les fonctions init et deinit sont des fonctions mql4 spéciales ( comme la fonction start ).


Init() :
Init est appelée en tout premier lieu. Elle permet l' initialisation du programme, l' assignation des variables qui ne bougent pas. Elle s' exécute une seule fois à chaque compilation du code, ou redémarrage de l' Expert Advisor ou de l' indicateur, et est directement suivie par la fonction start.


Deinit() :
Deinit est rarement utilisée car rarement utile. Elle est lancée lors de l' arrêt d' un programme. Son rôle est de remettre à zéro la valeur toutes les variables assignées.

---> Leçon suivante

mardi 8 février 2011

Le trading automatique - article

Autrefois privilège des banques, le trading automatique ( passage d' ordres en bourse grâce à un robot qui analyse le marché avec des algorithmes ) est maintenant à la portée de tous.
Cette pratique est typique du Forex : le trading automatique, qui consiste souvent à placer de nombreux ordres au cours de la journée, est encouragée par des frais de placement très bas. Il faut aussi que le marché soit très liquide pour pouvoir acheter et vendre rapidement. Le Forex est donc pour ces raisons le terrain de jeu des robots-traders.

Les brokers ( courtiers ) l' ont bien compris et encouragent leur mise en place. En effet, plus les ordres passés sont nombreux, plus le broker, qui se rémunère sur le spread, touchera de commissions. Le broker qui ne propose pas une plateforme permettant le trading automatique est toujours pris de haut par tous les spéculateurs ( eToro, Plus500, etc sont souvent qualifiés non sérieux... ).

Il faut aussi bien penser que cette mode des robots existe parce qu' elle avantage avant tout les traders. En effet, le trading automatique multiplie les gains ( ou les pertes ), ce qui permet parfois à des comptes ( de toutes tailles ) de percevoir un pourcentage de rendement qui ferait rêver tous les fonds financiers !

Cette affaire fait en tout cas le beurre de Metatrader. La plateforme utilisée par une majorité des broker est largement optimisée pour le trading automatique. De fait, elle possède son propre langage de programmation : le MQL4 ( bientôt MQL5 ). Les traders motivés peuvent ainsi apprendre à programmer des bots totalement paramétrables : les fameux Expert Advisor.

Ce qui est certain, c' est que cette avancée est une révolution dans le monde du trading. Il vous appartient désormais d' en profiter ou pas.

lundi 7 février 2011

Sleep et MessageBox

Sleep
Sleep est une fonction qui suspend l' éxécution d' un programme durant un temps prédéfini ( compté en millisecondes ).


Exemple :
Par exemple, si l' on veut que le programme stoppe pendant 15 secondes, on inclura ce qui suit dans le code.
Sleep(15000);
Sleep n' a pas de d' utilité évidente dans la programmation des Expert Advisor, mais le MQL4 comme tous les autres langages permet néanmoins l' emploi de cette fonction.


MessageBox
MessageBox est une fonction qui affiche une boîte de dialogue paramétrable.


Son utilisation est idéale pour le trading semi-automatique.


La fonction :
int MessageBox(string texte, string titre, int flags)

La chaîne text contient le message qui sera affiché sur la boîte de dialogue, la chaîne titre contient son en-tête.
Il faut aussi définir les boutons qui seront présents sur la boîte de dialogue ( variable flags ) :
0x00000000 OK
0x00000001 OK et Cancel.
0x00000002 Abandonner, Recommencer, et Ignorer.
0x00000003 Oui, Non, et Cancel.
0x00000004 Oui et Non
0x00000005 Recommencer et Cancel


Exemple d' utilisation :
int message1 = MessageBox("Voulez-vous continuer ?", "Attention !", 0x00000002);

La fenêtre de dialogue apparaît à l' écran. Selon le bouton cliqué ( ici Abandonner, Recommencer, ou Ignorer ), la variable message1 qui y est associée prendra une valeur différente ( voir ci dessous ).


BoutonValeur
OK1
Cancel
2
Abandonner
3
Recommencer
4
Ignorer
5
Oui
6
Non
7



---> Leçon suivante

vendredi 4 février 2011

Open, Close, High, Low, Volume, et Time

Il est possible en MQL4 d' accéder aux données d' un graphique. Un programme peut en effet récupérer l' historique des périodes d' une paire. La durée de la période dépend directement de l' échelle du graphique sur lequel l' Epert Advisor est installé.


Exemple d' utilisation :
int start()
  {
   int i = 0;
   double max = High[i];
   double min = Low[i];
   double ouverture = Open[i];
   double cloture = Close[i];
   double volume = Volume[i];
   double time = Time[i];
   return;
  }
High, Low, Open, et Close retournent respectivement les valeurs de la période : le cours le plus haut, le plus bas, l' ouverture, et la clôture. Volume renvoie le volume total échangé et Time le nombre de secondes écoulées depuis le premier janvier 1970 pour la période.

Ces variables prédéfinies prennent un paramètre. 0 correspond à la période la plus récente, 1 à la dernière période avant la plus récente, 10 à la 10ème période avant la plus récente...

---> Leçon suivante

jeudi 3 février 2011

Les Arrays ( matrices ou tableaux )

Les Arrays, fort utiles en MQL4, sont ce qu' on pourrait appeler des tableaux ou des matrices. Les arrays contiennent des variables dont l' emplacement est défini par le numéro de ligne, et le numéro de colonne.


Déclaration :
double matrice[2][3] = { 2, 6, 4.5, 9, 4.2, 5 }
[2] indique le nombre de colonnes, [3] indique lui le nombre de lignes. Les nombres compris entre { et } sont les valeurs du tableau. Dans le cas présent, cela correspondrait à :
2  6 4,5
9 4,2 5


Retrouver une valeur :
Pour appeler une valeur, on donne sa position. La petite complexité est que la première ligne n' est pas la ligne 1, mais la ligne 0. La première colonne est aussi la colonne 0.
double valeur = matrice[0][0]
double valeur2 = matrice[1][1]
Les variables valeur et valeur2 sont égales à 2 et 4,2


Des Arrays plus complexes :
Il est aussi possible de définir plus de 2 coordonnées pour l' emplacement d' une variable. Au delà de 3 dimensions, ça devient difficile à représenter...
Par exemple :
double matrice[2][3][2] = { 2, 6, 4.5, 9, 4.2, 5, 4.9, 6, 8, 7, 5, 2.3 }

---> Leçon suivante 

mardi 1 février 2011

Connecter un EA avec un indicateur technique

Une des grandes forces du MQL4 est la possibilité de relier les actions d' un Expert Advisor avec les données fournies par un indicateur technique. Les indicateurs les plus connus disposent de leur propre fonction d' appel.


Exemple avec l' indicateur Awesome Oscillator :
La fonction de cet indicateur est iAO.
double iAO(string symbol, int timeframe, int shift)
Cet fonction d' appel comprend 3 paramètres :

    - symbol : est le symbole de la paire traitée. ( EURUSD, CADJPY, ... ). On le remplace souvent par Symbol() qui renvoie directement le nom de la paire sur laquelle est installée l' Expert Advisor.

   - timeframe : est l' échelle du graphique, ce qui influe directement sur la longueur des périodes. Son unité est la minute. Laisser 0 pour que l' Expert Advisor la détecte automatiquement.

   - shift : valeur pour la énième période.


Utilisation :
double valeur = iAO(Symbol(), 0, 0);
La variable valeur est égale au dernier bâton de l' Awesome Oscillator.
double valeur2 = iAO(Symbol(), 0, 10);
La variable valeur2 est cette fois égale au bâton de la 11ème dernière période.


Un Expert Advisor AO :
Le programme suivant va afficher des alertes lorsque l' indicateur passera d' une valeur négative à une valeur positive.
int start()
  {
   double valeur1 = iAO(Symbol(), 0, 0);
   double valeur2 = iAO(Symbol(), 0, 1);
   if (valeur1 < 0 && valeur2 > 0)
    {
     Alert("Signal d achat !");
    }
  return;
  }

Voir la liste de toutes les fonctions d' appel des indicateurs.

---> Leçon suivante

lundi 31 janvier 2011

Bonus sans dépôt - RoboForex

Exclusif !

RoboForex ( broker spécialisé dans les Expert Advisor et le trading automatique ) offre un bonus sans dépôt de 5$ ouvert à tous.
Pour l' obtenir, il suffit de se rendre sur le site du broker, de télécharger sa plateforme Metatrader, puis de cliquer sur le script de vérification ( voir ).
N' oubliez pas ensuite d' ouvrir un compte fix ou pro pour recevoir le bonus ( instantané ).

Les couleurs en MQL4

Les couleurs sont contenues dans les variables color.


La fonction :
Il y a 3 manières d' associer une couleur à sa variable :

    - les données litérales
color couleur1 = C'128,128,128';
On les annonce avec 'C'', suivi des 3 intensités RGB.

   - les représentations entières ( désuètes )

   - les noms de couleur
color couleur2 = Red
C' est ce qui sera toujours utilisé dans ce tutoriel.
Vous avez le choix parmi toutes les couleurs ci-dessous.

Black DarkGreen DarkSlateGray Olive Green Teal Navy
Purple Maroon Indigo MidnightBlue DarkBlue DarkOliveGreen SaddleBrown
ForestGreen OliveDrab SeaGreen DarkGoldenrod DarkSlateBlue Sienna MediumBlue
Brown DarkTurquoise DimGray LightSeaGreen DarkViolet FireBrick MediumVioletRed
MediumSeaGreen Chocolate Crimson SteelBlue Goldenrod MediumSpringGreen LawnGreen
CadetBlue YellowGreen LimeGreen OrangeRed DarkOrange Orange Orchid
Gold Yellow Chartreuse Lime SpringGreen Aqua DeepSkyBlue
Blue Magenta Red Gray SlateGray Peru BlueViolet
LightSlateGray DeepPink MediumTurquoise DodgerBlue Turquoise RoyalBlue SlateBlue
IndianRed MediumOrchid GreenYellow MediumAquamarine DarkSeaGreen Tomato RosyBrown
MediumPurple PaleVioletRed Coral CornflowerBlue DarkGray SandyBrown MediumSlateBlue
BurlyWood HotPink Salmon Violet LightCoral SkyBlue LightSalmon
Plum Khaki LightGreen Aquamarine Silver LightSkyBlue LightSteelBlue
PaleGreen Thistle PowderBlue PaleGoldenrod PaleTurquoise LightGray Wheat
Moccasin LightPink Gainsboro PeachPuff Pink Bisque LightGoldenrod
LemonChiffon Beige AntiqueWhite PapayaWhip Cornsilk LightYellow LightCyan
DarkKhaki DarkOrchid Tan DarkSalmon LightBlue NavajoWhite BlanchedAlmond
Lavender MistyRose OldLace WhiteSmoke Seashell Ivory Honeydew
LavenderBlush MintCream Snow White AliceBlue Linen


---> Leçon suivante

vendredi 28 janvier 2011

Les paramètres de compte

Il est possible en MQL4 de coder très simplement des instructions qui renvoient les paramètres de votre compte...


Montant de la balance
double balance = AccountBalance()

Somme engagée
double sommeengagee = AccountCredit();

Nom du Broker
string companie = AccountCompany();

Devise du compte
string monnaie = AccountCurrency();

Equité
double equite = AccountEquity();

Marge disponible
double margedispo = AccountFreeMargin();

Effet de levier actuel
double levier = AccountLeverage();

Marge
double marge = AccountMargin();

Nom du compte

string nom = AccountName();

Numéro du compte
int numero = AccountNumber();

Nom du serveur
string serveur = AccountServer();

jeudi 27 janvier 2011

Modifier un ordre

Le MQL4 donne aussi la possibilité de modifier les paramètres d' un ordre en cours ou en attente. Pour cela, on utilise la fonction  OrderModify().


La fonction :
bool OrderModify(int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color = CLR_NONE)

   - numéro : est le ticket ( numéro unique ) de l' ordre passé sur lequel la modification porte.

   - prix : est le prix à modifier.

   - stoploss et taketprofit : sont les nouvelles valeurs que prendra l' ordre pour le stoploss et le takeprofit.

   - expiration : est la date de validité de l' ordre.

   - arrow : indique un point ou une flèche sur la courbe du graphique Metatrader à l' endroit où l' ordre a été clôturé. Pas obligatoire.


Un exemple incontournable, le TrailingStop :
La fonction suivante associe un TrailingStop de 20 pips au dernier ordre passé.
bool vrai = true;
double trailingstop = 0;
double offre = 0;
double demande = 0;
int ecart = 20

int start()
  {
   int i = OrdersTotal() - 1;
   OrderSelect(i, SELECT_BY_POS);
   int type = OrderType();
   if (type == OP_BUY)
     {
      if ( Bid - ecart * Point > trailingstop )
       {
        double demande = MarketInfo(Symbol(), MODE_ASK);
        trailingstop = demande - Point * ecart;
        OrderModify(OrderTicket(), OrderOpenPrice(), trailingstop, OrderTakeProfit(), 0);
       }
     }
   if (type == OP_SELL)
     {
      if ( Ask - ecart * Point > trailingstop )
       {
        double offre = MarketInfo(Symbol(), MODE_BID);
        trailingstop = offre + Point * ecart;
        OrderModify(OrderTicket(), OrderOpenPrice(), trailingstop, OrderTakeProfit(), 0);
       }
     }
  return;
  }

   - OrderOpenPrice() est le prix auquel l' ordre a été ouvert

   - OrderTakeProfit() et OrderStopLoss sont les takeprofit et stoploss de l' ordre

Après ces quelques leçons compliquées, je vous invite à suivre une dernière leçon plus simple et clore ce chapitre.

---> Leçon suivante

mardi 25 janvier 2011

Fermer un ordre

Si tout ne se passe pas comme prévu, ou bien si l' ordre n' a pas de Stoploss ni de Takeprofit, il est nécessaire de clore la position à un moment ou à un autre. Il faut donner l' ordre à Metatrader de fermer la position grâce à la fonction OrderClose().


La fonction :
bool OrderClose(int ticket, double nblots, double prix, int slippage, color arow = CLR_NONE)
Cette fonction est booléenne ( comme true et false ). C' est logique, il n' y a que 2 dénouements : soit l' ordre est stoppé, soit il ne l' est pas.   

   - ticket : est le ticket ( numéro unique ) de l' ordre passé sur lequel l' ordre de clôture porte.

   - nblots : est le nombre de lots que concernent l' ordre de fermeture.

   - prix : est le prix auquel on souhaite clôturer l' ordre.

   - slippage : est la différence maximale de pips acceptée par le trader entre le prix souhaité et le prix auquel l' ordre est finalement exécuté.

   - arrow : indique un point ou une flèche sur la courbe du graphique Metatrader à l' endroit où l' ordre a été clôturé. Pas obligatoire.


A noter : pour fermer les ordres en attente, on utilise la fonction OrderDelete() de la même façon que OrderClose().


Un exemple d' utilisation :
La fonction suivante va fermer tous les ordres, passés ou en attente, d' un seul coup s' il est 20 heures passées.

bool vrai = true;

int start()
  {
   int dath = Hour();
   if (dath > 20)
    {
     int i = OrdersTotal() - 1;
     while (i >= 0)
      {
       OrderSelect(i, SELECT_BY_POS);
       int type = OrderType();
       if (type == OP_BUY)
        {
     OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 2);
        }
       if (type == OP_SELL)
        {
     OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 2);
        }
       if (type == OP_BUYLIMIT || type == OP_BUYSTOP || type == OP_SELLLIMIT || type == OP_SELLSTOP)  
        {
         OrderDelete(OrderTicket());
        }
       i -= 1  // décrémentation i = i - 1
      }
    }
return;
}

Cette fonction contient beaucoup de nouveaux éléments que je vais expliquer un par un :

   - OrdersTotal() renvoie le nombre total d' ordre passé ou en attente.

   - OrderSelect() permet de sélectionner un ordre. Cette fonction prends en compte 2 paramètres : la place de l' ordre choisi ( ici c' est la variable i ), et la manière de trier les ordres. Ici, on classe les ordres du plus ancien au plus récent avec SELECT_BY_POS. Cela signifie que l' ordre le plus ancien est numéroté 0, le suivant 1, et ainsi de suite...

   - OrderType() désigne le type de l' ordre en question ( achat, vente, stop, limité )

   - OrderTicket() est le ticket unique de l' ordre.

   - OrderLots() est le nombre de lots engagés dans l' ordre.

   - OrderSymbol() est similaire à Symbol() et renvoie donc le nom de la paire traitée.

   - || correspond à OU dans une parenthèse. Dans le même registre && correspond à ET.

---> Leçon suivante

Qu' est ce que c' est ? Expert Advisor

Un Expert Advisor est un robot-trader, un programme informatique qui passe des ordres d' achat et de vente sur le forex automatiquement via la plateforme Metatrader.

Les Expert Advisor sont programmables et paramètrables à volonté en langage MQL4. Ils peuvent être très simples comme très complexes et sont de précieux alliés des traders.
Infaillibles, rien n' échappe à leur observation du marché et ils effectuent des calculs très compliqués infiniment plus rapidement qu' un humain.

La plupart des brokers encouragent l' utilisation d' Expert Advisor ( aussi appelés Expert Consultant ), il est donc possible de les tester sur des comptes démo avec argent fictif. Le recours aux Expert Advisor en trading réel n' entraîne bien entendu pas de frais supplémentaires.

lundi 10 janvier 2011

True or False

True ( vrai ) et False ( faux ) sont 2 variables complémentaires d' un autre type : ce sont des variables booléennes. Deux choix possible : soit l' une soit l' autre.
Elles ont beaucoup d' applications dans les Expert Advisor.


Exemple :
Vous le savez, les Expert Advisor font tourner la fonction start en boucle. True et False vont être très utiles pour faire en sorte de ne plus voir s' afficher des alertes toutes les 2 secondes...
Exemple avec la fonction de la leçon précédente :
double midi = 12.00;
bool vrai = true;


double start()              
  {                
   int dats = Seconds();
   int datm = Minute();
   int dath = Hour();
   if (vrai = true)
    {
    vrai = false;

    Alert("Il est ", dath, ":", datm, ":", dats);
    if (midi > dath)
     {
      double h = midi - dath;
     Alert("Plus que ", h, " heures avant midi !");
     }
    else
     {
      double h24 = midi + 24 - dath; 
      Alert("Plus que ", h24, " heures avant midi !");
     }
    }

   return;
  }

---> Leçon suivante  

vendredi 7 janvier 2011

Sleep

Sleep
Sleep est une fonction qui suspend l' éxécution d' un programme durant un temps prédéfini ( compté en millisecondes ).


Exemple :
Par exemple, si l' on veut que le programme stoppe pendant 15 secondes, on inclura ce qui suit dans le code.
Sleep(15000);
Sleep n' a pas de d' utilité évidente dans la programmation des Expert Advisor, mais le MQL4 comme tous les autres langages permet néanmoins l' emploi de cette fonction.