Nützliche Funktionen von KimIV - Seite 19

 

GetProfitOpenPosInCurrency() Funktion.

Diese Funktion gibt den Gesamtgewinn der aktuell geöffneten Positionen zurück. Der Gewinn wird in Einheiten der Einzahlungswährung zurückgegeben. Eine genauere Auswahl der zu berücksichtigenden Positionen wird über externe Parameter festgelegt:

  • sy - Bezeichnung des Marktinstruments. Wenn Sie diesen Parameter angeben, berücksichtigt die Funktion nur Positionen dieses Instruments. Der Standardwert "" bedeutet ein beliebiges Marktinstrument. NULL bedeutet das aktuelle Instrument.
  • op - Handelsoperation, Positionsart. Gültige Werte: OP_BUY, OP_SELL oder -1. Der Standardwert -1 bedeutet eine beliebige Position.
  • mn - Positionsbezeichner, MagicNumber. Der Standardwert -1 bedeutet einen beliebigen Bezeichner.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает суммарный профит открытых позиций в валюте депозита |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetProfitOpenPosInCurrency(string sy="", int op=-1, int mn=-1) {
  double p=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=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            p+=OrderProfit()+OrderCommission()+OrderSwap();
          }
        }
      }
    }
  }
  return(p);
}
HH: Im Anhang finden Sie ein Skript zum Testen der Funktion GetProfitOpenPosInCurrency().
 
KimIV:
scorpionk:

Falscher Code, es ist nicht 131, es ist 130.

Ich verstehe...

Versuchen Sie, wie folgt zu normalisieren:

int dg=MarketInfo(Symbol(), MODE_DIGITS);
return(NormalizeDouble(Value, dg));
Ich tue dies und stoße nicht auf die Fehlermeldung 130.

So bringe ich den Preis ein, nur mit Ziffern. Aber es hilft nicht, der Fehler tritt nicht immer auf, nur in manchen Fällen, und ich habe nicht herausgefunden, wovon er abhängt. Ich sollte wahrscheinlich meine Hände benutzen, um die Ausgabewerte zu überprüfen, die vom Roboter eingestellt werden sollen.

 

Angesichts möglicher künftiger Entwicklungen wird dieser Zusatz sehr nützlich sein:

p+=OrderProfit()+OrderTaxes()+OrderCommission()+OrderSwap();
// !!! OrdertTaxes() мифический парамер налогов !!!
Ich frage mich, ob es einer von fünf sein wird...? ;)))

Nochmals vielen Dank für den Tipp , wie man die Daten in der Schleife zusammenfasst!

 

Yo-yo, willst du mich verarschen? Mein Compiler versteht OrderTaxes() nicht.

 

Natürlich!!! :)))

Sie können es in der Hervorhebung sehen, und in dem Kommentar wurde deutlich darauf hingewiesen...

Obwohl es sich um eine der Eigenschaften einer Ordnung oder vielmehr einer Position handelt und eine solche Funktion im Prinzip...

-

Und wenn der Compiler das nicht versteht...

Das BNE wird uns lehren ;)

 

GetProfitOpenPosInPoint() Funktion.

Diese Funktion gibt den Gesamtgewinn der aktuell geöffneten Positionen zurück. Der Gewinn wird in Punkten zurückgegeben. Eine genauere Auswahl der zu berücksichtigenden Positionen wird durch externe Parameter festgelegt:

  • sy - Bezeichnung des Marktinstruments. Wenn Sie diesen Parameter angeben, berücksichtigt die Funktion nur Positionen dieses Instruments. Der Standardwert "" bedeutet ein beliebiges Marktinstrument. NULL bedeutet das aktuelle Instrument.
  • op - Handelsoperation, Positionsart. Gültige Werte: OP_BUY, OP_SELL oder -1. Der Standardwert -1 bedeutet eine beliebige Position.
  • mn - Positionsbezeichner, MagicNumber. Der Standardwert -1 bedeutet einen beliebigen Bezeichner.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает суммарный профит открытых позиций в пунктах         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetProfitOpenPosInPoint(string sy="", int op=-1, int mn=-1) {
  double p;
  int    i, k=OrdersTotal(), pr=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 (mn<0 || OrderMagicNumber()==mn) {
          p=MarketInfo(OrderSymbol(), MODE_POINT);
          if (p==0) if (StringFind(OrderSymbol(), "JPY")<0) p=0.0001; else p=0.01;
          if (OrderType()==OP_BUY) {
            pr+=(MarketInfo(OrderSymbol(), MODE_BID)-OrderOpenPrice())/p;
          }
          if (OrderType()==OP_SELL) {
            pr+=(OrderOpenPrice()-MarketInfo(OrderSymbol(), MODE_ASK))/p;
          }
        }
      }
    }
  }
  return(pr);
}
HH: Im Anhang finden Sie ein Skript zum Testen der Funktion GetProfitOpenPosInPoint().
 
KimIV:

In diesem Thread werde ich die Codes meiner Funktionen in MQL4 veröffentlichen, Beispiele für ihre Verwendung geben und Fragen zu ihrer Verwendung beantworten. Jede Funktion wird in zwei Beiträgen veröffentlicht. Der erste Beitrag wird den Funktionscode enthalten, der zweite - Anwendungsbeispiele und kurze Erläuterungen. Manchmal hänge ich den Code eines Skripts an den zweiten Beitrag an, um die Funktion tatsächlich zu testen und die Ergebnisse anzuzeigen.

Ich werde am Ende mit Funktionen zur Handhabung von Aufträgen gemäß Lukyanovs Anfrage im Thema "Wie man zwei EAs gleichzeitig laufen lässt" beginnen.

Die erste ist die Funktion zum Setzen von Aufträgen (MT4-Testerversion):

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия  : 13.06.2007                                                      |
//|  Описание : Установка ордера. Версия функции для тестов на истории.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    pp - цена                                                               |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - Magic Number                                                       |
//|    ex - Срок истечения                                                     |
//+----------------------------------------------------------------------------+
void SetOrder(string sy, int op, double ll, double pp,
              double sl=0, double tp=0, int mn=0, datetime ex=0) {
  color clOpen;
  int   err, ticket;
 
  if (sy=="" || sy=="0") sy=Symbol();
  if (op==OP_BUYLIMIT || op==OP_BUYSTOP) clOpen=clOpenBuy; else clOpen=clOpenSell;
  ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, "", mn, ex, clOpen);
  if (ticket<0) {
    err=GetLastError();
    Print("Error(",err,") set ",GetNameOP(op),": ",ErrorDescription(err));
    Print("Ask=",Ask," Bid=",Bid," sy=",sy," ll=",ll,
          " pp=",pp," sl=",sl," tp=",tp," mn=",mn);
  }
}
//+----------------------------------------------------------------------------+

Hallo, bitte helfen Sie mir, einen EA zu schreiben. Ich weiß nicht viel darüber, aber es klingt nach einer guten Idee. Die Bedeutung der Idee im Folgenden, wenn es sicher möglich ist.
Es ist notwendig, dass zwei Gebote gleichzeitig ein Verkauf ein Kauf mit den Parametern (Lots=0.1____TafeProfit=30______StopLoss=10) und bei der Schließung des Verlustes das zweite positive mit den Parametern (Lots=1____TafeProfit=30______StopLoss=10) geöffnet wird.
Wenn Sie nicht gehen, um mich auf die hoo... dann idealerweise die beiden ersten Wetten öffnen am Minimum oder Maximum Kerze oder beim Auftreten einer neuen Kerze, aber wenn der zweite Teil des Schreibens lange machen zumindest den ersten Teil meiner Ausschweifungen

Vielen Dank im Voraus !!!! Wenn Sie es schreiben, stellen Sie es hier ein vms.80@mail.ru



 

GetTicketLastPos() Funktion.

Diese Funktion gibt das Ticket der letzten offenen Position oder -1 zurück. Eine genauere Auswahl der zu berücksichtigenden Positionen wird durch externe Parameter festgelegt:

  • sy - Bezeichnung des Marktinstruments. Wenn Sie diesen Parameter angeben, berücksichtigt die Funktion nur Positionen dieses Instruments. Der Standardwert "" bedeutet ein beliebiges Marktinstrument. NULL bedeutet das aktuelle Instrument.
  • op - Handelsoperation, Positionsart. Gültige Werte: OP_BUY, OP_SELL oder -1. Der Standardwert -1 bedeutet eine beliebige Position.
  • mn - Positionsbezeichner, MagicNumber. Der Standardwert -1 bedeutet einen beliebigen Bezeichner.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает тикет последней открытой позиции или -1             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetTicketLastPos(string sy="", int op=-1, int mn=-1) {
  datetime o;
  int      i, k=OrdersTotal(), r=-1;

  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 (o<OrderOpenTime()) {
                o=OrderOpenTime();
                r=OrderTicket();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
HH: Im Anhang finden Sie ein Skript zum Testen der Funktion GetTicketLastPos().
Dateien:
 
WoodyVMS:

Ich weiß nicht, was ich damit machen soll, aber ich habe eine Idee, was ich damit machen kann. Ich habe keine Ahnung davon, aber es könnte eine gute Idee sein. Im Wesentlichen geht es um Folgendes, wenn das möglich ist.
Es ist notwendig, dass zwei Angebote gleichzeitig ein Verkauf ein Kauf mit den Parametern (Lots=0.1____TafeProfit=30______StopLoss=10) und bei der Schließung der verlustbringenden eröffnet die zweite positive mit den Parametern (Lots=1____TafeProfit=30______StopLoss=10)
Wenn Sie nicht gehen, um mich auf die hoo... dann idealerweise die beiden ersten Wetten öffnen am Minimum oder Maximum Kerze oder beim Auftreten einer neuen Kerze, aber wenn der zweite Teil des Schreibens lange machen zumindest den ersten Teil meiner Ausschweifungen

Vielen Dank im Voraus !!!! Wenn Sie es schreiben, stellen Sie es hier ein vms.80@mail.ru

Oder vielleicht schicken Sie dem Genossen alle CodeBase EAs an diese Adresse.

Entschuldigung, Igor, dass ich vom Thema abschweife. Wenn überhaupt, werde ich sie löschen.

 
Vinin писал (а):
Oder vielleicht schicken Sie dem Genossen alle CodeBase EAs an diese Adresse.
Er wird es selbst finden...