MT4 et affichage en %

Forum d'entraide ProRealTime : prise en main, réglages, indicateurs, programmation ProBuilder et ProOrder, astuces entre utilisateurs de la plateforme.
Avatar du membre
falex
Le Gladiateur
Messages : 34275
Enregistré le : 12 févr. 2013 15:41

MT4 et affichage en %

Message non lu par falex »

Hello les spécialistes de MT4.

Bon alors ce vieux machin (désolé :( ) est-il capable d'afficher une prix en valeur relatif (en % par rapport à un 0) et non uniquement le prix en valeur absolue ?

Typiquement je voudrais afficher -1.02% par rapport à une valeur X et non 9655 pour le DAX.

Merci.
kim47
Ewok
Messages : 13
Enregistré le : 13 sept. 2014 18:15

Re: MT4 et affichage en %

Message non lu par kim47 »

salut, bien sur que tu peux le faire, il te suffit de programmer ça sur mql4... un genre de cadrant comme bfm-business...
Metatrader a son propre forum spécialisé mais en anglais... j ai squatté pas mal la bas...

tu te fais ta petite formule et pour l affichage...bon bouge pas !

Code : #

//+------------------------------------------------------------------+
//|                                         cours en pourcentage.mq4 |
//|                        Copyright 2014, kim47.
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, kim47"
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
#define NL     "\n" //commentaire



extern double opendax30=-1;
extern double opencac40=-1;
extern double openeurusd=-1;
extern double openxauusd=-1;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//cours actuel
double dax30=MarketInfo("#FDXZ4",MODE_BID);   // attention ,symbol cfd à risque limité et futur sont differents...
double cac40 = MarketInfo("#FCEZ4",MODE_BID);
double eurusd = MarketInfo("EURUSD",MODE_BID);
double xauusd = MarketInfo("GOLD",MODE_BID);

//si l'eimpreinte n'est pas rélevée une alerte est lancé pour le rentrer manuellement
if (opendax30 ||opencac40 ||openeurusd ||openxauusd<=0){  
Alert("Empreinte impossible, veuillez entrer manuellement, merci!");
if (opendax30 &&opencac40 &&openeurusd &&openxauusd>0){
Alert("Empreinte enregistrées, merci!");
}}

//Empreinte selon horaire des marchés
if (Hour() == 0){ // forex
        if (Minute() == 0){
        if (Seconds() == 1){
        openeurusd = Bid; openxauusd =Bid; }}}

if (Hour() == 9){ //indice
        if (Minute() == 0){
        if (Seconds() == 1){
        opendax30 = Bid ; opencac40 = Bid; }}}
        
//calcul
 dax30= (100 / opendax30 * dax30 - 100); // Ta formule dax 30
 cac40= (100 / opencac40 * cac40 - 100); // Ta formule cac40
 eurusd= (100 / openeurusd * eurusd - 100); // Ta formule eurusd
 xauusd= (100 / openxauusd * xauusd - 100); // Ta formule pour l'or

//AFFICHAGE
Comment("DAX30 = ",(DoubleToStr(dax30,2))," %"+NL+  //affichage à 2 chiffre après la virgule
        "CAC40 = ",(DoubleToStr(cac40,2))," %"+NL+
        "EURUSD = ",(DoubleToStr(eurusd,2))," %"+NL+
        "XAUUSD = ", (DoubleToStr(xauusd,2))," %"+NL);


// le graphe doit être impérativement ouvert avant l'ouverture sinon il ne récupère pas l'empreinte du premier mouvement....
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
// le graphe doit être impérativement ouvert avant l'ouverture sinon il ne récupère pas l'empreinte du premier mouvement.... Autrement, tu l' enregistre manuellement

manuellement c'est OK, mais automatique en backtest... j'peux pas encor confirmer, bye
Avatar du membre
falex
Le Gladiateur
Messages : 34275
Enregistré le : 12 févr. 2013 15:41

Re: MT4 et affichage en %

Message non lu par falex »

Merci pour le code je regarderai lundi.
kim47
Ewok
Messages : 13
Enregistré le : 13 sept. 2014 18:15

Re: MT4 et affichage en %

Message non lu par kim47 »

Nouvelle version mise a jour V1.1
Backtest ok !

Pour entrer les prix d' ouvertures manuellement, clique-gauche sur le smiley :cry: du graphique en question et entrer les valeurs demandées.

Code : #

//+------------------------------------------------------------------+
//|                                         cours en pourcentage.mq4 |
//|                        Copyright 2014, kim47.
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, kim47"
#property link      "http://www.mql5.com"
#property version   "1.1"
#property strict
#define NL     "\n" //commentaire


// le graphe doit être impérativement ouvert avant l'ouverture sinon il ne récupère pas l'empreinte du premier mouvement....
extern double opendax30;
extern double opencac40;
extern double openeurusd;
extern double openxauusd;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---


//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
   //cours actuel
double dax30 = MarketInfo("#FDXZ4",MODE_BID);   // attention ,symbol cfd à risque limité et futur sont differents...
double cac40 = MarketInfo("#FCEZ4",MODE_BID);   // possibilité de changer les symboles a votre convenance
double eurusd = MarketInfo("EURUSD",MODE_BID);
double xauusd = MarketInfo("GOLD",MODE_BID);    // exemple GOLD par XAUUSD (ou autre) mais il va falloir modifier l'affichage aussi dans la partie 'comment' !!!


// pour backtest seulement !!! à griser en mode "live"
//if ((dax30<=0)||(cac40<=0)||(eurusd<=0)||(xauusd<=0)){dax30=10000; cac40=5000; eurusd=1.50; /*xauusd= 2000;*/}


//si l'eimpreinte n'est pas rélevée une alerte est lancé pour l'entrer manuellement
if (opendax30 && opencac40 && openeurusd && openxauusd >0 ){  
   /* Alert("Empreintes enregistrées, merci!");*/
//calcul
    double calc_dax30 = (100 / opendax30 * dax30 - 100); // Ta formule dax 30
    double calc_cac40 = (100 / opencac40 * cac40 - 100); // Ta formule cac40
    double calc_eurusd = (100 / openeurusd * eurusd - 100); // Ta formule eurusd
    double calc_xauusd = (100 / openxauusd * xauusd - 100); // Ta formule pour l'or
//AFFICHAGE
      Comment((DoubleToStr(Hour(),0))," H "+(DoubleToStr(Minute(),0))," min "+(DoubleToStr(Seconds(),0))," Sec"+ NL+
            "DAX30 = ",(DoubleToStr(calc_dax30,2))," %"+" OPEN = ",(DoubleToStr(opendax30,2))+" DAX30 = ",(DoubleToStr(dax30,2))+NL+  //affichage à 2 chiffre après la virgule
            "CAC40 = ",(DoubleToStr(calc_cac40,2))," %"+" OPEN = ",(DoubleToStr(opencac40,2))+" CAC40 = ",(DoubleToStr(cac40,2))+NL+
            "EURUSD = ",(DoubleToStr(calc_eurusd,2))," %"+" OPEN = ",(DoubleToStr(openeurusd,5))+" EURUSD = ",(DoubleToStr(eurusd,5))+NL+
            "XAUUSD = ", (DoubleToStr(calc_xauusd,2))," %"+" OPEN = ",(DoubleToStr(openxauusd,2))+" XAUUSD = ", (DoubleToStr(xauusd,2))+NL);

}  else {
        Comment("Empreinte impossible, veuillez entrer manuellement, merci !");
      
       //pour bakctest seulement !!! à griser en mode "live"
       /*opendax30=9845;
       opencac40=4453;
       openeurusd=1.29203;
       openxauusd=1224;*/

}

//Empreinte selon horaires d'ouverture des marchés
if (Hour() == 0){ // forex
        if (Minute() == 0){
        if (Seconds() <= 1){
        openeurusd = eurusd;}}}
        
if (Hour() == 1){ // forex
        if (Minute() == 0){
        if (Seconds() <= 1){
        openxauusd = xauusd;}}}
        
if (Hour() == 9){ //indice
        if (Minute() == 0){
        if (Seconds() <=1){
        opendax30 = dax30 ; opencac40 = cac40; }}} // cac trop court =problem
               




   
  }
//+------------------------------------------------------------------+
Avatar du membre
falex
Le Gladiateur
Messages : 34275
Enregistré le : 12 févr. 2013 15:41

Re: MT4 et affichage en %

Message non lu par falex »

J'ai bienfait d'attendre avant de tester :)

Tu as encore 12/13H devant toi pour une V1.2 :lol:
Avatar du membre
falex
Le Gladiateur
Messages : 34275
Enregistré le : 12 févr. 2013 15:41

Re: MT4 et affichage en %

Message non lu par falex »

Je viens de tester la v1.1 : Bizare ça n'affiche rien.

J'ai remplacé le "code" Dax FD.. par "Dax 30" et rien ?
Tu aurais un screenshot du résultat s'il te plait ?

Idem pour EURUSD (ou le code est le même).

A chaque fois mes graphe sont bien ouvert avant que je charge l'indicateur.
kim47
Ewok
Messages : 13
Enregistré le : 13 sept. 2014 18:15

Re: MT4 et affichage en %

Message non lu par kim47 »

slt, voila pour l'aperçu, je te confirme qu'il est opérationnel...

par contre si tu n'a aucun de ces 2 affichages c'est que le fichier n'est pas au bon endroit sur ton pc et j'ai une petite idée du problème...

Mt4 : fichier / ouvrir le dossier des données / mql4 / experts / ici !!! et normalement c'est bon...

tiens moi au jus...
Fichiers joints
fonctionel sans &quot;cours d'ouverture&quot;
fonctionel sans "cours d'ouverture"
fonctionel avec &quot;cours d'ouverture&quot; connu
fonctionel avec "cours d'ouverture" connu
Avatar du membre
falex
Le Gladiateur
Messages : 34275
Enregistré le : 12 févr. 2013 15:41

Re: MT4 et affichage en %

Message non lu par falex »

Ok merci pour l'export.

Je vais regarder pourtant quand j'ai fini la compile et que je lance le terminal il est bien dans la liste à gauche ...

J'ai compris pourquoi ça n'affiche rien, tu l'a codé comme un EA pas comme un indic' ...
et moi j'ai copié/collé en tant qu'indic

---

Curieux malgré le fait que j'ai changé les codes des sous-jacent je suis obligé de rentrer le cours à la main ?
kim47
Ewok
Messages : 13
Enregistré le : 13 sept. 2014 18:15

Re: MT4 et affichage en %

Message non lu par kim47 »

non, tu doit rentrer le cours d'ouverture (la première fois), pas le cours actuel, lol, ensuite il boss tout seul...
Avatar du membre
falex
Le Gladiateur
Messages : 34275
Enregistré le : 12 févr. 2013 15:41

Re: MT4 et affichage en %

Message non lu par falex »

Oui j'avais bien vu ça dans ton code. mais tu avais écris en commentaire que si le graphe était ouvert il n'y avait pas besoin d'écrire le cours d'ouverture, c'est de la que vient mon étonnement.
kim47
Ewok
Messages : 13
Enregistré le : 13 sept. 2014 18:15

Re: MT4 et affichage en %

Message non lu par kim47 »

...si le graph était ouvert "AVANT" que le cours démarre...
Avatar du membre
falex
Le Gladiateur
Messages : 34275
Enregistré le : 12 févr. 2013 15:41

Re: MT4 et affichage en %

Message non lu par falex »

alors il y a un truc bizare.

Le terminal est ouvert et j'ai 4 onglet (DAX, US30, CAC et EURSUD), ensuite je glisse et dépose ton EA dans un des graphes et là il me dit : Empreinte pas disponible.

J'ai bien raté un truc ?
kim47
Ewok
Messages : 13
Enregistré le : 13 sept. 2014 18:15

Re: MT4 et affichage en %

Message non lu par kim47 »

"non, tu doit rentrer le cours d'ouverture (la première fois), pas le cours actuel, lol, ensuite il boss tout seul..."

je l'utilise bien, sans problème, la preuve dans les aperçus précédemment envoyé...
je vais voir si j peux pas faire en sorte qu il récupère le cours (open) après l'ouverture des marchés, ça sera plus simple,........ sinon on va se chamailler, lol, bon ben v1.2 en cours...
kim47
Ewok
Messages : 13
Enregistré le : 13 sept. 2014 18:15

Re: MT4 et affichage en %

Message non lu par kim47 »

voila la version 1.2 plus simple, plus efficace... et surtout automatique!


Code : #

//+------------------------------------------------------------------+
//|                                         cours en pourcentage.mq4 |
//|                        Copyright 2014, kim47.
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, kim47"
#property link      "http://www.mql5.com"
#property version   "1.2"
#property strict
#define NL     "\n" //commentaire


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---


//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
//cours actuel
double dax30 = MarketInfo("#FDXZ4",MODE_BID);   // attention ,symbol cfd à risque limité et futur sont differents...
double cac40 = MarketInfo("#FCEZ4",MODE_BID);   // possibilité de changer les symboles a votre convenance
double eurusd = MarketInfo("EURUSD",MODE_BID);
double xauusd = MarketInfo("GOLD",MODE_BID);    // exemple GOLD par XAUUSD (ou autre) mais il va falloir modifier l'affichage aussi dans la partie 'comment' !!!

