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

lundi 14 février 2011

La fonction MarketInfo()

MarketInfo() est une fonction qui associe à une variable une valeur constante. Elle s' avère très utile pour récupérer des données d' un graphique ou d' un compte.


La fonction :
double variable = MarketInfo(Symbol(), paramètre);

MarketInfo retourne une valeur différente selon le paramètre appelé :
   - MODE_LOW -> minimum de la journée
   - MODE_HIGH -> maximum de la journée
   - MODE_TIME -> temps au dernier tick
   - MODE_BID -> dernière valeur de l' offre
   - MODE_ASK -> dernière valeur de la demande
   - MODE_POINT -> pip de la devise
   - MODE_DIGITS -> nombre de décimales dans le pip
   - MODE_SPREAD -> taille du spread ( en pips )
   - MODE_STOPLEVEL -> stoploss et takeprofit minimaux ( en pips )
   - MODE_LOTSIZE -> taille du lot de la devise
   - MODE_MINLOT -> investissement minimum autorisé ( en lots )
   - MODE_MAXLOT -> investissement maximum autorisé ( en lots )

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

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 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

mercredi 12 janvier 2011

OrderSend()

Les Expert Advisor passent leurs ordres d' achat ou de vente grâce à la fonction OrderSend().
Si vous avez un compte démo avec argent fictif sur Metatrader ( si vous n' en avez pas, choisissez un broker ici et ouvrez en un ), vous devez voir en bas de l' interface l' onglet trading. Cliquez dessus. Vous voyez maintenant votre balance et les ordres passés ( s' il en est ).



La fonction :
int OrderSend (string paire, int operation, double nblots, double prix, int slippage, double stoploss, double takeprofit, string comment = NULL, int numero = 0, datetime expiration = 0, color arrow = CLR_NONE)

Comme vous pouvez le constater, cette fonction a besoin de beaucoup de paramètres. Nous allons les voir un par un.

   - paire : est le nom de la paire sur lequel l' Expert Advisor doit passer un ordre. Par exemple "EURUSD", ou "EURGBP". Pour rendre les choses plus pratiques, on entre souvent pour ce paramètre la fonction Symbol(). En effet, celle-ci renvoie automatiquement la paire sur laquelle le robot est installé.

   - operation : est comme son nom l' indique l' opération à passer. Au choix : OP_Buy, OP_SELL, OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP, et OP_SELLSTOP. ( Voir cours ).

   - nblots : est le nombre de lots sur lesquels porte l' opération. ( Voir cours ).

   - prix : est le prix ! Sert pour les ordres Limit et Stop.

   - 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é.

   - stoploss et takeprofit : est le prix auquel les pertes doivent être coupées et les plus-values prises. ( Voir cours ).

   - comment : est la possibilité de laisser un commentaire sur le trade.

   - numéro : est le numéro de l' ordre passé. C' est au trader de le définir.

   - expiration : date à laquelle l' ordre prend fin. Les brokers fixent en effet une limite de durée à chaque ordre. N' entrez rien pour laisser l' ordre ouvert jusqu' à la date limite autorisée par le broker.

   - arrow : indique un point ou une flèche sur la courbe du graphique Metatrader de la paire sur laquelle l' ordre a été placé. Pas obligatoire.


Un exemple d' utilisation :

bool vrai = true;

int
start()

  {
   if (vrai == true)
    {
     vrai = false;

     OrderSend
(Symbol(), OP_BUY, 0.1, Ask, 3, Bid-15*Point, Bid+15*Point, "Premier ordre !", 1);

    }
return
;

  }

Point correspond à 1 pip.
En d' autres termes, on achète 0,1 Lot de la paire de notre choix, au prix de la demande ( à 3 pips près ), on coupe les pertes si le cours atteint le prix de l' offre moins 15 pips, on prend les bénéfices si le cours atteint le prix de l' offre + 15 pips.
L' ordre est le numéro 1, et a pour commentaire Premier ordre !.

Compilez puis exécutez le code. Au moment de lancer l' exécution, cochez la case 'Autoriser Trading en direct' sur la fenêtre qui apparaît ( comme ci-dessous ).


Que se passe t-il maintenant ?
D' abord, vous devez voir l' ordre passé et tous les détails dans votre balance de trading ( en bas de l' interface de Metatrader ). Ensuite, sur le graphique de la paire tradée, vous devez pouvoir observer trois ou quatre lignes. La droite verte ( celle du milieu ) est à la hauteur du prix d' achat. Les deux lignes rouges symbolisent les niveaux de prix du takeprofit et du stoploss. Enfin, peut-être voyez-vous aussi une ligne blanche qui suite l' indice du prix en temps réel.


Quand le trade sera clos ( une affaire de quelques minutes si le forex est volatile ), vous aurez une nouvelle balance de compte avec quelques euros en moins ou en plus. Je vous rappelle qu' un pip de 10 000 euros vaut environ 1€. Si l' ordre avait été exécuté sur un compte avec argent réel, le résultat aurait été exactement le même.


---> 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.

Variables locales ou globales

Les variables ont pour l' instant toujours été définies à l' intérieur des fonctions. C' étaient des variables locales, qui disparaissaient une fois la fonction terminée.
Il est souvent nécessaire de définir une variable qui sera constante et utilisable dans toutes les fonctions d' un programme : c' est ce qu' on appellera une variable globale.


Programme utilisant une variable globale : 
Imaginons, je possède un compte d' un montant de 10 000€. Deux jours plus tard, après quelques placements, je me retrouve avec 10 285€. Je vais maintenant, grâce au programme ci-dessous, pouvoir calculer mon pourcentage de gain, et le ratio gain/heure.

int inicompte = 10000;         // compte initial
int heures = 48;               // 2 jours = 48 heures
int moncompte = 10285;         // compte actuel


double start()                 // fonction start
  {                       
   double pourc = pourcentage(inicompte, moncompte);  
   double ratiog = ratio(inicompte, moncompte, heures);
   Alert(" Gains = ", pourc, "% et ratio = ", ratiog, "€ par heure");
   return;                     
  }


double pourcentage(double ini, double fin) 
  {                       
   double pour1 = 
fin - ini;
   double pour2 = pour1 / ini * 100;
   return(pour2);                         
  }


double ratio(double ini, double fin, double temps) 
  }                       
   double rat1 = fin - ini;

   double rat2 = rat1 / temps;
   return(rat2);                         
  }

Prenez bien le temps de comprendre ce programme. Comme vous pouvez le constater, ça commence à se compliquer un peu...
Notez par ailleurs qu' on aurait très bien pu obtenir le même résultat en utilisant des variables locales dans la fonction start.

Vous avez maintenant toutes les bases nécessaires pour programmer des bots un peu plus utiles sur Metatrader. Je vous invite à passer à la leçon suivante.

---> Leçon suivante

jeudi 6 janvier 2011

Les fonctions MQL4 - 2 -

Dans la continuité du cours précédent, nous allons voir des fonctions plus générales et qui inter-dépendent entre elles.


Présentation d' une fonction avec paramètres :
Fonction de recherche du taux de conversion EUR/USD.
double calcul(double eur, double usd)  
// eur et usd sont les 2 paramètres de la fonction calcul
  {                       
   double taux = eur / usd;
   return(taux);                         
  }

La fonction calcul renvoie le taux de conversion EUR/USD. Pour utiliser cette fonction, il suffit de remplacer les paramètres par des valeurs.
Par exemple :  calcul(83, 105)---> Calcul du taux de conversion si on échange 83 euro contre 105 dollar.


Fonction renvoyant à une autre fonction : 
Il s' agit maintenant de créer une fonction initiale, qui demande à la fonction calcul de faire les opérations.
double start() 
  {                       
   int eur = 1;
   double usd1 = 1.30;
   double usd2 = 0.9;     
   double taux1 = calcul(eur, usd1);     // renvoie à calcul
   double taux2 = calcul(eur, usd2);     // renvoie à calcul
   Alert("Taux 1 = ", taux1, " et Taux2 = ", taux2 );        // alerte qui affiche les 2 résultats
   return;                  // fin du programme                   
  }


double calcul(double eur, double usd)  
// eur et usd sont les 2 paramètres de la fonction calcul
  {                       
   double taux = eur / usd;
   return(taux);                         
  }
Pour tester ce nouveau programme, allez dans la fenêtre navigateur de Metatrader, cliquez-droit sur votre Expert Consultant, puis modifier.


Ce programme une fois compilé et lancé affiche une alerte Taux 1 = 0,7692 et Taux 2 = 1,1111.

---> Leçon suivante

mercredi 5 janvier 2011

Les fonctions MQL4

Cette leçon vous permettra de créer votre tout premier Expert Advisor. Pour cela, il est encore nécessaire de maitriser le principe des fonctions.
Comme en mathématiques, une fonction permet, en suivant une série d' instructions, de transformer des données, mais elle peut aussi effectuer des actions.


Présentation d' une fonction simple :
Fonction de conversion EUR/USD.
double start()               // fonction start
  {                          // instructions comprises entre { et }
   int eur = 5;              // on prend 5 euros
   double taux = 1.3;        // le taux eur/usd est de 1,30
   double usd = eur * taux;
   Alert(eur, " euro = ", usd, " dollar");    // affíche le résultat
   return;                   // fin de la fonction
  }

En MQL4, la première fonction à s' exécuter est la fonction start. On peut remarquer que chaque instruction se termine par un point-virgule.
Copiez et collez cette fonction dans MetaEditor. Ensuite, cliquez sur 'Compiler'. Voila ce que vous devez obtenir :


Le programme a été compilé.
Maintenant, ouvrez Metatrader, et dans le navigateur, cliquez sur 'Expert Consultant', ou 'Expert Advisor'. Votre programme tout juste compilé est bien là.


Lancez le. Au bout d' un cours moment, une série d' alertes indiquant 5 euro = 6,5 dollar s' affiche en pop-up. Le programme a bien fonctionné !
Comme vous pouvez le constater, la fonction start est appelé à l' infinie.
Pour l' arrêter, stoppez les Experts Advisors ( voir bouton ci-dessous ).


---> Leçon suivante