Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1935

 
Valeriy Yastremskiy #:
Mit Hilfe des Windows. Grafiken, die in großer und kleiner Schrift eingestellt sind, sollten ebenfalls angepasst werden.

Was ist, wenn es zwei Monitore gibt? Verschiedene...

 
Artyom Trishkin #:

Was ist, wenn es zwei Monitore gibt? Anders...

Dann müssen Sie wissen, welche Auflösung der Bildschirm hat, auf dem das Bild angezeigt wird. Das Objekt kann auch auf 2 Monitore gelangen, aber das ist eine kompliziertere Aufgabe.
Ja, die Bindung an die Standardschriftarten des Systems über negativeTextSetFont()-Werte ist eine gute Lösung.
 

Helfen Sie mit, den Indikator zu optimieren. Der Indikator arbeitet aber langsam, es dauert sehr lange, den EA damit zu optimieren. Bitte teilen Sie uns mit, was wir falsch gemacht haben? Wie kann man seine Arbeit beschleunigen?

//+------------------------------------------------------------------+
//|                                                     Momentum.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2022, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red

#property indicator_maximum 1
#property indicator_minimum 0

#property indicator_width1 2

//---- input parameters
extern int  MomPeriod    = 10;
extern int  WindowOfNorm = 45; // ширина окна нормирования в барах
extern int  MA_Length    = 10; // Average Period
extern int  MA_Mode      =  0; // Mode of Moving Average

//---- buffers
double NormBuffer[],MomBuffer[],AvgVolumes[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicator line
   SetIndexStyle(2,DRAW_NONE);
   SetIndexBuffer(2,NormBuffer);

   SetIndexStyle(1,DRAW_NONE);
   SetIndexBuffer(1,MomBuffer);
   
    SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,AvgVolumes);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Momentum                                                         |
//+------------------------------------------------------------------+
int start()
  {
   for(int i = 1;i <= 130; i++)
     {
      MomBuffer[i]=iMA(NULL,0,MomPeriod,0,0,0,i)*100/iMA(NULL,0,MomPeriod,0,0,0,i+MomPeriod);

      // нормирование
      NormBuffer[i]=Norm(WindowOfNorm,i);
      //-----
      AvgVolumes[i] = iMAOnArray(NormBuffer,0,MA_Length,0,MA_Mode,i);
     }
   return(0);
  }
//+------------------------------------------------------------------+

// нормирование
double Norm(int norm, int i) {
   // экстремумы
   double max=MomBuffer[ArrayMaximum(MomBuffer,norm,i)];
   double min=MomBuffer[ArrayMinimum(MomBuffer,norm,i)];
   // вычисление осциллятора
   double delta=max-min; // размах
   if(delta==0) return(1);
   else return((MomBuffer[i]-min)/delta);
  }

 
IrishDance #:

Helfen Sie mit, den Indikator zu optimieren. Der Indikator arbeitet aber langsam, es dauert sehr lange, den EA damit zu optimieren. Bitte teilen Sie uns mit, was wir falsch gemacht haben? Wie kann man es schneller machen?

Das ist nicht die Art und Weise, wie es gemacht wird. Achten Sie nur auf diese Zeile

//|                      Copyright © 2004, MetaQuotes Software Corp. |

Die Programmiersprache hat sich in den letzten 18 Jahren so stark verändert, dass sie eigentlich gar nicht mehr funktionieren dürfte. Ich verstehe nicht, warum MQ immer noch nicht int init() und int start() komplett deaktiviert hat

 

Was ist falsch, mit 2 Parametern gibt VLine im Tester Fehler 2022.03.24 18:24:27.615 TestGenerator: unangepasste Daten Fehler (Volumengrenze 263 am 2022.03.18 14:30 überschritten)

Wenn der erste Parameter time1 entfernt wird, ist alles in Ordnung.

bool FlagOpOr=false;
bool FlagClOr=false;
bool Work=true;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

   
//---
   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[])
  {

//---
     static bool FlagNDay=true, FlagVLRed=false,FlagVLBlue=false;
  static datetime Data = 0, NData=0;
  Data = Day();
 if(NData!=Data){FlagVLRed=true; FlagVLBlue=true;NData=Data;} 
if(FlagVLRed==true && Hour()==0){ VLine(1,clrRed); FlagVLRed=false;}
if(FlagVLBlue==true &&  Hour()==1){ VLine(1,clrBlue); FlagVLBlue=false;  }
      
    
  
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+

void OnDeinit(const int reason)//int deinit(void)void
  {
   int i;
   int obj_total=ObjectsTotal();
   for(i=obj_total-1;i>=0;i--)
     {
 string     sn=ObjectName(i);
      string Head=StringSubstr(sn,0,4);// Извлекаем первые 4 сим
      if(Head == "VLin")
        {
          ObjectDelete(sn);       

       }
     }
   
    Comment("");
   return;
  }
 
  //+------------------------------------------------------------------+
  bool VLine( int time1=0, color clr = clrRed ){
  string  var1=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
     string NameLine="VLine_" +  "_"+var1;
            bool   created=ObjectCreate(0,NameLine,OBJ_VLINE,0,TimeCurrent(),0);
            if(created)// если создался - сделаем ему тюнинг
              {              
               //--- точка привязки сверху, чтобы не наезжать на бар
               ObjectSetInteger(0,NameLine,OBJPROP_STYLE,STYLE_SOLID);
               //--- последний штрих - покрасим
               ObjectSetInteger(0,NameLine,OBJPROP_COLOR,clr);
               //--- установим толщину линии 
               ObjectSetInteger(0,NameLine,OBJPROP_WIDTH,2); 
                
              }
              else return(false );time1=0;
              return(true);
              }
 

Guten Tag an alle. Ich habe während des Handels 20-40 Charts geöffnet. Ich muss viel Zeit aufwenden, um die richtige Option am unteren Ende aller Instrumente oder im oberen Menüpunkt "Fenster" zu finden. Wenn ich ein Skript verwenden könnte, um es zu beschleunigen, gebe ich ein Skript in die Eingabeparameter ein, gebe das erforderliche Symbol ein und es öffnet sich, als ob ich es mit meinen Augen gefunden und angeklickt hätte. Wie kann man so etwas umsetzen?

 
DanilaMactep #:

Guten Tag an alle. Ich habe während des Handels 20-40 Charts geöffnet. Ich muss viel Zeit aufwenden, um die richtige Option am unteren Ende aller Instrumente oder im oberen Menüpunkt "Fenster" zu finden. Wenn ich ein Skript verwenden könnte, um es zu beschleunigen, gebe ich ein Skript in die Eingabeparameter ein, gebe das erforderliche Symbol ein und es öffnet sich, als ob ich es mit meinen Augen gefunden und angeklickt hätte. Wie lässt sich das bewerkstelligen?

Als Logik sollte das Skript herausfinden, wie viele Charts/Fenster geöffnet sind und für welche Instrumente, sich diese merken (Symbole und Chart_idies) und dann, je nach Anzahl der Instrumente, ein Panel mit Schaltflächen zeichnen, auf denen der Instrumentenname steht. Wenn Sie auf die Schaltfläche klicken, ändert sich die Eigenschaft des Diagramms mit dem gewünschten Instrument in "erweitert" (es kann eingeklappt werden) und "über alles", und das Skript wird geschlossen.

 
Valeriy Yastremskiy #:

Logischerweise sollte das Skript herausfinden, wie viele Charts/Fenster geöffnet sind und für welche Instrumente, sich diese merken (Symbole und Chart_idies) und dann, je nach Anzahl der Instrumente, ein Panel mit Schaltflächen zeichnen, auf denen der Instrumentenname steht. Wenn Sie auf die Schaltfläche klicken, ändert sich die Eigenschaft des Diagramms mit dem gewünschten Instrument in "erweitert" (es kann eingeklappt werden) und "über alles", und das Skript wird geschlossen.

Schlechte Logik - was macht es für einen Unterschied, wo die Schaltflächen zu sehen sind - unten, im Menüfenster oder in den vom Skript gezeichneten Schaltflächen? Muss irgendwie gemacht werden, so dass, wenn Sie das gewünschte Symbol in den Eingabeparametern eingeben, und das Skript hat dieses Fenster für Sie geöffnet - so wäre es einfacher und schneller. Hat jemand ein solches Wunder, bitte mitteilen?
 

Hallo!

Ich bin auf der Suche nach einem EA, einem Netzbetreiber.

Eröffnet Marktaufträge in einem Raster.

Schließt die Aufträge, wenn das Netz einen bestimmten (%) Gewinn erreicht.

Ich habe einen solchen Expert Advisor gesehen, und jetzt kann ich ihn nicht mehr finden.

Ich habe einen solchen Expert Advisor gesehen, und jetzt kann ich ihn nicht mehr finden.

 
DanilaMactep #:
Schlechte Logik - was macht es für einen Unterschied, welche Schaltflächen zu sehen sind - unten, im Menüfenster oder in den vom Skript gezeichneten Schaltflächen? Muss irgendwie so gemacht werden, dass man das gewünschte Symbol in die Eingabeparameter einträgt, und das Skript hat dieses Fenster für einen geöffnet - so wäre es einfacher und schneller. Hat jemand ein solches Wunder, bitte mitteilen?
Ein neues Fenster öffnen (öffnet sich ohne EA und mit Standardvorlage) oder ein bereits geöffnetes Fenster vergrößern oder erweitern.
Schauen Sie sich den beigefügten Code an, es gibt eine Diagrammaufzählung und eine Zeichnung im Diagramm nach Bedingung. Vielleicht hilft es ja.