Caratteristiche del linguaggio mql4, sottigliezze e tecniche - pagina 10

 
Alexey Viktorov:

Non riesco a capire quale sia la sorpresa. C'è un valore int del tipo di ordine nella documentazione.

OP_BUY

0

Compra

OP_VENDITA

1

Vendere

OP_BUYLIMIT

2

Ordine pendente BUY LIMIT

OP_SELLLIMIT

3

Ordine SELL LIMIT in sospeso

OP_BUYSTOP

4

Ordine BUY STOP in sospeso

OP_SELLSTOP

5

Ordine SELL STOP in sospeso


#define OP_BALANCE 6
#define OP_CREDIT 7

Quindi, con un array di 6 celle, si può a volte esagerare.

 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Voglio spostare il commento EA da sinistra a destra?

fxsaber, 2018.07.10 15:13

// Вывод комментария по примерным координатам
void CommentXY( string Str, const uint X = 0, const uint Y = 0 )
{
  string Shift = NULL;
  
  StringInit(Shift, X >> 2, ' ');
  
  if (StringLen(Shift))
  {
    StringReplace(Str, "\n", "\n" + Shift);
    
    Str = Shift + Str;
  }
  
  if (Y)
  {
    StringInit(Shift, Y / 14, '\n');
    
    Str = Shift + Str;
  }
  
  Comment(Str);  
}


Applicazione

void OnStart()
{
  const uint Height = 200;
  const uint Width = 200;
  
  while (!IsStopped())
  {
    CommentXY("Hello World!\nCommentXY", MathRand() * Width / SHORT_MAX, MathRand() * Height / SHORT_MAX); // Вывод комментария со сдвигом (ноль - левый-верхний угол).
    
    Sleep(200);
  }
}
 
fxsaber:

Avete una risposta ufficiale da parte degli sviluppatori? Finora posso solo vedere che avete cercato, pensato e deciso.

 
Artyom Trishkin:

Avete una risposta ufficiale da parte degli sviluppatori? Finora posso solo vedere che hai cercato, pensato e deciso da solo.

La mia conclusione sul livello di "autosufficienza" non è migliore di questa all'inizio di questo thread

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Peculiarità di mql4, consigli e trucchi

il tipo di ordine e il prezzo che gli corrisponde. È sufficiente scrivere OrderClosePrice()


Non c'è bisogno di soffrire di assurdità/paranoia.

 
fxsaber:

La mia conclusione sul livello di "autosufficienza" non è maggiore di questa all'inizio di questo thread


Non c'è bisogno di soffrire di assurdità/paranoia.

Devi esserti perso il momento in cui la maggior parte di coloro che non soffrono di "paranoia" hanno riscritto urgentemente i loro codici mentre gli EA sono crollati durante la notte. A causa della dipendenza dal triage. È passato molto tempo, ma la gente ha ancora dei ricordi. Quelli che hanno avuto problemi hanno iniziato a scrivere codici indipendenti dall'ordinamento. Non mi sono messo nei guai - l'ho solo letto sul forum e l'ho preso a cuore.

 
Artyom Trishkin:

Devi esserti perso il tempo in cui la maggior parte di coloro che non soffrono di "paranoia" stavano urgentemente riscrivendo i loro codici mentre gli EA crollavano durante la notte. A causa della dipendenza dal triage. È passato molto tempo, ma la gente ha ancora dei ricordi. Quelli che hanno avuto problemi hanno iniziato a scrivere codici indipendenti dall'ordinamento. Non mi sono messo nei guai - l'ho solo letto sul forum e l'ho preso a cuore.

Purtroppo, questo mito non trova alcun sostegno nella storia del forum. Inoltre, gli sviluppatori hanno costantemente chiarito la loro posizione che tali cambiamenti non possono essere fatti per principio.


Per esempio, puoi sentirti libero di scrivere

if (OrderType() <= OP_SELL)
  ReverseType = 1 - OrderType();


invece di

if ((OrderType() == OP_BUY) || (OrderType() == OP_SELL))
  ReverseType = (OrderType() == OP_BUY) ? OP_SELL : OP_BUY;


Potete sentirvi liberi di scrivere

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Peculiarità del linguaggio mql4, consigli e trucchi

fxsaber, 2018.04.03 16:15

double Lots[] = {0, 0, 0, 0, 0, 0, 0, 0};

for (int i = OrdersTotal() - 1; i >= 0; i--)
  if (OrderSelect(i, SELECT_BY_POS))
    Lots[OrderType()] += OrderLots();

ecc.

 
fxsaber:

Purtroppo, questo mito non trova alcun sostegno nella storia del forum. Inoltre, gli sviluppatori hanno costantemente chiarito la loro posizione che tali cambiamenti non possono essere fatti per principio.

Per esempio, puoi sentirti libero di scrivere come segue


Perché tutte queste pseudo-ottimizzazioni, le cui sfumature dobbiamo costantemente tenere a mente? È davvero così difficile scrivere codice che non dipenda da tali presupposti (significato di una costante nominata)? Qual è lo scopo di tali costrutti, a parte mostrare una certa conoscenza delle sfumature del compilatore, ma non che siano più facili da capire?

 
Ihor Herasko:

Perché tutte queste pseudo-ottimizzazioni, le cui sfumature devono essere costantemente tenute presenti? È davvero così difficile scrivere codice che non dipenda da tali presupposti (qual è il significato di questa o quella costante nominata)? Qual è lo scopo di tali costrutti comunque, a parte mostrare una certa conoscenza delle sfumature del compilatore, ma non è affatto che siano più facili da capire?

È strano, non ho alcun problema con la lettura di tale codice. Inoltre, la sua lettura e comprensione è più veloce di quella del codice "canonico".

Bene, l'esempio sopra con Lots[] è un tesoro che mostra come il codice può essere super-laconico e chiaro allo stesso tempo. E badate, non è affatto "canonico".

Probabilmente, se guardate il codice sorgente di molti lavori Market/Freelance, non vi imbatterete solo in brandelli di codice "canonico", ma incontrerete anche una terribile inefficienza di prestazioni e non il fattore meno importante - la comprensione del codice durante la lettura.


Lo stesso amore inestinguibile per il continuo è una totale mancanza di rispetto per le possibilità della lingua. Il codice su 100 linee è percepito molto meglio del codice su 200 linee che fa la stessa cosa. Questo è il motivo per cui la gente inizialmente si lamentava di MQL5. Guarda la riprogettazione del codice di MT4 in QB per MT5 - è molto difficile capire la logica di TC (il codice è molto più grande). È più facile andare sull'originale di MT4 e guardare il codice.

 
fxsaber:

Stranamente, non ho alcun problema a leggere tale codice. Inoltre, la sua lettura e comprensione è più veloce di quella del codice "canonico".

In molte aziende di software un codice del genere si farebbe pestare le dita. La prima cosa da fare sempre e ovunque è evitare le "letture inutili". Per esempio, se usate una condizione quando inserite una funzione:

if (<условие>)
{
}

si raccomanda di scrivere:

if (!<условие>)
   return;

Questo approccio fa saltare l'attaccamento delle condizioni.

Bene, l'esempio sopra con Lots[] è un vero tesoro, che mostra come il codice può essere sia super-laconico che totalmente comprensibile. E badate, non è affatto "canonico".

Ancora una volta è una spina nel fianco. Dopo tutto, nessuno ha controllato cosa restituisce la funzione OrderType(). O forse ha restituito -1 o 6? Questo è un esempio di come ci si possa appoggiare sulle proprietà del compilatore da cui si dovrebbe sempre stare alla larga. Tu stesso citi molti esempi di codice multipiattaforma. Allora perché se ne allontana in questo caso? Uscirà un nuovo compilatore MQ e questo codice non funzionerà più correttamente.

Lo stesso amore inestinguibile per il continuo è un totale disinteresse per le possibilità della lingua. Un codice di 100 righe è molto più comprensibile di un codice di 200 righe che fa la stessa cosa. Questo è il motivo per cui la gente inizialmente si lamentava di MQL5. Guarda la riprogettazione del codice di MT4 in QB per MT5 - è molto difficile capire la logica di TC (il codice è molte volte più grande). È più facile andare sull'originale di MT4 e guardare il codice.

Con continuare è la stessa situazione. Codice come:

if (OrderSelect(i, SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderMagicNumber() == m_nMagicNumber)
{
}

è più difficile da leggere che:

if (!OrderSelect(i, SELECT_BY_POS))
   continue;

if (OrderSymbol() != Symbol())
   continue;

if (OrderMagicNumber() != m_nMagicNumber)
   continue;
Eppure l'efficienza dell'esecuzione è la stessa in entrambi i casi.
Motivazione: