Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 188

 
Vikon:

Hallo!

Ich kann nicht herausfinden, in welchem Intervall ein grafisches Objekt angezeigt werden soll

für alle Zeiträume.

Ich danke Ihnen.

OBJ_ALL_PERIODS=2097151

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Видимость объектов - Документация по MQL5
 
C-4:
Weiß jemand, ob der Compiler eine Taste hat, um Meldungen über unbenutzte Funktionen und Variablen zu erhalten, wie es in MQL4 gemacht wird?

Wie wird dies in mql4 durchgeführt?

Auf die Frage, ob keine Warnungen über nicht verwendete Funktionen angezeigt werden, antwortete Renat, dass dies nicht der Fall sei. Im Zusammenhang mit der Verwendung von steckbaren Bibliotheken. Das war schon in der alten Version so. Jetzt ist das nicht mehr der Fall. Es ist sehr umständlich, im EA-Körper nach Funktionen zu suchen, die nicht verwendet werden. Er spricht nur von unbenutzten Variablen, wenn er sie im Körper einer Funktion findet, nicht in start() oder OnTick()

 
artmedia70:

Wie wird das in mql4 gemacht?

Auf die Frage, ob keine Warnungen über nicht verwendete Funktionen angezeigt werden, antwortete Renat, dass dies nicht der Fall sei. Durch die Verwendung von Plugin-Bibliotheken. Das war schon in der alten Version so. Jetzt ist das nicht mehr der Fall. Es ist sehr umständlich, im EA-Körper nach Funktionen zu suchen, die nicht verwendet werden. Er spricht nur von unbenutzten Variablen, wenn er sie im Körper einer Funktion findet, nicht in start() oder OnTick()

Denn in OOP sind es keine Funktionen, sondern Methoden. Jede Bibliothek kann eine Reihe von Klassen mit vielen Methoden haben, von denen einige nicht verwendet werden. Darüber hinaus verweisen Klassen auch auf andere Bibliotheken, deren Methoden zum Teil ebenfalls nicht verwendet werden. Dies kann zu einem riesigen Durcheinander an ungenutzten Methoden führen.

Nach der Menge des kompilierten Codes zu urteilen, eliminiert der Compiler automatisch ungenutzte Methoden. Das heißt, es macht keinen Sinn, sie selbst zu suchen, da diese Arbeit vom Compiler erledigt wird.

 
Reshetov:

Denn in der OOP sind es nicht Funktionen, sondern Methoden. Jede Bibliothek kann eine Reihe von Klassen mit vielen Methoden haben, von denen einige nicht verwendet werden. Darüber hinaus verweisen Klassen auch auf andere Bibliotheken, deren Methoden zum Teil ebenfalls ungenutzt sind. Dies kann zu einem riesigen Stapel ungenutzter Methoden führen.

Nach der Größe des kompilierten Codes zu urteilen, eliminiert der Compiler automatisch ungenutzte Methoden. Das heißt, es macht keinen Sinn, selbst nach ihnen zu suchen, da der Compiler diese Aufgabe übernimmt.

Das ist nicht das Problem. Das Problem besteht genau darin, nicht verwendete Methoden in Ihren Klassen zu finden. Ich habe mehr als fünfhundert eigene Methoden. Die Zusammenhänge sind sehr komplex. Laufzeitcode ist unvermeidlich. Es könnte sehr nützlich sein, einen kurzen Blick darauf zu werfen, was nicht mehr verwendet wird.
 
Reshetov:

Denn in OOP sind es keine Funktionen, sondern Methoden. Jede Bibliothek kann eine Reihe von Klassen mit vielen Methoden haben, von denen einige nicht verwendet werden. Darüber hinaus verweisen Klassen auch auf andere Bibliotheken, von denen einige Methoden ebenfalls ungenutzt sind. Dies kann zu einem riesigen Stapel ungenutzter Methoden führen.

Nach der Größe des kompilierten Codes zu urteilen, eliminiert der Compiler automatisch ungenutzte Methoden. Das heißt, es macht keinen Sinn, selbst nach ihnen zu suchen, da der Compiler diese Aufgabe übernimmt.

Juri, das ist ganz natürlich. Aber wenn Sie den Quellcode an einen Kunden weitergeben, wollen Sie ihn bereinigen. Und so beginnt der mühsame Prozess. Es gibt nicht viele Vorlagen - mehrere für bestimmte TK-Klassen. Ich muss Funktionen bereinigen, die mit diesem Fall nichts zu tun haben. Ich würde gerne eine "magische Schaltfläche" haben, die nur auf nicht verwendete Funktionen und Variablen im EA-Body verweist.
 

Ich hoffe, die Diskussion über die vorherige Frage ist beendet. Es ist schwierig zu erkennen, wann das Thema abgeschlossen ist und Sie Ihre Frage stellen sollten. Können Sie mir einen Tipp geben? Ich kann nicht herausfinden, wie ich ein 2D-Array mit den Ergebnissen derSt_handle- undMA_handle-Berechnungen füllen kann, ich kann sie nur an ein eindimensionales Array übergeben.

/+------------------------------------------------------------------+
//|                                                           11.mq5 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property  indicator_label1  "Label1"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- input parameters
input int      Input1=0;
input int      Input2=0;

//--- indicator buffers
double         Label1Buffer[];
double      MA[10000][400];  
int         St_handle; 
int         MA_handle; 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
   
//---
   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 Kp     =51; // с Kp начанается К% на Kp_end заканчивается
   int Kp_end =400;// с Kp начанается К% на Kp_end заканчивается
   int MAp    =2;  // с MAp начанается D% на MAp_end заканчивается
   int MAp_end=31// с MAp начанается D% на MA_end заканчивается
   ENUM_STO_PRICE price_field=1; // цена расчета стохастика 0 Low/High    1 Close/Close


   St_handle=iStochastic(NULL,0,Kp,1,1,MODE_EMA,price_field);  
  
   for(MAp=2;MAp<MAp_end;MAp++)
   {
    MA_handle=iMA(NULL,0,MAp,0,MODE_EMA,St_handle);
   }
    
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
C-4:
Das ist nicht das Problem. Das Problem besteht genau darin, nicht verwendete Methoden in Ihren Klassen zu finden.

Was meinen Sie mit: nicht verwendete Methoden in Ihren Klassen? Dies ist in der OOP nicht der Fall. Ein normaler OOP-Programmierer erstellt im Gegensatz zur algorithmischen Programmierung Klassen mit allen notwendigen Feldern und Methoden, wie man so schön sagt, für alle Fälle, denn dieselbe Klasse kann später in anderen Anwendungen verwendet werden oder Teil einer Klassenbibliothek werden. Ganz zu schweigen von der Tatsache, dass es selbst innerhalb eines Projekts besser ist, vollständige Klassen zu erstellen und nicht nur abgespeckte, damit Sie nicht den Quellcode durchsuchen und später die erforderlichen Felder und Methoden hinzufügen müssen.

In der OOP kann sich jede Sparsamkeit, an die sich viele Menschen bei der algorithmischen Programmierung gewöhnen, später als nachteilig erweisen. Alles, was nicht verwendet wird, muss vom Compiler und nicht vom Programmierer aus dem Code ausgeschlossen werden.

Natürlich führt OOP im Vergleich zur algorithmischen Programmierung zu einem größeren Quellcode. Dies ist jedoch kein Nachteil, sondern ein Vorteil, denn ein Großteil des "zusätzlichen" Codes in diesem Projekt kann in anderen Projekten wiederverwendet werden.

C-4:


Ich habe über fünfhundert eigene Methoden. Die Zusammenhänge sind sehr komplex. Rudimentärer Code ist unvermeidlich. Es ist sehr nützlich, um schnell zu sehen, was nicht mehr verwendet wird.

Sie sollten nicht versuchen, ein Rätsel zu machen, d.h. alles in eine Klasse zu packen. Sie müssen Klassenbibliotheken erstellen, d. h. die Funktionalität in einzelne Klassen aufteilen, und vergessen Sie nicht, diese Dinge mit Kommentaren zu versehen, dann wird sich alles von selbst regeln. Als ich nach Pascal anfing, Java zu lernen, versuchte auch ich, alles in einem Stück zu machen, d.h. statt OOP zu verwenden, erstellte ich eine Klasse mit allem, was ich für eine bestimmte Aufgabe brauchte, genau wie in der algorithmischen Programmierung. Das Ergebnis war ein nicht universelles Durcheinander, das später nirgendwo mehr angewendet werden konnte, ganz zu schweigen davon, dass es schwierig war, einen solchen Code zu verstehen.
 
Andrei-1:

Können Sie mir einen Tipp geben? Ich kann nicht herausfinden, wie ich ein zweidimensionales Array mitSt_handle undMA_handle Berechnungsergebnissen füllen kann, ich kann sie nur an ein eindimensionales Array übergeben.

Was ist der Grund? Warum also einen Buckel machen, anstatt Occams Rasiermesser zu benutzen? Was ist der Vorteil eines zweidimensionalen Arrays gegenüber zwei eindimensionalen Arrays? Schließlich muss man zuerst etwas aus zwei eindimensionalen, durch Standardindikatoren erstellten, in einen zweidimensionalen Raum schieben und dann etwas aus diesem herausnehmen. Sie machen unnötige Arbeit und versuchen, andere mit hineinzuziehen.

Wenn es ein Problem mit eindimensionalen Arrays gäbe, dann wäre es die Mühe wert.

 
Nachdem ich im Forum herumgestöbert habe, bin ich darauf gestoßen, wie viel Speicherplatz dies beansprucht, nämlich eine Menge! Ich habe beschlossen, ein eindimensionales Array zu füllen, darin nach einem Signal zu suchen, es zu überschreiben und erneut nach einem Signal zu suchen. Ich will immer noch 10K Zyklen. Zum Beispiel so. Ein oder zwei Suchvorgänge pro Stunde sind für mich ausreichend.
St_handle=iStochastic(NULL,0,Kp,1,1,MODE_EMA,price_field); // создание хэндла стохастика 
  
   for(MAp=1;MAp<MAp_end;MAp++) //перебор сглаживаний 
   {
    MA_handle=iMA(NULL,0,MAp,0,MODE_EMA,St_handle); // создание хэндла сглаженного стохастика
    CopyBuffer(MA_handle,0,0,400,MA); // заполнение одномерного массива значениями стохастика
    if(MA[1]>6) Alert(MA[1]); // начинается поиск сигнала
    
   }
 

Tut mir leid, wenn dies nicht zum Thema passt ...

Hilfe, wer kann ...

in delphi 7 dll Verfahren...

procedure test1(var data: array of Double); stdcall;
begin
ShowMessage('Entered ');

Ende;

in mt4 :

#import "gayss.dll"
void test1( double &data[] );
#import

ArrayResize(data, 6);
data[0]= 2;
data[1]= 4;
data[2]= 8;
data[3]= 16;
data[4]= 21;

data[5]= 3;

test1(Daten);

und eine Fehlermeldung erscheint... 2014.02.06 17:39:04.241 Stapel beschädigt, DLL-Funktionsaufruf in 'SOG_2014.mq4' prüfen (80,7)

Wer weiß, wie man es richtig macht...