Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 644

 
tara:
Non.

Il serait plus utile que vous répondiez "dix" ! Au cas où vous ne le feriez pas !
 
Got:

Expliquez-moi où je me trompe, il ne trouve pas l'outil dans Market Watch.

Essayez également de mettre "=" dans la condition i>=0

for(int i=SymbolsTotal(true)-1; i>=0; i--){
 
borilunad:

Cliquez sur Charts, en bas de Properties et en haut à gauche décochez le Chart at the top ! Et en général, utilisez-en plus, cela vous sera utile !

Merci ! ça a marché.
 

Le débogueur ne fonctionne pas - quel est le problème ?

Metatrader bild 646, editor bild 934. Voici l'indicateur le plus simple :


Je l'exécute sur EURUSD, M1, et voici ce que j'obtiens :

1

C'est-à-dire que tout est comme il se doit.

Et maintenant, je crée un point d'arrêt avant Alert et je lance le débogueur :

USDCHF, le graphiqueH1 apparaît. D'où vient-elle ? J'ai seulementEURUSD , M1 ouvert.

Je l'exécute et voici ce que je vois :

C'est-à-dire que l'indicateur prend les données exactement de cette USDCHF,H1. Quel est le problème ici ?

Deuxième question : l'éditeur ne place pas le script écrit dans le dossier Scripts mais dans le dossier MQL4 et y place également le fichier compilé. Je dois faire glisser et déposer manuellement le code source dans le dossier Scripts, puis le compiler et le script n'apparaîtra dans le Navigateur qu'à ce moment-là. Je n'ai pas ce problème avec les indicateurs, ils vont dans leurs dossiers instantanément. Est-ce que je fais quelque chose de mal ou est-ce que l'éditeur fait une erreur ?

Troisième question. J'ai toujours 646 Bild, même si quelqu'un sur le Forum a parlé de 650e en mai. Il n'y a vraiment pas eu de mise à jour depuis, ou je me trompe encore ?

Bonne chance à celui qui me répondra.

 
Merci pour la chance ! Mais en ne répondant qu'à la troisième question ! Moi aussi j'ai un bild 646 jusqu'à ce que le serveur nous mette à jour avec un plus récent. Cela se produit lorsque je l'allume après un repos. Je le fais une fois par semaine avant le début de la session. Bonne chance à vous aussi !
 

Comment mettre SendMail et Alert dans l'indicateur de façon à ce qu'il ne réagisse pas aux anciens signaux lors du recalcul des valeurs de l'indicateur, mais qu'il affiche Alert et envoie un mail uniquement sur les nouveaux signaux ?

Si ça se passe comme ça :

//+------------------------------------------------------------------+
//|                                                       simple.mq4 |
//|                                                         evillive |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "evillive"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Magenta
#property indicator_color2 Aqua

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
double Up[];
double Down[];
extern int period = 2;
extern int method = 1;
extern int price = 0;
extern int shift = 4;
extern string _alerts_="alerts section";
input bool alert=false;//show alert
input bool mail=false;//send mail
input bool not=false;//send push notification
//////////////////

      string dir="";
      datetime tim=0;

int OnInit()
  {

   SetIndexStyle(0, DRAW_ARROW, EMPTY,3);
   SetIndexArrow(0, 176);
   SetIndexBuffer(0, Up);
   SetIndexStyle(1, DRAW_ARROW, EMPTY,3);
   SetIndexArrow(1, 176);
   SetIndexBuffer(1, Down);
   SetIndexLabel(0,"BUY!");
   SetIndexLabel(1,"SELL!");

   return(INIT_SUCCEEDED);
  }

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 i,limit;
   double ma0,ma1,atr;
//---
      if(rates_total<=(period+shift))
      return(0);
//--- counting from 0 to rates_total
//--- initial zero
   if(prev_calculated<1)
     {
      for(i=0; i<=rates_total-(period+shift); i++)
        {
         Up[i]=0.0;
         Down[i]=0.0;
        }
     }
//--- starting calculation
   if(prev_calculated>0)
      limit=rates_total-prev_calculated; //period+shift;
   else
      limit=rates_total-(period+shift);

   for(i = 1; i < limit; i++)
  {
      ma0 = iMA(NULL,0,period,0,method,price,i);
      ma1 = iMA(NULL,0,period,0,method,price,i+shift);
      atr = iATR(NULL,0,period,i);
      if(ma0>ma1 && Close[i]<Close[i+shift] && Close[i]>Close[i+period+shift])
        {
            Up[i] = (Close[i]+Open[i])/2;
            dir="up";
            tim=Time[i];
            alerts(dir,tim);
        }
      if(ma0<ma1 && Close[i]>Close[i+shift] && Close[i]<Close[i+period+shift])
        {   
            Down[i] = (Close[i]+Open[i])/2;
            dir="down";
            tim=Time[i];
            alerts(dir,tim);
        }
  }
   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void alerts(string d, datetime t)
{
if(!IsTesting() && (TimeLocal()-t)>60)
{
if(alert==true) Alert("New ",d," arrow");
if(mail==true) SendMail("New signal",StringConcatenate("A new ",d, "signal detected by indicator"));
if(not==true) SendNotification(StringConcatenate("A new ",d, "signal detected by indicator"));
}
return;
}

puis à tout effet sur l'indicateur (réglage sur le graphique, réglage, changement de TF, saut en place ou son aigu), il réaffiche les alertes et tente d'envoyer le même mail à TOUTES les flèches, du début du graphique à l'actuel.

Question supplémentaire - le courrier dans le journal est marqué comme"Mail : 'Test message' has been sent", mais pas une seule lettre n'est tombée dans la boîte ((()

 
evillive:

Comment puis-je écrire SendMail et Alert dans l'indicateur, afin qu'il ne réagisse pas aux anciens signaux lors du recalcul des valeurs de l'indicateur, mais qu'il affiche Alert et envoie un mail uniquement sur les nouveaux signaux ?

Si ça se passe comme ça :

puis à toute influence sur l'indicateur (installation sur le graphique, réglage, changement de TF, saut en place ou son aigu), il affiche à nouveau les alertes et tente de les envoyer par mail à TOUTES les flèches, du début du graphique à celui en cours.

Question supplémentaire - le courrier dans le journal est marqué comme"Mail : 'Test message' has been sent", mais pas une seule lettre n'est tombée dans la boîte (((.


Je l'aurais fait

//+------------------------------------------------------------------+
//|                                                       simple.mq4 |
//|                                                         evillive |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "evillive"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Magenta
#property indicator_color2 Aqua

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
double Up[];
double Down[];
extern int period = 2;
extern int method = 1;
extern int price = 0;
extern int shift = 4;
extern string _alerts_="alerts section";
input bool alert=false;//show alert
input bool mail=false;//send mail
input bool not=false;//send push notification
                     //////////////////

char dir=0;
datetime tim=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {

   SetIndexStyle(0,DRAW_ARROW,EMPTY,3);
   SetIndexArrow(0,176);
   SetIndexBuffer(0,Up);
   SetIndexStyle(1,DRAW_ARROW,EMPTY,3);
   SetIndexArrow(1,176);
   SetIndexBuffer(1,Down);
   SetIndexLabel(0,"BUY!");
   SetIndexLabel(1,"SELL!");

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 i,limit;
   double ma0,ma1,atr;
//---
   if(rates_total<=(period+shift))
      return(0);
//--- counting from 0 to rates_total
//--- initial zero
   if(prev_calculated<1)
     {
      for(i=0; i<=rates_total-(period+shift); i++)
        {
         Up[i]=0.0;
         Down[i]=0.0;
        }
     }
//--- starting calculation
   if(prev_calculated>0)
      limit=rates_total-prev_calculated-1; //period+shift;
   else
      limit=rates_total-(period+shift)-1;

   for(i=limit; i>=0; i--)
     {
      ma0 = iMA(NULL,0,period,0,method,price,i);
      ma1 = iMA(NULL,0,period,0,method,price,i+shift);
      atr = iATR(NULL,0,period,i);
      if(ma0>ma1 && Close[i]<Close[i+shift] && Close[i]>Close[i+period+shift])
        {
         Up[i]=(Close[i]+Open[i])/2;
        }
      if(ma0<ma1 && Close[i]>Close[i+shift] && Close[i]<Close[i+period+shift])
        {
         Down[i]=(Close[i]+Open[i])/2;
        }
     }
      if(ma0>ma1 && Close[0]<Close[shift] && Close[0]>Close[period+shift])
        {
         if (dir!=1) {
            dir=1;
            alerts("UP",Time[0]);
         }
        }
      if(ma0<ma1 && Close[i]>Close[i+shift] && Close[i]<Close[i+period+shift])
        {
         if (dir!=-1){
            dir=-1;
            alerts("DOWN",Time[0]);
         }
        }

   

   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void alerts(string d,datetime t)
  {
   if(!IsTesting() && (TimeLocal()-t)>60)
     {
      if(alert==true) Alert("New ",d," arrow");
      if(mail==true) SendMail("New signal",StringConcatenate("A new ",d,"signal detected by indicator"));
      if(not==true) SendNotification(StringConcatenate("A new ",d,"signal detected by indicator"));
     }
   return;
  }
//+------------------------------------------------------------------+
 
Vinin:


Je le ferais

Leslignes ajoutées sont-elles censées être à l'extérieur de la boucle ou s'agit-il d'une erreur de frappe ?
Ok, j'ai compris, c'est comme ça que ça doit être.
 

Bonjour, est-ce que quelqu'un a un modèle pour faire la moyenne d'un poste.

C'est-à-dire que si un ordre est ouvert et qu'il est perdant, alors on ouvre un deuxième ordre dans la même direction, on met un stop au milieu entre ces ordres et ainsi de suite, trois ordres, quatre... ?

 
Top2n:

Bonjour, est-ce que quelqu'un a un modèle pour faire la moyenne d'un poste.

C'est-à-dire, si un ordre est ouvert et qu'il est perdant, alors on ouvre un deuxième ordre dans la même direction, on met un stop au milieu entre ces ordres et ainsi de suite, trois ordres, quatre... ?


Prenez tous les prix ouverts et calculez la moyenne arithmétique.
Raison: