Quelques outils et fonctions MQL5

De Gandal

Code des pays et devises pour Calendrier (P1307)

C’est un peu cru donné comme cela mais imaginons que les infos suivantes se trouvent dans un tableau bien ordonné 😉.

[id] [nom] [code] [devise] [symbole_devise] [nom_url] [réservé]

0 "Worldwide" "WW" "ALL" "" "worldwide" 0

999 "European Union" "EU" "EUR" "€" "european-union" 0

840 "United States" "US" "USD" "$" "united-states" 0

124 "Canada" "CA" "CAD" "$" "canada" 0

36 "Australia" "AU" "AUD" "$" "australia" 0

554 "New Zealand" "NZ" "NZD" "$" "new-zealand" 0

392 "Japan" "JP" "JPY" "Ґ" "japan" 0

156 "China" "CN" "CNY" "Ґ" "china" 0

826 "United Kingdom" "GB" "GBP" "Ј" "united-kingdom"

756 "Switzerland" "CH" "CHF" "₣" "switzerland" 0

276 "Germany" "DE" "EUR" "€" "germany" 0

250 "France" "FR" "EUR" "€" "france" 0

380 "Italy" "IT" "EUR" "€" "italy" 0

724 "Spain" "ES" "EUR" "€" "spain" 0

76 "Brazil" "BR" "BRL" "R$" "brazil" 0

410 "South Korea" "KR" "KRW" "₩" "south-korea"

Modifier une position

Si le trade se fait par CTrade, il faut tout simplement utiliser la méthode

bool PositionModify(
const string symbol, // symbole
double sl, // prix du stop loss
double tp // prix du take profit )

Un exemple

// Importer librairie CTrade

#include <Trade\Trade.mqh>

CTrade trade;

trade.Sell(lot, _Symbol, Bid, SL, TP);

trade.PositionModify(_Symbol,NormalizeDouble(openPrice - (SecuredSL * 0.0001), _Digits), 0);

Récupérer la date d’ouverture de la bougie actuelle

MqlDateTime dt;   // On crée une srtucture MqlDateTime

datetime time=iTime(_Symbol, PERIOD_M1,0);   // On récupère l'heure d'ouverture de la bougie actuelle en M1

TimeToStruct(time,dt);     // On place cette heure dans le MqlDateTime pour plus facilement l'exploiter

Afficher des indicateurs dans le Testeur de stratégie

Les indicateurs chargés dans le code source sont automatiquement affichés dans le Testeur de stratégie mais par pur coïncidence je me suis rendu compte que cela fonctionnait avec des modèles placés sur les graphiques. En effet il suffit de créer un modèle du même nom que l'Expert Advisor qu’on lance pour que tous les indicateurs et outils qu’on place dessus apparaissent dans le tester.

Obtenir la TimeFrame en chaîne de caractères

string TimeFrameInString()

{

  int tf= _Period;

  if(tf==1){ return "M1";}

  if(tf==5){ return "M5";}

  if(tf==15){ return "M15";}

  if(tf==30){ return "M30";}

  if(tf==16385){ return "H1";}

  if(tf==16388){ return "M4";}

  if(tf==16408){ return "D1";}

  if(tf==32769){ return "W1";}

  if(tf==49153){ return "MN";}

  return "";

}

Envoyer une notification

SendNotification("Voici mon message");

Trouver la somme nécessaire pour un lot (marge)

SymbolInfoDouble(_Symbol, SYMBOL_MARGIN_HEDGED);

Afficher un message dans une message box

MessageBox("Mon message");

Utiliser les objets dans une fonction

Les fonctions utilsent des pointeurs sur objets (avec *) donc voici un exemple de fonction avec un objet CArrayDouble

CArrayDouble *getLotsArray(double lot)

  {

    CArrayDouble *lots = new CArrayDouble;

    while(lot >= 0.01)

      {

        if(lot > SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX))

          {

            lots.Add(SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX));

            lot -= SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);

          }

        else

          {

            lots.Add(SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX));

          }

      }

    return(lots);

  }

Initialiser la fonction OnInit()

  • Lancer le setprices()
  • Mettre à jour les dates
  • Mettre à jour le isOpen

Tracer les points pivot sur le graphique

datetime today;

int countDays=0;

