Nur "Nützliche Funktionen von KimIV".

 

Alle Funktionen stammen aus diesem Thread - http://forum.mql4.com/ru/11287 , der Thread enthält eine detaillierte Beschreibung jeder Funktion und Beispiele für ihre Verwendung

Inhalt

 Seite #1 SetOrder - Auftragseinstellung. Funktionsversion für Backtests. ExistOrders – Gibt das Flag für die Existenz von Orders zurück. ExistPositions – Gibt das Flag für die Existenz von Positionen zurück. OpenPosition – Eröffnung einer Position. Funktionsversion für Backtests. OpenPosition - Öffnet eine Position und gibt ihr Ticket zurück. Für online . Nachricht – Anzeige einer Nachricht in Kommentaren und im Protokoll GetNameTF – Gibt den Namen des Zeitrahmens zurück GetNameOP – Gibt den Namen der Handelsoperation zurück ModifyOrder – Änderung einer vorausgewählten Order. DeleteOrders - Bestellungen löschen. Funktionsversion für Backtests. DeleteOrders - Bestellungen löschen . Für online . FindNearFractal - Suche nach dem nächsten Fraktal ExistOrdersByLot - Gibt das Flag für die Existenz einer Order nach Losgröße zurück. GetLotLastOrder – Gibt die Losgröße der letzten platzierten Order zurück, oder -1 GetOrderOpenPrice – Gibt den Preis der letzten Order zurück, oder 0. IndexByTicket – Gibt den Index der Order oder Position auf dem Ticket zurück
Seite 2
NumberOfOrders - Gibt die Anzahl der Bestellungen zurück.

ClosePosBySelect - Schließt eine vorausgewählte Position.

ClosePosBySizeProfitInCurrency - Schließen Sie die Positionen, die einen Gewinn in der Einzahlungswährung mit einem bestimmten Wert haben

ClosePosBySizeLossInCurrency - Schließung der Positionen, deren Verlust in der Depotwährung einen bestimmten Wert überschritten hat

ClosePositions - Schließen Sie Positionen zum Marktpreis

ClosePosFirstProfit - Schließen von Positionen zum ersten profitablen Marktpreis

ClosePosWithMaxProfitInCurrency – Schließen Sie eine Position mit dem maximalen positiven Gewinn in der Einzahlungswährung

DistMarketAndPos- Gibt den Abstand in Punkten zwischen dem Markt und der nächsten Position zurück

ExistOPNearMarket - Gibt das Flag für das Vorhandensein einer Position oder Order in der Nähe des Marktes zurück

ExistPosByPrice - Gibt das Flag für die Existenz von Positionen zum Eröffnungspreis zurück

GetAmountLotFromOpenPos – Gibt die Menge der offenen Positionen zurück

Seite 3
GetIndexByTicket – Gibt den Index der Bestellung oder Position nach Ticket zurück.

Korrelation - Gibt die Korrelation zweier Reihen zurück.

GetIndexLastPos – Gibt den Index der letzten offenen Position oder -1 zurück

GetLotLastPos - Gibt die Losgröße der letzten offenen Position oder -1 zurück

GetMaxLotFromOpenPos - Gibt die maximale Losgröße aus offenen Positionen zurück

GetMinLotFromOpenPos - Gibt die Mindestlosgröße aus offenen Positionen zurück

NumberOfPositions - Gibt die Anzahl der Positionen zurück.

GetProfitFromDateInCurrency – Gibt den Gesamtgewinn in der Einzahlungswährung von Positionen zurück, die seit einem bestimmten Datum geschlossen wurden

GetProfitOpenPosInCurrency – Gibt den Gesamtgewinn der offenen Positionen in der Einzahlungswährung zurück

GetProfitOpenPosInPoint - Gibt den Gesamtgewinn der offenen Positionen in Punkten zurück

GetTicketLastPos – Gibt das Ticket der letzten offenen Position oder -1 zurück

Seite 4
GetTypeLastClosePos – Gibt den Typ der letzten geschlossenen Position oder -1 zurück

GetTypeLastOpenPos – Gibt den Typ der letzten offenen Position oder -1 zurück

isCloseLastPosByStop - Gibt das Flag zum Schließen der letzten Position durch Stop zurück

isCloseLastPosByTake – Gibt das Flag zum Schließen der letzten Position durch Take zurück.

isLossLastPos – Gibt das Verlust-Flag der letzten Position zurück.

isTradeToDay - Gibt die Handelsflagge für heute zurück

NumberOfBarCloseLastPos - Gibt die Nummer des schließenden Balkens der letzten Position oder -1 zurück.

NumberOfBarOpenLastPos - Gibt die Nummer des Balkens mit der letzten offenen Position oder -1 zurück.

NumberOfLossPosToday - Gibt die Anzahl der heute geschlossenen Verlustpositionen zurück.

PriceCloseLastPos - Gibt den Schlusskurs der letzten geschlossenen Position zurück.


Seite #5
PriceOpenLastPos - Gibt den Eröffnungspreis der letzten offenen Position zurück.

PriceOpenLastClosePos - Gibt den Eröffnungspreis der letzten geschlossenen Position zurück.

PriceOpenNearPos - Gibt den Eröffnungspreis der nächsten Position zurück.

TicketNearPos - Gibt das Ticket der nächstgelegenen Position zum Markt zum Eröffnungspreis zurück.

TypeNearPos - Gibt den Positionstyp zurück, der dem Markt am nächsten ist, oder -1.

TimeOpenLastPos - Gibt die Öffnungszeit der letzten offenen Position zurück.

BubbleSort - Führt eine Blasensortierung für die Elemente eines Arrays durch.

BarsBetweenLastFractals – Gibt die Anzahl der Balken zwischen den letzten beiden Fraktalen zurück.

SecondsAfterCloseLastPos – Gibt die Anzahl der Sekunden zurück, nachdem die letzte Position geschlossen wurde.

SecondsAfterOpenLastPos – Gibt die Anzahl der Sekunden zurück, nachdem die letzte Position geöffnet wurde.

DeleteOppositeOrders - Löschen Sie die Position der entgegengesetzten Bestellung

ArraySearchDouble – Sucht nach einem Element in einem Array nach Wert und gibt den Index des gefundenen Elements oder -1 zurück

ArraySearchInt – Sucht nach einem Element in einem Array nach Wert und gibt den Index des gefundenen Elements oder -1 zurück.

ArraySearchString – Sucht nach einem Array-Element nach Wert und gibt den Index des gefundenen Elements oder -1 zurück

GetLotLastClosePos - Gibt die Losgröße der letzten geschlossenen Position oder -1 zurück

ArrayMax - Gibt den Wert des größten Elements in einem Array zurück.


Seite #6
ArrayMin - Gibt den Wert des kleinsten Elements in einem Array zurück

GetExtremumZZBar - Gibt die ZigZag-Extremum-Balkennummer nach ihrer Nummer zurück.

ArrayAvg – Gibt das arithmetische Mittel der Array-Elemente zurück.

ArrayAvGeom – Gibt das geometrische Mittel der Array-Elemente zurück.

SetHLine – Setzt das Objekt OBJ_HLINE auf eine horizontale Linie
SetVLine – Setzt das Objekt OBJ_VLINE auf eine vertikale Linie
SetTLine – Setzt das Objekt OBJ_TREND auf die Trendlinie

SetTLineByAngle – Setzt das Objekt OBJ_TRENDBYANGLE der Trendlinie nach Winkel

SetArrow - Setzen des Symbols auf dem Diagramm, des OBJ_ARROW-Objekts.

SetLabel – Setzt eine Textbezeichnung, ein OBJ_LABEL-Objekt.

CrossPointOfLines - Berechnet die Koordinaten des Schnittpunkts zweier Linien. Jede Linie ist durch ein Koordinatenpaar ihrer Punkte gegeben.

SetRegression – Legt das OBJ_REGRESSION-Objekt auf den linearen Regressionskanal fest.

EquationDirect - Gleichung einer geraden Linie. Berechnet den Y-Wert für X am Schnittpunkt mit der Linie.
GetArrowInterval – Gibt das Intervall zum Setzen von Signalzeigern zurück
GetArrowInterval – Gibt das Intervall zum Setzen von Signalzeigern zurück
FindNearFractal - Findet das nächste Fraktal. Gibt das Preisniveau zurück.
GetExtremumZZBar - Gibt die ZigZag-Extremum-Balkennummer nach ihrer Nummer zurück.
GetExtremumZZPrice – Gibt das ZigZag-Extremum anhand seiner Zahl zurück.

GetFractalBar - Gibt die Fraktalbalkennummer nach ihrer Nummer zurück.

GetNearestDownFractal – Gibt das Preisniveau des nächsten Down-Fraktals zurück

GetNearestUpFractal – Gibt das nächsthöhere Fraktal zurück


Seite Nr. 7
CorrectTF - Korrigiert den Zeitrahmen auf den nächsten unterstützten MT4.
DateBeginQuarter – Gibt das Startdatum des Quartals zurück
DateOfMonday – Gibt das Datum des Montags nach Wochennummer zurück

Fibonacci - Gibt das Element der Fibonacci-Reihe nach seiner Ordnungszahl zurück.
GetNameMA – Gibt den Namen der MA-Methode zurück.
GetPriceDiffInPoint - Gibt die Preisdifferenz in Punkten zwischen zwei Balken zurück.

GetTypePrice – Gibt den Namen des Preistyps zurück.
ArrayLR – Erzeugt ein Array linearer Regressionswerte.
ArrayMo – Gibt den Modus zurück – das Maximum der Verteilungsdichtekurve.

ExistOrdersByPrice - Gibt das Flag für die Existenz von Orders zum eingestellten Preis zurück

ClosePosBySelect - Schließt eine vorausgewählte Position
CountOrders – Berechnet die Anzahl der Bestellungen nach Typ.
ModifyOrder - Auftragsänderung. Funktionsversion für Backtests.

IIFc - Gibt je nach Bedingung einen von zwei Werten zurück.

IIFd - Gibt je nach Bedingung einen von zwei Werten zurück.
IIFi - Gibt je nach Bedingung einen von zwei Werten zurück.
IIFs - Gibt je nach Bedingung einen von zwei Werten zurück.
ExistInHistoryCloseBetween – Gibt das Flag der Existenz in der Historie einer Position oder Order zurück, die zwischen Datumsangaben geschlossen (gelöscht) wurde.

ExistInHistoryOpenBetween – Gibt das Flag der Existenz in der Historie einer Position oder Order zurück, die zwischen Datumsangaben geöffnet (gesetzt) wurde.

ExistInHistoryToDay – Gibt das Flag des Vorhandenseins eines Auftrags oder einer Position in der Historie für heute zurück

TakeProfitLastPos - Gibt den TakeProfit-Preis der letzten offenen Position oder -1 zurück.

Seite #8
TakeProfitLastClosePos - Gibt den TakeProfit-Preis der letzten geschlossenen Position oder -1 zurück.

MovingInWL - Verschieben des Stop-Levels auf Breakeven

SimpleTrailing - Verfolgen von Positionen mit einem einfachen Schleppnetz

ArrayZ - Gibt den Z-Score einer Zahlenreihe zurück.
ArrayDeleteInt – Löscht das Array-Element am angegebenen Index. Gibt die Größe des neuen Arrays zurück oder -1, wenn nichts entfernt werden konnte.
ArrayDeleteDouble – Löscht das Array-Element am angegebenen Index. Gibt die Größe des neuen Arrays zurück oder -1,
wenn nichts entfernt werden konnte.
ArrayDeleteString – Löscht das Array-Element am angegebenen Index. Gibt die Größe des neuen Arrays zurück, oder -1,
wenn nichts entfernt werden könnte.
ArrayInsertDouble – Fügt ein Array-Element am angegebenen Index ein. Gibt die Größe des neuen Arrays zurück.
BubbleSort2 - Führt eine Blasensortierung an den Elementen eines zweidimensionalen Arrays durch.
GetTypeLastDeleted – Gibt den Typ der zuletzt gelöschten Bestellung oder -1 zurück
iBarLargest - Gibt den Index des größten Balkens oder -1 zurück.
iBarOfDayCalc - Gibt die berechnete Balkenzahl vom Beginn des Tages zurück. Taktnummerierung beginnt bei 1 (eins)
iBarOfDayReal - Gibt die reelle Zahl des Balkens seit Beginn des Tages zurück.
NameDayOfWeek – Gibt den Namen des Wochentags zurück
NormalizeLot – Gibt den normalisierten Wert des gehandelten Lots zurück.
NormalizePrice – Gibt den auf die Tickgröße normalisierten Preiswert zurück.
WeekOfMonth – Gibt die Wochennummer des Monats zurück, wenn das Datum angegeben ist
ClosePosBySortLots - Schließt Positionen in Sortierreihenfolge nach Losgröße.
AddLeadingZero – Fügt der Zeichenfolge S genügend führende Nullen „0“ hinzu, um die Zeichenfolge S gleich der Länge K zu machen.

toTime - Konvertiert zwei/drei Ganzzahlen in eine Zeichenfolge im Zeitformat

Seite #9
StringLower – Gibt eine Zeichenfolge in Kleinbuchstaben zurück

StringUpper - Gibt eine Zeichenfolge in GROSSBUCHSTABEN zurück

StringToArrayDouble - Überträgt reelle Zahlen von String zu Array

StringToArrayInt - Ganzzahlige Werte von String zu Array übertragen

StrSplit - Aufteilen einer Zeichenfolge in ein Array von Elementen

StrTran - Substring-Ersetzung

MovingInWL - Verschieben des Stop-Levels auf Breakeven

isTradeTimeString – Gibt das Time-Trading-Enable-Flag zurück.

isTradeTimeInt – Gibt das Zeithandelserlaubnis-Flag zurück.


Zusätzlich:
Alle Funktionen in einem Archiv.
Alle Funktionen liegen in Form von verlinkten Bibliotheken vor.


 //+----------------------------------------------------------------------------+ //|  Автор    : Ким Игорь В. 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);   } } //+----------------------------------------------------------------------------+

ExistOrders()-Funktion.

Gibt das Order-Existenz-Flag zurück. Es wird die Frage beantworten, ob die Reihenfolge festgelegt ist oder nicht. Mit dieser Funktion können Sie jede Bestellung anfordern, aber auch eine spezifischere. Der Anforderungsfilter wird über Funktionsparameter konfiguriert:

  • sy - Beschränkt den Namen des Instruments. Standardmäßig ist der Parameter "" - keine Einschränkungen, dh jedes Werkzeug. Wenn Sie NULL übergeben, wird die Auswahl der Orders auf das aktuelle Instrument beschränkt.
  • op - Begrenzt den Auftragstyp. Standardmäßig gibt es keine Einschränkung, das heißt, das Vorhandensein einer Bestellung jeglicher Art wird geprüft. Gültige Parameterwerte sind -1, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT und OP_SELLSTOP.
  • mn - Begrenzt die Identifikationsnummer ("magische") der Bestellung. Standardmäßig gibt es kein Limit, dh das Vorhandensein einer Bestellung mit einer beliebigen magischen Nummer wird überprüft.
  • ot - Begrenzt die Auftragserteilungszeit. Geprüft. damit die Bestellung später als der Wert dieses Parameters aufgegeben wird. Standardmäßig gibt es keine Begrenzung, dh das Vorhandensein einer Bestellung mit beliebiger Einstellzeit wird überprüft.
 //+----------------------------------------------------------------------------+ //|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   | //+----------------------------------------------------------------------------+ //|  Версия   : 12.03.2008                                                     | //|  Описание : Возвращает флаг существования ордеров.                         | //+----------------------------------------------------------------------------+ //|  Параметры:                                                                | //|    sy - наименование инструмента   (""   - любой символ,                   | //|                                     NULL - текущий символ)                 | //|    op - операция                   (-1   - любой ордер)                    | //|    mn - MagicNumber                (-1   - любой магик)                    | //|    ot - время открытия             ( 0   - любое время установки)          | //+----------------------------------------------------------------------------+ bool ExistOrders( string sy= "" , int op=- 1 , int mn=- 1 , datetime ot= 0 ) {    int i, k= OrdersTotal (), ty;      if (sy== "0" ) sy= Symbol ();    for (i= 0 ; i<k; i++) {      if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {       ty=OrderType();        if (ty> 1 && ty< 6 ) {          if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || ty==op)) {            if (mn< 0 || OrderMagicNumber()==mn) {              if (ot<=OrderOpenTime()) return (True);           }         }       }     }   }    return (False); }
Полезные функции от KimIV
Полезные функции от KimIV
  • www.mql5.com
В этой теме я буду выкладывать коды своих функций на языке программирования MQL4, приводить примеры их использования и отвечать на вопросы, связанн...
 

Die Funktion ExistPositions().

Dient der Prüfung auf offene Käufe oder Verkäufe. Ähnlich wie bei der Funktion ExistOrders. Standardmäßig werden alle Positionen geprüft: aktuelle und andere Instrumente. Sie können die Auswahl mit einer Kombination von Filtern - Funktionsparametern - verfeinern:

  • sy - Schränkt den Namen des Instruments ein. Der Standardparameter ist "" - keine Einschränkung, d. h. ein beliebiges Instrument. Wenn Sie NULL übergeben, wird die Positionsauswahl auf das aktuelle Instrument beschränkt.
  • op - schränkt die Positionsart ein (Kauf/Verkauf). Standardmäßig gibt es keine Einschränkung, d. h. jede Positionsart wird geprüft. Gültige Werte für diesen Parameter sind -1, OP_BUY und OP_SELL.
  • mn - Wendet eine Beschränkung auf die Identifikationsnummer ("magische" Nummer) der Position an. Standardmäßig gibt es keine Einschränkung, d.h. die Position mit einer beliebigen magischen Zahl wird geprüft.
  • ot - Wendet eine Beschränkung der Öffnungszeit der Position an. Es wird geprüft, ob die Position später als der Wert dieses Parameters geöffnet wird. Standardmäßig gibt es keine Einschränkung, d.h. Positionen mit beliebiger offener Zeit werden geprüft.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 06.03.2008                                                     |
//|  Описание : Возвращает флаг существования позиций                          |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    ot - время открытия             ( 0   - любое время открытия)           |
//+----------------------------------------------------------------------------+
bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=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 (ot<=OrderOpenTime()) return(True);
            }
          }
        }
      }
    }
  }
  return(False);
}

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


//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}
 
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Вывод сообщения в коммент и в журнал                           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - текст сообщения                                                     |
//+----------------------------------------------------------------------------+
void Message(string m) {
  Comment(m);
  if (StringLen(m)>0) Print(m);
} 
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование таймфрейма                             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    TimeFrame - таймфрейм (количество секунд)      (0 - текущий ТФ)         |
//+----------------------------------------------------------------------------+
string GetNameTF(int TimeFrame=0) {
  if (TimeFrame==0) TimeFrame=Period();
  switch (TimeFrame) {
    case PERIOD_M1:  return("M1");
    case PERIOD_M5:  return("M5");
    case PERIOD_M15: return("M15");
    case PERIOD_M30: return("M30");
    case PERIOD_H1:  return("H1");
    case PERIOD_H4:  return("H4");
    case PERIOD_D1:  return("Daily");
    case PERIOD_W1:  return("Weekly");
    case PERIOD_MN1: return("Monthly");
    default:         return("UnknownPeriod");
  }
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование торговой операции                      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    op - идентификатор торговой операции                                    |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
  switch (op) {
    case OP_BUY      : return("Buy");
    case OP_SELL     : return("Sell");
    case OP_BUYLIMIT : return("Buy Limit");
    case OP_SELLLIMIT: return("Sell Limit");
    case OP_BUYSTOP  : return("Buy Stop");
    case OP_SELLSTOP : return("Sell Stop");
    default          : return("Unknown Operation");
  }
}
 

ModifyOrder() Funktion.

Die Funktion ModifyOrder dient dazu, ein oder mehrere Preisniveaus einer vorausgewählten Bestellung zu ändern. Unter einem schwebenden Auftrag versteht man hier einen Limit- oder Stop-Auftrag sowie einen Markt-Kauf- oder -Verkaufsauftrag, d.h. eine Position. Mit der Funktion ModifyOrder können Sie die beiden Preisniveaus StopLoss und TakeProfit für die Position ändern, während für die Pending Order auch der OpenPrice-Einstellpreis geändert werden kann. Die geänderten Preisstufen werden als Parameter an die Funktion ModifyOrder übergeben. Wenn einer der Parameter negativ ist, wird das entsprechende Preisniveau nicht verändert.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Модификация одного предварительно выбранного ордера.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    pp - цена установки ордера                                              |
//|    sl - ценовой уровень стопа                                              |
//|    tp - ценовой уровень тейка                                              |
//|    cl - цвет значка модификации                                            |
//+----------------------------------------------------------------------------+
void ModifyOrder(double pp=-1, double sl=0, double tp=0, color cl=CLR_NONE) {
  bool   fm;
  double op, pa, pb, os, ot;
  int    dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
 
  if (pp<=0) pp=OrderOpenPrice();
  if (sl<0 ) sl=OrderStopLoss();
  if (tp<0 ) tp=OrderTakeProfit();
  
  pp=NormalizeDouble(pp, dg);
  sl=NormalizeDouble(sl, dg);
  tp=NormalizeDouble(tp, dg);
  op=NormalizeDouble(OrderOpenPrice() , dg);
  os=NormalizeDouble(OrderStopLoss()  , dg);
  ot=NormalizeDouble(OrderTakeProfit(), dg);
 
  if (pp!=op || sl!=os || tp!=ot) {
    for (it=1; it<=NumberOfTry; it++) {
      if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
      while (!IsTradeAllowed()) Sleep(5000);
      RefreshRates();
      fm=OrderModify(OrderTicket(), pp, sl, tp, 0, cl);
      if (fm) {
        if (UseSound) PlaySound(NameFileSound); break;
      } else {
        er=GetLastError();
        pa=MarketInfo(OrderSymbol(), MODE_ASK);
        pb=MarketInfo(OrderSymbol(), MODE_BID);
        Print("Error(",er,") modifying order: ",ErrorDescription(er),", try ",it);
        Print("Ask=",pa,"  Bid=",pb,"  sy=",OrderSymbol(),
              "  op="+GetNameOP(OrderType()),"  pp=",pp,"  sl=",sl,"  tp=",tp);
        Sleep(1000*10);
      }
    }
  }
}
 

DeleteOrders() Funktion. Tester-Version.

Die Funktion DeleteOrders() dient zum Löschen der schwebenden Aufträge BuyLimit, BuyStop, SellLimit und SellStop. Die Funktion DeleteOrders() ist universell, d.h. sie kann verwendet werden, um alle vorhandenen schwebenden Aufträge zu löschen, sowie bestimmte Aufträge, die die durch die Funktionsparameter festgelegten Auswahlbedingungen erfüllen:

sy - Name des Instruments. Da im Strategietester nur das aktuelle Symbol gehandelt werden kann, ist dieser Parameter für die Version des Strategietesters nicht relevant und wird nur für die Kompatibilität mit der Online-Version dieser Funktion benötigt. Es ist besser, im Prüfgerät die Werte "" oder NULL zu verwenden. Der Standardwert "" bedeutet ein beliebiges Symbol.
op
- Art des Geschäftsvorgangs, Art des schwebenden Auftrags. Einer von fünf Werten ist möglich: -1, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT oder OP_SELLSTOP. Der Standardwert von -1 bedeutet eine beliebige Reihenfolge.

mn - MagicNumber, Identifikationsnummer eines schwebenden Auftrags. Der Standardwert -1 bedeutet eine beliebige MagicNumber.


//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), clDelete);
          }
        }
      }
    }
  }
}
 

DeleteOrders() Funktion. Online-Version.


//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 28.11.2006                                                      |
//| Описание : Удаление ордеров                                                |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//|   sy - наименование инструмента   ( ""  - любой символ,                    |
//|                                    NULL - текущий символ)                  |
//|   op - операция                   (  -1 - любой ордер)                     |
//|   mn - MagicNumber                (  -1 - любой магик)                     |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  bool fd;
  int err, i, it, k=OrdersTotal(), ot;
  
  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            for (it=1; it<=NumberOfTry; it++) {
              if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
              while (!IsTradeAllowed()) Sleep(5000);
              fd=OrderDelete(OrderTicket(), clDelete);
              if (fd) {
                if (UseSound) PlaySound(NameFileSound); break;
              } else {
                err=GetLastError();
                Print("Error(",err,") delete order ",GetNameOP(ot),
                      ": ",ErrorDescription(err),", try ",it);
                Sleep(1000*5);
              }
            }
          }
        }
      }
    }
  }
}
 
//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 07.10.2006                                                      |
//| Описание : Поиск ближайшего фрактала.                                      |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//|   sy - наименование инструмента     (NULL - текущий символ)                |
//|   tf - таймфрейм                    (  0  - текущий ТФ)                    |
//|   mode - тип фрактала               (MODE_LOWER|MODE_UPPER)                |
//+----------------------------------------------------------------------------+
double FindNearFractal(string sy="0", int tf=0, int mode=MODE_LOWER) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int d=MarketInfo(sy, MODE_DIGITS), s;
  if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;
 
  for (s=2; s<100; s++) {
    f=iFractals(sy, tf, mode, s);
    if (f!=0) return(NormalizeDouble(f, d));
  }
  Print("FindNearFractal(): Фрактал не найден");
  return(0);
}

Funktion ExistOrdersByLot().

Gibt ein Kennzeichen für das Vorhandensein eines Auftrags mit der angegebenen Losgröße zurück. True - Auftrag existiert (gesetzt), False - Auftrag existiert nicht (nicht gesetzt). Sie können die Liste der zu prüfenden Aufträge mit Hilfe der Funktionsparameter einschränken:

  • sy - Name des Instruments. Wenn Sie diesen Parameter setzen, prüft die Funktion nur die Aufträge des angegebenen Instruments. NULL bedeutet aktuelles Instrument, und "" (standardmäßig) bedeutet ein beliebiges Instrument.
  • op - Vorgang, Art des schwebenden Auftrags. Gültige Werte: OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP oder -1. Der Standardwert -1 steht für einen beliebigen Auftragstyp.
  • mn - Kennung der Bestellung (MagicNumber). Der Standardwert von -1 bedeutet eine beliebige MagicNumber.
  • lo - Größe einer Partie mit einer Genauigkeit von zwei Dezimalstellen. Der Standardwert ist 0 - eine beliebige Losgröße.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает флаг существования ордера по размеру лота.          |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любой ордер)                    |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    lo - лот                        ( 0   - любой лот)                      |
//+----------------------------------------------------------------------------+
bool ExistOrdersByLot(string sy="", int op=-1, int mn=-1, double lo=0) {
  int i, k=OrdersTotal(), ot;
  lo=NormalizeDouble(lo, 2);

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (lo<=0 || NormalizeDouble(OrderLots(), 2)==lo) return(True);
          }
        }
      }
    }
  }
  return(False);
}
 

GetLotLastOrder() Funktion.

Gibt die Losgröße des zuletzt erteilten Auftrags oder -1 zurück. Sie können die Liste der zu prüfenden Aufträge mit Hilfe der Funktionsparameter einschränken:

  • sy - Name des Instruments. Wenn dieser Parameter angegeben wird, prüft die Funktion nur die Aufträge des angegebenen Instruments. NULL bedeutet das aktuelle Instrument, und "" (standardmäßig) bedeutet ein beliebiges Instrument.
  • op - Vorgang, Art des schwebenden Auftrags. Gültige Werte: OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP oder -1. Der Standardwert von -1 bedeutet eine beliebige Reihenfolge.
  • mn - Kennung der Bestellung (MagicNumber). Der Standardwert -1 bedeutet eine beliebige MagicNumber.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает размер лота последнего выставленного ордера или -1  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
  datetime o;
  double   l=-1;
  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()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (o<OrderOpenTime()) {
                o=OrderOpenTime();
                l=OrderLots();
              }
            }
          }
        }
      }
    }
  }
  return(l);
}
 

GetOrderOpenPrice() Funktion.

Gibt den Einstellpreis der zuletzt geöffneten Order oder 0 zurück. Sie können die Liste der zu prüfenden Orders mit Funktionsparametern einschränken:

  • sy - Name des Instruments. Wenn dieser Parameter angegeben wird, prüft die Funktion nur die Aufträge des angegebenen Instruments. NULL bedeutet aktuelles Instrument, und "" (standardmäßig) bedeutet ein beliebiges Instrument.
  • op - Vorgang, Art des schwebenden Auftrags. Gültige Werte: OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP oder -1. Der Standardwert von -1 bedeutet eine beliebige Reihenfolge.
  • mn - Kennung der Bestellung (MagicNumber). Der Standardwert -1 bedeutet eine beliebige MagicNumber.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает цену установки последнего ордера или 0.             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetOrderOpenPrice(string sy="", int op=-1, 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()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
 

Die Funktion IndexByTicket().

Gibt den Index (Ordnungszahl in der allgemeinen Liste der eingestellten Aufträge oder offenen Positionen) des Auftrags oder der Position auf dem Ticket zurück. Wenn IndexByTicket() keinen Auftrag oder keine Position mit dem gewünschten Ticket findet, wird -1 zurückgegeben. Mit Hilfe der Funktionsparameter kann die Liste der zu prüfenden Aufträge oder Positionen eingeschränkt werden:

  • sy - Name des Instruments. Wenn Sie diesen Parameter angeben, prüft die Funktion nur Aufträge und Positionen für das angegebene Instrument. NULL bedeutet das aktuelle Instrument, und "" (standardmäßig) bedeutet ein beliebiges Instrument.
  • op - Geschäftsvorgang, Art des schwebenden Auftrags oder der Position. Gültige Werte: OP_BUY, OP_BUYLIMIT, OP_BUYSTOP, OP_SELL, OP_SELLLIMIT, OP_SELLSTOP oder -1. Der Standardwert -1 steht für eine beliebige Reihenfolge oder Position.
  • mn - Kennung eines Auftrags oder einer Position (MagicNumber). Der Standardwert -1 bedeutet eine beliebige MagicNumber.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 20.04.2007                                                     |
//|  Описание : Возвращает индекс ордера или позиции по тикету                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    ti - тикет ордера, позиции                                              |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int IndexByTicket(int ti, string sy="", int op=-1, int mn=-1) {
  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 ((mn<0 || OrderMagicNumber()==mn) && OrderTicket()==ti) return(i);
      }
    }
  }
  return(-1);
}