Errori, bug, domande - pagina 77

 
Interesting:

Ho capito bene che i valori restituiti da ACCOUNT_TRADE_ALLOWED sono generati sul lato server?

Voglio dire che nessuna azione dal lato del trader (nel terminale) può cambiare questo valore...

PS

Ma la riluttanza di ACCOUNT_TRADE_EXPERT a cambiare è davvero strana...

Cosa fa allora il pulsante "Auto-Trading" nel menu del terminale e la casella di controllo "Allow auto-trading"?

PPS

Nelle vecchie versioni tutto sembrava essere corretto e tutto funzionava, ma nella 299 non capisco cosa sta succedendo...


Chi ha scavato in ACCOUNT_TRADE_ALLOWED e ACCOUNT_TRADE_EXPERT e perché?


Agli sviluppatori - O sto impazzendo o ci sono "drubashka" nel terminale... :)

E non nell'ultima versione, ma almeno nel 294 (chi li ha lasciati lì?)... :(


Un piccolo esperimento

Prendiamo la release 294 del terminale e mettiamo sul grafico un Expert Advisor che controlla il valore di ritorno di AccountInfoInteger(ACCOUNT_TRADE_ALLOWED).

Allo stesso tempo, l'auto-trading è disabilitato nei parametri di Expert Advisor e nel terminale (il pulsante "auto-trading").

Di conseguenza, il registro di Expert Advisor contiene quanto segue

Qui possiamo vedere il registro delle azioni eseguite dall'Expert Advisor (durante l'inizializzazione) e il controllo del valore ACCOUNT_TRADE_ALLOWED nel timer.

Siamo interessati a tutti i simboli evidenziati a colori (prima di questo l'elenco dei simboli era caricato in una classe specializzata).

1. Il primo risultato restituito dal timer è blu (ci si aspetta che sia falso);

2. Il colore rosso evidenzia il prossimo risultato, che è stato restituito dal timer, si è rivelato improvvisamente vero(sono molto interessato a ciò che BARABACA ha permesso di commerciare);

3. La reazione della mia classe (evento OnEventTimer) ai cambiamenti è verde.

Qui la classe "capisce" che l'auto-trading è permesso e si informa volentieri su di esso (non condivido il suo ottimismo);

Inoltre, il messaggio viene visualizzato due volte (anche se non era stato visto prima). Il messaggio non deve apparire due volte, poiché l'evento OnEventTimer contiene un controllo che esclude questa possibilità.

//Reading information on current parameters of the trade account
RealTradeAllowed = TradeAllowed(); //TradeAllowed
RealTradeExpert  = TradeExpert();  //TradeExpert
//Checking the status change of the use possibility automatic trade
  if(varTradeAllowed!=RealTradeAllowed)
  //Processing the event TradeAllowed
  {
  OnTradeAllowed(RealTradeAllowed);
  //We write current status of the RealTradeAllowed in variable
  varTradeAllowed = RealTradeAllowed;
  }

4. Allora il timer restituisce costantemente true, qualunque cosa accada al terminale.

PS

La situazione con AccountInfoInteger(ACCOUNT_TRADE_EXPERT) è ancora più confusa. Il timer ritorna ture indipendentemente dal terminale e dalle impostazioni di Expert Advisor.

Ne abbiamo bisogno?

 
AM2:

Sono anche interessato a una domanda simile. Cosa devo fare se non ci sono abbastanza fondi nel mio conto per aprire una posizione?

1. Interrompi il trading dell'Expert Advisor.

2. Proibire l'apertura di una posizione.

3. Rimuovi l'Expert Advisor dal grafico.

Il punto 3 può essere risolto con ExpertRemove. Ho risolto il 2° punto in questo modo:

1. Capisco che il divieto di trading non è impostato programmaticamente, ma utilizzando il pulsante "Auto-Trading" e la casella di controllo "Allow auto-trading" seguita dalla spunta di ACCOUNT_TRADE_ALLOWED e ACCOUNT_TRADE_EXPERT.

Puoi anche proibire il trading aggiungendo il parametro necessario al tuo Expert Advisor e poi controllando questo parametro (per esempio, proibire il trading su un conto reale).

Il controllo preliminare viene eseguito durante l'inizializzazione di un Expert Advisor, mentre in modalità di lavoro viene gestito in OnTimer() o OnTick().

2. Il controllo della possibilità di aprire (chiudere) una posizione deve essere condotto considerando lo stato attuale: la connessione, la possibilità di auto-trading, e altre condizioni (per esempio, il controllo della possibilità di eseguire una certa operazione per questo simbolo).

Per controllare tutte le condizioni, è meglio creare una funzione con un risultato simile a un bool.

Per esempio, come questo:

//Function IsTradePermit
bool IsTradePermit(bool TardeAllowed,bool Connect,double FreeMargin)
{
//----------------------------------------------------------------------------//
//Work variables
bool Result;
//----------------------------------------------------------------------------//

//Тут мы проверяем разрешена или нет торговля

//----------------------------------------------------------------------------//
return(Result);
//----------------------------------------------------------------------------//
}

3. Expert Advisor dovrebbe essere rimosso dal grafico solo in casi estremi (quando il suo lavoro non può essere fatto o quando non è più necessario)

Questa situazione è molto estrema e rara. Dovrebbe essere usato, per esempio, se alcuni file necessari per l'Expert Advisor non vengono trovati, o se c'è un errore che l'Expert Advisor non può risolvere.

PS

Rimuovere e piazzare EAs è anche utile se diversi EAs commerciano su coppie diverse, ma sono gestiti da un EA (decide su quale coppia piazzare un EA e quale rimuovere)...

 
Interesting:

Chi ha scavato in ACCOUNT_TRADE_ALLOWED e ACCOUNT_TRADE_EXPERT, e soprattutto, perché?


Sviluppatori - O sto già impazzendo o ci sono "drubashki" nel terminale... :)

E non nell'ultima versione, ma almeno nella 294 (chi li ha fatti entrare?)... :(


Un piccolo esperimento

Prendiamo la release 294 del terminale e mettiamo sul grafico un Expert Advisor che controlla il valore di ritorno di AccountInfoInteger(ACCOUNT_TRADE_ALLOWED).

Allo stesso tempo, l'auto-trading è disabilitato nei parametri di Expert Advisor e nel terminale (il pulsante "auto-trading").

Di conseguenza, il registro di Expert Advisor contiene quanto segue

Qui possiamo vedere il registro delle azioni eseguite dall'Expert Advisor (durante l'inizializzazione) e il controllo del valore ACCOUNT_TRADE_ALLOWED nel timer.

Siamo interessati a tutti i simboli evidenziati a colori (prima di questo l'elenco dei simboli era caricato in una classe specializzata).

1. Il primo risultato restituito dal timer è blu (ci si aspetta che sia falso);

2. Il colore rosso evidenzia il prossimo risultato, che è stato restituito dal timer, si è rivelato improvvisamente vero(sono molto interessato a ciò che BARABACA ha permesso di commerciare);

3. La reazione della mia classe (evento OnEventTimer) ai cambiamenti è verde.

Qui la classe "capisce" che l'auto-trading è permesso e si informa volentieri su di esso (non condivido il suo ottimismo);

Inoltre, il messaggio viene visualizzato due volte (anche se non era stato visto prima). Il messaggio non deve apparire due volte, poiché l'evento OnEventTimer contiene un controllo che esclude questa possibilità.

4. Allora il timer restituisce costantemente true, qualunque cosa accada al terminale.

PS

La situazione con AccountInfoInteger(ACCOUNT_TRADE_EXPERT) è ancora più confusa. Il timer ritorna ture indipendentemente dal terminale e dalle impostazioni di Expert Advisor.

Ne abbiamo bisogno?

Qui sta succedendo qualcosa di strano, ACCOUNT_TRADE_ALLOWED e ACCOUNT_TRADE_EXPERT sono permessi per fare trading nella tua società di brokeraggio.

Pulsante "AutoTrade". - TerminalInfoInteger(TERMINAL_TRADE_ALLOWED).

C'è MQL5InfoInteger(MQL5_TRADE_ALLOWED) - permesso/proibizione per l'esperto/scrittore di commerciare

 
Swan:

Succede qualcosa di strano, ACCOUNT_TRADE_ALLOWED e ACCOUNT_TRADE_EXPERT hanno il permesso di commerciare nel DC.

Pulsante "AutoTrade". - TerminalInfoInteger(TERMINAL_TRADE_ALLOWED).

C'è anche MQL5InfoInteger(MQL5_TRADE_ALLOWED) - permesso/proibizione per l'esperto/scrittore di commerciare

Conosco MQL5InfoInteger(MQL5_TRADE_ALLOWED), funziona bene ed è normalmente monitorato in Expert Advisor; ancheMQL5_DLLS_ALLOWED è normalmente elaborato.

Così, per come la vedo io:

TERMINAL_DLLS_ALLOWED e TERMINAL_TRADE_ALLOWED sono permessi di livello terminale;

MQL5_DLLS_ALLOWED e MQL5_TRADE_ALLOWED - permessi a livello esperto;

ACCOUNT_TRADE_ALLOWED e ACCOUNT_TRADE_EXPERT - permessi a livello di server.

Poi assumeremo che il server cambi false in true (anche se non è chiaro perché questo messaggio viene mostrato due volte).

 
Swan, grazie per il suggerimento. È tutto sistemato. Tutto sembra funzionare bene...
 

Buon pomeriggio ho questo problema, inizio a scorrere il grafico orario e ad una certa data passa al grafico giornaliero, anche con 15 minuti passano a quello orario o a 4 ore, ho cancellato i file dove è memorizzato lo storico secondo la documentazione ma non è cambiato nulla.

Документация по MQL5: Файловые операции / FileDelete
Документация по MQL5: Файловые операции / FileDelete
  • www.mql5.com
Файловые операции / FileDelete - Документация по MQL5
 
RomanIgorevi4:

Buon pomeriggio ho questo problema, inizio a scorrere il grafico orario e ad una certa data passa al grafico giornaliero, anche con 15 minuti passano a quello orario o a 4 ore, ho cancellato i file dove è memorizzato lo storico secondo la documentazione ma non è cambiato nulla.

Prima di questa data c'è solo la cronologia giornaliera sul server (nessuna cronologia di minuti), quindi tutti i timeframe sono visualizzati come giornalieri.
 

Ho scoperto che c'è un problema con HistoryDealsTotal() mentre si usano gli algoritmi di ottimizzazione del tester.

Durante un normale backtest tutto va bene, ma in una sessione di ottimizzazione, durante la fase di inizializzazione dell'EA, HistoryDealsTotal() restituisce il numero di operazioni dalla precedente esecuzione dell'EA. Più tardi, durante la fase di trading, HistoryDealsTotal() riparte da 0.

Mi sono imbattuto in questo problema attraverso il seguente frammento di codice:

    // constructor
    void MyClass() {
        _dealCnt = HistoryDealsTotal();  // this is causing trouble!
        _orderCnt = OrdersTotal();
        _positionCnt = PositionsTotal();
        _historyOrderCnt = HistoryOrdersTotal();
        ...
    }

Il modo per aggirare questo, è quello di inizializzare con 0 invece, ma ancora sarei contento di una risposta ufficiale a questo problema, perché a me sembra che alcune variabili interne siano resettate troppo tardi.

Grazie in anticipo!

Documentation on MQL5: Trade Functions / HistoryDealsTotal
Documentation on MQL5: Trade Functions / HistoryDealsTotal
  • www.mql5.com
Trade Functions / HistoryDealsTotal - Documentation on MQL5
 

Ciao, rispondi alla mia domanda:

Perché non riesco a scaricare mt5, scarico il file di installazione, lo avvio a metà, si ferma, salta ad un altro punto di accesso, ecc. Alla fine c'è un errore.

-lettura fallita [12002]

questa è la storia costantemente, non importa quante volte reinstallo il terminale o windows, ma ora il terzo giorno fallisce

 

per favore ditemi perché questa costruzione restituisce sempre 0

MqlDateTime dt; Print(dt.min);

e come faccio a sapere quanti minuti sono adesso?

MqlDateTime dt; if(dt.min)>33 ...