void tracePivot(){

    if(iTime(_Symbol, PERIOD_D1,0) != today){

        today = iTime(_Symbol, PERIOD_D1,0);

        // début du tracé

        datetime Time1 = iTime(_Symbol,PERIOD_D1,0);

        //Calcul de l'eure de fin du tracé (à 23:30)

        MqlDateTime dEnd;

        TimeToStruct( iTime(_Symbol,PERIOD_D1,0),dEnd);

        dEnd.hour = 23; dEnd.min = 30;

        datetime Time2 = StructToTime(dEnd);

        // Tracé des lignes

        TrendCreate(0,"PP"+IntegerToString(countDays),0,Time1,PP(),Time2,PP(),clrBlue);

        TrendCreate(0,"S1"+IntegerToString(countDays),0,Time1,S1(),Time2,S1(),clrCyan);

        TrendCreate(0,"S2"+IntegerToString(countDays),0,Time1,S2(),Time2,S2(),clrYellow);

        TrendCreate(0,"S3"+IntegerToString(countDays),0,Time1,S3(),Time2,S3(),clrDarkGray);

        TrendCreate(0,"R1"+IntegerToString(countDays),0,Time1,R1(),Time2,R1(),clrBeige);

        TrendCreate(0,"R2"+IntegerToString(countDays),0,Time1,R2(),Time2,R2(),clrRosyBrown);

        TrendCreate(0,"R3"+IntegerToString(countDays),0,Time1,R3(),Time2,R3(),clrDarkOrange);

        countDays++;

    }

}

bool TrendCreate(const long chart_ID = 0, // identifiant du graphique

                const string name = "TrendLine", // nom de la ligne

                const int sub_window = 0, // indice de sous-fenêtre

                datetime time1 = 0, // heure du premier point

                double price1 = 0, // prix du premier point

                datetime time2 = 0, // heure du deuxième point

                double price2 = 0, // prix du deuxième point

                const color clr = clrRed, // couleur de la ligne

                const ENUM_LINE_STYLE style = STYLE_SOLID, // style de la ligne

                const int width = 3, // largeur de la ligne

                const bool back = false, // en arrière plan

                const bool selection = true, // mise en surbrillance pour le déplacement

                const bool ray_left = false, // Prolongement de la ligne vers la gauche

                const bool ray_right = false, // Prolongement de la ligne vers la droite

                const bool hidden = true, // caché dans la liste des objets

                const long z_order = 0) // priorité pour le clic de souris

  {

//--- réinitialise la valeur d'erreur

    ResetLastError();

//--- crée une ligne de tendance par les coordonnées données

    if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,time1,price1,time2,price2))

      {

        Print(__FUNCTION__,

              " : impossible de créer une ligne de tendance ! Code d'erreur = ",GetLastError());

        return(false);

      }

//--- définit la couleur de la ligne

    ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);

//--- définit le style d'affichage de la ligne

    ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);

//--- définit la largeur de la ligne

    ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);

//--- affiche en premier plan (false) ou en arrière-plan (true)

    ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);

//--- active (true) ou désactive (false) le mode de déplacement de la ligne à la souris

//--- lors de la création d'un objet graphique utilisant la fonction ObjectCreate, l'o

//--- mis en surbrillance et déplacé par défaut. Dans cette méthode, le paramètre de sélection

//--- est vrai par défaut, permettant de mettre en surbrillance et de déplacer l'objet

    ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);

    ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

//--- active (true) ou désactive(false) le mode de prolongation de l'affichage de la ligne vers la gauche

    ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);

//--- active (true) ou désactive(false) le mode de prolongation de l'affichage de la ligne vers la droite

    ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);

//--- masque (true) ou affiche (false) le nom de l'objet graphique dans la liste des objets

    ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);

//--- définit la priorité pour recevoir l'événement d'un clic de souris dans le graphique

    ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);

//--- exécution réussie

    return(true);

  }

Formater un fichier historique d’un Event depuis investing.com

  1. Se rendre sur la page de l’event sur investing.com
  2. Copier le tableau historique de l’event
  3. Coller le tableau dans Translater Investing - Google Sheets dans la première feuille à gauche
  4. Formater les heures (généralement on ajoute 1heure) dans la colonne tout à droit (pour cela << =CelluleDesHeures+ “1:00” >>
  5. Formater la colonne des heures en heure pour la modification puis en texte brut quand le formatge est terminé
  6. Se rendre sur la feuille Résultat pour valider le rendu puis le copier et coller uniquement les valeurs dans la feuille ToDownload
  7. Télécharger la feuille ToDownload en csv
  8. Ouvir le fichier téléchargé et enregistrer sous un csv en UTF-16 LE en le renommant comme il faut
  9. Charger le fichier dans l’EA Event et tester

Obtenir les données des inscriptions hebdomadaire au chômage de US

Ces données sont fournis par le “US Department of Labor” dont le site est https://www.dol.gov/.

Le site dédié aux devs est Beginner's Guide - United States Department of Labor Developer Portal (dol.gov)

.

On commence par créer un compte : Account Registered (dol.gov)

Se connecter ensuite et générer une clé  de connexion API .

Le Secret utilisé pour la première est mon mot de passe de toujours et la clé est 656af577-8bd6-4bd8-b3dd-b84a1890249c

LE liens vers la page spécial de l’api concernant Initial Jobless claims : OUI Initial Claims - United States Department of Labor Developer Portal (dol.gov)

Requête début :

http://api.dol.gov/V1/Statistics/OUI_InitialClaims/unemploymentInsuranceInitialClaims?$orderby=week desc&KEY=656af577-8bd6-4bd8-b3dd-b84a1890249c