Solo "Caratteristiche utili di KimIV". - pagina 9

 

La funzione StringLower().

Questa funzione converte una stringa in minuscolo. Tutti i caratteri SIGNIFICATIVI (grandi) diventano minuscoli (piccoli). La funzione StringLower() accetta solo un parametro obbligatorio, che è la stringa in arrivo.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает строку в нижнем регистре                            |
//+----------------------------------------------------------------------------+
string StringLower(string s) {
  int c, i, k=StringLen(s), n;
  for (i=0; i<k; i++) {
    n=0;
    c=StringGetChar(s, i);
    if (c>64 && c<91) n=c+32;     // A-Z -> a-z
    if (c>191 && c<224) n=c+32;   // А-Я -> а-я
    if (c==168) n=184;            //  Ё  ->  ё
    if (n>0) s=StringSetChar(s, i, n);
  }
  return(s);
}
 

La funzione StringUpper().

Questa funzione converte la stringa in maiuscolo. Tutti i caratteri minuscoli (piccoli) diventano maiuscoli (grandi). La funzione StringUpper() accetta solo un parametro obbligatorio, che è la stringa in ingresso.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает строку в ВЕРХНЕМ регистре                           |
//+----------------------------------------------------------------------------+
string StringUpper(string s) {
  int c, i, k=StringLen(s), n;
  for (i=0; i<k; i++) {
    n=0;
    c=StringGetChar(s, i);
    if (c>96 && c<123) n=c-32;    // a-z -> A-Z
    if (c>223 && c<256) n=c-32;   // а-я -> А-Я
    if (c==184) n=168;            //  ё  ->  Ё
    if (n>0) s=StringSetChar(s, i, n);
  }
  return(s);
}


La funzione StringToArrayDouble().

Questa funzione divide la stringa nei suoi numeri reali componenti, e ogni numero viene aggiunto all'array come elemento separato. Quanti numeri reali appaiono nella stringa, lo stesso numero di elementi sarà aggiunto all'array. Un punto e virgola è riconosciuto come separatore. La funzione StringToArrayDouble() restituisce il numero di elementi dell'array e prende i seguenti parametri obbligatori:

  • st - Una stringa di numeri reali separati da un punto e virgola.
  • ad - Un array di numeri reali.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 10.10.2008                                                     |
//|  Описание : Перенос вещественных чисел из строки в массив                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    st - строка вещественных чисел через точку с запятой                    |
//|    ad - массив вещественных чисел                                          |
//+----------------------------------------------------------------------------+
//|  Возврат:                                                                  |
//|    Количество элементов в массиве                                          |
//+----------------------------------------------------------------------------+
int StringToArrayDouble(string st, double& ad[]) {
  int    i=0, np;
  string stp;

  ArrayResize(ad, 0);
  while (StringLen(st)>0) {
    np=StringFind(st, ";");
    if (np<0) {
      stp=st;
      st="";
    } else {
      stp=StringSubstr(st, 0, np);
      st=StringSubstr(st, np+1);
    }
    i++;
    ArrayResize(ad, i);
    ad[i-1]=StrToDouble(stp);
  }
  return(ArraySize(ad));
}
 

La funzione StringToArrayInt().

Questa funzione divide la stringa nei suoi componenti interi, e ogni numero viene aggiunto all'array come elemento separato. Quanti interi ci sono nella stringa, lo stesso numero di elementi sarà aggiunto all'array. Una virgola è riconosciuta come separatore. La funzione StringToArrayDouble() restituisce il numero di elementi dell'array e prende i seguenti parametri obbligatori:

  • st - Stringa separata da virgola di valori interi.
  • ai - Matrice di interi.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Перенос целочисленных значений из строки в массив              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    st - строка целочисленных значений через запятую                        |
//|    ai - целочисленный массив                                               |
//+----------------------------------------------------------------------------+
//|  Возврат:                                                                  |
//|    Количество элементов в массиве                                          |
//+----------------------------------------------------------------------------+
int StringToArrayInt(string st, int& ai[]) {
  int    i=0, np;
  string stp;

  ArrayResize(ai, 0);
  while (StringLen(st)>0) {
    np=StringFind(st, ",");
    if (np<0) {
      stp=st;
      st="";
    } else {
      stp=StringSubstr(st, 0, np);
      st=StringSubstr(st, np+1);
    }
    i++;
    ArrayResize(ai, i);
    ai[i-1]=StrToInteger(stp);
  }
  return(ArraySize(ai));
}

La funzione StrSplit().

Questa funzione divide una stringa nella sua sottostringa, in modo che ogni sottostringa diventi un elemento separato dell'array. Il separatore è specificato da un parametro e può essere arbitrario. La funzione StrSplit() restituisce il numero di elementi dell'array e accetta i seguenti parametri:

  • st - Stringa con separatori.
  • as - L'array di elementi di tipo stringa.
  • de - Separatore. Parametro opzionale. Valore predefinito - "," (virgola).
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 23.06.2008                                                     |
//|  Описание : Разбиение строки на массив элементов                           |
//+----------------------------------------------------------------------------+
//|  Возврат:                                                                  |
//|    Количество элементов в массиве                                          |
//|  Параметры:                                                                |
//|    st - строка с разделителями                                             |
//|    as - строковый массив                                                   |
//|    de - разделитель                                                        |
//+----------------------------------------------------------------------------+
int StrSplit(string st, string& as[], string de=",") { 
  int    i=0, np;
  string stp;

  ArrayResize(as, 0);
  while (StringLen(st)>0) {
    np=StringFind(st, ",");
    if (np<0) {
      stp=st;
      st="";
    } else {
      stp=StringSubstr(st, 0, np);
      st=StringSubstr(st, np+1);
    }
    i++;
    ArrayResize(as, i);
    as[i-1]=stp;
  }
  return(ArraySize(as));
}
 

La funzione StrTran().

Questa funzione sostituisce una sottostringa. Tutte le sue occorrenze vengono sostituite. Per esempio, potete sostituire tutte le virgole con punti o viceversa in un colpo solo. La funzione StrSplit() restituisce la stringa risultante e accetta i seguenti parametri obbligatori:

  • str - La stringa in cui la sottostringa strFrom viene sostituita.
  • strFrom - sottostringa sostituita. Se la sottostringa strFrom si trova nella stringa str, sarà sostituita dalla sottostringa strTo.
  • strTo - Sottostringa sostituita.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  описание : Замена подстроки                                               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    str     - текстовая строка, в которой производится замена               |
//|    strFrom - заменяемая подстрока                                          |
//|    strTo   - заменяющая подстрока                                          |
//+----------------------------------------------------------------------------+
string StrTran(string str, string strFrom, string strTo) {
  int    n;
  string strOut="", strTemp;

  for (n=0; n<StringLen(str); n++) {
    strTemp=StringSubstr(str, n, StringLen(strFrom));
    if (strTemp==strFrom) {
      strOut=StringConcatenate(strOut, strTo);
      n=n+StringLen(strFrom)-1;
    } else strOut=StringConcatenate(strOut, StringSubstr(str, n, 1));
  }
  return(strOut);
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 23.04.2009                                                     |
//|  Описание : Перенос уровня стопа в безубыток                               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
void MovingInWL(string sy="", int op=-1, int mn=-1) {
  double po, pp;
  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) {
          po=MarketInfo(OrderSymbol(), MODE_POINT);
          if (OrderType()==OP_BUY) {
            if (OrderStopLoss()-OrderOpenPrice()<LevelWLoss*po) {
              pp=MarketInfo(OrderSymbol(), MODE_BID);
              if (pp-OrderOpenPrice()>LevelProfit*po) {
                ModifyOrder(-1, OrderOpenPrice()+LevelWLoss*po, -1);
              }
            }
          }
          if (OrderType()==OP_SELL) {
            if (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<LevelWLoss*po) {
              pp=MarketInfo(OrderSymbol(), MODE_ASK);
              if (OrderOpenPrice()-pp>LevelProfit*po) {
                ModifyOrder(-1, OrderOpenPrice()-LevelWLoss*po, -1);
              }
            }
          }
        }
      }
    }
  }
}
 

Funzione isTradeTimeString().

Questa funzione restituisce la bandiera che ti permette di commerciare in base al tempo. In realtà, controlla se l'ora corrente del server di commercio è all'interno di un certo intervallo di tempo. Se è dentro, la funzione isTradeTimeString() restituisce true, altrimenti restituisce false. La caratteristica di questa funzione è la possibilità di specificare l'intervallo di tempo sia dentro che fuori un giorno. Questo sarà mostrato in dettaglio negli esempi di utilizzo. La funzione isTradeTimeString() accetta i seguenti parametri opzionali:

  • TimeBegin - Stringa nel formato "HH:MM", imposta l'ora di inizio della negoziazione. Il valore predefinito è "00:00".
  • TimeEnd - Stringa nel formato "HH:MM", specifica l'ora di fine della negoziazione. Il valore predefinito è "00:00".
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.04.2009                                                     |
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    TimeBegin - время начала торговли         (ЧЧ:ММ)                       |
//|    TimeEnd   - время окончания торговли      (ЧЧ:ММ)                       |
//+----------------------------------------------------------------------------+
bool isTradeTimeString(string TimeBegin="00:00", string TimeEnd="00:00") {
  datetime dtBegin, dtEnd;        // Время начала и окончания работы
  int      hc, he;                // Часы текущего времени и окончания работы

  dtBegin=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeBegin);
  dtEnd  =StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeEnd);
  hc     =TimeHour(TimeCurrent());
  he     =TimeHour(dtEnd);
  if (dtBegin>=dtEnd) {
    if (hc>=he) dtEnd+=24*60*60; else dtBegin-=24*60*60;
  }

  if (TimeCurrent()>=dtBegin && TimeCurrent()<=dtEnd) return(True);
  else return(False);
}

Funzione isTradeTimeInt().

Questa funzione restituisce il flag che permette di negoziare in base al tempo. Il valore restituito è vero o falso. La funzione isTradeTimeInt() è simile alla funzione isTradeTimeString() per il principio del riconoscimento dell'intervallo di tempo, cioè l'ora di inizio della compravendita può essere sia più grande (intervallo di tempo in un giorno) che più piccola (intervallo di tempo in giorni diversi). La funzione isTradeTimeInt() accetta i seguenti parametri opzionali:

  • hb - Numero, specifica le ore di inizio del commercio. Il valore predefinito è 0.
  • mb - Un numero, specifica i minuti dell'ora di inizio della negoziazione. Valore predefinito - 0.
  • he - Un numero per specificare le ore di fine del commercio. Il valore predefinito - 0.
  • me - Un numero per specificare i minuti dell'ora di fine della negoziazione. Valore predefinito - 0.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 30.04.2009                                                     |
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    hb - часы времени начала торговли                                       |
//|    mb - минуты времени начала торговли                                     |
//|    he - часы времени окончания торговли                                    |
//|    me - минуты времени окончания торговли                                  |
//+----------------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0, int mb=0, int he=0, int me=0) {
  datetime db, de;           // Время начала и окончания работы
  int      hc;               // Часы текущего времени торгового сервера

  db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+hb+":"+mb);
  de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+he+":"+me);
  hc=TimeHour(TimeCurrent());
  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  }

  if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);
}
 
satop:
Il file contiene tutto in un unico archivio.
File:
kimiv.zip  187 kb
 
Igor Kim ha pubblicato le sue funzioni sia qui che sul suo sito web come "collezioni di funzioni", in un unico file. Non era possibile utilizzare queste collezioni come librerie di plug-in in questa forma. Tuttavia, è molto conveniente, soprattutto quando si sviluppano gli EA, utilizzare le librerie per semplificare e ridurre il codice di un EA. Inoltre, questo rimuove tutte le domande sull'uso corretto delle operazioni di trading, e ti permette di concentrarti sulla strategia, il che è particolarmente prezioso per i trader con capacità di programmazione principianti.
I file allegati contengono le stesse collezioni di funzioni, progettate sotto forma di librerie. Le librerie sono semplicemente messe nella directory .../experts/include, non hanno bisogno di essere compilate, un esempio del loro collegamento è dato qui sotto.
Dopo la loro connessione, è sufficiente chiamare la funzione richiesta dal codice EA.
#include <b-Positions_include.mqh>       // Библиотека функций для работы с позициями 
#include <b-KimIV_include.mqh>           // Библиотека дополнительных функций
#include <b-Orders_include.mqh>          // Библиотека функций для работы с ордерами
 

Caro, dove nella linea.

if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
появляется "JPY"??????

satop:

La funzione isCloseLastPosByStop().

Questa funzione restituisce una bandiera per chiudere l'ultima posizione per stop. La bandiera è su - Vero - ha attivato StopLoss. Flag abbassato - Falso - la posizione è stata chiusa per un altro motivo. Una selezione più accurata delle posizioni da prendere in considerazione è impostata utilizzando parametri esterni:

  • sy - Nome dello strumento di mercato. Se impostate questo parametro, la funzione considererà solo le posizioni dello strumento specificato. Il valore predefinito "" significa qualsiasi strumento di mercato. NULL significa lo strumento corrente.
  • op - operazione commerciale, tipo di posizione. Valori validi: OP_BUY, OP_SELL o -1. Il valore predefinito -1 significa qualsiasi posizione.
  • mn - Identificatore di posizione, MagicNumber. Il valore predefinito -1 significa qualsiasi identificatore.

 
Capisco che le funzioni sono state scritte in un momento in cui non c'erano ancora le 5 cifre. Lo JPY è servito come una sorta di esempio di confronto.
 
hoz:
Capisco che le funzioni sono state scritte in un momento in cui non c'erano ancora le 5 cifre. Lo JPY è servito come una sorta di esempio di confronto.

Non è difficile aumentare di uno!
Motivazione: