per esempio il codice SQL di una query complessa è più difficile da leggere di alcune query SQL successive
e per quanto strano possa sembrare, la performance di tre query semplici è spesso migliore di quella di una query complessa (apparentemente ottimizzata)
La logica di coloro che scrivono complesse query SQL... soffre... solo perché...
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 12.10.2007 |//+----------------------------------------------------------------------------+//| Описание : Возвращает интервал установки сигнальных указателей |//| Параметры: |//| pr - процент относительно ценового размера окна |//+----------------------------------------------------------------------------+int GetArrowInterval(int pr=7) {
if (pr<=0) pr=7;
return((WindowPriceMax()-WindowPriceMin())/100*pr/Point);
}
A volte è necessario ordinare i dati in MQL4 senza toccare i dati stessi. Non ci sono puntatori in MQL4, e non ci sono nemmeno strutture.
Ecco un esempio di uno script che ordina i dati secondo diversi parametri attraverso l'emulazione di puntatori. Forse qualcuno troverà utile questo approccio e la funzione di ordinamento.
#define AMOUNT 5string Symbols[AMOUNT] = {"EURUSD", "GBPUSD", "USDJPY", "USDCHF", "EURGBP"};
int Profit[AMOUNT] = {50, -130, 90, 2000, 0};
int Pos[AMOUNT] = {3, 0, 6, 7, 1};
int SL[AMOUNT] = {20, 60, 10, 80, 100};
void SortArrayINT( int Array[], int& Positions[], bool Increase = TRUE )
{
int i, j, Tmp, Size = ArraySize(Array);
if (ArraySize(Positions) != Size)
ArrayResize(Positions, Size);
for (i = 0; i < Size; i++)
Positions[i] = i;
if (Increase)
{
for (i = 0; i < Size - 1; i++)
for (j = i + 1; j < Size; j++)
if (Array[Positions[i]] > Array[Positions[j]])
{
Tmp = Positions[j];
Positions[j] = Positions[i];
Positions[i] = Tmp;
}
}
elsefor (i = 0; i < Size - 1; i++)
for (j = i + 1; j < Size; j++)
if (Array[Positions[i]] < Array[Positions[j]])
{
Tmp = Positions[j];
Positions[j] = Positions[i];
Positions[i] = Tmp;
}
return;
}
void PrintInfo( string SortName, int Array[] )
{
int Positions[];
SortArrayINT(Array, Positions);
Print("Sort by " + SortName);
Print("SYMBOL PROFIT POS SL");
for (int i = 0; i < AMOUNT; i++)
Print(Symbols[Positions[i]] + " " + Profit[Positions[i]] + " " +
Pos[Positions[i]] + " " + SL[Positions[i]]);
Print("");
return;
}
void start()
{
PrintInfo("PROFIT", Profit); // распечатали данные, отсортированные по параметру Profit
PrintInfo("POS", Pos); // распечатали данные, отсортированные по параметру Pos
PrintInfo("SL", SL); // распечатали данные, отсортированные по параметру SLreturn;
}
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
Codice alternativo:
Codice alternativo:
se(indice>0 || indice>8) ritorna (-1);
Forse if(index < 0 || ...) ...; ?
La seconda versione del codice è davvero migliore... e più bella
--
È vero... quando è più difficile mantenere un codice ottimizzato per le dimensioni che uno sfocato.
cioè, scritto in modo più ampio è a volte più facile da mantenere...
--
In SQL è al contrario... ottimizzazione del codice
metterlo in una singola query fa addirittura male
quello che è interessante ...
per esempio il codice SQL di una query complessa è più difficile da leggere di alcune query SQL successive
e per quanto strano possa sembrare, la performance di tre query semplici è spesso migliore di quella di una query complessa (apparentemente ottimizzata)
La logica di coloro che scrivono complesse query SQL... soffre... solo perché...
1 - scomodo da mantenere
2-lento lavoro
--
non si applicano al tuo codice
questo è solo per esperienza...
Ecco qualcosa che mi è piaciuto molto... Preso dal thread di Igor Kim, il suo primo codice:
... e il suo secondo:
Com'è? Mi ha fatto piacere personalmente... :))Fatto un indicatore. Ma quando ZZCount>1 il terminale si blocca. Sembra che non ci siano errori.
Forse qualcuno troverà la causa?
Anche tu puoi essere un vecchio.
Grazie mille!
A volte è necessario ordinare i dati in MQL4 senza toccare i dati stessi. Non ci sono puntatori in MQL4, e non ci sono nemmeno strutture.
Ecco un esempio di uno script che ordina i dati secondo diversi parametri attraverso l'emulazione di puntatori. Forse qualcuno troverà utile questo approccio e la funzione di ordinamento.
Il risultato del lavoro: