Nützliche Funktionen von KimIV - Seite 121

 

Es liegt ein Fehler in der Funktion https://forum.mql4.com/ru/38949/page5#434241 vor.

Sie sollte folgendermaßen aussehen

double PriceOpenNearPos(string sy="", int op=-1, int mn=-1) {
  double mi, oop=0, p;
  int    i, k=OrdersTotal(), pp=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (OrderType()==OP_BUY)  mi=MarketInfo(OrderSymbol(), MODE_ASK);
            if (OrderType()==OP_SELL) mi=MarketInfo(OrderSymbol(), MODE_BID);
            p=MarketInfo(OrderSymbol(), MODE_POINT);
            if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
            if (pp==0 || pp>MathAbs(OrderOpenPrice()-mi)/p) {
              pp=MathAbs(OrderOpenPrice()-mi)/p;
              oop=OrderOpenPrice();
              if(pp==0) break;
            }
          }
        }
      }
    }
  }
  return(oop); 

}

Bitte erneut herunterladen.

 

Guten Tag zusammen!

Beim Reparieren von Expert Advisors (aufgrund von MQL-Updates) stellte sich heraus, dass viele der Funktionen von Igor Kim nicht mehr funktionieren. Dazu gehören die beliebtesten. Zum Beispiel,

NumberOfPositions - Gibt die Anzahl der Positionen zurück.

ExistPositions - Gibt das Kennzeichen der Existenz von Positionen zurück.

Eine weitere Funktion, die ich gestern im Thread erwähnt habe: Funktion NumberOfBarCloseLastPos().
Diese Funktion gibt die Anzahl der Takte bis zum Schließen der letzten Position zurück

Wenn ich den Kommentar im Strategy Tester-Diagramm anzeige, sehe ich, dass die Funktionen immer konstante Werte (-1 und/oder 0) zurückgeben, obwohl Geschäfte vorhanden sind (laufende und geschlossene). Es sieht so aus, als ob der EA die durch diese Funktionen definierten Bedingungen in seinem Code nicht sieht.

Außerdem stellen die so genannten "ausführbaren" Funktionen ihre Arbeit ein, z. B. eine Reihe von Funktionen zum Schließen von Positionen: ClosePosBySelect (diese Funktion schließt eine zuvor ausgewählte Position) und zugehörige Funktionen:
ClosePositions - Positionen zum Marktpreis schließen, etc.

Bitte beraten Sie, welche Art von Fehlern in diesen Funktionen sind und was muss behoben werden, zumindest mit einer von ihnen -NumberOfPositions - es gibt die Anzahl der Positionen?

 
Rita:

Guten Tag zusammen!

Beim Reparieren von Expert Advisors (aufgrund von MQL-Updates) stellte sich heraus, dass viele der Funktionen von Igor Kim nicht mehr funktionieren. Dazu gehören die beliebtesten. Zum Beispiel,

NumberOfPositions - Gibt die Anzahl der Positionen zurück.

ExistPositions - Gibt das Kennzeichen der Existenz von Positionen zurück.

Eine weitere Funktion, die ich gestern in der Verzweigung erwähnt habe: Funktion NumberOfBarCloseLastPos().
Diese Funktion gibt die Anzahl der Takte bis zum Schließen der letzten Position zurück.

Wenn ich den Kommentar im Strategy Tester-Diagramm anzeige, sehe ich, dass die Funktionen immer konstante Werte (-1 und/oder 0) zurückgeben, obwohl Geschäfte vorhanden sind (laufende und geschlossene). Es sieht so aus, als ob der EA die durch diese Funktionen definierten Bedingungen in seinem Code nicht sieht.

Darüber hinaus stellen sogenannte "ausführbare" Funktionen ihre Arbeit ein, z. B. eine Reihe von Funktionen zum Schließen von Positionen: ClosePosBySelect (schließt eine zuvor ausgewählte Position) und
ClosePositions - Positionen zum Marktpreis schließen, etc.

Bitte teilen Sie mit, welche Art von Fehlern in den Funktionen aufgetreten sind und was behoben werden muss, zumindest anhand einer von ihnen als Beispiel -NumberOfPositions - Gibt die Anzahl der Positionen?

NumberOfPositions() funktioniert bei mir einwandfrei! Stimmt, ich arbeite weiterhin mit MQL4 ohne Pluspunkte! Wenn Sie in einer aktualisierten Sprache schreiben, dann muss wohl alles auf diese Sprache zugeschnitten sein oder Sie gehen zu Freelance! Alles wird jetzt mit schrecklicher Gewalt kommerzialisiert! Ich fühle mit Ihnen!

Wenn SieNumberOfPositions() irgendwie unterbringen können, dann wird ExistPositions() nicht benötigt! Sie können dies auf diese Weise überprüfen:

if(NumberOfPositions() > 0) //вместо if(ExistPositions() == true)
----------------------------//или
if(NumberOfPositions() == 0)//вместо if(ExistPositions() == false)

Viel Glück!

 
borilunad:

NumberOfPositions() funktioniert bei mir einwandfrei! Stimmt, ich arbeite weiterhin mit MQL4 ohne Pluspunkte! Wenn Sie in einer aktualisierten Sprache schreiben, dann muss wohl alles daran angepasst werden oder Sie gehen zu Freelance! Alles wird jetzt mit schrecklicher Gewalt kommerzialisiert! !

Ich komme nicht oft hierher, daher weiß ich nicht, was "MQL4 ohne Profis" bedeutet?

Glauben Sie, dass diejenigen, die hier antworten können, dies nicht tun, um einen Besucher zu zwingen, für die Beantwortung einer unkomplizierten freiberuflichen Frage zu zahlen?

Ich frage mich, wie viel die lokalen Programmierer-Commer kosten würde, um solche I.Kims Funktion zu beheben, um in der neuesten Version von mt4 mit aktualisierten MQL arbeiten:

//|  Описание : Возвращает количество позиций.                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;
  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) kp++;
          }}}}}
  return(kp);
}
Ich möchte Sie daran erinnern, dass Comment( NumberOfPositions(NULL, -1, Magic) ); - ständig -1 zurückgibt, auch wenn der EA Positionen eröffnet hat.
 
Rita:

Ich komme nicht oft hierher, daher weiß ich nicht, was "MQL4 ohne Profis" bedeutet?

Glauben Sie, dass diejenigen, die hier antworten können, dies nicht tun, um einen Besucher zu zwingen, für die Beantwortung einer unkomplizierten freiberuflichen Frage zu zahlen?

Ich frage mich, wie viel die lokalen Programmierer-Commer kosten würde, um solche I.Kims Funktion zu beheben, um in der neuesten Version von mt4 mit aktualisierten MQL arbeiten:

Ich möchte Sie daran erinnern, dass Comment( NumberOfPositions(NULL, -1, Magic) ); immer -1 zurückgeben wird, auch wenn der EA Positionen eröffnet hat.

NULL als Funktionsparameter bedeutet keine Parameter.

Das wäre besser)Comment( NumberOfPositions(Symbol(), -1, Magic));

 
Rita:

Ich komme nicht oft hierher, daher weiß ich nicht, was "MQL4 ohne Profis" bedeutet?

Glauben Sie, dass diejenigen, die hier antworten können, dies nicht tun, um einen Besucher zu zwingen, für die Beantwortung einer unkomplizierten freiberuflichen Frage zu zahlen?

Ich frage mich, wie hoch die Kosten für eine solche Funktion für die kommerziellen Programmierer sein würden:

Ich möchte Sie daran erinnern, dass die Ausgabe von Comment( NumberOfPositions(NULL, -1, Magic) ); zeigt, dass immer -1 zurückgegeben wird, auch wenn der EA Positionen eröffnet hat.

MQL4++ aktualisiert, wie es hier heißt!

Meine Funktion liefert die richtige Anzahl von Positionen! Aber Sie haben einen Fehler in Comment()! Ich bin sicher, dass die Funktion funktioniert!

Versuchen Sie es so:

int start()// или что у Вас там, как в обновлённом MQL4


  int BuyPos = NumberOfPositions(Symbol(),OP_BUY, Magic); //это вызов этой функции, чтобы знать, сколько у Вас баев
  int SellPos = NumberOfPositions(Symbol(),OP_SELL,Magic);//а это для селлов



  Comment("Buy ",BuyPos," Sell ",SellPos);

Auf diese Weise sehen Sie alles genau auf dem Chart, verwenden Sie die Variablen BuyPos und SellPos, um die Bedingungen zu überprüfen! Sehen Sie, wie ich es habe:

      if(BuyPos == 0 && SellPos == 0) 
      {
// и так далее ...

Viel Glück!

 

Vielen Dank, borilunad und vadynik, für den Hinweis!

Die Funktion funktioniert in der Tat! An dieser Stelle ein bescheidenes Dankeschön für den hilfreichen Tipp:https://www.youtube.com/watch?v=SFJeHI2LVX4&feature=related!

 
borilunad:

Alles wird jetzt mit schrecklicher Gewalt kommerzialisiert! Ich fühle mit Ihnen!

Boris, schämst du dich nicht, das zu sagen? Zählen Sie, wie viele Seiten Sie geschrieben haben, um Ihnen zu helfen. Und das ist Ihre Dankbarkeit gegenüber all denen, die Ihnen geholfen haben? Ich kann mich nicht mehr an alle erinnern, aber Artem (artmedia70) hat sich freundlicherweise um Ihr Problem gekümmert und bekam dafür...
 
Rita:

Hier ist eine Alternative. Die Funktion wird nur aufgerufen, wenn sich die Anzahl der Aufträge geändert hat. Zusätzlich kann sie aufgerufen werden, wenn sich der Auftragstyp geändert hat.

// переменные глобального уровня
int Total[6];
int ot;

void OnTick()
{
 if(ot != OrdersTotal())
  CountTrades();

  Comment("Ордеров BUY ", Total[OP_BUY], "\n"
        , "Ордеров SELL ", Total[OP_SELL], "\n"
        , "Ордеров BUYLIMIT ", Total[OP_BUYLIMIT], "\n"
        , "Ордеров SELLLIMIT ", Total[OP_SELLLIMIT], "\n"
        , "Ордеров BUYSTOP ", Total[OP_BUYSTOP], "\n"
        , "Ордеров SELLSTOP ", Total[OP_SELLSTOP], "\n"
}
void CountTrades()
{/*********************Подсчёт открытых ордеров**********************/
  ArrayInitialize(Total, 0);
           int type, total = OrdersTotal(); ot = 0;
            for(int i = 0; i < total; i++)
             {
              if(OrderSelect(i, SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               {
                type = OrderType();
                 Total[type] += 1;
                ot++;
               }
             }
}/*******************************************************************/
 
Rita:

Vielen Dank, borilunad und vadynik, für den Hinweis!

Die Funktion funktioniert in der Tat! An dieser Stelle ein bescheidenes Dankeschön für den hilfreichen Tipp:https://www.youtube.com/watch?v=SFJeHI2LVX4&feature=related!

Ich danke Ihnen! Aber die nächste Funktion, die Ihnen vorgeschlagen wird, kann fehlerhaft sein, da sie in MQL4++ geschrieben ist!