Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 644

 
tara:
Nein.

Es wäre sinnvoller, wenn Sie mit "zehn" antworten würden! Falls Sie es nicht wissen!
 
Got:

Erklären Sie mir, wo ich falsch liege, das Tool wird in Market Watch nicht gefunden.

Versuchen Sie auch, "=" in die Bedingung i>=0 zu setzen.

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

Klicken Sie auf Diagramme, unten in den Eigenschaften und deaktivieren Sie oben links das Kontrollkästchen Diagramm im oberen Bereich! Und ganz allgemein, verwenden Sie mehr davon, es wird sich als nützlich erweisen!

Danke! Es hat funktioniert.
 

Der Debugger funktioniert nicht - was ist los?

Metatrader bild 646, editor bild 934. Hier ist der einfachste Indikator:


Ich habe es auf EURUSD, M1, und das ist, was ich erhalten:

1

Das heißt, dass alles so ist, wie es sein sollte.

Und jetzt mache ich einen Haltepunkt vor Alert und führe den Debugger aus:

USDCHF,H1 Chart erscheint. Woher kommt das Geld? Ich habe nurEURUSD ,M1 geöffnet.

Ich führe es aus, und ich sehe Folgendes:

D.h., der Indikator bezieht die Daten genau aus diesem USDCHF,H1. Was ist hier das Problem?

Die zweite Frage: Der Editor legt das geschriebene Skript nicht im Ordner Scripts , sondern im Ordner MQL4 ab und legt die kompilierte Datei auch dort ab. Ich muss den Quellcode manuell in den Ordner " Scripts" ziehen und dort ablegen, dann kompilieren, und erst dann wird das Skript im Navigator angezeigt. Bei den Indikatoren habe ich diesen Fehler nicht, sie gehen sofort in ihre Ordner. Mache ich etwas falsch oder macht der Editor einen Fehler?

Dritte Frage. Ich habe immer noch 646 Bild, auch wenn jemand im Forum im Mai von 650 gesprochen hat. Hat es seitdem wirklich keine Aktualisierung gegeben, oder habe ich wieder etwas falsch verstanden?

Viel Glück für denjenigen, der mir antwortet.

 
Danke für das Glück! Aber nur zur Beantwortung der dritten Frage! Auch ich habe ein 646er Bild, bis der Server uns auf ein neueres upgraden wird. Das passiert, wenn ich es nach einer Pause wieder einschalte. Ich mache das einmal pro Woche, bevor die Sitzung beginnt. Viel Glück auch für Sie!
 

Wie füge ich SendMail und Alert in den Indikator ein, so dass er bei der Neuberechnung der Indikatorwerte nicht auf alte Signale reagiert, sondern nur bei neuen Signalen Alert anzeigt und Mails versendet?

Wenn es so läuft:

//+------------------------------------------------------------------+
//|                                                       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;
}

dann bei jeder Auswirkung auf den Indikator (Einstellung auf dem Diagramm, Einstellung, Änderung der TF, Sprung an Ort und Stelle oder scharfer Ton), zeigt es erneut Warnungen an und versucht, dasselbe per E-Mail an ALLE Pfeile zu senden, vom Beginn des Diagramms bis zum aktuellen.

Frage dazu - die Mail im Log wird als"Mail: 'Test message' has been sent" markiert, aber kein einziger Brief ist in den Kasten gefallen (((

 
evillive:

Wie schreibe ich SendMail und Alert in den Indikator, so dass er bei der Neuberechnung der Indikatorwerte nicht auf alte Signale reagiert, sondern nur bei neuen Signalen Alert anzeigt und Mails versendet?

Wenn es so läuft:

dann bei jeder Beeinflussung des Indikators (Installation auf dem Chart, Einstellung, Änderung der TF, Sprung an Ort und Stelle oder scharfer Ton), zeigt er die Warnungen wieder an und versucht, sie per E-Mail an ALLE Pfeile zu senden, vom Anfang des Charts bis zum aktuellen.

Frage dazu - die Mail im Log wird als"Mail: 'Test message' has been sent" markiert, aber kein einziger Brief ist in den Kasten gefallen (((.


Ich hätte das getan

//+------------------------------------------------------------------+
//|                                                       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:


Ich würde dies tun

Sollendie hinzugefügten Zeilen außerhalb der Schleife liegen oder ist das ein Tippfehler?
Okay, ich habe verstanden, so sollte es sein.
 

Hallo, hat jemand eine Vorlage für die Mittelwertbildung einer Position.

Das heißt, wenn ein Auftrag geöffnet ist und er verliert, dann öffnen wir einen zweiten Auftrag in dieselbe Richtung, wir setzen einen Stopp in die Mitte zwischen diese Aufträge und so weiter, drei Aufträge, vier...?

 
Top2n:

Hallo, hat jemand eine Vorlage für die Mittelwertbildung einer Position.

Das heißt, wenn ein Auftrag geöffnet ist und er verliert, dann öffnen wir einen zweiten Auftrag in dieselbe Richtung, wir setzen einen Stopp in die Mitte zwischen diese Aufträge und so weiter, drei Aufträge, vier...?


Nehmen Sie alle offenen Preise und berechnen Sie das arithmetische Mittel