//Empreinte récupéré automatiquement (OPEN)
double opendax30 = iOpen("#FDXZ4",PERIOD_D1,0);
double opencac40 = iOpen("#FCEZ4",PERIOD_D1,0);
double openeurusd = iOpen("EURUSD",PERIOD_D1,0);
double openxauusd = iOpen("GOLD",PERIOD_D1,0);


// pour backtest seulement !!! à griser en mode "live"
//if ((dax30<=0)||(cac40<=0)||(eurusd<=0)||(xauusd<=0)){dax30=10000; cac40=5000; eurusd=1.50; /*xauusd= 2000;*/}


//si l'eimpreinte n'est pas rélevée une alerte est lancé pour modifier un ou plusieurs symbols
if (opendax30 && opencac40 && openeurusd && openxauusd >0 ){  
    /*Alert("Empreintes enregistrées, merci!");*/
    
//calcul
    double calc_dax30 = (100 / opendax30 * dax30 - 100); // Ta formule dax 30
    double calc_cac40 = (100 / opencac40 * cac40 - 100); // Ta formule cac40
    double calc_eurusd = (100 / openeurusd * eurusd - 100); // Ta formule eurusd
    double calc_xauusd = (100 / openxauusd * xauusd - 100); // Ta formule pour l'or
//AFFICHAGE
      Comment((DoubleToStr(Hour(),0))," H "+(DoubleToStr(Minute(),0))," min "+(DoubleToStr(Seconds(),0))," Sec"+ NL+
            "DAX30 = ",(DoubleToStr(calc_dax30,2))," %"+" OPEN = ",(DoubleToStr(opendax30,2))+" DAX30 = ",(DoubleToStr(dax30,2))+NL+  //affichage à 2 chiffre après la virgule
            "CAC40 = ",(DoubleToStr(calc_cac40,2))," %"+" OPEN = ",(DoubleToStr(opencac40,2))+" CAC40 = ",(DoubleToStr(cac40,2))+NL+
            "EURUSD = ",(DoubleToStr(calc_eurusd,2))," %"+" OPEN = ",(DoubleToStr(openeurusd,5))+" EURUSD = ",(DoubleToStr(eurusd,5))+NL+
            "XAUUSD = ", (DoubleToStr(calc_xauusd,2))," %"+" OPEN = ",(DoubleToStr(openxauusd,2))+" XAUUSD = ", (DoubleToStr(xauusd,2))+NL);


}  else {
        Comment("Empreinte impossible, vérifiez les symbols , merci !");
      
       //pour bakctest seulement !!! à griser en mode "live"
       /*opendax30=9845;
       opencac40=4453;
       openeurusd=1.29203;
       openxauusd=1224;*/

}

// horaires d'ouverture des marchés
/*if (Hour() == 0){ // forex
        if (Minute() == 0){
        if (Seconds() <= 1){
        }}}
        
if (Hour() == 1){ // forex
        if (Minute() == 0){
        if (Seconds() <= 1){
        }}}
        
if (Hour() == 9){ //indice
        if (Minute() == 0){
        if (Seconds() <=1){
         }}} */
               




   
  }
//+------------------------------------------------------------------+
Avatar du membre
falex
Le Gladiateur
Messages : 34275
Enregistré le : 12 févr. 2013 15:41

Re: MT4 et affichage en %

Message non lu par falex »

Et la version 1.2 pour IG et FXCM avec les bon noms des symboles pour DAX, CAC et Or

Testé et validé.

Attention les cours s'affichent au prochain tick donc patience si vous mettez en route lors d'un moment de très faible échange.

Code : #

    //+------------------------------------------------------------------+
    //|                                         cours en pourcentage.mq4 |
    //|                        Copyright 2014, kim47.
    //|                                              http://www.mql5.com |
    //+------------------------------------------------------------------+
    #property copyright "Copyright 2014, kim47, update falex IG/FXCM"
    #property link      "http://www.mql5.com"
    #property version   "1.2"
    #property strict
    #define NL     "\n" //commentaire


    //+------------------------------------------------------------------+
    //| Expert initialization function                                   |
    //+------------------------------------------------------------------+
    int OnInit()
      {
    //---


    //---
       return(INIT_SUCCEEDED);
      }
    //+------------------------------------------------------------------+
    //| Expert deinitialization function                                 |
    //+------------------------------------------------------------------+
    void OnDeinit(const int reason)
      {
    //---
       
      }
    //+------------------------------------------------------------------+
    //| Expert tick function                                             |
    //+------------------------------------------------------------------+
    void OnTick()
      {
    //---
       
    //cours actuel
    double dax30 = MarketInfo("Dax 30",MODE_BID);   // attention ,symbol cfd à risque limité et futur sont differents...
    double cac40 = MarketInfo("FRA40",MODE_BID);   // possibilité de changer les symboles a votre convenance
    double eurusd = MarketInfo("EURUSD",MODE_BID);
    double xauusd = MarketInfo("XAUUSD",MODE_BID);    // exemple GOLD par XAUUSD (ou autre) mais il va falloir modifier l'affichage aussi dans la partie 'comment' !!!

    //Empreinte récupéré automatiquement (OPEN)
    double opendax30 = iOpen("Dax 30",PERIOD_D1,0);
    double opencac40 = iOpen("FRA40",PERIOD_D1,0);
    double openeurusd = iOpen("EURUSD",PERIOD_D1,0);
    double openxauusd = iOpen("XAUUSD",PERIOD_D1,0);


    // pour backtest seulement !!! à griser en mode "live"
    //if ((dax30<=0)||(cac40<=0)||(eurusd<=0)||(xauusd<=0)){dax30=10000; cac40=5000; eurusd=1.50; /*xauusd= 2000;*/}


    //si l'eimpreinte n'est pas rélevée une alerte est lancé pour modifier un ou plusieurs symbols
    if (opendax30 && opencac40 && openeurusd && openxauusd >0 ){ 
        /*Alert("Empreintes enregistrées, merci!");*/
       
    //calcul
        double calc_dax30 = (100 / opendax30 * dax30 - 100); // Ta formule dax 30
        double calc_cac40 = (100 / opencac40 * cac40 - 100); // Ta formule cac40
        double calc_eurusd = (100 / openeurusd * eurusd - 100); // Ta formule eurusd
        double calc_xauusd = (100 / openxauusd * xauusd - 100); // Ta formule pour l'or
    //AFFICHAGE
          Comment((DoubleToStr(Hour(),0))," H "+(DoubleToStr(Minute(),0))," min "+(DoubleToStr(Seconds(),0))," Sec"+ NL+
                "DAX30 = ",(DoubleToStr(calc_dax30,2))," %"+" OPEN = ",(DoubleToStr(opendax30,2))+" DAX30 = ",(DoubleToStr(dax30,2))+NL+  //affichage à 2 chiffre après la virgule
                "CAC40 = ",(DoubleToStr(calc_cac40,2))," %"+" OPEN = ",(DoubleToStr(opencac40,2))+" CAC40 = ",(DoubleToStr(cac40,2))+NL+
                "EURUSD = ",(DoubleToStr(calc_eurusd,2))," %"+" OPEN = ",(DoubleToStr(openeurusd,5))+" EURUSD = ",(DoubleToStr(eurusd,5))+NL+
                "XAUUSD = ", (DoubleToStr(calc_xauusd,2))," %"+" OPEN = ",(DoubleToStr(openxauusd,2))+" XAUUSD = ", (DoubleToStr(xauusd,2))+NL);


    }  else {
            Comment("Empreinte impossible, vérifiez les symbols , merci !");
         
           //pour bakctest seulement !!! à griser en mode "live"
           /*opendax30=9845;
           opencac40=4453;
           openeurusd=1.29203;
           openxauusd=1224;*/

    }

    // horaires d'ouverture des marchés
    /*if (Hour() == 0){ // forex
            if (Minute() == 0){
            if (Seconds() <= 1){
            }}}
           
    if (Hour() == 1){ // forex
            if (Minute() == 0){
            if (Seconds() <= 1){
            }}}
           
    if (Hour() == 9){ //indice
            if (Minute() == 0){
            if (Seconds() <=1){
             }}} */
                   




       
      }
    //+------------------------------------------------------------------+

tontondubled
Padawan
Messages : 494
Enregistré le : 30 nov. 2015 17:02

Re: MT4 et affichage en %

Message non lu par tontondubled »

bonsoir,

se post date un peu voir beaucoup mais je suis a la recherche de se type de fichier au format indicateur, en mode expert; je n'arrive pas a le faire fonctionner correctement sur mt4 est t'il trouvable ?

merci