Rejoindre la communauté
banner_forum
Devenez membre de la plus grande
communauté francophone sur le Forex
Partagez, échangez et apprenez en gagnant des crédits sur votre compte de trading

langage mql4

  • nivti1

    Bonjour,

    Je suis programmeur C et je me suis mis dernièrement au langage mql4. J'ai un cours en pdf mais je ne trouve pas certaines informations, comme par exemple comment écrire une valeur dans la fenêtre d'un indicateur ( avec sa taille et la couleur ).
    Je n'ai que "comment" pour écrire dans la fenêtre principale et "print" pour écrire dans le fichier log.
    Quelqu'un aurait-il un lien à me proposer où je pourrais trouver un complément de documentation?

    A bientôt
  • Forex Automatique (invité)

    Sans vouloir faire de la publicité sauvage, sur mon site : Forex Automatique, je propose des cours mql4 ou tu trouveras ce que tu recherches.
    Pour ta question je te conseille d' aller dans 'tutoriel MQL4 avancé', puis 'Un premier indicateur customisé', et 'Créer et modifier un objet graphique'.
  • Lorka85

    respect pour ton site http://forex-automatique.blogspot.com/ je vais le mettre en favoris :)
  • nivti1

    Merci pour ce lien vers ton site que je découvre avec joie...
    En attendant j'ai réussi à écrire un indicateur basé sur la considération de 3 cci.
    Cet indicateur ne suffit pas par lui-même, mais il peut être utile au même titre que le RSI ou la Stochastique.
    Il offre 3 courbes ( cci_14 cci_50 et cci_170 ) plus un histogramme "impulse" qui ( uniquement ) sur le chandelier en cours
    va indiquer les variations impulsives du cci_14 ( attention en cas de très faible volatilité comme le soir après 22h00 ) l'impulse
    peut prendre des valeurs très fortes ). J'utilise l'indicateur entre 7h00 et 17h00... ( en gmt+2)
    Je m'en sers surtout en TF m1 pour scalper. J'ai mis des commentaires dans le source, je pense cela ne vous posera pas de pbs.
    voici également une copie d'écran où l'on peut voir : sma_5, sma_10, slope_14 ichimoku puis rsi_14, sto_14 et enfin cci_v.
    A bientôt
    Voici le code :

    Code
    //+------------------------------------------------------------------+ //| cci_v.mq4 | //+------------------------------------------------------------------+ #property copyright "Nicolas vt" #property indicator_separate_window #property indicator_buffers 4 #property indicator_width1 3 #property indicator_width4 2 #property indicator_color1 Red #property indicator_color2 BlueViolet #property indicator_color3 MediumVioletRed #property indicator_color4 MediumSeaGreen #property indicator_level1 100.0 #property indicator_level2 -100.0 #property indicator_levelcolor RosyBrown #property indicator_levelstyle STYLE_DOT double ExtBuffer0[]; double ExtBuffer1[]; double ExtBuffer2[]; double ExtBuffer3[]; /* __________________________________________________________________________ | |*/ int init() /* |__________________________________________________________________________|*/ { IndicatorBuffers(4); IndicatorDigits(Digits-5); // les décimales ne sont d'aucun interêt... SetIndexDrawBegin(0,0); SetIndexDrawBegin(1,150); SetIndexDrawBegin(2,150); SetIndexDrawBegin(3,150); SetIndexBuffer(0,ExtBuffer0); SetIndexBuffer(1,ExtBuffer1); SetIndexBuffer(2,ExtBuffer2); SetIndexBuffer(3,ExtBuffer3); SetIndexStyle(0,DRAW_HISTOGRAM,EMPTY,3,indicator_color1); SetIndexStyle(1,DRAW_LINE,DRAW_LINE, 1,indicator_color2); SetIndexStyle(2,DRAW_LINE,DRAW_LINE, 1,indicator_color3); SetIndexStyle(3,DRAW_LINE,DRAW_LINE, 2,indicator_color4); SetIndexLabel(0,"cci 14 impulse "); SetIndexLabel(1,"cci 14 "); SetIndexLabel(2,"cci 50 "); SetIndexLabel(3,"cci 170 "); IndicatorShortName("CCI_V 14 50 170 impulse : "); return(1); } /* __________________________________________________________________________ | |*/ int start() /* |__________________________________________________________________________|*/ { int counted_bars=IndicatorCounted(); int LastBars=0; int i; double cci5[5]; // table des 5 derniers cci_14 int i5=0; // index tableau cci5 if(counted_bars<0) return(-1); if(counted_bars==0) { // la suite de l'init qui ne peut pas être fait dans "init()" LastBars=Bars; // trace les barres antécédentes for(i=0; i<LastBars; i++) { ExtBuffer0[i]=2.0; // une ligne de 2 d'épaisseur ExtBuffer1[i]=iCCI(NULL,0, 14,PRICE_TYPICAL,i); ExtBuffer2[i]=iCCI(NULL,0, 50,PRICE_TYPICAL,i); ExtBuffer3[i]=iCCI(NULL,0,170,PRICE_TYPICAL,i); } for(i=0; i<5; i++) cci5[i]=ExtBuffer1[0]; LastBars=Bars; return(0); } // Début de la fonction après le lancement initial if(LastBars != Bars) { LastBars = Bars; ExtBuffer0[1]= 2; // l'ancien impulse trace désormais une ligne d'épaisseur 2 au dessus de 0 } ExtBuffer1[0]=iCCI(NULL,0, 14,PRICE_TYPICAL,0); ExtBuffer2[0]=iCCI(NULL,0, 50,PRICE_TYPICAL,0); ExtBuffer3[0]=iCCI(NULL,0,170,PRICE_TYPICAL,0); // l'impulse est 2.5 x timeframe fois ( pour une visibilité identique qqs cette tf ) la différence // entre la dernière valeur cotée du cci_14 et la moyenne des 5 dernières valeurs cotées. ExtBuffer0[0]=((ExtBuffer1[0]*5-(cci5[0]+cci5[1]+cci5[2]+cci5[3]+cci5[4]))/2)*Period(); cci5[i5]=ExtBuffer1[0]; // nouvelle valeur remplace la + ancienne if(i5==4) i5=0; else i5++; // incrémente le compteur circulaire return(0); }
    nivti1 a joint une image
    G3008EB
  • Ramy

    Bonsoir développeurs,

    Juste pour vous dire que vous pouvez utiliser la balise [code] sur notre forum, ce qui rend la lecture de vos morceaux de code plus facile. J'ai édité ton message @nivti1 ;)
  • nivti1

    En effet je n'arrivais pas à charger le fichier source ( on m'indiquait que seul les fichiers png, jpg ... étaient autorisés.
    Je vais aller voir cela...
  • nivti1

    Je suis désolé Matt, mais je ne trouve pas cette balise code...
    A bientôt...
  • furynick

    Yeeeeeesssseuuu !!!

    On a enfin une balise code !!!!

    Youpiiiiii.

    Pour utiliser la mise en forme il faut taper [ code ] (sans les espaces) au début du code et [ / code ] (toujours sans les espaces) à la fin du code.

    Par exemple :
    Code
    //+------------------------------------------------------------------+ //| MTF HAS EA.mq4 | //| Tous droits réservés, Nicolas Tuffier (2011) | //| http://www.furyweb.fr/forex/ | //+------------------------------------------------------------------+ #property copyright "Tous droits réservés, Nicolas Tuffier (2011)" #property link "http://www.furyweb.fr/forex/" #import "stdlib.ex4" string ErrorDescription(int error_code); #import #include <stderror.mqh> #define NAME "MTF HAS" #define VERSION "1.0" //---- input parameters extern double lotSize=0.01; extern double TakeProfit=50.0; extern double StopLoss=50.0; extern int TF1=15; extern int TF2=240; extern int TF3=1440; extern int MAPeriod1=6; extern int MAPeriod2=2; extern int MAMethod1=2; extern int MAMethod2=3; int magicNumber = 172351; int timeframe[3]; double savedVolume, TPPoints, SLPoints; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- timeframe[0]=TF1; timeframe[1]=TF2; timeframe[2]=TF3; TPPoints = TakeProfit * Point * MathPow(10, Digits % 2); SLPoints = StopLoss * Point * MathPow(10, Digits % 2); //---- return(0); } bool newBarFormed() { bool ret=Volume[0] < savedVolume; savedVolume = Volume[0]; return(ret); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- double b4o, b4c, nowo, nowc; // before open, close, now open, close bool b4Bullish[3], nowBullish[3], buySignal, sellSignal; for (int i = 0; i < 3; i++) { b4o = iCustom(NULL, timeframe[i], "Heiken_Ashi_Smoothed", MAMethod1, MAPeriod1, MAMethod2, MAPeriod2, 2, 2); b4c = iCustom(NULL, timeframe[i], "Heiken_Ashi_Smoothed", MAMethod1, MAPeriod1, MAMethod2, MAPeriod2, 3, 2); nowo = iCustom(NULL, timeframe[i], "Heiken_Ashi_Smoothed", MAMethod1, MAPeriod1, MAMethod2, MAPeriod2, 2, 1); nowc = iCustom(NULL, timeframe[i], "Heiken_Ashi_Smoothed", MAMethod1, MAPeriod1, MAMethod2, MAPeriod2, 3, 1); nowBullish[i] = nowc > nowo; b4Bullish[i] = b4c > b4o; } if (newBarFormed()) { int scnt = 0, bcnt = 0, cnt = OrdersTotal(); for (i = 0; i < cnt; i++) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if (OrderMagicNumber() == magicNumber) if (OrderType() == OP_BUY) bcnt++; else if (OrderType() == OP_SELL) scnt++; buySignal = bcnt == 0 && nowBullish[0] && nowBullish[1] && nowBullish[2] && ( !b4Bullish[0] || !b4Bullish[1] || !b4Bullish[2] ); sellSignal = scnt == 0 && !nowBullish[0] && !nowBullish[1] && !nowBullish[2] && ( b4Bullish[0] || b4Bullish[1] || b4Bullish[2] ); } if (buySignal) if (OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, Ask - SLPoints, Bid + TPPoints, NAME + " " + VERSION, magicNumber) > 0) buySignal = false; if (sellSignal) if (OrderSend(Symbol(), OP_SELL, lotSize, Bid, 3, Bid + SLPoints, Ask - TPPoints, NAME + " " + VERSION, magicNumber) > 0) sellSignal = false; //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+
  • furynick

    Bon, c'est juste dommage qu'il y ait un bug à l'affichage, il y a un retour chariot en trop à chaque ligne ... mais je suis sûr que ça sera très vite corrigé (je signale le bug).
  • nivti1

    Merci Furynick,

    pour ces explications...
    Le robot que tu as mis fonctionne bien?
    Quelles sont les conditions d'utilisation?

    A bientôt
  • Lorka85

    il fonctionne a 80% nivti1, justement, va voir al section indicateur pour en savoir plus, mais nul doute qu'il sera l'un des 10 meilleurs robots mondiaux après :) merci de cette info balise fury ! agréable a lire !
  • Ramy

    Hmm à vue de nez ça ressemble aux doubles retours chariots de chez Windows (\r\n), je vais regarder de plus près...
  • Ramy

    Et bien voilà le bug réparé :) Je vais rajouter de la colorisation pour le code C bientôt, ça sera encore plus joli
  • furynick

    Miam ! j'ai hâte !!

    Et après tu nous fais les balises [b] et [i] et tant que tu y es, l'édition de nos posts :D

    je suis déjà dehors :P
  • pierre (invité) — en réponse à nivti1 dans son message #27380

    est ce que tu fait des robot