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

 
Sorry für die sehr einfache Frage, wie schließe ich eine offene Position? mql4 hatte die OrderClose() Funktion, aber wie?
 
RogozaIV:
Sorry für die sehr einfache Frage, wie schließe ich eine offene Position? mql4 hat die OrderClose() Funktion, aber wie mache ich es hier?

In mql5 müssen Sie eine entgegengesetzte Position öffnen, die in der Registerkarte des Terminals History deutlich zu sehen ist. Der einfachste Weg ist die Verwendung der Klasse CTrade aus der Standardbibliothek.
 
Vielen Dank,Alexey Volchanskiy!
 
Können Sie mir sagen, wo ich Kryptowährungen über MT5 handeln kann? Makler, Börsen? Ich habe MT4 gefunden, aber MT5 scheint nicht verfügbar zu sein.
 

Meine Herren, bitte sagen Sie mir, wo der Fehler liegt.

Ich bereite einen Indikator vor, der im EA aufgerufen werden soll.

Ich möchte einen Puffer vom Indikator senden.

Das Ergebnis ist der int-Wert, der an den Balken gebunden ist.

Die Aufgabe ist es, ein zweidimensionales Array vom Indikator an einen Expert Advisor zu übergeben, ich kann nicht herausfinden, wie man es tut.

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2

int per[];

int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,per,INDICATOR_CALCULATIONS); //также пробовал INDICATOR_DATA и INDICATOR_COLOR_INDEX
...

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
{
      for(int b=1; b<Bmax; b++) //отбор по x
        {
         for(int p=1; p<Pmax; p++) // отбор по y
           {
            if(arrayZ[6][p][b]>0||arrayZ[6][p][b]<0)
            {
             per[b]=p;
            }
           }
        }
 }

So nenne ich es im EA

int OnInit()
  {
//--- create timer
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA); 
   ResetLastError(); 
   MA_handle=iCustom(NULL,0,"Topqw",0,1); 

   Print("MA_handle = ",MA_handle,"  error = ",GetLastError()); 
...

void OnTick()
//void OnTimer()
  {
//--- 
int copy=CopyBuffer(MA_handle,0,0,1000,Label1Buffer); 
   Print("copy =",copy," ",Label1Buffer[999]);//

 
Top2n:

Meine Herren, bitte sagen Sie mir, wo der Fehler liegt.

Ich bereite einen Indikator vor, der im EA aufgerufen werden soll.

Ich möchte einen Puffer vom Indikator senden.

Das Ergebnis ist der an den Balken gebundene int-Wert.

Die Aufgabe ist es, ein zweidimensionales Array vom Indikator an einen Expert Advisor zu übergeben, ich kann nicht herausfinden, wie man es macht.

Ich nenne es im EA



1. Denken Sie daran, dass im INDICATOR der Standard-Indikatorpuffer mit dem Index "0" dem Balken ganz links auf dem Diagramm entspricht.

2. Der Expert Advisor hat keinen "SetIndexBuffer"-Befehl.

3. iCustom erstellt einen benutzerdefinierten Indikator, nicht eine Pufferanforderung (daher sollte alles explizit geschrieben werden, nicht ",0,1"). In Ihrem Fall können Sie dieses Formular verwenden

//--- create handle of the indicator Topqw
   ResetLastError();
   handle_Topqw=iCustom(Symbol(),Period(),"Topqw",PRICE_CLOSE);
//--- if the handle is not created 
   if(handle_Topqw==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code 
      PrintFormat("Failed to create handle of the Topqw indicator for the symbol %s/%s, error code %d",
                  Symbol(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early 
      return(INIT_FAILED);
     }

4. CopyBuffer scheint korrekt geschrieben zu sein.

5. Zweidimensionales Array kann nicht übergeben werden - machen Sie zwei Array-Indikatorpuffer.

 
Vladimir Karputov:


1. Denken Sie daran, dass im INDICATOR der Indikatorpuffer mit dem Index "0" standardmäßig dem LINKEN Balken im Diagramm entspricht.

2. Es gibt keinen "SetIndexBuffer"-Befehl im EA.

3. iCustom erstellt einen benutzerdefinierten Indikator, nicht eine Pufferanforderung (daher sollte alles explizit geschrieben werden, nicht ",0,1"). In Ihrem Fall können Sie dieses Formular verwenden

4. CopyBuffer scheint korrekt geschrieben zu sein.

5. Sie können kein zweidimensionales Array übergeben - machen Sie zwei Array-Indikatorpuffer.


Danke für die Korrektur, aber ich verstehe nicht, wenn ich explizit festlegen, um Arrays zu übertragen, wie ist es formalisiert? Wo gebe ich an, dass ich zwei Arrays zu extrahieren müssen?

MA_handle=iCustom(Symbol(),Period(),"TopFidCounselor",per,bar); per,bar - же массивы, а данные должны быть imput,
в индикаторе записываю в массивы
   SetIndexBuffer(0,per,INDICATOR_CALCULATIONS);
   SetIndexBuffer(1,bar,INDICATOR_CALCULATIONS);

если я сделаю такую запись
int OnCalculate(
...
  {
//--------------------------------------------------------------
  for ( int i = 0; i < rates_total; i ++ ) per[i] = price[i];  -
//--------------------------------------------------------------
ТО СОВЕТНИК РАБОТАЕТ БЕЗ ОШИБКИ
а если такую
//----------------------------------------------------------------
      for(int b=1; b<200; b++) //отбор по х			-
        {							-
         for(int p=1; p<200; p++) // отбор по у			-
           {							-
            if(arrayZ[6][p][b]>0||arrayZ[6][p][b]<0)		-
            {							-
             per[b]=p;						-
             bar[b]=b;						-
            }							-
           }							-
        }							-
//----------------------------------------------------------------
ТО ОШИБКА код 4002

Ich habe mirIndicatorCreate() angesehen, könnten Sie mir bitte sagen, wie das geht, sonst brauche ich Wochen, um es herauszufinden, und ich habe so wenig übrig, um den Gedankenblock zu beenden. Ich muss bald in die Taiga fahren, um den Sommer mit Bienen auf Futtersuche zu verbringen, also möchte ich die Idee vor der Abreise überprüfen, damit ich mir keine Illusionen mache.
 

Ist das, was ich für denIndikator INDICATOR_CALCULATIONS verwende, korrekt?

   SetIndexBuffer(0,per,INDICATOR_CALCULATIONS);
 

Der Fehler 4002 ist behoben.

Es ist nur nicht klar, wohin das zu extrahierende Array geschrieben werden soll?

   int copy=CopyBuffer(MA_handle,0,0,bars,per); //per?
 
Top2n:

Der Fehler 4002 ist behoben.

Es ist nur nicht klar, wohin das zu extrahierende Array geschrieben werden soll?


Das Arraypro wird im EA deklariert, in der Prozedur, in der Sie das Kopieren durchführen. Es muss ein dynamisches Array sein (deklariert als [] - ohne Angabe der Dimensionalität).
Grund der Beschwerde: