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

Intrdroduire le code suivant "PlaySound("alert.wav");"

  • Settela

    salut

    je suis novice sur mql4 et je souhaite introduire ce code qui me permet d'avoir une alerte sonore sur mon indicateur quand la valeur de cet indicateur est "0"

    ci joint l'indicateur : https://mega.co.nz/#!l8dBGBZJ!cxUMKAQWFAEqH3TRBLk2wGFPsQEb8t7DYrLB1gSd6dI

    Merci
  • JJFlash

    Salut !
    Pour savoir si ton indicateur est égale à 0 tu as deux possibilité :
    - solution facile : utiliser la fonction iCustom(), qui permet de récupérer la valeur d'un indicateur technique, mais c'est pas très optimal
    - solution optimal : tu va rechercher dans le code de ton indicateur ce qui calcul la valeur que tu veux.

    Ensuite pour faire le son, tu as la fonction PlaySound comme tu l'as indiqué dans ton titre.
  • Settela

    Salut JJFlash

    voici le code de l'indicateur :

    Code
    #property copyright "Copyright © 2005, Yura Prokofiev" #property link "[email protected]" #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Black #property indicator_color2 Lime #property indicator_color3 Red extern int period=10; double ExtBuffer0[]; double ExtBuffer1[]; double ExtBuffer2[]; int init() { SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2,Red); SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2,Lime); SetIndexStyle(2,DRAW_HISTOGRAM); IndicatorDigits(Digits+1); SetIndexBuffer(0,ExtBuffer0); SetIndexBuffer(1,ExtBuffer1); SetIndexBuffer(2,ExtBuffer2); IndicatorShortName("Fisher"); SetIndexLabel(1,NULL); SetIndexLabel(2,NULL); return(0); } int start() { //int period=10; int limit; int counted_bars=IndicatorCounted(); double prev,current,old; double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0; double price; double MinL=0; double MaxH=0; if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; for(int i=0; i<limit; i++) { MaxH = High[Highest(NULL,0,MODE_HIGH,period,i)]; MinL = Low[Lowest(NULL,0,MODE_LOW,period,i)]; price = (High[i]+Low[i])/2; Value = 0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1; Value=MathMin(MathMax(Value,-0.999),0.999); ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1; Value1=Value; Fish1=ExtBuffer0[i]; } bool up=true; for(i=limit-2; i>=0; i--) { current=ExtBuffer0[i]; prev=ExtBuffer0[i+1]; if (((current<0)&&(prev>0))||(current<0)) up= false; if (((current>0)&&(prev<0))||(current>0)) up= true; if(!up) { ExtBuffer2[i]=current; ExtBuffer1[i]=0.0; } else { ExtBuffer1[i]=current; ExtBuffer2[i]=0.0; } } return(0); }

    ==> je crois que c'est l'output se trouve sur la ligne ExtBuffer1[i]
    Modifié le 2013-06-30 16:29:16 par AliX
  • JJFlash

    Bon, le code de ton indicateur n'est pas trop long, et il m'a l'aire d'être plutôt bien optimisé, donc sa ne sera pas trop lourd d'utiliser directement la fonction iCustom()
  • Settela

    ou est ce que je mets icustom et comment je peux paramétrer le faite que quand c'est égal à 0 il doit lancer l'alerte sonore
  • Settela

    Bonjour

    j'ai réussi à avoir ce code, mais il y'a un problème c'est que je recois plein d'alertes, comment je peux limiter ces alertes

    voici le code:


    Code
    //Extern variables //Declaration double _FisherYur4ik; bool _Buy; bool _Compare; bool _Compare_1; int init() { return(0); } int start() { //Step 1 _FisherYur4ik = iCustom( Symbol(), 1, "Fisher_Yur4ik", 0, 0 ); if( false ) _Buy = Buy( 0, 0.1, 0, 0, 5, 1, 0 ); //Step 2 _Compare = _FisherYur4ik >= 0; _Compare_1 = 0 > _FisherYur4ik; //Step 3 if( _Compare ) Alert( "FisherYur4ik is above 0" ); if( _Compare_1 ) Alert( "FisherYur4ik is below 0" ); return(0); }
    Modifié le 2013-07-01 14:14:31 par AliX
  • JJFlash

    il faut que tu demandes de donner l'alerte uniquement au début d'une bougie. Pour cela il faut que tu utilises la fonction Volume[].
    Rajoute au tout début de ton code cette ligne :
    if(Volume[0] != 1) return(0) ;
    En gros sa signifie que si le Volume de la bougie actuel (volume = nombre de tick) n'est pas 1 alors on applique pas le code.
    Donc ton code va se faire uniquement à l'ouverture d'une nouvelle bougie
  • Settela

    JJFLASH

    j'ai pu optimiser le code, avec un time frame de 1MIN et ca marche sauf que dans le messge d'alerte il ne m'indique pas sur quelle paire de devises l'alerte est survenue ==> comment paramétrer ca ?

    voici le code:

    Code
    //Extern variables //Declaration double _FisherYur4ik; bool _Compare; int init() { return(0); } int start() { //Step 1 _FisherYur4ik = iCustom( Symbol(), 1, "Fisher_Yur4ik", 0, 0 ); //Step 2 _Compare = _FisherYur4ik == 0; //Step 3 if( _Compare ) Alert( "Fisher equal 0" ); return(0); }
    Modifié le 2013-07-01 14:15:01 par AliX
  • JJFlash

    Essaie de mettre à la place de "Fisher equal 0" tu rajoute + Symbol()
    Sa te donnerai :
    if( _Compare ) Alert( "Fisher equal 0"+Symbol() );
    Je sais pas si sa compiler mais faut essayer. Si sa ne compile pas, créé un variable string pour y mettre "Fisher equal 0"+Symbol() et ensuite fait appelle a la fonction Alert()
    Modifié le 2013-07-01 11:19:18 par JJFlash
  • Settela

    wow ca marche et je n'ai pas besoin de créer une variable string ;)

    Merci JJFLASH