Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 173

 
Artyom Trishkin:

Nessuno ti ha chiamato "babbeo", non è vero. Ma anche 4-6 linee di codice, sapete, causano disorientamento - perché se una persona impara qualcosa, deve già provare qualcosa, ha provato a scrivere qualcosa, e chiaramente vede già che 4-6 linee non ci stanno.

Mostraci cosa hai cercato di fare - cerchiamo di capire.

Posso offrire una variante alternativa e semplificata - non cercate un attraversamento del livello di prezzo per tick, ma cercatelo per MA(1) - poi il MA sulla barra 1 e il MA sulla barra 0 saranno usati come indicatore del necessario attraversamento del livello.


Scusa per il lungo ritardo nella risposta. Sono contento che si sia rivelato un semplice smarrimento, mi sono agitato. E per quanto riguarda la mia domanda, sono riuscito a scrivere un codice che aprirebbe un ordine normale quando raggiunge il prezzo e che non si aprirebbe più dopo aver superato quel prezzo. Ma l'ho fatto in questo modo:
doppio b = 5;
int start()
{
doppia offerta = offerta;
se (offerta==0,7777 && b==5)
{
b=b+1;
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 0,0,0);
}

ritorno;

Ho già capito che questo è un metodo "da asilo" e non può essere usato perché ci sono troppe sfumature e non è affatto pratico. Puoi dire in quale situazione questo codice non funziona o come puoi cambiarlo per farlo funzionare? P.s. "cercatelo su MA(1) - poi MA sulla barra 1 e MA sulla barra 0 vi servirà come indicatore di attraversamento del livello che volete. "Non so bene di cosa si tratti, quindi posso rimandare per ora finché non avrò studiato più materiale


 
maxon777:

Scusate per averci messo così tanto a rispondere. Sono contento che si sia rivelato solo uno smarrimento, mi sono agitato. E per quanto riguarda la mia domanda, sono riuscito a scrivere un codice che aprirebbe un ordine normale quando raggiunge il prezzo e che non si aprirebbe più dopo aver superato questo prezzo. Ma l'ho fatto in questo modo:
doppio b = 5;
int start()
{
doppia offerta = offerta;
se (offerta==0,7777 && b==5)
{
b=b+1;
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 0,0,0);
}

ritorno;

Ho già capito che questo è un metodo "da asilo" e non può essere usato perché ci sono troppe sfumature e non è affatto pratico. Puoi dire in quale situazione questo codice non funziona o come puoi cambiarlo per farlo funzionare? P.s. "cercatelo su MA(1) - poi MA sulla barra 1 e MA sulla barra 0 vi servirà come indicatore di attraversamento del livello che volete. "Non so davvero di cosa si tratti, quindi questo può essere rimandato per ora finché non avrò imparato di più sul materiale



Confronto sull'uguaglianza di due numeri, tipo doppio, questa non è una buona operazione.

Come,NormalizeDouble(A - B , 5)==0, credo.

 

Buona sera a tutti!

Per favore aiutatemi, non riesco a trovare un bug nel codice.

Ho bisogno di determinare se ho avuto un profitto sulla mia coppia e se l'ho avuto, non dovrei continuare il trading e chiudere l'EA.

mettere un ordine in sospeso.

Il problema è che quando eseguo l'EA, lo cancella immediatamente, cioè scattaExpertRemove(), anche se non ho ancora avuto un profitto.

Qui sotto c'è un po' di codice:

void OnTick()

{

se (TakeProfit ()>0)

{

ExpertRemove();

}

se (TakeProfit ()<=0)

{

Qui mettiamo una pausa

}

}

//+------------------------------------------------------------------+

////////Cercando di vedere se ci sono stati scambi chiusi qui con un profitto!!!!!!!!

int TakeProfit ()

{

int count = 0;

for(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect (i,SELECT_BY_POS,MODE_HISTORY) == true && OrderMagicNumber() == Magic && OrderSymbol () == Symbol () && OrderProfit()>0.0)

{

contare ++;

}

}

ritorno (count);




 
yaaarik777:

Buona sera a tutti!

Per favore aiutatemi, non riesco a trovare un bug nel codice.

Ho bisogno di determinare se ho avuto un profitto sulla mia coppia e se l'ho avuto, non dovrei continuare il trading e chiudere l'EA.

mettere un ordine in sospeso.

Il problema è che quando eseguo l'EA, lo cancella immediatamente, cioè scatta ExpertRemove(), anche se non ho ancora avuto un profitto.

Qui sotto c'è una parte del codice:

////////Cercando se c'erano ... chiuso con profitto!!!!!!!!

int TakeProfit ()

{

int count = 0;

for(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect (i,SELECT_BY_POS,MODE_HISTORY) == true && OrderMagicNumber() == Magic && OrderSymbol () == Symbol () && OrderProfit()>0.0)

{

contare ++;

}

}

ritorno (count);

Cosa stai cercando con questo codice?

Guarda il profitto dell'intera storia, non esattamente di una posizione chiusa, e se l'intera storia è positiva, allora si ottiene OrderProfit()>0 in ogni caso

 
Vitaly Muzichenko:

Cosa stai cercando con questo codice?

Cerca un profitto sull'intera storia, non specificamente una posizione chiusa, e se l'intera storia è positiva, allora si otterrà OrderProfit()>0 sull'output in qualsiasi scenario


Come posso fare in modo che la ricerca non avvenga per tutta la storia, ma per posizioni chiuse dal momento del lavoro del consigliere?

Non capisco.

Non capisco.

 
yaaarik777:


Come posso fare in modo che cerchi non l'intero EA, ma quelli chiusi dal momento in cui l'EA lavora?

Non capisco.

Grazie per l'aiuto.

Trova l'ultima posizione chiusa, che è stata chiusa dopo l'ora di inizio dell'EA, o l'ultima chiusa in questo giorno, e vedi il suo profitto: OrderProfit()+OrderComission()+OrderSwap()
 
yaaarik777:


Come faccio a fargli cercare non tutto l'EA, ma quelli chiusi dal momento del lavoro dell'EA?

Non capisco.

Grazie per il vostro aiuto.


Come si fa a determinare quando l'EA funziona?

Ecco il mio suggerimento;

double TakeProfit ()
{
 datetime момент работы советника=0;
 double p=0;
  for(int i=OrdersHistoryTotal()-1; i>=0; i--){
    if (OrderSelect (i,SELECT_BY_POS,MODE_HISTORY)){
       if (OrderMagicNumber() == Magic){
          if(OrderSymbol () == Symbol ()){
            if(момент работы советника<OrderCloseTime()){
               p+=OrderProfit()+OrderCommission()+OrderSwap();
            }
          }
        }
      }
    }
 return(p);
}
   
 
Artyom Trishkin:
Trova l'ultima posizione chiusa, che è stata chiusa dopo l'ora di inizio dell'EA, o l'ultima chiusa in questo giorno, e guarda il suo profitto: OrderProfit()+OrderComission()+OrderSwap()


Perché ho bisogno che cerchi tutte le posizioni chiuse dopo l'ora di inizio dell'EA?

Voglio che cerchi dall'inizio dell'EA, non prima.

 
yaaarik777:


Perché più tardi rispetto all'ora di inizio dell'EA? Lo faccio già cercare tutte le posizioni chiuse.

è necessario che cerchi dall'inizio dell'EA, non prima.


Se ci pensi, "dall'inizio e oltre" è dopo il tempo di inizio dell'EA ;)

Non essere pigro nell'usare l'organo interaurale.

 

Salve.

Per favore, aiutatemi a visualizzare i dati di un file come istogramma.

Nel file "file.txt" una data corrisponde a un numero.

Ricevo i dati dal file e li stampo,
Motivazione: