Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1446

 
Alexey Viktorov #:

1. Se la maniglia della base non viene ricevuta, non è necessario chiudere la base.

2. Se viene ricevuto INVALID_HANDLE, perché continuare l'esecuzione del programma? Credo che in questo caso sia meglio interrompere, restituire

Ora sto cercando ripetutamente di aprire e chiudere un database inesistente e non riesco a ottenere la stampa dell'errore. Penso che questa stampa arrivi al momento della creazione di query alla base, che non è stato possibile aprire.

Creerò un Expert Advisor di prova minimo che aggiornerà il record nel database ogni secondo. Eseguiamolo su 10 coppie e tutto sarà chiaro. Lo posterò qui...
 
Evgeny Dyuka #:
Creerò un Expert Advisor di prova minimo che aggiornerà il record nel database ogni secondo. Eseguitelo su 10 coppie e tutto sarà chiaro. Lo posterò qui.

Interessante. Aspetto...

 
Alexey Viktorov #:

Interessante. Aspetterò...

Ecco un esperto. Crea una base (se non esiste già) e ci scrive l'ora corrente una volta al secondo.
Non c'è Print() nel codice.
L'ho eseguito su 10 coppie e ha dato errori:

CS      2       11:44:36.561    Test_DB (EURUSD,M10)    database error, database is locked
CS      2       11:55:27.018    Test_DB (BTCUSD,M10)    database error, database is locked
CS      2       11:55:28.026    Test_DB (BTCUSD,M10)    database error, database is locked
CS      2       11:55:49.177    Test_DB (TRXUSD,M10)    database error, database is locked
CS      2       11:55:51.183    Test_DB (EURUSD,M10)    database error, database is locked
CS      2       11:55:53.182    Test_DB (TRXUSD,M10)    database error, database is locked

Per ottenere un errore è necessario chiudere e riavviare MT5, quindi tutti gli EA iniziano a lavorare in modo sincrono.

Sarebbe opportuno:
1. Capire come eliminare questo errore.
2. Inventare un meccanismo di template che si metta in coda nel caso in cui la base non sia disponibile.

Ho risolto il punto 2 aggiungendo Sleep() con tempo casuale, ma sembra una stampella.

AGGIORNAMENTO: horicaricato il file, il primo aveva un errore.

File:
Test_DB_1.mq5  3 kb
 
Evgeny Dyuka #:

Ecco un esperto. Crea una base (se non esiste già) e vi scrive l'ora corrente una volta al secondo.
Non c'è Print() nel codice.
L'ho eseguito su 10 coppie e si sono verificati degli errori:

Per ottenere un errore è necessario chiudere e riavviare MT5, quindi tutti gli Expert Advisor iniziano a lavorare in modo sincrono.

Sarebbe opportuno:
1. Capire come eliminare questo errore.
2. Inventare un meccanismo di template che si metta in coda in caso di indisponibilità della base.

Ho risolto il punto 2 aggiungendo Sleep() con tempo casuale, ma sembra una stampella.

AGGIORNAMENTO: horicaricato il file, il primo aveva un errore.

Ahimè, le mie conoscenze non sono sufficienti. Solo abbastanza per rendermi conto che viene stampato un errore.

      DatabaseExecute(db, sql);

Non c'è la possibilità di verificare la disponibilità prima di creare una query.

Il database si apre, ma non è possibile creare una query.

 
Non ci sono ordini aperti sul server, non ci sono stop e take, le modalità algo sono abilitate e il comando di setup passa, ma i log sono silenti classeCTrade. Nel tester funziona su un trading reale in silenzio. Cosa controllare?
 
mwwm CTrade. Nel tester funziona su un trading reale in silenzio. Cosa controllare?

log del terminale

 
Vladimir Deryagin #:

log del terminale

Ho immaginato di aver acceso i log, ma non riesco a calcolare il lotto. Non capisco perché non vuole calcolare il reale?

void OpenBuy(const int index,double sl,double tp)
  {
   sl=m_symbol.NormalizePrice(sl);
   tp=m_symbol.NormalizePrice(tp);
   double long_lot=0.0;
   if(InpLotOrRisk==risk)
     {
      long_lot=m_money.CheckOpenLong(m_symbol.Ask(),sl);
      if(InpPrintLog)
         Print(__FILE__," ",__FUNCTION__,", OK: ","sl=",DoubleToString(sl,m_symbol.Digits()),
               ", CheckOpenLong: ",DoubleToString(long_lot,2),
               ", Balance: ",    DoubleToString(m_account.Balance(),2),
               ", Equity: ",     DoubleToString(m_account.Equity(),2),
               ", FreeMargin: ", DoubleToString(m_account.FreeMargin(),2));
      if(long_lot==0.0)
        {
         ArrayRemove(SPosition,index,1);
         if(InpPrintLog)
            Print(__FILE__," ",__FUNCTION__,", ERROR: ","CMoneyFixedMargin.CheckOpenLong returned the value of 0.0");
         return;
        }
     }
 
mwwm #:

Ho indovinato che ho acceso i log, ma non riesce a calcolare il lotto. Non capisco perché non vuole calcolare in reale?

Non ci sono log, quindi le ipotesi possono essere molte di più.

Come opzione, quando si fa trading sugli incroci, se nella panoramica del mercato non è selezionata la coppia con la valuta del deposito, non si fa trading.

Ad esempio, se facciamo trading su EURJPY e depositiamo la valuta USD, nella panoramica del mercato devono essere presenti EURUSD e USDJPY.

 
Aleksandr Slavskii #:

Non ci sono registri, quindi le ipotesi potrebbero essere molte di più.

Come opzione, quando si fa trading sugli incroci, se la coppia con la valuta di deposito non è selezionata nella panoramica del mercato, non verrà scambiata.

Ad esempio, se facciamo trading su EURJPY, con valuta di deposito USD, nella panoramica del mercato devono essere presenti EURUSD e USDJPY.

Conto in USD pro cent, trading XAUUSD

 

Ciao a tutti. Non riesco a disegnare una freccia sulla prima barra utilizzando i buffer in MQL5.

In MQL4, faccio quanto segue:

Dichiaro una variabile globale double XX[];

scrivere in init:

SetIndexBuffer(0,XX);

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,108);

In Oncalculate scrivo:

XX[1]=High[1]; ottengo una freccia disegnata sulla candela 1. e questo è tutto.

Faccio lo stesso in MQL5:

Dichiaro una variabile globale double XX[];

scrivere in init:

SetIndexBuffer(0,XX,INDICATOR_DATA);

PlotIndexSetInteger(0,PLOT_ARROW,108);

In Oncalculate scrivo:

XX[1]=iHigh[1]; - non viene disegnato

XX[1]=iHigh(Symbol(),PERIOD_CURRENT,1); - anch'esso non viene disegnato.

Naturalmente, anche nell'intestazione è specificato:

#proprietà indicator_buffers 1

#proprietà indicator_plots 1

#proprietà indicator_type1 DRAW_ARROW

#proprietà indicator_color1 clrGreen

#proprietà indicator_width1 1

Cosa sto facendo di sbagliato, per favore ditemi !!!!