Aide au codage - page 675

 
traderduke:
Vous utiliseriez 1 2ma pour la tendance générale et un autre pour le retour des hauts et des bas à court terme.
Cela signifie-t-il qu'il devrait y avoir deux indicateurs de canal de volatilité ?
 

Salut les codeurs.

J'ai besoin d'aide sur cette question : comment décaler horizontalement les signaux des flèches d'un indicateur simple de ma cross ?

J'ai essayé mais le décalage ne se fait que sur la gauche, j'ai besoin d'un décalage sur la droite.

Merci

//+------------------------------------------------------------------+
//|                                                   ma crosses.mq4 |
//+------------------------------------------------------------------+

#property indicator_chart_window
#property indicator_buffers 4
#property  indicator_color1  Blue
#property  indicator_color2  Red
#property  indicator_color3  LimeGreen
#property  indicator_color4  Magenta

//
//
//
//
//

extern int    FastMa             = 13;
extern int    FastMaShift        = 0;
extern int    FastMAMethod       = MODE_EMA;
extern int    FastMAPrice        = PRICE_CLOSE;
extern int    SlowMa             = 68;
extern int    SlowMaShift        = 0;
extern int    SlowMAMethod       = MODE_SMA;
extern int    SlowMAPrice        = PRICE_CLOSE;
extern bool   ShowMaLines        = true;

extern string note               = "turn on Alert = true; turn off = false";
extern bool   alertsOn           = true;
extern bool   alertsOnCurrent    = true;
extern bool   alertsMessage      = true;
extern bool   alertsSound        = true;
extern bool   alertsEmail        = false;
extern string soundfile          = "alert2.wav";

extern string note7              = "Arrow Type";
extern string note8              = "0=default,1=Thick,2=Thin,3=Hollow";
extern string note9              = "4=Round,5=Fractal,6=Diagonal Thin";
extern string note10             = "7=Diagonal Thick,8=Diagonal Hollow";
extern string note11             = "9=Thumb,10=Finger";
extern int    ArrowType          = 2;
extern int    arrowthickness     = 2;
extern double arrowsDisplacement = 2.0;
extern int    arrowHshift        = 0;

//
//
//
//
//

double CrossUp[];
double CrossDn[];
double fastMA[];
double slowMA[];
double trend[];

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
{
   IndicatorBuffers(5);   
   
   if (ArrowType == 0) {
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0,DRAW_ARROW,0,arrowthickness); SetIndexArrow(0,119);
   SetIndexBuffer(1, CrossDn );  SetIndexStyle(1,DRAW_ARROW,0,arrowthickness); SetIndexArrow(1,119);
   }
   if (ArrowType == 1) {
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 233);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 234);
   }
   else if (ArrowType == 2) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 225);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 226);
   }
   else if (ArrowType == 3) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 241);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 242);
   }
   else if (ArrowType == 4) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 221);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 222);
   }
   else if (ArrowType == 5) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 217);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 218);
   }
   else if (ArrowType == 6) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 228);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 230);
   }
   else if (ArrowType == 7) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 236);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 238);
   }
   else if (ArrowType == 8) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 246);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 248);
   }
   else if (ArrowType == 9) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 67);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 68);
   }
   else if (ArrowType == 10) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 71);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 72);
   }
   SetIndexBuffer(2, fastMA);
   SetIndexBuffer(3, slowMA);
   SetIndexBuffer(4, trend);
   
   if (ShowMaLines)
   {
     SetIndexStyle(2,DRAW_LINE); 
     SetIndexStyle(3,DRAW_LINE); 
   }
   else
   {
     SetIndexStyle(2,DRAW_NONE);
     SetIndexStyle(3,DRAW_NONE);
   }       
   
return(0);
}

//
//
//
//
//

int deinit() {  return(0); }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//
//
//
//

int start() {
   int counted_bars=IndicatorCounted();
   int i,limit;

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
         limit = MathMin(Bars-counted_bars,Bars-1);
         
   //
   //
   //
   //
   //
            
   for(i=limit; i>=0; i--)
   {
      fastMA[i]  = iMA(NULL,0,FastMa,FastMaShift,FastMAMethod,FastMAPrice,i);
      slowMA[i]  = iMA(NULL,0,SlowMa,SlowMaShift,SlowMAMethod,SlowMAPrice,i);
      double gap = iATR(NULL,0,20,i); 
      
      trend[i] = trend[i+1];
         if (fastMA[i]>slowMA[i]) trend[i] = 1;
         if (fastMA[i]<slowMA[i]) trend[i] =-1;

         //
         //
         //
         //
         //
      
         CrossUp[i] = EMPTY_VALUE;
         CrossDn[i] = EMPTY_VALUE;
         if (trend[i]!= trend[i+1])
         if (trend[i] == 1)
               CrossUp[i+arrowHshift] = Low[i]  - arrowsDisplacement * gap;
         else  CrossDn[i+arrowHshift] = High[i] + arrowsDisplacement * gap; 
         }
         
         if (alertsOn)
         {
         if (alertsOnCurrent)
              int whichBar = 0;
         else     whichBar = 1;

         //
         //
         //
         //
         //
         
         if (trend[whichBar] != trend[whichBar+1])
         if (trend[whichBar] == 1)
               doAlert("uptrend");
         else  doAlert("downtrend");       
   }
   
   return(0);
}
//+------------------------------------------------------------------+


void doAlert(string doWhat)
{
   static string   previousAlert="nothing";
   static datetime previousTime;
   string message;
   
      if (previousAlert != doWhat || previousTime != Time[0]) {
          previousAlert  = doWhat;
          previousTime   = Time[0];

          //
          //
          //
          //
          //

          message =  StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," ma cross ",doWhat);
             if (alertsMessage) Alert(message);
             if (alertsEmail)   SendMail(StringConcatenate(Symbol()," ma cross "),message);
             if (alertsSound)   PlaySound(soundfile);
      }
}

 
thefxpros:

Salut les codeurs.

J'ai besoin d'aide sur cette question : comment décaler horizontalement les signaux des flèches d'un indicateur simple de ma cross ?

J'ai essayé mais le décalage ne se fait que sur la gauche, j'ai besoin d'un décalage sur la droite.

Merci

Avez-vous essayé de décaler le tampon au lieu de décaler la valeur unique ?

Quelque chose comme :

   SetIndexShift(0,arrowHshift);
   SetIndexShift(1,arrowHshift);

Et ensuite inverser ces lignes pour qu'il n'y ait pas de décalage du tout.

//
// instead of 
//


         if (trend[i] == 1)
               CrossUp[i+arrowHshift] = Low[i]  - arrowsDisplacement * gap;
         else  CrossDn[i+arrowHshift] = High[i] + arrowsDisplacement * gap; 

//
// it has to be
//

         if (trend[i] == 1)
               CrossUp[i] = Low[i]  - arrowsDisplacement * gap;
         else  CrossDn[i] = High[i] + arrowsDisplacement * gap; 
 
thefxpros:

Salut les codeurs.

J'ai besoin d'aide sur cette question : comment décaler horizontalement les signaux des flèches d'un indicateur simple de ma cross ?

J'ai essayé mais le décalage ne se fait que sur la gauche, j'ai besoin d'un décalage sur la droite.

Merci

PS : pour décaler les valeurs maintenant vous devez utiliser les valeurs + pour décaler les flèches vers la droite et les valeurs - pour décaler les valeurs vers la gauche (je joins le code de test et il fonctionne bien pour tous les cas de décalage des flèches - gauche ou droite).

Dossiers :
_test.mq4  8 kb
 
mladen:
Est-ce que cela signifie qu'il devrait y avoir deux indicateurs de canal de voltys ?

mladen

Désolé de ne pas avoir répondu plus tôt, j'espérais revenir avec une solution à la question de l'indicateur, mais cela ne s'est pas produit.

Oui, c'est exact. Désolé pour le malentendu. Je répondais à Steven à propos de l'indicateur 2MA. Je n'ai pas pu utiliser l'indicateur existant pour l'entrée et la rentrée comme MR Tools l'a fait pour l'indicateur PrCh, bien que mon EA n'ait jamais pu obtenir une rentrée correcte, c'est comme un swing à la fumée.

De toute façon je peux le faire dans l'EA avec 2 voltys donc pas besoin de créer cet indicateur.


Merci pour votre aide

Ray

 
pls pouvez-vous m'aider à coder cet indicateur pour EA Je veux seulement qu'il trade une bougie lorsque la flèche apparaît et le fermer lorsque la bougie se ferme pls vous pouvez faire cette option j'en ai besoin.
 

Bonjour.

J'essaie de créer une alerte basée sur l'indicateur shved supply - demand en accord avec le croisement stochastique. Je suis informé que cet indicateur peut être utilisé pour créer des EA puisqu'il stocke les informations dans des tampons, mais je ne suis pas très confiant dans la lecture et la compréhension de mql4 et je n'ai pas plus de 2-3 mois de temps d'expérimentation.

J'espère donc que quelqu'un pourra m'aider à écrire la ligne iCustom pour vérifier si le prix est dans la zone ou non.

//+------------------------------------------------------------------+
//|                                              Indicator: chan.mq4 |
//|                                       Created with EABuilder.com |
//|                                             http://eabuilder.com |
//+------------------------------------------------------------------+
#property copyright "Created with EABuilder.com"
#property link      "http://eabuilder.com"
#property version   "1.00"
#property description ""

#include <stdlib.mqh>
#include <stderror.mqh>

//--- indicator settings
#property indicator_chart_window
#property indicator_buffers 2

#property  indicator_type1 DRAW_ARROW
#property  indicator_width1 5
#property  indicator_color1 0xFFAA00
#property  indicator_label1 "Buy"

#property  indicator_type2 DRAW_ARROW
#property  indicator_width2 5
#property  indicator_color2 0x1A00FF
#property  indicator_label2 "Sell"

//--- indicator buffers
double Buffer1[];
double Buffer2[];

double myPoint; //initialized in OnInit

void myAlert(string type, string message)
  {
   if(type == "print")
      Print(message);
   else if(type == "error")
     {
      Print(type+" | chan @ "+Symbol()+","+Period()+" | "+message);
     }
   else if(type == "order")
     {
     }
   else if(type == "modify")
     {
     }
  }

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {   
   IndicatorBuffers(2);
   SetIndexBuffer(0, Buffer1);
   SetIndexEmptyValue(0, 0);
   SetIndexArrow(0, 241);
   SetIndexBuffer(1, Buffer2);
   SetIndexEmptyValue(1, 0);
   SetIndexArrow(1, 242);
   //initialize myPoint
   myPoint = Point();
   if(Digits() == 5 || Digits() == 3)
     {
      myPoint *= 10;
     }
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
  {
   int limit = rates_total - prev_calculated;
   //--- counting from 0 to rates_total
   ArraySetAsSeries(Buffer1, true);
   ArraySetAsSeries(Buffer2, true);
   //--- initial zero
   if(prev_calculated < 1)
     {
      ArrayInitialize(Buffer1, 0);
      ArrayInitialize(Buffer2, 0);
     }
   else
      limit++;
   
   //--- main loop
   for(int i = limit-1; i >= 0; i--)
     {
      if (i >= MathMin(5000-1, rates_total-1-50)) continue; //omit some old rates to prevent "Array out of range" or slow calculation   
      //Indicator Buffer 1
      if(iStochastic(NULL, PERIOD_CURRENT, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i) < 20
      && iStochastic(NULL, PERIOD_CURRENT, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i+1) > 20 //Stochastic Oscillator crosses below fixed value
          !!!!!  && iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", i ***************** check if price is in upper zone
      )
        {
         Buffer1[i] = Low[i]; //Set indicator value at Candlestick Low
        }
      else
        {
         Buffer1[i] = 0;
        }
      //Indicator Buffer 2
      if(iStochastic(NULL, PERIOD_CURRENT, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i) > 80
      && iStochastic(NULL, PERIOD_CURRENT, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i+1) < 80 //Stochastic Oscillator crosses above fixed value
           !!!! && iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", i ***************  check if price is in lower zone
      )
        {
         Buffer2[i] = High[i]; //Set indicator value at Candlestick High
        }
      else
        {
         Buffer2[i] = 0;
        }
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+

Je ne m'attends pas à ce que quelqu'un investisse du temps pour m'aider, mais si je ne poste pas, je n'ai aucune chance, alors je me suis dit que j'allais essayer.

Peace and love fellow traders

Dossiers :
 
NWFstudent:

Bonjour.

J'essaie de créer une alerte basée sur l'indicateur shved supply - demand en accord avec le croisement stochastique. Je suis informé que cet indicateur peut être utilisé pour créer des EA puisqu'il stocke les informations dans des tampons, mais je ne suis pas très confiant dans la lecture et la compréhension de mql4 et je n'ai pas plus de 2-3 mois de temps d'expérimentation.

J'espère donc que quelqu'un pourra m'aider à écrire la ligne iCustom pour vérifier si le prix est dans la zone ou non.

Je ne m'attends pas à ce que quelqu'un investisse du temps pour m'aider, mais si je ne poste pas, je n'ai aucune chance, alors je me suis dit que j'allais essayer.

Peace and love fellow traders

Faites quelque chose comme ceci(vérifiez les commentaires aussi)

   //
   //
   // checking if the price is withing the lower zone
   //
   //
   
   if (Close[i] <= iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", 6,i) &&
       Close[i] >= iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", 7,i))
   //
   //
   // checking if the price is withing the upper zone
   //
   //
   
   if (Close[i] <= iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", 4,i) &&
       Close[i] >= iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", 5,i))
       
   //
   //
   // PS: that indicator stores values only for current bar in the buffers, so it works only for i==0
   //
   //
   //       
 
mladen:

Faites quelque chose comme ceci (vérifiez aussi les commentaires)

Merci, vous devez être l'administrateur le plus gentil de toutes les pages. Votre travail est très apprécié.

Prenez soin de vous.

 
dotmund:
Je veux seulement qu'il trade une bougie quand la flèche apparaît et qu'il la ferme quand la bougie se ferme. Vous pouvez faire cette option si vous en avez besoin.

pls aidez-moi