Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 494

 
Nickolay72:
Fino a ieri, il mio EA ha aperto solo un ordine ciascuno e il prossimo non si aprirà fino a quando non piazzerò un ordine. Ora, come fare in modo che il mio EA apra gli ordini quando la barra precedente ha aperto sopra (sotto) il canale?
 if (CountTrades()==0) CheckForOpen();
   else
  {
   if(CountTrades()<max_trades) CheckForOpen();
  }

Se analizzate questo frammento di codice, allora, secondo questo codice, se la funzioneCountTrades() restituisce zero, la condizione if (CountTrades()==0) CheckForOpen()sarà eseguita, e la funzioneCheckForOpen() sarà chiamata.Al prossimo tick, se l'ordine è stato aperto, la funzioneCountTrades() dovrebbe restituire 1, e quindi la condizione else è soddisfatta

....  
else
  {
   if(CountTrades()<max_trades) CheckForOpen();
  }

Se risulta che CountTrades()<max_trades, la funzioneCheckForOpen() sarà eseguita ancora una volta.Secondo il codice, il valore della variabile max_trades è uguale a 3. Così, avrete 4 ordini aperti.

Se l'EA non apre correttamente gli ordini, allora controlla la logica, in cui si definiscono le condizioni in cui le posizioni devono essere aperte nella funzione CheckForOpen(). E controlla anche le condizioni di tempo se (CurrTime < EaStartTime || CurrTime >= EaEndTime). Se fossi in voi, userei la funzione if (TimeHour(TimeCurrent()) = ora di inizio && TimeMinute(TimeCurrent()) = minuti di inizio ). L'ora e i minuti sono impostati in variabili di tipo int o uint.

 
Artyom Trishkin:
Se Open Bar Number 1 è sopra/sotto il canale.
Dannazione, ho appena visto che ho un commercio intorno al limite inferiore del canale, ho appena copiato gli ordini e non ha corretto il fondo alla parte superiore, proverò la versione corretta).
//-----Ставим ордер на покупку.
 if(PriceCurrentOpen<PriceLow&&PriceCurrentOpen<PriceCurrentClose&&SignalCurrent<MacdCurrent&&SignalMAPrevious<SignalMAThis)
 {
  ticket=OrderSend(NULL,OP_BUY,Lots,Ask,slippage,0,0,"5",magic,0,Blue);
   if(ticket>0)
    return; 
 }
//-----Ставим ордер на продажу.
 if(PriceCurrentOpen>PriceLow&&PriceCurrentOpen>PriceCurrentClose&&SignalCurrent>MacdCurrent&&SignalMAPrevious>SignalMAThis)
 {
  ticket=OrderSend(NULL,OP_SELL,Lots,Bid,slippage,0,0,"5",magic,0,Red);
   if(ticket>0)
    return;

	          
 
Vitalii Ananev:

Così, avrete 4 ordini aperti.

Se l'EA non apre correttamente gli ordini, allora controlla la logica, dove specifichi le condizioni in cui le posizioni devono essere aperte nella funzione CheckForOpen(). E controlla anche le condizioni di tempo se (CurrTime < EaStartTime || CurrTime >= EaEndTime). Userei la funzione if (TimeHour(TimeCurrent()) = ora di inizio && TimeMinute(TimeCurrent()) = minuti di inizio ). L'ora e i minuti sono impostati in variabili di tipo int o uint.

Volevo aprire 3 ordini ma non era quello che intendevo; volevo fino a tre, ma un ordine per ogni nuova barra.

Non c'è nessun problema di tempo, funziona in un periodo di tempo strettamente specificato.

 
Nickolay72:

Volevo fino a tre ordini, ma un ordine per ogni nuova barra. Ci sono momenti in cui diverse barre di fila danno segnali positivi.

Non c'è nessun problema di tempo, funziona in un periodo di tempo strettamente specificato.

La condizione: se la barra dell'ultima apertura di posizione non è uguale a zero e il numero di posizioni aperte è inferiore al massimo consentito, allora una nuova posizione può essere aperta.
 

Karputov 2016.01.13_05:14AM. Salve signor Karputov! Ho scritto in MQL4

.mq4, ha ottenuto il file .ex4. Ma non funziona nel tester di strategia. Finale

era scrivere un EA per MT4. In MQL5, ho ottenuto .mq5 e

.ex5. E il file .ex5 ha aperto gli scambi. La quarta versione è diversa da

La quarta versione ha alcune differenze rispetto alla quinta, e io non sono ancora un buon programmatore MQL, ecco perché ho ottenuto cattivi risultati.

Non ho capito cosa c'è di sbagliato ora, il file di log del tester è stato salvato. Я

Cercherò di tradurlo. Nel frattempo ti chiedo di dirmi

cosa c'è di sbagliato nel codice del programma? Mentre tu rispondi, proverò

per capirlo.
Sono stato sorpreso di trovare nella mia quarta versione dell'editor l'opzione per scrivere

Stavo per scriverlo. Ma non l'ho scritto io. Sto allegando

file di log del tester e uno screenshot. 05:30 MSC. Diario del testerKarputovKarputov

File:
20160112.log  7 kb
 
Николай Никитюк:

2016.01.13_05:14 ORA DI MOSCA. Salve signor Karputov! Ho scritto in MQL4

.mq4, ha ottenuto un file .ex4. Ma non funziona nel tester di strategia.

Perché hai incollato il codice come immagine? )) Chi li capirà?
 
Николай Никитюк:


Inserisci correttamente il tuo codice nel post:Inserisci correttamente il codice nel forum
 

Dove posso trovare le descrizioni degli errori?

Non capisco cosa non piace al compilatore, perché mi avverte?

controllare la precedenza dell'operatore per un possibile errore; usare le parentesi per chiarire la precedenza


if(Low[X]>PriceBuy && High[X]>PriceBuy ||
               Low[X]<PriceBuy && High[X]<PriceBuy)
               calcBarX++;

e qui

l'espressione non ha effetto


         for(calc_day;calc_day>0; calc_day--)
           {
            if(iLow(Symbol(),TF_3Day,calc_day)<iLow(Symbol(),TF_3Day,calc_day+1)) calc_day_OK++;
            else break;
           }

 
-Aleks-:

Dove posso trovare le descrizioni degli errori?

Non capisco cosa non piace al compilatore, perché mi avverte?

In realtà, oltre al testo dell'errore, il compilatore ti dice anche il numero della linea di codice dove si è verificato l'errore e la sua posizione nella linea.
 
Karputov Vladimir:
In realtà, oltre al testo dell'errore, il compilatore riporta anche il numero della linea di codice dove si trova l'errore e la sua posizione nella linea.
È così - nel primo caso sui segni di confronto a turno - apparentemente tra gli "o" bisogna mettere una parentesi, e nel secondo caso giura sulla parentesi in cui è scritta l'espressione logica.
Motivazione: