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

 
Mikhail:

Quando faccio una query come questa

Ottengo questo risultato:

2020.06.17 13:49:53.270 2020.01.02 06:50:00 Simbolo EURUSD_i Cifre 5 Punto 1e-05

Quando faccio una richiesta come questa:

Ottengo questo risultato:

2020.06.17 13:51:58.787 2020.01.02 06:45:00 Simbolo EURUSD_i Cifre 0 Punto 0,0

Allo stesso tempo voglio notare che se non inserisco la funzione Print, non ottengo nessun errore, l'ordine non cerca nemmeno di modificarsi. È come se CTrade non vedesse il mio ordine.

Il controllo del simbolo e del numero magico non funziona:

Risultato:

2020.06.17 14:37:38.147 2020.01.02 06:50:00 Symbol Magic 0 Ticket 2

Il numero magico dovrebbe essere 12345, il simbolo è euro dollaro.

Perché non posso avere simbolo e medgic?

Se cambiate la stringa:

è cambiato in

e rimuovere la convalida per numero magico, allora abbiamo problemi con i prezzi

2020.06.17 01:38:24.136 2020.01.02 07:40:00 failed modify order #2 buy stop 0.1 EURUSD_i at 1.12086 sl: 1.12023 tp: 1.12275 -> 1.00000, sl: 1.00000 tp: 1.00000 [prezzo non valido]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend: modifica #2 a 1,00000 (sl: 1,00000 tp: 1,00000) [prezzo non valido]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 BUY STOP modifica fallita! Risultato Retcode: 10015, descrizione del Retcode: prezzo non valido

Mi sono già scervellato, mentre questo stesso codice funziona bene in un altro Expert Advisor.

Cosa sto facendo di sbagliato?

Oggetto di classe CSymbolInfo inizializzato in modo errato (o non inizializzato).

Se non avete questa stringa asymbol.Name(Symbol()) allora aggiungetela.

Se ne avete uno, fate il debug nella funzione Name(string symbol) cosa succede.

Riempimento dei campi m_digits etc nella funzione Refresh().

s.s. A giudicare da quello che hai aggiunto, hai sicuramente un asymbol non inizializzato.

 
Mikhail:

Finché non arriva il nuovo tick, non c'è movimento dei pulsanti. Questo è quello che posso vedere con i miei occhi. Non appena il prezzo cambia, i pulsanti si muovono.

Anche se oggi anche sulla nuova spunta i pulsanti hanno smesso di ridisegnarsi, anche se non ho cambiato nulla. Solo lo sfondo si muove.

Per chiarire - come dici tu cambi le coordinate in OnTick, e sostieni che in effetti i pulsanti si muovono al tick successivo. La prossima spunta da cosa? Quella su cui hai cambiato le coordinate o quella di Natale?

 
Aleksey Mavrin:

Il tuo oggetto di classe CSymbolInfo è inizializzato in modo errato (o non lo è affatto).

Se non avete tale stringa asymbol.Name(Symbol()) allora aggiungetela.

Se ne avete uno, fate il debug nella funzione Name(string symbol) cosa succede.

Riempire i campi m_digits etc con Refresh().

s.s. A giudicare da quello che hai aggiunto, il tuo asymbol è sicuramente non inizializzato.

All'inizio del mio codice ho le seguenti linee
#include <Trade\Trade.mqh>
#include <Trade\OrderInfo.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\DealInfo.mqh>
#include <Trade\SymbolInfo.mqh>

CTrade atrade;
COrderInfo aorder;
CPositionInfo apos;
CDealInfo adeal;
CSymbolInfo asymbol;

È un'inizializzazione? Quando compilo ottengo le seguenti informazioni

'Trade.mq5 panel' Trade.mq5 panel 1 1

'Trade.mqh' Trade.mqh 1 1

'Object.mqh' Object.mqh 1 1

'StdLibErr.mqh' StdLibErr.mqh 1 1

'OrderInfo.mqh' OrderInfo.mqh 1 1

'HistoryOrderInfo.mqh' HistoryOrderInfo.mqh 1 1

'PositionInfo.mqh' PositionInfo.mqh 1 1

'DealInfo.mqh' DealInfo.mqh 1 1

'SymbolInfo.mqh' SymbolInfo.mqh 1 1

codice generato 1 1

0 errori, 0 avvertimenti, 3192 msec trascorsi 1 1

Dopo aver aperto un ordine Buy Stop ricalcolo tutti gli ordini, seleziono un ordine aperto e controllo se il simbolo e il numero Majdic corrispondono:

for(int i=OrdersTotal()-1;i>=0;i--)
          if(aorder.SelectByIndex(i))  
              if(aorder.Symbol()==asymbol.Name() && aorder.Magic()==MagicNumber && Ask < aorder.PriceOpen())

Non succede niente in questa fase, come ho scritto sopra asymbol.Name() non restituisce il simbolo dell'ordine aperto per qualche motivo, aorder.Magic() restituisce il valore 0 (anche se il mio numero magico è 121345), asymbol.TickSize() restituisce il valore 0. In altre parole, il controllo fallisce e quindi l'ulteriore lavoro sull'ordine si ferma. Si prega di chiarire"debug nella funzione Name(string symbol) cosa sta succedendo", non capisco bene questa frase. Cosa dovrei aggiungere e dove?

 
Aleksey Mavrin:

Per chiarire - come dici tu cambi le coordinate in OnTick, e sostieni che in effetti i pulsanti si muovono al tick successivo. La prossima spunta da cosa? Quella su cui hai cambiato le coordinate o quella di Natale?

Penso che la sequenza sia la seguente: arriva un nuovo tick, cambio le coordinate del pannello, lo sfondo del pannello inizia a muoversi verso la posizione desiderata, i pulsanti stanno fermi in quel momento, arriva un nuovo tick e i pulsanti si muovono seguendo il pannello nella posizione desiderata. È possibile generare zecche direttamente dalla Natività?
 
Mikhail:

A questo punto, non succede niente, perché come ho già scritto sopra, la funzione asymbol.Name() per qualche motivo non restituisce il simbolo dell'ordine aperto, la funzione aorder.Magic() restituisce il valore 0 (anche se il mio Magic è 121345), la funzione asymbol.TickSize() restituisce il valore 0. In altre parole, il controllo fallisce e quindi l'ulteriore lavoro sull'ordine si ferma. Si prega di chiarire"debug nella funzione Name(string symbol) cosa sta succedendo", non capisco bene questa frase. Cosa dovrei aggiungere e dove?

L'errore nell'indice dell'ordine / biglietto potrebbe essere un errore a giudicare dalla magia 0. Al momento dell'accesso alla struttura dell'ordine, i dati dell'ordine sbagliato vi sono scritti. Nel ciclo di selezione, può darsi che il numero successivo sia inserito nell'ultimo ordine impostato, ma non quello che vi serve. I dati dell'ultimo ordine selezionato sono restituiti dalla struttura dell'ordine.

 
Mikhail:
all'inizio del mio codice ci sono le linee

È un'inizializzazione? Durante la compilazione, ottengo le seguenti informazioni

'Trade panel.mq5' Trade panel.mq5 1 1

'Trade.mqh' Trade.mqh 1 1

'Object.mqh' Object.mqh 1 1

'StdLibErr.mqh' StdLibErr.mqh 1 1

'OrderInfo.mqh' OrderInfo.mqh 1 1

'HistoryOrderInfo.mqh' HistoryOrderInfo.mqh 1 1

'PositionInfo.mqh' PositionInfo.mqh 1 1

'DealInfo.mqh' DealInfo.mqh 1 1

'SymbolInfo.mqh' SymbolInfo.mqh 1 1

codice generato 1 1

0 errori, 0 avvertimenti, 3192 msec trascorsi 1 1

Dopo aver aperto un ordine Buy Stop ricalcolo tutti gli ordini, seleziono un ordine aperto e controllo se il simbolo e il numero Majdic corrispondono:

Non succede niente in questa fase, come ho scritto sopra asymbol.Name() non restituisce il simbolo dell'ordine aperto per qualche motivo, aorder.Magic() restituisce il valore 0 (anche se il mio numero magico è 121345), asymbol.TickSize() restituisce il valore 0. In altre parole, il controllo fallisce e quindi l'ulteriore lavoro sull'ordine si ferma. Si prega di chiarire"debug nella funzione Name(string symbol) cosa sta succedendo", non capisco bene questa frase. Cosa dovrei aggiungere e dove?

Cavolo, perché usi qualcosa che non capisci (e se fosse una valigia yadda yadda )) )

E non ti prendi nemmeno la briga di leggere quello che c'è scritto

Se non avete asymbol.Name(Symbol()) allora aggiungetelo.

s.w. Volevo spiegare di più sull'inizializzazione, ma credo che anche questo sarebbe inutile
 
Valeriy Yastremskiy:

Ci può essere un errore nell'indice dell'ordine / biglietto secondo la magia 0. Al momento dell'accesso alla struttura dell'ordine i dati dell'ordine sbagliato sono memorizzati lì. Nel ciclo di selezione può essere che il numero successivo vada all'ultimo ordine impostato ma non a quello che ti serve. I dati dell'ultimo ordine selezionato sono restituiti dalla struttura dell'ordine.

Non sono ancora riuscito a capire il motivo di questo inconveniente. Infine, ho preso il codice che è responsabile della creazione del pannello con i pulsanti e l'ho riscritto nell'EA dove questo stesso codice funziona correttamente e tutto ha funzionato. Comunque, grazie!
 

Buon pomeriggio!

Aiutami a risolvere un semplice problema.

Contatore di gap. Voglio contare le lacune che sono più di 10 punti.

int start()
{
int gap=0;
int r=MathAbs(Close[2]-Open[1])/Point;
if (r>=10)
{
gap=gap+1;
}
Comment("ГЭП!========: ",gap,"\n",
        "ВЕЛИЧИНА ГЭПА==: ",r,"\n");
return(0);

La variabile "gap" si azzera. Non capisco perché. Ho già provato di tutto. Ho provato con i loop e la statica - non funziona. Ho il sospetto di aver scritto i cicli in modo errato.

 
Alexey Belyakov:

Buon pomeriggio!

Aiutami a risolvere un semplice problema.

Contatore di gap. Voglio contare le lacune che sono più di 10 punti.

La variabile "gap" si azzera. Non capisco perché. Ho già provato di tutto. Ho provato con i loop e la statica - non funziona. Ho il sospetto di aver scritto i cicli in modo errato.

La variabile gap è nell'ambito della funzione start - e ad ogni nuovo tick viene reinizializzata con zero

 
Alexey Belyakov:

Buon pomeriggio!

Aiutami a risolvere un semplice problema.

Contatore di gap. Voglio contare le lacune che sono più di 10 punti.

La variabile "gap" si azzera. Non capisco perché. Ho già provato di tutto. Ho provato con i loop e la statica - non funziona. Ho il sospetto di aver scritto i cicli in modo errato.

int gap=0;
int start()
{
int r=MathAbs(Close[2]-Open[1])/Point;
if (r>=10)
{
gap++;
}
Comment("ГЭП!========: ",gap,"\n",
        "ВЕЛИЧИНА ГЭПА==: ",r,"\n");
return(0);
int start()
{
static int gap=0;
int r=MathAbs(Close[2]-Open[1])/Point;
if (r>=10)
{
gap=gap+1;
}
Comment("ГЭП!========: ",gap,"\n",
        "ВЕЛИЧИНА ГЭПА==: ",r,"\n");
return(0);