[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 19

 
Buona giornata a tutti. Ho bisogno di un robot che tenga traccia dei trade e crei un ordine pendente alla chiusura per takeprofit per sostituire un ordine chiuso con gli stessi parametri di un ordine chiuso. Si può implementare un tale robot? Non ne ho mai usato uno prima. Se ne hai uno da qualche parte, per favore dammi un link. Grazie in anticipo.
 
In precedenza, la chiusura del profitto era nella valuta del deposito ed era calcolata come
double Lot = 0.1;
int KoffProfit = 10;
ProfitValue = Lot * KoffProfit * MarketInfo(Symbol(), MODE_TICKVALUE); 
come convertire questa formula in punti?
 

Mi sto chiedendo come ottimizzare il codice per accelerare il gufo nel tester. Potete per favore dirmi come eseguire il ciclo più velocemente, in questo modo:

for (int i = OrdersTotal() - 1; i >= 0; i--) {
   if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))  continue; 
   if (OrderSymbol() != Symbol())                    continue;    
   if (OrderMagicNumber() != Magic)                  continue;
   
   // работаем с ордерами      
}

o come questo:

for (int i = OrdersTotal() - 1; i >= 0; i--) {
   if (OrderSelect(i, SELECT_BY_POS)) {
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
      // работаем с ордерами
      }
   }
}

e qualche altro consiglio per velocizzare l'EA?

 
T-G: In precedenza, la chiusura del profitto era nella valuta del deposito e contava così
come convertire questa formula in punti?
Questa formula non ha senso cambiare, è più facile trovare l'ordine necessario (OrderSelect()) e calcolare (OrderOpenPrice()-Bid)/Point ( o OrderOpenPrice()-Ask) e ottenere quanti pips l'ordine ha già
T-G:e ci sono altri consigli per velocizzare l'EA?

In mql4 c'è un controllo completo delle condizioni, cioè tutte le espressioni che sono tra parentesi if() saranno controllate fino alla fine, quindi a volte è ragionevole spezzare condizioni complesse in più condizioni:

if(a>b && c>d) può essere sostituito con if(a>b){ if (c>d)..... }

Quindi la prima variante del codice proposto da voi funzionerà un po' più velocemente, anche se dalla pratica - l'enumerazione degli ordini non carica molto il processore, le operazioni matematiche caricano molto il processore, ha senso cercare di aumentare le prestazioni del codice - non tutti i calcoli devono essere eseguiti ogni tick

 
IgorM:

In mql4 c'è un controllo completo delle condizioni, cioè tutte le espressioni che sono tra parentesi if() saranno controllate fino alla fine, quindi a volte è ragionevole spezzare condizioni complesse in più condizioni:

if(a>b && c>d) può essere sostituito con if(a>b){ if (c>d)..... }

Quindi la prima variante del codice che suggerisci funzionerà un po' più velocemente, anche se dalla pratica - la ricerca degli ordini non carica molto il processore, le operazioni matematiche lo caricano molto, ha senso cercare di aumentare le prestazioni del codice - non tutti i calcoli devono essere eseguiti ogni tick

Capisco, grazie:

Rez = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), iSlippage, Blue);
if (Rez) Comment("Закрыт ордер # ", OrderTicket(), "  прибыль ", OrderProfit());

o la stessa normalizzazione nelle condizioni:

if (NormalizeDouble(dOrderOpenPriceBuyStop - StepTral * Point, Digits) > NormalizeDouble(Ask + Step * Point, Digits))

rallenta molto l'esecuzione degli EA?

 
T-G: o la stessa normalizzazione delle condizioni:

rallenta molto l'esecuzione degli EA?

Provate a controllarlo voi stessi con GetTickCount(), create uno script ed eseguite la normalizzazione una volta 10 000 volte ed eseguitela due volte 10 000 volte, poi potrete valutare quanto sia utile per voi cercare sezioni di codice dove la normalizzazione viene eseguita spesso. Per quanto riguarda Print(), ho persino difficoltà a rispondere - vuoi emettere Pronta ogni tick? Di solito le operazioni di output rallentano notevolmente l'Expert Advisor. Gli script con Comment() vengono eseguiti 10 volte più a lungo che senza output, ma d'altra parte, la domanda riguarda la convenienza - se ne hai bisogno, devi farlo.
 
T-G:

Capisco. grazie. ma dimmi Stampa per esempio dopo aver chiuso un ordine:

o la stessa normalizzazione nelle condizioni:

rallenta notevolmente l'esecuzione degli EA?

L'operazione Print() è un'operazione con un file (in questo caso, un file di log). E queste operazioni sono MOLTO lente (rispetto all'elaborazione dei dati dalla memoria). CONCLUSIONE: creare una variabile che viene inizializzata in init()

bool gb_VirtualTrade;
init()
{
    gb_VirtualTrade = (IsOptimization() || (IsTesting() && !IsVisualMode));
}

E stampa per condizione di questa variabile (questa è UN'opzione).

L'esempio di normalizzazione che avete dato non ha senso, se si procede dagli obiettivi dichiarati (ottimizzazione del codice). La normalizzazione è NECESSARIA secondo i requisiti tecnici del server di intermediazione, per eseguire un ordine di compravendita SOLO per prezzo e STOP.

 
Salve, quando un Expert Advisor apre una posizione, devo scrivere nel suo codice un indicatore (condizione) basato sui segnali di cui apre un ordine o devo scrivere nell'Expert Advisor il percorso della finestra di uno strumento finanziario con indicatori installati?
 

Cari speculatori, aiuto! Cerco un EA che imposti automaticamente SL e TP all'apertura di una posizione.

Vi sono molto grato in anticipo.

 
Buon pomeriggio. Se qualcuno sa dove si può scaricare un indicatore ZIGZAG che segna il punto in cui appare un nuovo raggio (per esempio in un colore diverso). Se ce n'è uno...