Uniquement "Fonctionnalités utiles de KimIV".

 

Toutes les fonctions sont tirées de ce fil - h ttp://forum.mql4.com/en/11287 , le fil contient une description détaillée de chaque fonction et des exemples de leur utilisation

Teneur

 Page #1 SetOrder - Réglage de l'ordre. Version de la fonction pour les backtests. ExistOrders - Renvoie le drapeau de l'existence des commandes ExistPositions - Renvoie le drapeau de l'existence des positions OpenPosition - Ouverture d'une position. Version de la fonction pour les backtests. OpenPosition - Ouvre une position et renvoie son ticket. Pour en ligne . Message - Affichage d'un message dans les commentaires et dans le journal GetNameTF - Renvoie le nom de la période GetNameOP - Renvoie le nom de l'opération de trading ModifyOrder - Modification d'un ordre présélectionné. DeleteOrders - Supprimer les commandes. Version de la fonction pour les backtests. DeleteOrders - Supprimer les commandes . Pour en ligne . FindNearFractal - Recherche la fractale la plus proche ExistOrdersByLot - Renvoie le drapeau de l'existence d'une commande par taille de lot. GetLotLastOrder - Renvoie la taille du lot de la dernière commande passée, ou -1 GetOrderOpenPrice - Renvoie le prix de la dernière commande, ou 0. IndexByTicket - Renvoie l'index de la commande ou la position sur le ticket
Page 2
NumberOfOrders - Renvoie le nombre de commandes.

ClosePosBySelect - Ferme une position présélectionnée.

ClosePosBySizeProfitInCurrency - Fermez les positions qui ont un profit dans la devise de dépôt d'une certaine valeur

ClosePosBySizeLossInCurrency - Fermeture des positions dont la perte dans la devise de dépôt a dépassé une certaine valeur

ClosePositions - Fermer des positions au prix du marché

ClosePosFirstProfit - Clôture des positions au prix du marché d'abord rentable

ClosePosWithMaxProfitInCurrency - Fermez une position avec le profit positif maximum dans la devise du dépôt

DistMarketAndPos- Renvoie la distance en points entre le marché et la position la plus proche

ExistOPNearMarket - Renvoie le drapeau de l'existence d'une position ou d'un ordre proche du marché

ExistPosByPrice - Renvoie le drapeau de l'existence de positions au prix d'ouverture

GetAmountLotFromOpenPos - Renvoie le nombre de lots de positions ouvertes

Page #3
GetIndexByTicket - Renvoie l'index de la commande ou de la position par ticket.

Corrélation - Renvoie la corrélation de deux séries.

GetIndexLastPos - Renvoie l'index de la dernière position ouverte ou -1

GetLotLastPos - Renvoie la taille du lot de la dernière position ouverte ou -1

GetMaxLotFromOpenPos - Renvoie la taille maximale du lot à partir des positions ouvertes

GetMinLotFromOpenPos - Renvoie la taille minimale du lot à partir des positions ouvertes

NumberOfPositions - Renvoie le nombre de positions.

GetProfitFromDateInCurrency - Renvoie le profit total dans la devise de dépôt des positions clôturées depuis une certaine date

GetProfitOpenPosInCurrency - Renvoie le profit total des positions ouvertes dans la devise du dépôt

GetProfitOpenPosInPoint - Renvoie le profit total des positions ouvertes en points

GetTicketLastPos - Renvoie le ticket de la dernière position ouverte ou -1

Page#4
GetTypeLastClosePos - Renvoie le type de la dernière position fermée ou -1

GetTypeLastOpenPos - Renvoie le type de la dernière position ouverte ou -1

isCloseLastPosByStop - Renvoie le drapeau pour fermer la dernière position par stop

isCloseLastPosByTake - Renvoie le drapeau pour fermer la dernière position par prise.

isLossLastPos - Renvoie l'indicateur de perte de la dernière position.

isTradeToDay - Renvoie le drapeau commercial pour aujourd'hui

NumberOfBarCloseLastPos - Renvoie le numéro de la barre de fermeture de la dernière position ou -1.

NumberOfBarOpenLastPos - Renvoie le numéro de la barre ouverte de la dernière position ou -1.

NumberOfLossPosToday - Renvoie le nombre de positions perdantes clôturées aujourd'hui.

PriceCloseLastPos - Renvoie le prix de clôture de la dernière position fermée.


Page #5
PriceOpenLastPos - Renvoie le prix d'ouverture de la dernière position ouverte.

PriceOpenLastClosePos - Renvoie le prix d'ouverture de la dernière position fermée.

PriceOpenNearPos - Renvoie le prix d'ouverture de la position la plus proche.

TicketNearPos - Renvoie le ticket de la position la plus proche du marché au prix d'ouverture.

TypeNearPos - Renvoie le type de position la plus proche du marché, ou -1.

TimeOpenLastPos - Renvoie l'heure d'ouverture de la dernière position ouverte.

BubbleSort - Effectue un tri à bulles sur les éléments d'un tableau.

BarsBetweenLastFractals - Renvoie le nombre de barres entre les deux dernières fractales.

SecondsAfterCloseLastPos - Renvoie le nombre de secondes après la fermeture de la dernière position.

SecondsAfterOpenLastPos - Renvoie le nombre de secondes après l'ouverture de la dernière position.

DeleteOppositeOrders - Supprimer la position de commande opposée

ArraySearchDouble - Recherche un élément dans un tableau par valeur et renvoie l'index de l'élément trouvé, ou -1

ArraySearchInt - Recherche un élément dans un tableau par valeur et renvoie l'index de l'élément trouvé, ou -1.

ArraySearchString - Recherche un élément de tableau par valeur et renvoie l'index de l'élément trouvé, ou -1

GetLotLastClosePos - Renvoie la taille du lot de la dernière position fermée ou -1

ArrayMax - Renvoie la valeur de l'élément maximum dans un tableau.


Page #6
ArrayMin - Renvoie la valeur de l'élément minimum dans un tableau

GetExtremumZZBar - Renvoie le numéro de la barre extrême ZigZag par son numéro.

ArrayAvg - Renvoie la moyenne arithmétique des éléments du tableau.

ArrayAvGeom - Renvoie la moyenne géométrique des éléments du tableau.

SetHLine - Définissez l'objet OBJ_HLINE sur une ligne horizontale
SetVLine - Définissez l'objet OBJ_VLINE sur une ligne verticale
SetTLine - Définit l'objet OBJ_TREND sur la ligne de tendance

SetTLineByAngle - Définit l'objet OBJ_TRENDBYANGLE de la ligne de tendance par angle

SetArrow - Définition de l'icône sur le graphique, l'objet OBJ_ARROW.

SetLabel - Définissez une étiquette de texte, un objet OBJ_LABEL.

CrossPointOfLines - Calcule les coordonnées du point d'intersection de deux lignes. Chaque ligne est donnée par une paire de coordonnées de ses points.

SetRegression - Définit l'objet OBJ_REGRESSION sur le canal de régression linéaire.

EquationDirect - Équation d'une ligne droite. Calcule la valeur Y pour X au point d'intersection avec la ligne.
GetArrowInterval - Renvoie l'intervalle de définition des pointeurs de signal
GetArrowInterval - Renvoie l'intervalle de définition des pointeurs de signal
FindNearFractal - Trouver la fractale la plus proche. Renvoie le niveau de prix.
GetExtremumZZBar - Renvoie le numéro de la barre extrême ZigZag par son numéro.
GetExtremumZZPrice - Renvoie ZigZag extremum par son numéro.

GetFractalBar - Renvoie le numéro de la barre fractale par son numéro.

GetNearestDownFractal - Renvoie le niveau de prix de la fractale inférieure la plus proche

GetNearestUpFractal - Renvoie la fractale la plus proche


Page #7
CorrectTF - Corrige la période au MT4 pris en charge le plus proche.
DateBeginQuarter - Renvoie la date de début du trimestre
DateOfMonday - Renvoie la date du lundi par numéro de semaine

Fibonacci - Renvoie l'élément de la série de Fibonacci par son nombre ordinal.
GetNameMA - Renvoie le nom de la méthode MA.
GetPriceDiffInPoint - Renvoie la différence de prix en points entre deux barres.

GetTypePrice - Renvoie le nom du type de prix.
ArrayLR - Génère un tableau de valeurs de régression linéaire.
ArrayMo - Renvoie le Mode - le maximum de la courbe de densité de distribution.

ExistOrdersByPrice - Renvoie le drapeau de l'existence de commandes au prix fixé

ClosePosBySelect - Fermer une position présélectionnée
CountOrders - Calcule le nombre de commandes par type.
ModifyOrder - Modification de la commande. Version de la fonction pour les backtests.

IIFc - Renvoie l'une des deux valeurs en fonction de la condition.

IIFd - Renvoie l'une des deux valeurs en fonction de la condition.
IIFi - Renvoie l'une des deux valeurs en fonction de la condition.
IIFs - Renvoie l'une des deux valeurs en fonction de la condition.
ExistInHistoryCloseBetween - Renvoie l'indicateur d'existence dans l'historique d'une position ou d'un ordre clôturé (supprimé) entre les dates.

ExistInHistoryOpenBetween - Renvoie le drapeau d'existence dans l'historique d'une position ou d'un ordre ouvert (set) entre les dates.

ExistInHistoryToDay - Renvoie le drapeau de la présence d'un ordre ou d'une position dans l'historique pour aujourd'hui

TakeProfitLastPos - Renvoie le prix TakeProfit de la dernière position ouverte ou -1.

Page #8
TakeProfitLastClosePos - Renvoie le prix TakeProfit de la dernière position fermée ou -1.

MovingInWL - Déplacement du niveau d'arrêt vers le seuil de rentabilité

SimpleTrailing - Suivi des positions avec un simple chalut

ArrayZ - Renvoie le score Z d'une série de nombres.
ArrayDeleteInt - Supprime l'élément de tableau à l'index donné. Renvoie la taille du nouveau tableau, ou -1 si rien n'a pu être supprimé.
ArrayDeleteDouble - Supprime l'élément de tableau à l'index donné. Renvoie la taille du nouveau tableau, ou -1
si rien n'a pu être supprimé.
ArrayDeleteString - Supprime l'élément de tableau à l'index donné. Renvoie la taille du nouveau tableau, ou -1,
si rien ne pouvait être enlevé.
ArrayInsertDouble - Insère un élément de tableau à l'index donné. Renvoie la taille du nouveau tableau.
BubbleSort2 - Effectue un tri à bulles sur les éléments d'un tableau à deux dimensions.
GetTypeLastDeleted - Renvoie le type de la dernière commande supprimée ou -1
iBarLargest - Renvoie l'index de la plus grande barre, ou -1.
iBarOfDayCalc - Renvoie le nombre de barres calculé depuis le début de la journée. La numérotation des barres commence à partir de 1 (un)
iBarOfDayReal - Renvoie le nombre réel de la barre depuis le début de la journée.
NameDayOfWeek - Renvoie le nom du jour de la semaine
NormalizeLot - Renvoie la valeur normalisée du lot négocié.
NormalizePrice - Renvoie la valeur du prix normalisée à la taille du tick.
WeekOfMonth - Renvoie le numéro de semaine du mois en fonction de la date
ClosePosBySortLots - Fermez les positions dans l'ordre de tri par taille de lot.
AddLeadingZero - Ajoute suffisamment de zéros non significatifs "0" à la chaîne S pour que la chaîne S soit égale à la longueur K.

toTime - Convertit deux/trois entiers en une chaîne au format horaire

Page #9
StringLower - Renvoie une chaîne en minuscule

StringUpper - Renvoie une chaîne en MAJUSCULES

StringToArrayDouble - Transférer des nombres réels d'une chaîne à un tableau

StringToArrayInt - Transférer des valeurs entières d'une chaîne à un tableau

StrSplit - Fractionner une chaîne en un tableau d'éléments

StrTran - Remplacement de sous-chaîne

MovingInWL - Déplacement du niveau d'arrêt vers le seuil de rentabilité

isTradeTimeString - Renvoie l'indicateur d'activation de l'échange de temps.

isTradeTimeInt - Renvoie l'indicateur d'autorisation d'échange de temps.


En outre:
Toutes les fonctions dans une seule archive.
Toutes les fonctions se présentent sous la forme de bibliothèques liées.


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

Fonction ExisteCommandes().

Renvoie l'indicateur d'existence de la commande. Il répondra à la question de savoir si la commande est définie ou non. Grâce à cette fonction, vous pouvez demander n'importe quelle commande, ainsi qu'une commande plus spécifique. Le filtre de requête est configuré à l'aide des paramètres de fonction :

  • sy - Impose une restriction sur le nom de l'instrument. Par défaut, le paramètre est "" - aucune restriction, c'est-à-dire n'importe quel outil. Si vous passez NULL, alors la sélection des ordres sera limitée à l'instrument en cours.
  • op - Place une limite sur le type de commande. Par défaut, il n'y a pas de restriction, c'est-à-dire que la présence d'une commande de n'importe quel type est vérifiée. Les valeurs de paramètre valides sont -1, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT et OP_SELLSTOP.
  • mn - Impose une limite au numéro d'identification ("magique") de la commande. Par défaut, il n'y a pas de restriction, c'est-à-dire que la présence d'une commande avec n'importe quel nombre magique est vérifiée.
  • ot - Impose une limite sur le temps de passation de la commande. Vérifié. afin que la commande soit passée après la valeur de ce paramètre. Par défaut, il n'y a pas de limite, c'est-à-dire que la présence d'une commande avec n'importe quel temps de réglage est vérifiée.
 //+----------------------------------------------------------------------------+ //|  Автор    : Ким Игорь В. 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, приводить примеры их использования и отвечать на вопросы, связанн...
 

La fonction ExistPositions().

Conçu pour vérifier les achats ou les ventes en cours. Similaire à la fonction ExistOrders. Par défaut, il vérifie toutes les positions : actuelles et autres instruments. Vous pouvez affiner la sélection à l'aide d'une combinaison de filtres - paramètres de fonction :

  • sy - Impose une restriction sur le nom de l'instrument. Le paramètre par défaut est "" - aucune restriction, c'est-à-dire n'importe quel instrument. Si vous passez NULL, la sélection de la position sera limitée à l'instrument actuel.
  • op - impose une restriction sur le type de position (Achat/Vente). Par défaut, il n'y a pas de contrainte, c'est-à-dire que tout type de position est vérifié. Les valeurs valides pour ce paramètre sont -1, OP_BUY et OP_SELL.
  • mn - Applique une restriction sur le numéro d'identification ("magique") de la position. Par défaut, il n'y a pas de contrainte, c'est-à-dire que la position avec n'importe quel numéro magique est vérifiée.
  • ot - Applique une restriction sur l'heure d'ouverture du poste. Il est vérifié si la position sera ouverte plus tard que la valeur de ce paramètre. Par défaut, il n'y a pas de contrainte, c'est-à-dire que la position avec n'importe quel temps ouvert est vérifiée.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}

Fonction OpenPosition() pour le testeur.


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

Fonction OpenPosition() en ligne.


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

Fonction ModifyOrder().

La fonction ModifyOrder est conçue pour modifier un ou plusieurs niveaux de prix d'une commande présélectionnée. Par ordre en suspens, on entend ici un ordre limite ou stop, ainsi qu'un ordre d'achat ou de vente sur le marché, c'est-à-dire une position. La fonction ModifyOrder permet de modifier les deux niveaux de prix StopLoss et TakeProfit de la position, tandis que pour l'ordre en suspens, le prix de fixation OpenPrice peut également être modifié. Les niveaux de prix modifiés sont transmis à la fonction ModifyOrder en tant que paramètres. Si l'un des paramètres est négatif, le niveau de prix correspondant ne sera pas modifié.

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

Fonction DeleteOrders(). Version pour testeurs.

La fonction DeleteOrders() est destinée à supprimer les ordres en attente BuyLimit, BuyStop, SellLimit et SellStop. La fonction DeleteOrders() est universelle, c'est-à-dire qu'elle peut être utilisée pour supprimer tous les ordres en attente présents, ainsi que les ordres spécifiques qui répondent aux conditions de sélection définies par les paramètres de la fonction :

sy - Nom de l'instrument. Étant donné que seul le symbole actuel peut être négocié dans le testeur de stratégie, ce paramètre n'est pas pertinent pour la version du testeur de stratégie et est uniquement requis pour la compatibilité avec la version en ligne de cette fonction. Il est préférable d'utiliser les valeurs "" ou NULL dans le testeur. La valeur par défaut "" signifie n'importe quel symbole.
op
- Type d'opération commerciale, type d'ordre en attente. L'une des cinq valeurs suivantes est possible : -1, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT ou OP_SELLSTOP. La valeur par défaut de -1 signifie un ordre quelconque.

mn - MagicNumber, numéro d'identification d'un ordre en attente. La valeur par défaut -1 signifie n'importe quel 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);
          }
        }
      }
    }
  }
}
 

Fonction DeleteOrders(). Version en ligne.


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

Fonction ExistOrdersByLot().

Renvoie un indicateur de l'existence d'un ordre avec la taille de lot spécifiée. Vrai - l'ordre existe (défini), Faux - l'ordre n'existe pas (non défini). Vous pouvez limiter la liste des ordres à vérifier à l'aide des paramètres de la fonction :

  • sy - Nom de l'instrument. Si vous définissez ce paramètre, la fonction ne vérifiera que les ordres de l'instrument spécifié. NULL signifie l'instrument actuel, et "" (par défaut) signifie n'importe quel instrument.
  • op - Opération, type d'ordre en attente. Valeurs valides : OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP ou -1. La valeur par défaut de -1 indique tout type de commande.
  • mn - Identifiant de l'ordre (MagicNumber). La valeur par défaut de -1 signifie n'importe quel MagicNumber.
  • lo - Taille d'un lot avec une précision de deux décimales. La valeur par défaut est 0 - toute taille de lot.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}
 

Fonction GetLotLastOrder().

Renvoie la taille du lot du dernier ordre passé ou -1. Vous pouvez limiter la liste des ordres à vérifier à l'aide des paramètres de la fonction :

  • sy - Nom de l'instrument. Si ce paramètre est donné, la fonction ne vérifiera que les ordres de l'instrument spécifié. NULL signifie l'instrument actuel, et "" (par défaut) signifie n'importe quel instrument.
  • op - Opération, type d'ordre en attente. Valeurs valides : OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP ou -1. La valeur par défaut de -1 signifie un ordre quelconque.
  • mn - Identifiant de l'ordre (MagicNumber). La valeur par défaut -1 signifie n'importe quel 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);
}
 

Fonction GetOrderOpenPrice().

Renvoie le prix de fixation du dernier ordre ouvert ou 0. Vous pouvez limiter la liste des ordres à vérifier avec les paramètres de la fonction :

  • sy - Nom de l'instrument. Si ce paramètre est donné, la fonction ne vérifiera que les ordres de l'instrument spécifié. NULL signifie l'instrument actuel, et "" (par défaut) signifie n'importe quel instrument.
  • op - Opération, type d'ordre en attente. Valeurs valides : OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP ou -1. La valeur par défaut de -1 indique un ordre quelconque.
  • mn - Identifiant de l'ordre (MagicNumber). La valeur par défaut -1 signifie n'importe quel 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);
}
 

La fonction IndexByTicket().

Renvoie l'index (numéro ordinal dans la liste générale des ordres fixés ou des positions ouvertes) de l'ordre ou de la position sur le ticket. Si IndexByTicket() ne trouve pas d'ordre ou de position avec le ticket requis, il renvoie -1. Nous pouvons limiter la liste des ordres ou des positions à vérifier à l'aide des paramètres de la fonction :

  • sy - Nom de l'instrument. Si vous spécifiez ce paramètre, la fonction ne vérifiera que les ordres et les positions de l'instrument spécifié. NULL signifie l'instrument actuel, et "" (par défaut) signifie n'importe quel instrument.
  • op - Opération commerciale, type d'ordre ou de position en attente. Valeurs valides : OP_BUY, OP_BUYLIMIT, OP_BUYSTOP, OP_SELL, OP_SELLLIMIT, OP_SELLSTOP ou -1. La valeur par défaut de -1 indique un ordre ou une position quelconque.
  • mn - Identifiant d'un ordre ou d'une position (MagicNumber). La valeur par défaut -1 signifie n'importe quel 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);
}
Raison: