La decelerazione lineare è un errore di programmazione o una caratteristica di MT4? - pagina 4

 

la costruzione qui sotto vale da sola la pena.


    bool Ok=true;
     for(i=OrdersTotal()-1;i>=0;i--){//проверяем наличие ордеров
      if(OrderSelect(i,SELECT_BY_POS)){
       if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic){
        if(OrderType()==OP_SELLSTOP||OrderType()==OP_SELLLIMIT){
         Ok=false;
        }}}}

un po' di più

    bool Ok=true;
    for(i=OrdersTotal()-1;i>=0;i--){//проверяем наличие ордеров
      if(OrderSelect(i,SELECT_BY_POS)){
        if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic){
          if(OrderType()==OP_SELLSTOP||OrderType()==OP_SELLLIMIT){
            Ok=false;
          }
        }
      }
    }

e si può già vedere cosa viene eseguito in quale sequenza. Questa è solo la formattazione. Ma si può anche scomporre il codice in operazioni logicamente coerenti e separarle in funzioni separate. In questo modo l'algoritmo principale viene liberato da mucchi di codice confuso.

 
micle:

Il problema è la duplicazione del codice e il numero eccessivo di dichiarazioni condizionali. In effetti, il codice consiste del 99% di linee che includono in qualche modo l'operatore condizionale If; sono sicuro che se si guarda dentro, il numero di confronti potrebbe essere ridotto di 10 volte. Non solo questo rallenta l'esecuzione, ma questo codice è anche difficile da leggere. Una persona che fa aggiunte ha almeno 2 compiti principali:

1 - non romperlo

2 - Aggiungere le funzionalità necessarie.

Il codice illeggibile causa comunque un'ulteriore duplicazione di tutti i tipi di controlli e confronti - e anche questo è una spesa aggiuntiva. Guardando il codice, mi ricordo personalmente circa 25 anni fa, quando ho appena iniziato a programmare, e l'ho imparato dal manuale del PC Atari 800XL senza alcun insegnante, solo perché era interessante.

Certo, è interessante, di che "se" stiamo parlando, c'è probabilmente il mio TOR - dove scrivo "se così, allora così", e il programmatore lo interpreta nel codice, e c'è "se" legato al lavoro diretto con gli ordini, e ci sono un sacco di operazioni con gli ordini...

Naturalmente, ho pensato che si trattasse di una specie di ciclo, la cui esecuzione porta a controlli multipli delle condizioni d'ordine. E si scopre che la situazione può essere corretta solo riscrivendo il codice da zero?

 
micle:

la costruzione qui sotto vale da sola la pena.

un po' di più

e sappiamo già cosa viene eseguito in quale sequenza. Questa è solo una formattazione. Ma si può anche scomporre il codice in operazioni logicamente coerenti e separarle in funzioni separate. In questo modo, si libererà l'algoritmo principale da mucchi di codice affastellato.

Ma non influisce in alcun modo sulle prestazioni?

 
micle:

Problemi con il codice duplicato

La duplicazione non c'entra niente e non ha niente a che vedere con i "se". Il vero rallentamento viene dal lavoro con i mandati.
 
micle:

la costruzione qui sotto vale da sola la pena.


un po' di più

e sappiamo già cosa viene eseguito in quale sequenza. Questa è solo una formattazione. Ma si può anche scomporre il codice in operazioni logicamente coerenti e separarle in funzioni separate. In questo modo l'algoritmo principale viene liberato da mucchi di codice confuso.

Argomenti molto forti, il tuo codice, dove posso vedere un programmatore esperto?
 

rev 1.1

Per impostare uno stop loss e il filtraggio degli ordini pendenti utilizziamo due opzioni di utilizzo di una MA speculare.
maMirror - calcolato utilizzando la funzione iMA standard, funziona una volta per barra, i dati sono presi dai prezzi di apertura della barra
Algoritmo di calcolo:

Per vendere:
punto di calcolo iniziale maMirror=iMA+pipsXHmaM(o/b)
punto di calcolo successivo maMirror=maMirror(1)-(iMA(0)+pipsXHmaM(o/b)-iMA(1)+pipsXHmaM(o/b))
il calcolo è completato dopo il punto finale del calcolo.

Per l'acquisto:
punto di calcolo iniziale maMirror=iMA-pipsXHmaL
punto di calcolo successivo maMirror=maMirror(1)-(iMA(0)-pipsXLmaM-iMA(1)-pipsXLmaM)
il calcolo viene terminato dopo il punto finale del calcolo.


Per semplificare il ToR è necessario mettere due blocchi di calcolo, che saranno indipendenti l'uno dall'altro nel funzionamento e nelle variabili, e possono essere impostati dall'utente
maMBlock=0 - non usare blocchi (viene usato lo stop loss standard)
maMBlock=1 - usa solo il blocco #1.
maMBlock=2 - usa solo il blocco #2 (viene usato lo stop loss standard)
maMBlock=3 - usa entrambi i blocchi

Blocco #1
Calcolo dello stop loss. Lo stop loss viene ricalcolato e l'ordine viene aggiornato ad ogni barra dal valore di maMirror.
1 La variabile StartPoint viene utilizzata per determinare il punto di partenza per il calcolo, se StartPoint=1 (il calcolo viene eseguito dopo aver toccato maT), se StartPoint=2 (il calcolo viene eseguito dopo l'apertura dell'ordine).
1.1 Se StartPointO=1 allora il calcolo è completato dopo aver toccato maT;
1.2.Se StartPointO=2, il regolamento termina dopo la chiusura dell'ordine;
1.3 Se lo stop loss non può essere impostato da maMirror, l'ordine viene chiuso.
1.4. Levl_Zerro=0 (non usato), Levl_Zerro!=0 (lo stop loss è aggiornato al valore massimo specificato contando dal prezzo di apertura, un valore negativo significa che lo stop loss è convertito in un valore positivo)

Blocco 2
Calcolo del filtraggio per gli ordini in sospeso
0.1 Per comprare un ordine, l'ordine viene piazzato se maMirror>prezzo di apertura dell'ordine pendente
0.2 Per vendere, gli ordini sono piazzati se maMirror<prezzo aperto dell'ordine pendente
1 La variabile StartPoint viene utilizzata per determinare il punto di partenza del calcolo se StartPoint=1 (il calcolo viene eseguito dopo che il maT è stato toccato), se StartPoint=2 (il calcolo viene eseguito dopo l'apertura dell'ordine).
1.1 Se StartPointB=1, il calcolo viene completato dopo aver toccato maT;
1.2 Se StartPointB=2 (il regolamento termina dopo la chiusura dell'ordine);
2. Se maMirrorDell=0 (non usato) maMirrorDell=1 (tutti gli ordini aperti sono cancellati se le condizioni dal punto 0 non corrispondono)

Variabili utente
maMirrorO (impostazioni di iMA)
maMirrorB (impostazioni iMA)
StartPointO
StartPointB
pipsXHmaMo
pipsXLmaMo
pipsXHmaMb
pipsXLmaMb
maMBlo

maMirrorDell

Aiuto stima incarico, cliente vuole un nuovo lavoro, non so quanto stimare) Come io non sono un programmatore, sono un ingegnere dell'accademia aerospaziale)

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
Il primo e forse principale problema è che il codice è illeggibile e non strutturato. Si può avere un ToR abbastanza chiaro. Se si capisce il ToR e si scrive il codice nella giusta direzione, si ottiene (di regola) un guadagno significativo nella velocità di esecuzione, ma costa anche altri soldi.
 
-Aleks-:

Influisce in qualche modo sulle prestazioni?

In questo particolare esempio, non ha alcun effetto. Non c'è il desiderio di occuparsi di tale formattazione nell'intero script EA, né di riformattarlo completamente
 
zfs:
Argomenti molto forti, il tuo codice, dove posso vedere un programmatore esperto?
Il mio codice non è di dominio pubblico. Gli sviluppi commerciali lavorano su e intorno a server web altamente caricati. In particolare, il mio codice calcola gli ingorghi sulle strade di "diverse" città come parte del progetto DorogaTV
 
TheXpert:
La duplicazione non c'entra niente, e nemmeno i se. Il vero rallentamento è dato dal lavoro con gli ordini.

Lavorare con gli ordini nel codice TK, o forse TK stesso, o MT4 che lavora con gli ordini in generale?