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

 
Igor Makanu:

utilizzarehttps://www.mql5.com/ru/docs/dateandtime/timecurrent

seconda versione della chiamata di funzione

in generale èhttps://www.mql5.com/ru/docs/dateandtime/timetostruct

Grazie mille per le preziose informazioni.

Ho capito qual è la struttura e come funziona, ma non ho ancora capito tutti i dettagli.

Non ho ancora afferrato completamente le sottigliezze associate ad esso. Sto imparando il nuovo materiale molto meglio con l'aiuto di esempi chiari.
Vi sarei molto grato se poteste mostrarmi come scrivere il codice della seguente condizione in mql5
Ho già imparato come aprire un ordine utilizzando la struttura


se(Ora()==10)

per aprire un ordine.

Non è necessario scrivere il modello per aprire l'ordine.... solo la scrittura della condizione.

Grazie ancora per il vostro aiuto.

 
Igor Makanu:

deve essere il modo in cui volete determinare il prezzo e il tempo della barra:

O piuttosto sono le coordinate del clic del mouse nei valori di tempo + prezzo sul grafico, la barra deve essere definita tramite iBarShift()

Sì, è così, come è stato ulteriormente compreso. Grazie)

 
ANDREY:

Grazie mille per le preziose informazioni.

Ho capito cos'è la struttura e come funziona, ma non ho ancora afferrato i pro e i contro

Sto imparando meglio il nuovo materiale con gli esempi. Sto imparando il nuovo materiale molto meglio con l'aiuto di esempi chiari.
Vi sarei molto grato se poteste mostrarmi come scrivere il codice della seguente condizione in mql5
Ho imparato come aprire un ordine utilizzando la struttura


se(Ora()==10)

per aprire un ordine.

Non è necessario scrivere il modello per aprire l'ordine.... solo la scrittura della condizione.

Grazie ancora per il vostro aiuto.

MqlDateTime time_now;
TimeCurrent(time_now);
if(time_now.hour==10)
{
//открыть ордер
}
 
Igor Makanu:

Grazie mille per il vostro aiuto. Ora tutto è chiaro e comprensibile.

 

Buongiorno a tutti!
Sto cercando di passare da mql4 a mql5. Ho creato un semplice codice che apre gli ordini per i test. Nel tester, l'EA apre gli ordini. Ho messo la funzione Print() all'inizio della funzione void OnTick() e il mio Expert Advisor entrerebbe in questa funzione ad ogni tick e la stamperebbe ad ogni tick del giornale. E al quinto segno di spunta l'Expert Advisor non inserisce nessuna delle funzioni Print() e non stampa nulla nel Giornale dell'immatricolazione. La visualizzazione e l'ottimizzazione sono disabilitate in Expert Advisor.
Per favore, consigliate come cambiare il codice in modo che Print() sia stampato nel diario ad ogni tick, come nel 4.
Molte grazie in anticipo a coloro che mi aiutano.

Ecco il mio codice

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //

//+------------------------------------------------------------------+
void OnTick()
  {
Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
 if(!SymbolInfoTick(_Symbol,latest_price))
   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult);
    }   
     return;
  }

Ho aumentato il deposito di EA fino a 100 000. Come risultato, ad ogni tick Print() viene stampato nel giornale.... Ma non si è aperto un solo trade.

Ma ho bisogno che apra le offerte e che Print() venga stampato.

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
ANDREY:

Buongiorno a tutti!
Sto cercando di passare da mql4 a mql5. Ho creato un semplice codice che apre gli ordini per i test. Nel tester, l'EA apre gli ordini. Ho messo la funzione Print() all'inizio della funzione void OnTick() e il mio Expert Advisor entrerebbe in questa funzione ad ogni tick e la stamperebbe ad ogni tick del giornale. E al quinto segno di spunta l'Expert Advisor non inserisce nessuna delle funzioni Print() e non stampa nulla nel Giornale dell'immatricolazione. La visualizzazione e l'ottimizzazione sono disabilitate in Expert Advisor.
Per favore, consigliate come cambiare il codice in modo che Print() sia stampato nel diario ad ogni tick, come nel 4.
Molte grazie in anticipo a coloro che mi aiutano.

Ecco il mio codice

Ho aumentato il deposito di EA fino a 100 000. Come risultato, ad ogni tick Print() viene stampato nel giornale.... Ma non si è aperto un solo trade.

Ma ho bisogno che i trade siano stati aperti e che Print() sia stato stampato.

Guardate i registri, guardate cosa viene stampato, le informazioni sono inserite lì ad ogni passo. Molto probabilmente, qualcosa è sbagliato con l'apertura degli ordini e l'EA non funziona.

C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\99193835FC75DE8874B99F9A3B93F15E\MQL5\Logs

 
Igor Makanu:

Abbiamo già discusso se sia necessario accedere ripetutamente ai dati del terminale da MQL4, quindi OrderSelecthttps://www.mql5.com/ru/forum/342989#comment_16743716

Penso che sia possibile usarlo anche 100500 volte per tick, perché l'output sarà aumentato di milioni di volte al secondo


più simboli ci sono nella finestra dell'orologio di mercato, più grande sarà il carico sul terminale stesso, e rispettivamente, se chiamate i dati da molti simboli diversi, allora avrete anche dei ritardi

Cioè, se usate il terminale in modo sensato, non si blocca niente - nella finestra di osservazione del mercato ci sono dieci simboli che usate


Non ho controllatoquanti grafici si possono aprire allo stesso tempo, ma penso che se si limita la storia a 1000 barre, allora penso che il terminale probabilmente aprirà un paio di dozzine di finestre di grafici senza problemi

100

 
Valeriy Yastremskiy:

Guardate i log per vedere cosa stampa, ci sono informazioni registrate ad ogni passo. Molto probabilmente c'è qualcosa di sbagliato nell'apertura degli ordini e l'EA non funziona.

C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\99193835FC75DE8874B99F9A3B93F15E\MQL5\Logs

Grazie per il suggerimento.

Non funziona davvero. C'è scritto.

2020.10.27 06:40:45.311 Tester EURUSD: i dati della storia iniziano dal 2018.01.02 00:00

2020.10.27 06:40:45.312 Core 1 connessione a 127.0.0.1:3000

2020.10.27 06:40:45.312 Core 1 connesso

2020.10.27 06:40:45.320 Core 1 autorizzato (agent build 2650)

2020.10.27 06:40:45.323 Tester EURUSD,M1 (Alpari-MT5-Demo): test di esperti\GRAAL.ex5 dal 2020.09.01 00:00 al 2020.09.03 00:00

2020.10.27 06:40:45.327 Core 1 sincronizzazione comune completata

2020.10.27 06:40:45.328 Tester qualità della storia analizzata è al 100%

2020.10.27 06:40:45.348 Core 1 test experts\GRAAL.ex5 su EURUSD,M1 thread finito

2020.10.27 06:40:45.348 Core 1

2020.10.27 06:40:45.348 Core 1 login (build 2650)

2020.10.27 06:40:45.348 Core 1 informazioni sul conto trovate con valuta USD

2020.10.27 06:40:45.348 Core 1 1482 byte di parametri del tester caricati

2020.10.27 06:40:45.348 Core 1 1724 byte di parametri di input caricati

2020.10.27 06:40:45.348 Core 1 calcolare il profitto in pip, deposito iniziale 10000, leva 1:100

2020.10.27 06:40:45.348 Core 1 inizializzato con successo

2020.10.27 06:40:45.348 Core 1 731 byte di dati di inizializzazione totali ricevuti

2020.10.27 06:40:45.348 Core 1 Intel Core i5-6400 @ 2.70GHz, 7883 MB

2020.10.27 06:40:45.348 Core 1 EURUSD: simbolo da sincronizzare

2020.10.27 06:40:45.348 Core 1 EURUSD: simbolo già sincronizzato, 18 byte ricevuti

2020.10.27 06:40:45.348 Core 1 EURUSD,M1: storia nella cache dal 2019.01.02 06:00

2020.10.27 06:40:45.348 Core 1 EURUSD,M1 (Alpari-MT5-Demo): ogni tick che genera

2020.10.27 06:40:45.348 Core 1 EURUSD,M1: test di esperti\GRAAL.ex5 dal 2020.09.01 00:00 al 2020.09.03 00:00 iniziato con input:

2020.10.27 06:40:45.348 Core 1 StopLoss=30

2020.10.27 06:40:45.348 Core 1 TakeProfit=100

2020.10.27 06:40:45.348 Core 1 Lot=0.1

2020.10.27 06:40:45.348 Core 1 saldo finale 10000.00 pips

2020.10.27 06:40:45.348 Core 1 EURUSD,M1: 111967 ticks, 2880 barre generate. Test superato in 0:00:00.019.

2020.10.27 06:40:45.348 Core 1 270 Mb di memoria usata inclusi 35 Mb di dati storici, 64 Mb di dati di tick

2020.10.27 06:40:45.348 Core 1 file di log "C:\Users\a1960\AppData\Roaming\MetaQuotes\Tester\36A64B8C79A6163D85E6173B54096685\Agent-127.0.0.1-3000\logs\20201027.log" scritto

2020.10.27 06:40:45.371 Core 1 connessione chiusa

Lo sto testando per un periodo di un giorno. Significa che Expert Advisor dovrebbe aprire 1440 ordini. Forse è un problema. Forse, ci sono alcune limitazioni sul numero di ordini aperti simultaneamente.
Se l'ho controllato, può essere perché quando avevo 10 000 sul deposito del mio EA, ha aperto solo 300 ordini e ha mancato il resto per qualche motivo legato al denaro (come ho capito dalle voci del diario). Più tardi, ho aumentato il deposito di EA a 100 000 e non ha più avuto diritto a saltare. E ha smesso del tutto di aprire ordini.

Ma poi ho diminuito di nuovo il deposito dell'EA a 10 000. Tuttavia, il mio Expert Advisor continua a non aprire nulla e scrive sempre i valori che ho indicato sopra.

Ho creato un altro EA. Ho scaricato lo stesso codice in esso. Ho un deposito di 10 000. Ho lo stesso problema: non ho aperto ordini.
Vi prego di consigliarmi come far funzionare correttamente il mio EA. Manda lo stesso messaggio, solo che la mia linea gialla evidenziata ha 271 invece di 270 mb
Ho Windows 10. Ho un sistema operativo a 64 bit e 8 GB di RAM.
Grazie.

 
ANDREY:

Grazie per il suggerimento.

Non funziona davvero. C'è scritto.


2020.10.27 06:40:45.348 Core 1 EURUSD,M1: 111967 ticks, 2880 barre generate. Test superato alle 0:00:00.019.

2020.10.27 06:40:45.348 Core 1 270 Mb di memoria usata inclusi 35 Mb di dati storici, 64 Mb di dati di tick

2020.10.27 06:40:45.348 Core 1 file di log "C:\Users\a1960\AppData\Roaming\MetaQuotes\Tester\36A64B8C79A6163D85E6173B54096685\Agent-127.0.0.1-3000\logs\20201027.log" scritto

2020.10.27 06:40:45.371 Core 1 connessione chiusa

Lo sto testando per un periodo di un giorno. Significa che Expert Advisor dovrebbe aprire 1440 ordini. Forse è un problema. Forse, ci sono alcune limitazioni sul numero di ordini aperti allo stesso tempo.
Se l'ho controllato, può essere perché quando avevo 10 000 sul deposito del mio EA, ha aperto solo 300 ordini e ha mancato il resto per qualche motivo legato al denaro (come ho capito dalle voci del diario). Più tardi, ho aumentato il deposito di EA a 100 000 e non ha più avuto diritto a saltare. E ha smesso del tutto di aprire ordini.

Ma poi ho ridotto di nuovo il deposito dell'EA a 10.000. L'Expert Advisor continua a non aprire nulla e scrive sempre quello che ho indicato in alto.
Vi prego di consigliarmi come far funzionare normalmente il mio EA.
Cercherò sempre di farlo funzionare come prima.

Se ci sono 1440 ordini al giorno, l'Expert Advisor dovrebbe controllare l'inizio del minuto o, più facilmente, la comparsa della barra di un minuto. E si apre in questo momento. Tu non ce l'hai e quindi l'EA apre una posizione ad ogni tick, che è una condizione difficile in sé secondo il nostro simbolo alla quotazione attuale. Questa condizione può non essere soddisfatta, e le zecche non saranno prese in considerazione. E ad un certo punto, si verificherà un errore critico.

Anche il tipo di esecuzione dell'ordine (ordine di creare una posizione) Tutto o niente.

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //

//+------------------------------------------------------------------+
void OnTick()
  {
Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
 if(!SymbolInfoTick(_Symbol,latest_price))
   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult); // получите (запросите) результаты исполнения / сделки и распечатайте, будет понятней
    }   
     return;
  }
 
int M = TimeMinute(TimeCurrent());
int TimeServer()                                                  
{  
   Print(M, " - Tекущее время сервера");
}

Per favore, consigliatemi!

Perché l'ora del server non viene aggiornata quando arrivano nuove zecche?

Al momento dell'avvio dell'EA, tutto funziona come dovrebbe, ma poi il tempo passa, ma il nuovo valore del minuto corrente non entra nella variabile.

Cioè, l'Expert Advisor lavora in funzione del numero ottenuto nella variabile int M = TimeMinute(TimeCurrent());

In realtà questa linea di codice è dal riferimento e non funziona.

Per esempio, lo faccio partire alle 12-l'oracorrente restituita dal server corrisponde all'ora nella variabile, ma poi la variabile rimane alle 12, anche se sono già 15-20 minuti sull'orologio

Документация по MQL5: Дата и время / TimeCurrent
Документация по MQL5: Дата и время / TimeCurrent
  • www.mql5.com
Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов. В обработчике OnTick() данная функция вернет время пришедшего обрабатываемого тика. В других случаях (например, вызов в обработчиках OnInit(), OnDeinit(), OnTimer() и так далее) это –...