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

 
Artyom Trishkin:

Das ist ein seltsames Gefühl, das Sie haben. Ich habe Ihnen gerade gezeigt, wie Sie es einfach halten können - ohne unnötige Variablen.


Ich bin müde und es ist Zeit für mich, mich auszuruhen - zu schlafen, ja.

 

Guten Tag, was ist die Funktion des Indikatorfensters im Expert Advisor?

 
Nauris Zukas:

Guten Tag, welche Funktionen im Expert Advisor können Sie im Indikatorfenster einstellen?


Rufen Sie einen leeren Indikator aus dem Expert Advisor auf.

 
Alekseu Fedotov:

Rufen Sie einen leeren Indikator vom Experten aus.

Ich danke Ihnen!

 
Vitaly Muzichenko:

Hier finden Sie den gewünschten Code


Hallo! Ich habe die Funktion genommen, um den Preis der letzten offenen Verkaufsorder zu ermitteln

PriceS(string sy="0", int op=OP_SELL, int mn=-1) {             //Цена последнего открытого Селл ордера
  datetime t;
  double   r=0;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}

Aber wenn ich es in meinen EA einfüge, erhalte ich einen Kompilierungsfehler in der Bedingung der Funktion 'sy' - unerwartetes Token

=' - unerwartetes Token 252 18

l-Wert erforderlich 1 1

implizite Umwandlung von 'String' in 'Zahl' 252 19

'=' - l-Wert erforderlich 252 18

'=' - Ausdruck vom Typ 'void' ist illegal 252 18

op' - unerwartetes Token 252 28

'=' - unerwartetes Token 252 30

l-Wert erforderlich 1 1

OP_SELL" - illegale Operation 252 31

möglicher Datenverlust aufgrund von Typenumwandlung 252 30

'=' - l-Wert erforderlich 252 30

'=' - Ausdruck vom Typ 'void' ist illegal 252 30

mn" - unerwartetes Token 252 44

'=' - unerwartetes Token 252 46

l-Wert erforderlich 1 1

1" - illegaler Vorgang 252 48


Bitte um Rat, ich habe sie kopiert und nichts geändert.


 
vikzip:

Hallo! Ich habe die Funktion genommen, um den Preis der letzten offenen Verkaufsorder zu ermitteln

Aber wenn ich es in einen EA einfüge, erhalte ich einen Kompilierfehler in der 'sy' Funktionsbedingung - unerwartetes Token

=' - unerwartetes Token 252 18

l-Wert erforderlich 1 1

implizite Umwandlung von 'String' in 'Zahl' 252 19

'=' - l-Wert erforderlich 252 18

'=' - Ausdruck vom Typ 'void' ist illegal 252 18

op' - unerwartetes Token 252 28

'=' - unerwartetes Token 252 30

l-Wert erforderlich 1 1

OP_SELL" - illegale Operation 252 31

möglicher Datenverlust aufgrund von Typenumwandlung 252 30

'=' - l-Wert erforderlich 252 30

'=' - Ausdruck vom Typ 'void' ist illegal 252 30

mn" - unerwartetes Token 252 44

'=' - unerwartetes Token 252 46

l-Wert erforderlich 1 1

1" - illegaler Vorgang 252 48


Bitte um Rat, ich habe sie kopiert und nichts geändert.


Ich muss den Funktionstyp zurückgeben

PriceS(string sy="0", int op=OP_SELL, int mn=-1) {
double PriceS(string sy="0", int op=OP_SELL, int mn=-1) {
 
vikzip:


Es sieht so aus, als ob alles richtig sein müsste, ich habe es kopiert undnichts geändert.



Und die Kopfzeile der Funktion, und nicht den Funktionstyp kopiert


Die Funktion sieht ursprünglich wie folgt aus:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает цену открытия последней открытой позиций.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double PriceOpenLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t=0;
  double   r=0;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
 
'op' - unexpected token Армата.mq4 248 28 'OP_SELL' - illegal operation use Армата.mq4 248 31 'mn' - unexpected token Армата.mq4 248 44 
double PriceS(string sy="", int op=OP_SELL, int mn=-1) {             //Цена последнего открытого Селл ордера
  datetime t;
  double   r=0;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
Alekseu Fedotov
:


Und der Funktionskopf, und nicht der Funktionstyp kopiert


Die Funktion sieht ursprünglich wie folgt aus:


Alekseu Fedotov:

einen Funktionskopf und haben den Funktionstyp nicht kopiert


Die Funktion sieht ursprünglich wie folgt aus:


Richtig, das Beispiel sagte auch. Wenn ich es richtig verstanden habe, können Sie die Auftragsart auswählen, was ich auch getan habe.

  • op- Handelsoperation, Positionsart. Gültige Werte:OP_BUY,OP_SELL oder-1. Der Standardwert von-1 bedeutet eine beliebige Position.
Dann habe ich die Funktion global gemacht, indem ich sie vor Start gesetzt habe. Aber wenn ich den Doppeltyp direkt vor dem Namen der Funktion zurückgebe, tritt ein Fehler auf. Bitte sagen Sie mir, warum!

'PriceS' - Funktion kann nur im globalen Bereich deklariert werden 252 10

Ich habe verstanden, dass die Funktion global sein muss!

Übersetzt der Fehler in den Übersetzer heißt es

Die Funktion darf nur im globalen Bereich definiert werden. Wenn ich die Bedeutung dieser Worte richtig verstehe, muss sie global definiert werden und daher darf ihr kein double vorangestellt werden. Es ist nicht klar, warum es bei sy einen Fehler erzeugt, auch wenn ich es einfach aus dem Muster kopiere.

sy' - unerwartetes Token 248 17 '=' - unerwartetes Token 248 19 l-Wert erforderlich 1 1

Kann ich sy global machen? und den gleichen Fehler mit anderen deklarierten Variablen in der Funktion.

'op' - unerwartetes Token 248 28 'OP_SELL' - illegale Operation 248 31 'mn' - unerwartetes Token 248 44

 
vikzip:


Das stimmt, das stand auch in dem Beispiel. Wenn ich es richtig verstanden habe, ist es möglich, die Auftragsart auszuwählen, was ich auch getan habe.

  • op- Handelsoperation, Positionsart. Gültige Werte:OP_BUY,OP_SELL oder-1. Der Standardwert von-1 bedeutet eine beliebige Position.
Dann habe ich die Funktion global gemacht, indem ich sie vor Start gesetzt habe. Aber wenn ich den Doppeltyp direkt vor dem Namen der Funktion zurückgebe, tritt ein Fehler auf. Bitte sagen Sie mir, warum!

'PriceS' - Funktion kann nur im globalen Bereich deklariert werden 252 10

Ich habe verstanden, dass die Funktion global sein muss!

Übersetzt heißt der Fehler im Übersetzer


Platzieren Sie die Funktion außerhalb der Startfunktion

Und im Hauptteil der Startfunktion rufen Sie sie so auf:

PriceOpenLastPos(); //текущий символ  любая последняя поз.


PriceOpenLastPos(Symbol(),OP_SELL);//текущий символ  OP_SELL   без магика


PriceOpenLastPos(Symbol(),OP_BUY);//текущий символ   OP_BUY  без магика

3 Parameter magik, Komma getrennt, eigene oder 0 eingeben

 
Alekseu Fedotov:

Platzieren Sie die Funktion außerhalb der Startfunktion

Im Hauptteil der Startfunktion rufen Sie sie wie folgt auf:

3 Parameter magik, Komma getrennt, eigene oder 0 eingeben


Vielen Dank!!! Sobald ich die Funktion außerhalb der Startfunktion platziert habe, sind alle Fehler verschwunden!!!