Nützliche Funktionen von KimIV - Seite 5

 

Ich danke Ihnen für Ihre Zustimmung... ;)

Was ist AND, OR, NOT?
ist nicht schwer zu verstehen, ich interessiere mich nur für diese kleinen Dinge im Code und ihre Verwendung.

Oder, zum Beispiel, dies:
- Die Bedingung a ist GLEICH b lässt sich leicht umsetzen a==b
- Aber die Bedingung a ist UNGLEICH zu b ist schwer umzusetzen...

Es tut mir leid, dass ich wieder die Grundlagen anspreche, aber dies wird wahrscheinlich für viele Anfänger nützlich sein...

Hier ist ein fertiger Code mit Kampftrainingsbedingungen. :)
Es hat alles... von der Definition und Anordnung der Felder bis zur Handschrift des Programmierers...
https://www.mql5.com/ru/forum/51521

 
kombat писал (а):
- Aber die Bedingung, dass a UNGLEICH zu b ist, bereitet bereits Schwierigkeiten...
a!=b;
 
Mir scheint, Igor, dass Sie ein wenig vom Thema abgewichen sind und sich in Erklärungen ergangen haben.
Wenn es Ihnen nichts ausmacht, würde ich gerne eine Funktion vorschlagen, die etwas in der Taskleistenverknüpfung anzeigt.
Ich verwende es, um die Leistung von EAs bei der Arbeit zu überwachen, ohne das Terminal zu öffnen (viele neugierige Blicke).
kann es auch in anderen Fällen nützlich sein.

//----------- Funktion zur Visualisierung der Taskleiste -------------------------------------
void ProfMT(string X)
{
int hwnd1 = WindowHandle(Symbol(), Period());
int hwnd_parent1 = 0;
while (!IsStopped())
{
hwnd1= GetParent(hwnd1);
if (hwnd1 == 0) break;
hwnd_parent1 = hwnd1;
}
if (hwnd_parent1 != 0) SetWindowTextA(hwnd_parent1,X);
}
Danke.
 

Da haben Sie es... Wo sonst erfährt man die Wahrheit so schnell wie in einem Forum... ;)

Danke! Und entschuldigen Sie, dass ich vom Thema abschweife.
Ich werde versuchen, im Buch-Thread weitere Fragen zu stellen...

 

Die Funktion OpenPosition() für das Prüfgerät.

Entwickelt, um Positionen zu eröffnen - Handelsoperationen des Kaufs oder Verkaufs zu Marktpreisen. Diese Funktion ist universell und währungsübergreifend und erlaubt es, Positionen für jedes Symbol zu eröffnen, nicht nur für das aktuelle. Zum Beispiel kann ein EA auf dem EURUSD-Chart ausgeführt werden und mit USDCAD handeln.

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

OpenPosition() Funktion für online.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 21.03.2008                                                     |
//|  Описание : Открывает позицию и возвращает её тикет.                       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - MagicNumber                                                        |
//+----------------------------------------------------------------------------+
int OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0) {
  color    clOpen;
  datetime ot;
  double   pp, pa, pb;
  int      dg, err, it, ticket=0;
  string   lsComm=WindowExpertName()+" "+GetNameTF(Period());
 
  if (sy=="" || sy=="0") sy=Symbol();
  if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell;
  for (it=1; it<=NumberOfTry; it++) {
    if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) {
      Print("OpenPosition(): Остановка работы функции");
      break;
    }
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    dg=MarketInfo(sy, MODE_DIGITS);
    pa=MarketInfo(sy, MODE_ASK);
    pb=MarketInfo(sy, MODE_BID);
    if (op==OP_BUY) pp=pa; else pp=pb;
    pp=NormalizeDouble(pp, dg);
    ot=TimeCurrent();
    ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, clOpen);
    if (ticket>0) {
      if (UseSound) PlaySound(NameFileSound); break;
    } else {
      err=GetLastError();
      if (pa==0 && pb==0) Message("Проверьте в Обзоре рынка наличие символа "+sy);
      // Вывод сообщения об ошибке
      Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
      Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",GetNameOP(op),
            " pp=",pp," sl=",sl," tp=",tp," mn=",mn);
      // Блокировка работы советника
      if (err==2 || err==64 || err==65 || err==133) {
        gbDisabled=True; break;
      }
      // Длительная пауза
      if (err==4 || err==131 || err==132) {
        Sleep(1000*300); break;
      }
      if (err==128 || err==142 || err==143) {
        Sleep(1000*66.666);
        if (ExistPositions(sy, op, mn, ot)) {
          if (UseSound) PlaySound(NameFileSound); break;
        }
      }
      if (err==140 || err==148 || err==4110 || err==4111) break;
      if (err==141) Sleep(1000*100);
      if (err==145) Sleep(1000*17);
      if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
      if (err!=135) Sleep(1000*7.7);
    }
  }
  return(ticket);
}
 

Beispiele für die Verwendung der Funktion OpenPosition().

1. 0,1 Lot des aktuellen Instruments kaufen

OpenPosition(NULL, OP_BUY, 0.1);

2. Verkaufe 0,2 Lots EURUSD

string sy="EURUSD";
double pa=MarketInfo("EURUSD", MODE_ASK);
double pb=MarketInfo("EURUSD", MODE_BID);
double po=MarketInfo("EURUSD", MODE_POINT);
OpenPosition(sy, OP_SELL, 0.2);

3. Verkaufen Sie 0,12 Lots USDCAD mit einem Stopp von 20 Pips

string sy="USDCAD";
double pa=MarketInfo("USDCAD", MODE_ASK);
double pb=MarketInfo("USDCAD", MODE_BID);
double po=MarketInfo("USDCAD", MODE_POINT);
OpenPosition("USDCAD", OP_SELL, 0.12, pb+20*po);

4. Kaufen Sie 0,15 Lot USDJPY mit 40 Pips Stopp

string sy="USDJPY";
double pa=MarketInfo("USDJPY", MODE_ASK);
double pb=MarketInfo("USDJPY", MODE_BID);
double po=MarketInfo("USDJPY", MODE_POINT);
OpenPosition("USDJPY", OP_BUY, 0.15, 0, pa+40*po);

5. Verkaufe 0.1 Lot GBPJPY mit Stop 23 und Takeaway 44 Pips

string sy="GBPJPY";
double pa=MarketInfo("GBPJPY", MODE_ASK);
double pb=MarketInfo("GBPJPY", MODE_BID);
double po=MarketInfo("GBPJPY", MODE_POINT);
OpenPosition("GBPJPY", OP_SELL, 0.1, pb+23*po, pb-44*po);
Der Trailer ist ein Skript zum Testen der Funktion OpenPosition(). Die ersten 4 Beispiele sind auskommentiert.
Dateien:
 
KimIV:

OpenPosition() Funktion für online.

//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 21.03.2008 |
//| Описание : Открывает позицию и возвращает её тикет. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента (NULL или "" - текущий символ) |
//| op - операция |
//| ll - лот |
//| sl - уровень стоп |
//| tp - уровень тейк |
//| mn - MagicNumber |
//+----------------------------------------------------------------------------+
int OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0) {
//-- skip --
string lsComm=WindowExpertName()+" "+GetNameTF(Period());
//-- skip --
Warum nicht lsComm in die Funktionsparameter aufnehmen? Zum Beispiel so:
int OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, string lsComm="", int mn=0) {
color clOpen;
datetime ot;
double pp, pa, pb;
int dg, err, it, ticket=0;

if (lsComm=="" || lsComm=="0") lsComm=WindowExpertName()+" "+GetNameTF(Period());
if (sy=="" || sy=="0") sy=Symbol();
Imho erweitert sich die "Flexibilität" der Funktion...
 
Lukyanov писал (а):
Warum nicht lsComm in die Funktionsparameter aufnehmen?
Imho erweitert sich die "Flexibilität" der Funktion...
Es macht mir nichts aus... Ich meine, ich erlaube Ihnen, es zu tun :-)
 
Das habe ich für mich selbst getan. Das könnte für jemanden nützlich sein. :-)