Solo "Caratteristiche utili di KimIV".

 

Tutte le funzioni sono tratte da questo thread - h ttp://forum.mql4.com/ru/11287 , il thread contiene una descrizione dettagliata di ciascuna funzione ed esempi del loro utilizzo

Contenuto

 Pagina #1 SetOrder - Impostazione dell'ordine. Versione della funzione per backtest. ExistOrders - Restituisce il flag per l'esistenza di ordini ExistPositions - Restituisce il flag per l'esistenza di posizioni OpenPosition - Apertura di una posizione. Versione della funzione per backtest. OpenPosition - Apre una posizione e restituisce il suo ticket. Per in linea . Messaggio - Visualizzazione di un messaggio nei commenti e nel log GetNameTF - Restituisce il nome del timeframe GetNameOP - Restituisce il nome dell'operazione di trading ModifyOrder - Modifica di un ordine preselezionato. DeleteOrders - Elimina gli ordini. Versione della funzione per backtest. DeleteOrders: elimina gli ordini . Per in linea . FindNearFractal - Cerca il frattale più vicino ExistOrdersByLot - Restituisce il flag per l'esistenza di un ordine per dimensione del lotto. GetLotLastOrder - Restituisce la dimensione del lotto dell'ultimo ordine effettuato o -1 GetOrderOpenPrice - Restituisce il prezzo dell'ultimo ordine o 0. IndexByTicket - Restituisce l'indice dell'ordine o la posizione sul biglietto
Pagina 2
NumberOfOrders - Restituisce il numero di ordini.

ClosePosBySelect - Chiude una posizione preselezionata.

ClosePosBySizeProfitInCurrency - Chiudi quelle posizioni che hanno un profitto nella valuta di deposito di un certo valore

ClosePosBySizeLossInCurrency - Chiusura di quelle posizioni la cui perdita nella valuta del deposito ha superato un certo valore

ClosePositions - Chiudere le posizioni al prezzo di mercato

ClosePosFirstProfit - Chiusura delle posizioni al prezzo di mercato prima redditizia

ClosePosWithMaxProfitInCurrency - Chiudi una posizione con il massimo profitto positivo nella valuta del deposito

DistMarketAndPos- Restituisce la distanza in punti tra il mercato e la posizione più vicina

ExistOPNearMarket - Restituisce il flag per l'esistenza di una posizione o di un ordine vicino al mercato

ExistPosByPrice - Restituisce il flag per l'esistenza di posizioni al prezzo di apertura

GetAmountLotFromOpenPos - Restituisce l'importo di molte posizioni aperte

Pagina #3
GetIndexByTicket - Restituisce l'indice dell'ordine o della posizione per ticket.

Correlazione - Restituisce la correlazione di due serie.

GetIndexLastPos - Restituisce l'indice dell'ultima posizione aperta o -1

GetLotLastPos - Restituisce la dimensione del lotto dell'ultima posizione aperta o -1

GetMaxLotFromOpenPos - Restituisce la dimensione massima del lotto dalle posizioni aperte

GetMinLotFromOpenPos - Restituisce la dimensione minima del lotto dalle posizioni aperte

NumberOfPositions - Restituisce il numero di posizioni.

GetProfitFromDateInCurrency - Restituisce il profitto totale nella valuta di deposito delle posizioni chiuse da una certa data

GetProfitOpenPosInCurrency - Restituisce il profitto totale delle posizioni aperte nella valuta del deposito

GetProfitOpenPosInPoint - Restituisce il profitto totale delle posizioni aperte in punti

GetTicketLastPos - Restituisce il biglietto dell'ultima posizione aperta o -1

Pagina 4
GetTypeLastClosePos - Restituisce il tipo dell'ultima posizione chiusa o -1

GetTypeLastOpenPos - Restituisce il tipo dell'ultima posizione aperta o -1

isCloseLastPosByStop - Restituisce il flag per la chiusura dell'ultima posizione tramite stop

isCloseLastPosByTake - Restituisce il flag per la chiusura dell'ultima posizione tramite Take.

isLossLastPos - Restituisce il flag di perdita dell'ultima posizione.

isTradeToDay - Restituisce la bandiera commerciale per oggi

NumberOfBarCloseLastPos - Restituisce il numero della barra di chiusura dell'ultima posizione o -1.

NumberOfBarOpenLastPos - Restituisce il numero della barra aperta dell'ultima posizione o -1.

NumberOfLossPosToday - Restituisce il numero di posizioni in perdita chiuse oggi.

PriceCloseLastPos - Restituisce il prezzo di chiusura dell'ultima posizione chiusa.


Pagina #5
PriceOpenLastPos - Restituisce il prezzo di apertura dell'ultima posizione aperta.

PriceOpenLastClosePos - Restituisce il prezzo di apertura dell'ultima posizione chiusa.

PriceOpenNearPos - Restituisce il prezzo di apertura della posizione più vicina.

TicketNearPos - Restituisce il biglietto della posizione più vicina al mercato al prezzo di apertura.

TypeNearPos - Restituisce il tipo di posizione più vicino al mercato o -1.

TimeOpenLastPos - Restituisce l'orario di apertura dell'ultima posizione aperta.

BubbleSort - Esegue un ordinamento a bolle sugli elementi di una matrice.

BarsBetweenLastFractals - Restituisce il numero di barre tra gli ultimi due frattali.

SecondsAfterCloseLastPos - Restituisce il numero di secondi dopo la chiusura dell'ultima posizione.

SecondsAfterOpenLastPos - Restituisce il numero di secondi dopo l'apertura dell'ultima posizione.

DeleteOppositeOrders - Elimina la posizione dell'ordine opposto

ArraySearchDouble - Cerca un elemento in una matrice in base al valore e restituisce l'indice dell'elemento trovato o -1

ArraySearchInt - Cerca un elemento in una matrice per valore e restituisce l'indice dell'elemento trovato o -1.

ArraySearchString - Cerca un elemento dell'array in base al valore e restituisce l'indice dell'elemento trovato o -1

GetLotLastClosePos - Restituisce la dimensione del lotto dell'ultima posizione chiusa o -1

ArrayMax - Restituisce il valore dell'elemento massimo in una matrice.


Pagina #6
ArrayMin - Restituisce il valore dell'elemento minimo in una matrice

GetExtremumZZBar - Restituisce il numero della barra ZigZag extremum in base al suo numero.

ArrayAvg - Restituisce la media aritmetica degli elementi dell'array.

ArrayAvGeom - Restituisce la media geometrica degli elementi dell'array.

SetHLine - Imposta l'oggetto OBJ_HLINE su una linea orizzontale
SetVLine - Imposta l'oggetto OBJ_VLINE su una linea verticale
SetTLine - Imposta l'oggetto OBJ_TREND sulla linea di tendenza

SetTLineByAngle - Imposta l'oggetto OBJ_TRENDBYANGLE della linea di tendenza per angolo

SetArrow - Impostando l'icona sul grafico, l'oggetto OBJ_ARROW.

SetLabel - Imposta un'etichetta di testo, un oggetto OBJ_LABEL.

CrossPointOfLines - Calcola le coordinate del punto di intersezione di due linee.Ogni linea è data da una coppia di coordinate dei suoi punti.

SetRegression - Imposta l'oggetto OBJ_REGRESSION sul canale di regressione lineare.

EquationDirect - Equazione di una retta. Calcola il valore Y per X nel punto di intersezione con la linea.
GetArrowInterval - Restituisce l'intervallo per l'impostazione dei puntatori del segnale
GetArrowInterval - Restituisce l'intervallo per l'impostazione dei puntatori del segnale
FindNearFractal - Trovare il frattale più vicino. Restituisce il livello del prezzo.
GetExtremumZZBar - Restituisce il numero della barra ZigZag extremum in base al suo numero.
GetExtremumZZPrice - Restituisce ZigZag extremum in base al suo numero.

GetFractalBar - Restituisce il numero della barra frattale in base al suo numero.

GetNearestDownFractal - Restituisce il livello del prezzo del frattale più vicino

GetNearestUpFractal - Restituisce il frattale ascendente più vicino


Pagina #7
CorrectTF - Corregge l'intervallo di tempo alla MT4 supportata più vicina.
DateBeginQuarter - Restituisce la data di inizio del trimestre
DateOfMonday - Restituisce la data del lunedì in base al numero della settimana

Fibonacci - Restituisce l'elemento della serie di Fibonacci per il suo numero ordinale.
GetNameMA - Restituisce il nome del metodo MA.
GetPriceDiffInPoint - Restituisce la differenza di prezzo in punti tra due barre.

GetTypePrice - Restituisce il nome del tipo di prezzo.
ArrayLR - Genera una matrice di valori di regressione lineare.
ArrayMo - Restituisce la modalità - il massimo della curva di densità di distribuzione.

ExistOrdersByPrice - Restituisce il flag per l'esistenza di ordini al prezzo impostato

ClosePosBySelect - Chiude una posizione preselezionata
CountOrders - Calcola il numero di ordini per tipo.
ModifyOrder - Modifica dell'ordine. Versione della funzione per backtest.

IIFc - Restituisce uno dei due valori a seconda della condizione.

IIFd - Restituisce uno dei due valori a seconda della condizione.
IIFi - Restituisce uno dei due valori a seconda della condizione.
IIFs - Restituisce uno dei due valori a seconda della condizione.
ExistInHistoryCloseBetween - Restituisce il flag di esistenza nella cronologia di una posizione o di un ordine chiuso (eliminato) tra le date.

ExistInHistoryOpenBetween - Restituisce il flag di esistenza nella cronologia di una posizione o di un ordine aperto (set) tra le date.

ExistInHistoryToDay - Restituisce il flag della presenza di un ordine o di una posizione nella cronologia per oggi

TakeProfitLastPos - Restituisce il prezzo TakeProfit dell'ultima posizione aperta o -1.

Pagina #8
TakeProfitLastClosePos - Restituisce il prezzo TakeProfit dell'ultima posizione chiusa o -1.

MovingInWL - Spostamento del livello di arresto in pareggio

SimpleTrailing - Tracciamento delle posizioni con una semplice rete a strascico

ArrayZ - Restituisce il punteggio Z di una serie di numeri.
ArrayDeleteInt - Elimina l'elemento dell'array in corrispondenza dell'indice specificato. Restituisce la dimensione della nuova matrice o -1 se non è stato possibile rimuovere nulla.
ArrayDeleteDouble - Elimina l'elemento dell'array in corrispondenza dell'indice specificato. Restituisce la dimensione della nuova matrice o -1
se non è stato possibile rimuovere nulla.
ArrayDeleteString - Elimina l'elemento dell'array in corrispondenza dell'indice specificato. Restituisce la dimensione della nuova matrice, o -1,
se nulla può essere rimosso.
ArrayInsertDouble - Inserisce un elemento dell'array in corrispondenza dell'indice specificato. Restituisce la dimensione della nuova matrice.
BubbleSort2 - Esegue un ordinamento a bolle sugli elementi di una matrice bidimensionale.
GetTypeLastDeleted - Restituisce il tipo dell'ultimo ordine eliminato o -1
iBarLargest - Restituisce l'indice della barra più grande o -1.
iBarOfDayCalc - Restituisce il numero della barra calcolato dall'inizio della giornata. La numerazione delle barre parte da 1 (uno)
iBarOfDayReal - Restituisce il numero reale della barra dall'inizio della giornata.
NameDayOfWeek - Restituisce il nome del giorno della settimana
NormalizeLot - Restituisce il valore normalizzato del lotto negoziato.
NormalizePrice - Restituisce il valore del prezzo normalizzato alla dimensione del tick.
WeekOfMonth - Restituisce il numero della settimana del mese data la data
ClosePosBySortLots - Chiudi le posizioni in ordine di ordinamento per dimensione del lotto.
AddLeadingZero - Aggiunge un numero sufficiente di zeri iniziali "0" alla stringa S per rendere la stringa S uguale alla lunghezza K.

toTime: converte due/tre numeri interi in una stringa in formato ora

Pagina #9
StringLower - Restituisce una stringa minuscola

StringUpper - Restituisce una stringa in MAIUSCOLO

StringToArrayDouble - Trasferisce numeri reali da stringa a matrice

StringToArrayInt - Trasferisce valori interi dalla stringa all'array

StrSplit - Dividere una stringa in una matrice di elementi

StrTran - Sostituzione della sottostringa

MovingInWL - Spostamento del livello di arresto in pareggio

isTradeTimeString - Restituisce il flag di abilitazione del time trading.

isTradeTimeInt - Restituisce il flag di autorizzazione per il time trading.


Inoltre:
Tutte le funzioni in un archivio.
Tutte le funzioni sono sotto forma di librerie collegate.


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

Restituisce il flag di esistenza dell'ordine. Risponderà alla domanda se l'ordine è impostato o meno. Utilizzando questa funzione è possibile richiedere qualsiasi ordine, oltre a uno più specifico. Il filtro delle richieste viene configurato utilizzando i parametri di funzione:

  • sy - Impone una restrizione al nome dello strumento. Per impostazione predefinita, il parametro è "" - nessuna restrizione, ovvero qualsiasi strumento. Se superi NULL, la selezione degli ordini sarà limitata allo strumento corrente.
  • op : pone un limite al tipo di ordine. Di default non ci sono restrizioni, cioè viene verificata la presenza di un ordine di qualsiasi tipo. I valori dei parametri validi sono -1, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT e OP_SELLSTOP.
  • mn - Impone un limite al numero di identificazione ("magico") dell'ordine. Per impostazione predefinita, non c'è limite, ovvero viene verificata la presenza di un ordine con qualsiasi numero magico.
  • ot - Impone un limite al tempo di inserimento dell'ordine. Controllato. in modo che l'ordine venga effettuato dopo il valore di questo parametro. Di default non c'è limite, cioè viene verificata la presenza di un ordine con qualsiasi tempo di impostazione.
 //+----------------------------------------------------------------------------+ //|  Автор    : Ким Игорь В. 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 funzione ExistPositions().

Progettato per controllare gli acquisti o le vendite aperte. Simile alla funzione ExistOrders. Per impostazione predefinita, controlla tutte le posizioni: corrente e altri strumenti. È possibile raffinare la selezione con una combinazione di filtri - parametri di funzione:

  • sy - Impone una restrizione sul nome dello strumento. Il parametro predefinito è "" - nessuna restrizione, cioè qualsiasi strumento. Se si passa NULL, la selezione della posizione sarà limitata allo strumento corrente.
  • op - pone una restrizione sul tipo di posizione (Acquisto/Vendita). Per impostazione predefinita, non c'è alcun vincolo, cioè, qualsiasi tipo di posizione è controllato. I valori validi per questo parametro sono -1, OP_BUY e OP_SELL.
  • mn - Applica la restrizione sul numero di identificazione ("magico") della posizione. Per default non c'è alcun vincolo, cioè viene controllata la posizione con qualsiasi numero magico.
  • ot - Applica una restrizione sul tempo di apertura della posizione. Controlla se la posizione sarà aperta dopo il valore di questo parametro. Per impostazione predefinita, non c'è alcun vincolo, cioè, la posizione con qualsiasi tempo aperto è controllata.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}

Funzione OpenPosition() per il tester.


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

Funzione OpenPosition() per l'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");
  }
}
 

Funzione ModifyOrder().

La funzione ModifyOrder è progettata per cambiare uno o più livelli di prezzo di un ordine preselezionato. Qui un ordine pendente è inteso come un ordine Limit o Stop, così come un ordine di Acquisto o Vendita a mercato, cioè una posizione. Utilizzando la funzione ModifyOrder è possibile modificare due livelli di prezzo StopLoss e TakeProfit per la posizione, mentre per l'ordine pendente è possibile modificare anche il prezzo di impostazione OpenPrice. I livelli di prezzo modificati sono passati alla funzione ModifyOrder come parametri. Se uno dei parametri è negativo, il livello di prezzo corrispondente non sarà modificato.

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

Funzione DeleteOrders(). Versione per tester.

La funzione DeleteOrders() ha lo scopo di cancellare gli ordini pendenti BuyLimit, BuyStop, SellLimit e SellStop. La funzione DeleteOrders() è universale, cioè può essere usata per cancellare tutti gli ordini pendenti presenti, così come quelli specifici che soddisfano le condizioni di selezione stabilite dai parametri della funzione:

sy - Nome dello strumento. Poiché solo il simbolo corrente può essere scambiato nello Strategy Tester, questo parametro non è rilevante per la versione Strategy Tester ed è richiesto solo per la compatibilità con la versione online di questa funzione. È meglio usare i valori "" o NULL nel tester. Il valore predefinito "" significa qualsiasi simbolo.
op
- Tipo di operazione commerciale, tipo di ordine pendente. È possibile uno dei cinque valori: -1, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT o OP_SELLSTOP. Il valore predefinito di -1 significa qualsiasi ordine.

mn - MagicNumber, numero di identificazione di un ordine in sospeso. Il valore predefinito -1 significa qualsiasi 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);
          }
        }
      }
    }
  }
}
 

Funzione DeleteOrders(). Versione online.


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

Funzione ExistOrdersByLot().

Restituisce un flag per l'esistenza di un ordine con la dimensione del lotto specificata. True - l'ordine esiste (impostato), False - l'ordine non esiste (non impostato). Puoi limitare la lista degli ordini da controllare usando i parametri della funzione:

  • sy - Nome dello strumento. Se imposti questo parametro, la funzione controllerà solo gli ordini dello strumento specificato. NULL significa strumento corrente, e "" (di default) significa qualsiasi strumento.
  • op - Operazione, tipo di ordine in sospeso. Valori validi: OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP o -1. Il valore predefinito di -1 indica qualsiasi tipo di ordine.
  • mn - Identificatore dell'ordine (MagicNumber). Il valore predefinito di -1 significa qualsiasi MagicNumber.
  • lo - Dimensione di un lotto con una precisione di due cifre decimali. Il valore predefinito è 0 - qualsiasi dimensione del lotto.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}
 

Funzione GetLotLastOrder().

Restituisce la dimensione del lotto dell'ultimo ordine piazzato o -1. Puoi limitare la lista degli ordini da controllare usando i parametri della funzione:

  • sy - Nome dello strumento. Se questo parametro è dato, la funzione controllerà solo gli ordini dello strumento specificato. NULL significa lo strumento corrente, e "" (di default) significa qualsiasi strumento.
  • op - Operazione, tipo di ordine in sospeso. Valori validi: OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP o -1. Il valore predefinito di -1 indica qualsiasi ordine.
  • mn - Identificatore dell'ordine (MagicNumber). Il valore predefinito -1 significa qualsiasi 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);
}
 

Funzione GetOrderOpenPrice().

Restituisce il prezzo di impostazione dell'ultimo ordine aperto o 0. Puoi limitare la lista degli ordini da controllare con i parametri della funzione:

  • sy - Nome dello strumento. Se questo parametro è dato, la funzione controllerà solo gli ordini dello strumento specificato. NULL significa strumento corrente, e "" (di default) significa qualsiasi strumento.
  • op - Operazione, tipo di ordine in sospeso. Valori validi: OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP o -1. Il valore predefinito di -1 indica qualsiasi ordine.
  • mn - Identificatore dell'ordine (MagicNumber). Il valore predefinito -1 significa qualsiasi 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 funzione IndexByTicket().

Restituisce l'indice (numero ordinale nella lista generale degli ordini impostati o delle posizioni aperte) dell'ordine o della posizione sul ticket. Se IndexByTicket() non trova un ordine o una posizione con il ticket richiesto, restituisce -1. Possiamo limitare la lista di ordini o posizioni da controllare usando i parametri della funzione:

  • sy - Nome dello strumento. Se si specifica questo parametro, la funzione controllerà solo gli ordini e le posizioni dello strumento specificato. NULL significa lo strumento corrente, e "" (di default) significa qualsiasi strumento.
  • op - Operazione di trading, tipo di ordine pendente o posizione. Valori validi: OP_BUY, OP_BUYLIMIT, OP_BUYSTOP, OP_SELL, OP_SELLLIMIT, OP_SELLSTOP o -1. Il valore predefinito di -1 indica qualsiasi ordine o posizione.
  • mn - Identificatore di un ordine o posizione (MagicNumber). Il valore predefinito -1 significa qualsiasi 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);
}
Motivazione: