Caratteristiche utili da KimIV - pagina 27

 
SamMan писал (а) >>

Esattamente. E più il codice è piccolo, più è facile da capire. Non sopporto i font "spalmati" su 2-3 schermi. Una funzione dovrebbe essere tutta sullo schermo, senza sfogliare. Ecco perché sono a favore della compattezza.


Non li sopporto nemmeno io :) . La mia funzione si adatta allo schermo.


E va bene che tu abbia un sacco di continuum opzionali che, tra l'altro, allontanano di nuovo l'attenzione del lettore?


Bene, ridurre la complessità delle funzioni è una delle condizioni di base per scrivere del buon codice.

Se ti piace così, hai 2 opzioni:

1. Siete abituati a un cattivo stile di codice e lo usate voi stessi, non ne può venire niente di buono, quando dovrete scrivere un codice veramente fondamentale capirete la mia giustezza. Almeno quando si passa a MQL5.

2 E penso che questo riguardi solo te - tu usi questo codice, perché non sei in grado di scrivere il tuo codice correttamente, come programmatore non rappresenti nulla, e quindi non hai il diritto di giudicare e discutere il mio post all'autore di questo thread. Tanto più che mi rivolgevo all'autore.

Mi scuso per il mio post all'autore, ho scritto invano, dato che non userò comunque questo codice, dato che ho la mia libc con tutto ciò di cui ho bisogno. E poiché per così tanto tempo non c'è stato un feedback inequivocabilmente negativo, significa che il codice dell'autore soddisfa. Non potevo sopportarlo :), mi dispiace.

 
TheXpert писал (а) >>

Mi scuso per il mio post all'autore, ho scritto invano, dato che non userò comunque questo codice, dato che ho la mia libc con tutto ciò di cui ho bisogno. E poiché per così tanto tempo non c'è stato un feedback chiaramente negativo, significa che il codice dell'autore soddisfa. Proprio non potevo sopportarlo :), mi dispiace.

Mi scuso per aver scritto, ma non potevo sopportarlo. Sarai invano se lascerai il ramo a causa dell'opinione di qualcuno. Soprattutto l'autore ha detto grazie.

Penso che sarebbe bello se uno stesso compito può essere risolto da 2 (o più) codici. Potete condividere i vostri codici che risolvono lo stesso compito, se pensate che siano migliori.

Spesso, vedendo come qualcun altro ha codificato la stessa cosa, ma in uno stile diverso. Si può imparare molto.

P.S. Igor, grazie per il tuo lavoro.

 
Infatti, Andrei, non dovresti prenderla così. Mantenere la semplicità! E non aver paura di spingermi giù. Non mi dispiacerebbe se tu contribuissi al mio lavoro o pubblicassi il tuo.
 

La funzione ArraySearchDouble().

Questa funzione cerca un elemento dell'array usando un valore di tipo doppio e restituisce l'indice dell'elemento trovato o -1. La funzione trova solo un elemento e ferma la ricerca se il risultato è positivo.

  • m - L'array in cui si cerca l'elemento.
  • e - Valore di tipo doppio, che si trova nella matrice m.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchDouble(double& m[], double e) {
  for (int i=0; i<ArraySize(m); i++) {
    if (m[i]==e) return(i);
  }
  return(-1);
}
ZS. In allegato c'è uno script per testare la funzione ArraySearchDouble().
 

La funzione ArraySearchInt().

Questa funzione cerca un elemento dell'array per un valore di tipo int e restituisce l'indice dell'elemento trovato o -1. La funzione trova solo un elemento e ferma la ricerca se il risultato è positivo.

  • m - L'array di elementi di tipo int, in cui viene eseguita la ricerca.
  • e - Valore di tipo int, che si trova nell'array m.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchInt(int& m[], int e) {
  for (int i=0; i<ArraySize(m); i++) {
    if (m[i]==e) return(i);
  }
  return(-1);
}
ZS. In allegato c'è uno script per testare la funzione ArraySearchInt().
 

La funzione ArraySearchString().

Questa funzione cerca un elemento della matrice per un valore di tipo stringa e restituisce l'indice dell'elemento trovato o -1. La funzione trova solo un elemento e ferma la ricerca se il risultato è positivo.

  • m - L'array di elementi di tipo stringa, in cui viene eseguita la ricerca.
  • e - Il valore di tipo stringa, che si trova nell'array m.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 04.03.2008                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchString(string& m[], string e) {
  for (int i=0; i<ArraySize(m); i++) {
    if (m[i]==e) return(i);
  }
  return(-1);
}
ZS. In allegato c'è uno script per testare la funzione ArraySearchString().
 
KimIV писал (а) >>
Infatti, Andrey, non avresti dovuto prenderla così. >> Sii semplice! E non aver paura di spingermi giù. Non mi dispiacerebbe se tu dessi un contributo e correggessi qualcosa di mio o pubblicassi il tuo.

OK, ho una visione leggermente diversa delle cose, come ho già scritto, considero l'universalità globale un male, cioè il codice dovrebbe essere almeno un po' personalizzato per quello che si sta scrivendo, al fine di ottenere la massima semplicità e comodità. Ecco perché non vedo alcun senso nel pubblicare il mio codice qui.


Posso agire come un revisore del vostro codice, se non vi dispiace, naturalmente, e offrire la vostra versione di esso o semplicemente dare commenti.



SZZH: Grazie per il vostro sostegno, ad essere onesti non mi aspettavo questo tipo di feedback da voi.

 
KimIV писал (а) >>

La funzione ArraySearchDouble().

Questa funzione cerca un elemento dell'array usando un valore di tipo doppio e restituisce l'indice dell'elemento trovato o -1. La funzione trova solo un elemento e ferma la ricerca se il risultato è positivo.

  • m - L'array in cui si cerca l'elemento.
  • e - Il valore di tipo doppio, che si trova nella matrice m.
ZS. In allegato c'è uno script per testare la funzione ArraySearchDouble().

Il doppio è una cosa complicata, e il vostro codice potrebbe funzionare in modo errato in alcune situazioni.

Ecco un possibile workaround

int ArraySearchDouble(double& array[], double value, double precision = 0.00000000001) 
{ // на то, что я перемещаю скобки не обращайте внимания, мне так читабельней
  for (int i = 0; i < ArraySize(array); i++) 
  {
    if (array[i] > value - precision && array[i] < value + precision) return(i);
  }
  return(-1);
}

E se volete fare la stessa cosa ma dalla fine.

int ArrayRevertSearchDouble(double& array[], double value, double precision = 0.00000000001) 
{ 
  for (int i = ArraySize(array) - 1; i >= 0; i--) 
  {
    if (array[i] > value - precision && array[i] < value + precision) return(i);
  }
  return(-1);
}
 
TheXpert писал (а)
Posso agire come un revisore del vostro codice, se non vi dispiace, naturalmente, e offrire la mia versione di esso o semplicemente dare commenti.
Grande! È un bene per tutti avere una visione versatile delle cose. Io, prima di tutto :-)
 

Stavo scrivendo un EA l'altro giorno, in cui avevo bisogno di cambiare la dimensione del lotto a seconda del risultato di un trade precedente e la dimensione del lotto dello stesso trade. E si è scoperto che non avevo una funzione che restituisse la dimensione del lotto dell'ultima posizione chiusa. Ecco una correzione...

La funzione GetLotLastClosePos().

Questa funzione restituisce la dimensione del lotto dell'ultima posizione chiusa, o -1. La selezione delle posizioni da prendere in considerazione è definita da parametri esterni:

  • sy - Nome dello strumento di mercato. Se questo parametro è impostato, la funzione considererà solo le posizioni dello strumento specificato. Il valore predefinito "" significa qualsiasi strumento di mercato. Il valore nullo indica 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.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.06.2008                                                     |
//|  Описание : Возвращает размер лота последней закрытой позиции или -1       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetLotLastClosePos(string sy="", int op=-1, int mn=-1) {
  datetime o;
  double   l=-1;
  int      i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (o<OrderCloseTime()) {
                o=OrderCloseTime();
                l=OrderLots();
              }
            }
          }
        }
      }
    }
  }
  return(l);
}
ZS. In allegato c'è uno script per testare la funzione GetLastClosePos().