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

 

In mql4 habe ich iCustom verwendet, um Indikatoren zu erstellen, die die vorgefertigten Indikatoren von jemand anderem verwenden, obwohl ich nichts über Programmierung weiß... Ich habe genug von Intuition. Ich verwende mql5, aber nichts funktioniert, egal wie sehr ich versuche, es zu verstehen. Bitte helfen Sie mir, bitte.

Ich habe diesen Indikator in ex5. Ich habe es in meinen Download-Ordner gelegt. Ich möchte beide Linien nehmen und sie auf dem Diagramm in anderen Perioden zeichnen, d.h. es mit iCustom zu einem multitemporalen Rahmen machen.

Da ich nicht in der Lage bin, einen Indikator von Grund auf neu zu schreiben, habe ich den Code eines einfachen Bears Power Indikators genommen. Ich habe dort nichts geändert, außer dass ich indicator_chart_window und DRAW_LINE und die Zeile geändert habe, die meiner Meinung nach die Daten des ersten Puffers mit den Standardparametern der aktuellen TF herausnehmen sollte:

ExtBearsBuffer[i]=iCustom(NULL,0,"Downloads\\RSI Analytics");

Alles wird kompiliert, nichts wird gezeichnet. Was braucht es sonst noch? :(

#property copyright   "2009, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property description "Bears Power"
//--- indicator settings
#property indicator_chart_window                      //---------------------------------
#property indicator_buffers 2
#property indicator_plots   1
#property indicator_type1   DRAW_LINE                 //---------------------------------------
#property indicator_color1  Silver
#property indicator_width1  2
//--- input parameters
input int InpBearsPeriod=13; // Period
//--- indicator buffers
double    ExtBearsBuffer[];
double    ExtTempBuffer[];
//--- handle of EMA 
int       ExtEmaHandle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtBearsBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtTempBuffer,INDICATOR_CALCULATIONS);
//---
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpBearsPeriod-1);
//--- name for DataWindow and indicator subwindow label
   IndicatorSetString(INDICATOR_SHORTNAME,"Bears("+(string)InpBearsPeriod+")");
//--- get MA handle
   ExtEmaHandle=iMA(NULL,0,InpBearsPeriod,0,MODE_EMA,PRICE_CLOSE);
//--- initialization done
  }
//+------------------------------------------------------------------+
//| Average True Range                                               |
//+------------------------------------------------------------------+
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 &TickVolume[],
                const long &Volume[],
                const int &Spread[])
  {
   int i,limit;
//--- check for bars count
   if(rates_total<InpBearsPeriod)
      return(0);// not enough bars for calculation   
//--- not all data may be calculated
   int calculated=BarsCalculated(ExtEmaHandle);
   if(calculated<rates_total)
     {
      Print("Not all data of ExtEmaHandle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);
     }
//--- we can copy not all data
   int to_copy;
   if(prev_calculated>rates_total || prev_calculated<0) to_copy=rates_total;
   else
     {
      to_copy=rates_total-prev_calculated;
      if(prev_calculated>0) to_copy++;
     }
//---- get ma buffers
   if(IsStopped()) return(0); //Checking for stop flag
   if(CopyBuffer(ExtEmaHandle,0,0,to_copy,ExtTempBuffer)<=0)
     {
      Print("getting ExtEmaHandle is failed! Error",GetLastError());
      return(0);
     }
//--- first calculation or number of bars was changed
   if(prev_calculated<InpBearsPeriod)
      limit=InpBearsPeriod;
   else limit=prev_calculated-1;
//--- the main loop of calculations
   for(i=limit;i<rates_total && !IsStopped();i++)
     {
      ExtBearsBuffer[i]=iCustom(NULL,0,"Downloads\\RSI Analytics"); \\--------------------------------------------
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Технический индикатор RSI ANALYTICS
Технический индикатор RSI ANALYTICS
  • Bewertungen: 5
  • 2013.11.01
  • STRAT ANALYTICS
  • www.mql5.com
Зачем нам RSI в отдельном окне, если его можно построить в основном окне графика, что гораздо более понятно? RSI ANALYTICS - это индикатор, следящий за рынком, созданный на основе той же идеи, что и традиционный RSI (индекс относительной силы). При этом он строится не в отдельном подокне, а в том же окне, что и график цены финансового...
 
Nilog:

In mql4 habe ich iCustom verwendet, um Indikatoren zu erstellen, die die vorgefertigten Indikatoren von jemand anderem verwenden, obwohl ich nichts über Programmierung weiß... Ich habe genug von Intuition. Ich verwende mql5, aber nichts funktioniert, egal wie sehr ich versuche, es zu verstehen. Bitte helfen Sie mir, bitte.

Ich habe diesen Indikator in ex5. Ich habe es in meinen Download-Ordner gelegt. Ich möchte beide Linien nehmen und sie auf dem Diagramm in anderen Perioden zeichnen, d.h. es mit iCustom zu einem Multitime Frame machen.

Da ich nicht in der Lage bin, einen Indikator von Grund auf neu zu schreiben, habe ich den Code eines einfachen Bears Power Indikators genommen. Ich habe dort nichts geändert, außer dass ich indicator_chart_window und DRAW_LINE und die Zeile geändert habe, die meiner Meinung nach die Daten des ersten Puffers mit den Standardparametern der aktuellen TF herausnehmen sollte:

Alles wird kompiliert, nichts wird gezeichnet. Was braucht es sonst noch? :(

In mql5 ist die Arbeit mit benutzerdefinierten und Standardindikatoren anders organisiert als in mql4. Wenn Sie in mql4 nur einen Indikatorwert über iCustom erhalten können, können Sie in mql5 Indikatorwerte für die gesamte Tiefe der Historie im Array erhalten. Der zweite große Unterschied ist die Richtung der Indizierung in den Indikatorpuffern.

Es ist mühsam, den gesamten Code durchzusehen und mit dem Original abzugleichen, daher werde ich nur auf die wichtigsten Punkte eingehen:

Die Datei muss sich im Ordner "Indicators" oder in einem Unterordner desselben Ordners "Indicators" befinden.

Hier ist die Zeichenfolge, um den MA-Indikator-Handle zu erhalten

ExtEmaHandle=iMA(NULL,0,InpBearsPeriod,0,MODE_EMA,PRICE_CLOSE);

und dies ist der String, um den Wert des MA-Indikators zu erhalten

if(CopyBuffer(ExtEmaHandle,0,0,to_copy,ExtTempBuffer)<=0)

in diesem Fall in einen zusätzlichen Puffer oder ein Array.

Es stellt sich heraus, dass die Daten des benutzerdefinierten Indikators zu erhalten

ExtBearsHandle=iCustom(NULL,0,"RSI Analytics");
CopyBuffer(ExtBearsHandle,0,0,to_copy,ExtTempBuffer)

Und dann können Sie die Indikatorwerte aus diesem zusätzlichen Puffer auf irgendeine Weise verarbeiten, oder Sie können sie in den Indikatorpuffer stellen, ohne die Richtung der Indizierung zu vergessen.

 
Alexey Viktorov:


Ich danke Ihnen! Ich habe etwas geschrieben, wie ich es verstanden habe, und jetzt erscheint nur noch ein Fehler beim Kompilieren. Auf der Linie

CopyBuffer(ExtBearsHandle,0,0,to_copy,ExtTempBuffer);

Fehlerto_copy - nicht deklarierter Bezeichner.

In welchem Abschnitt und wie melde ich sie an?

 
Nilog:

Ich danke Ihnen! Ich habe etwas geschrieben, wie ich es verstanden habe, und jetzt erscheint nur noch ein Fehler beim Kompilieren. Auf der Linie

Fehlerto_copy - nicht deklarierter Bezeichner.

In welchem Abschnitt und wie melde ich sie an?

Sie müssen meine Hinweise mit Ihrem Code und mit dem von Ihnen bereits korrigierten Quellcode vergleichen. Diese Variable wird in diesen Codes deklariert. Und zusätzlich zu meinen Bemerkungen sollten Sie versuchen, die Logik von Bauindikatoren im Allgemeinen zu verstehen, und nicht einfach ein Stück Scheiße gegen ein Stück Scheiße austauschen.

 
Kann ein EA in MetaTrader 5 bei Währungen anders arbeiten als z.B. beim RTS-Index?
 
lil_lil:
Kann sich in MetaTrader 5 die Leistung eines EA für ein Währungspaar grundlegend von der Leistung z. B. für den RTS-Index unterscheiden?

Das Ratsmitglied wird so arbeiten, wie es geschrieben ist. Und nicht anders.

Was die zu berücksichtigenden Nuancen betrifft: RTS ist eine Börse, daher die NETTING-Art der Buchhaltungspositionen. Wenn der EA nicht ursprünglich für die Arbeit mit dem Netz ausgelegt ist, ist das Ergebnis unvorhersehbar.

 
Vladimir Karputov:

Das Ratsmitglied wird so arbeiten, wie es geschrieben ist. Und nicht anders.

Was die zu berücksichtigenden Nuancen betrifft: RTS ist eine Börse, daher die NETTING-Art der Buchhaltungspositionen. Wenn der EA ursprünglich nicht für die Arbeit mit Netzen ausgelegt ist, ist das Ergebnis unvorhersehbar.

Wenn Ihr EA nichtauf Netting ausgelegt ist, ist das Ergebnis unvorhersehbar.

In der Strategie gibt es keine multidirektionalen Positionen.

 
lil_lil:

Danke, wie können Sie anhand des Codes sicher wissen, ob er für dieVerwendung mit Netzen geeignet istoder nicht?

In der Strategie gibt es keine gegenläufigen Positionen.

Und wenn ja (immer EINE Position in Arbeit), dann gibt es keinen Unterschied - ob Netting oder Hedging.

 
Vladimir Karputov:

Wenn dies der Fall ist (es ist immer EINE Position in Betrieb), macht es keinen Unterschied, ob es sich um Netting oder Hedging handelt.

Bei einem umgekehrten Signal in Währungen (Forex) werden die Positionen geschlossen, aber nicht an der Börse. Wo soll man suchen, wonach soll man suchen?

 
lil_lil:

Bei einem umgekehrten Signal für Währungen werden die Positionen geschlossen, aber nicht an der Börse. Wo soll man suchen, wonach soll man suchen?

Suche nach der Stelle, von der der Befehl zum Schließen der Position kommt.

Grund der Beschwerde: