Errori, bug, domande - pagina 564

 
Cloud nerwork utilizzando l'errore.
Qual è la causa di questo problema? Non può usare le risorse del cloud.
 
Urain:

Spiegare.


C'è stato un annuncio preliminare dei cambiamenti previsti . La lista finale dei cambiamenti nella prossima build sarà pubblicata dopo il rilascio della build stessa.
 
Rosh:
C'è stato un annuncio preliminare dei cambiamenti previsti . La lista finale dei cambiamenti nella prossima build sarà pubblicata dopo il rilascio della build stessa.
Grazie.
 

Ho rosicchiato a lungo e duramente il codice dell'indicatore, fino a che non ho assolutamente disperato di catturare gli errori. Non l'ho scritto in "Dummies" perché sospetto non errori fatti da me, ma errori nel lavoro del terminale.

Lo scopo dell'indicatore è quello di posizionare i frattali sul timeframe corrente da un altro timeframe e aggiungerne di nuovi man mano che le nuove barre frattali appaiono. Per favore non suggerite altri metodi per disporre le frecce frattali, non si tratta di questo; le domande qui sono fondamentali, e si riferiscono a questo codice e, forse, sono legate al funzionamento errato del terminale. Ho preso un esempio dalla Guida di iFractals che è stato logicamente accorciato della metà (ai soli frattali superiori) per una più facile percezione e un po' di codice dal Fractals.mq5 standard è stato preso in prestito. Ho dovuto essere molto meticoloso per evitare qualsiasi malinteso: ho legato quasi tutti gli array possibili e pulito gli array lavorati, liberato l'handle dell'indicatore chiamato, il che non ha dato alcuna differenza evidente nei risultati. Sono stati notati i seguenti problemi e peculiarità nel funzionamento:

  1. Quando avvio il terminale per la prima volta, apro una nuova finestra del grafico e applico un indicatore appena compilato, tutti i frattali si accumulano sulla barra zero alla fine della storia (solo uno sembra essere posizionato), invece di essere posizionati come previsto e secondo la logica del codice. Il posizionamento corretto può essere avviato solo saltando ad altri timeframes (a volte nemmeno la prima volta). Inoltre, quando si cancella l'indicatore dal grafico, si chiude la finestra del grafico, si ricompila, si apre una nuova finestra e si applica l'indicatore, quasi sempre si riesce a ottenere immediatamente la disposizione frattale richiesta. Per vedere l'effetto errato, il terminale deve essere completamente scaricato e tutti i passi del passo 1 devono essere ripetuti. 1. Forse il problema risiede nella durata dell'handle dell'indicatore chiamato e nel suo comportamento specifico all'avvio iniziale dell'indicatore personalizzato? Nel caso di una disposizione errata dei frattali (quando sono tutti "compressi" sulla barra zero), l'output di tutti gli elementi di exact_extremum nel ciclo dà risultati nulli, ma l'output dei valori adiacenti di TimeUpBuffer, sulla base dei quali viene calcolato e riempito, mostra sempre date temporali coerentemente diverse. Da qui la domanda: cosa impedisce che si riempia durante la creazione iniziale dell'indicatore, se si riempie correttamente con i valori corretti durante le volte successive?
  2. Lo stesso codice che ha ereditato lo stesso problema, ma ora l'enfasi è su una caratteristica completamente diversa. In questo indicatore, possiamo evitare di legare alcune matrici intermedie calcolate come INDICATOR_CALCULATIONS ai buffer dell'indicatore. Questo è il codice iniziale dell'indicatore. Tutto sembra essere a posto, a parte p. 1. sembra essere ok.
  3. Ma per essere molto intelligenti, proviamo a seguire le migliori raccomandazioni e a collegare gli array per i calcoli intermedi ai buffer degli indicatori:
    #property indicator_chart_window
    #property indicator_buffers 3
    #property indicator_plots   1
    
    [...]
    
    int OnInit()
      {
       [...]
       SetIndexBuffer(1,PreliminaryUpBuffer,INDICATOR_CALCULATIONS);
       SetIndexBuffer(2,exact_extremum,INDICATOR_CALCULATIONS);
       [...]
      }
    compilare ed eseguire. Come risultato otterremo un messaggio di errore nei log di Terminal Expert Advisor: 2011.11.11 07:42:03 (AUDUSD,H1) Schieramento fuori portata, linea:
                CopyHigh(_Symbol,PERIOD_M1,TimeUpBuffer[shift+1]-1,
                                           TimeUpBuffer[shift],
                                           exact_extremum);
    
    Il posizionamento dei frattali su alcuni timeframe è assente o sporadico.
  4. Iniziare una sessione Ouija, fare passaggi di mano magici, obbedire alla scrittura automatica e sostituire:
    #property indicator_chart_window
    #property indicator_buffers 3
    #property indicator_plots   1
    per:
    #define NUMBER 1
    
    #property indicator_chart_window
    #property indicator_buffers NUMBER+2
    #property indicator_plots   NUMBER
    Che sia corretto o meno, ma funziona incomprensibilmente!

Ho una richiesta agli abitanti di noosphere e soprattutto agli sviluppatori: potreste spiegare ogni voce e consigliare come eseguire il debug del codice dell'indicatore (se non cambierò la sua implementazione).

Grazie e file allegati.

P.S.: Nei nomi dei file c'erano le parentesi, ma dopo il caricamento si sono rovinate.

 

Come posso determinare il profitto attuale su un trade magico?

questo codice restituisce i profitti su operazioni chiuse e ne ho bisogno su operazioni aperte

#include <Trade\Trade.mqh>
CTrade trade;
void OnTick()
  {
   double profit=0;
   if(PositionSelect(Symbol()))profit=PositionGetDouble(POSITION_PROFIT);
   if(profit==0) trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,0.1,SymbolInfoDouble(Symbol(),SYMBOL_ASK),0,0,"");
   if(profit>1) trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,0.1,SymbolInfoDouble(Symbol(),SYMBOL_ASK),0,0,"");
   
   double ld_return=0;  
   HistorySelect(0,TimeTradeServer());
   for(int i=HistoryDealsTotal()-1;i>=0;i--) // По всем сделкам от конца к началу
     {
      ulong ticket=HistoryDealGetTicket(i); // Определение тикета сделки и ее выделение
      if(ticket!=0) 
      {
      if(HistoryDealGetInteger(ticket,DEAL_TYPE)<2)
      ld_return+=HistoryDealGetDouble(ticket,DEAL_PROFIT);
      }
     }     
   Comment(ld_return);   
  }
 

Come faccio a sapere perché l'inizializzazione fallisce?

Azzero gli errori prima dell'inizio dell'inizializzazione con

ResetLastError();

Alla fine dell'inizializzazione vedo un errore

Print("Ошибка " + IntegerToString(GetLastError()));

Finisco per entrare nella scheda Expert Advisors

2011.11.11 08:47:51 SimpleExpert (EURUSD,H1) Errore 0

Nella scheda "Diario"

2011.11.11 08:47:51 Esperti di inizializzazione di SimpleExpert (EURUSD,H1) fallito

 
Konstantin83:

Come faccio a sapere perché l'inizializzazione fallisce?

Prima di iniziare l'inizializzazione ho resettato gli errori con la funzione

ResetLastError();

Alla fine visualizzo un errore

Print("Ошибка " + IntegerToString(GetLastError()));

Ottengo il seguente risultato nella scheda Esperti

2011.11.11 08:47:51 SimpleExpert (EURUSD,H1) Errore 0

Nella scheda "Diario"

2011.11.11 08:47:51 Esperti di inizializzazione di SimpleExpert (EURUSD,H1) fallito

OnInit restituisce 0 o non 0?
 
stringo:
OnInit restituisce 0 o non 0?

OnInit restituisce true, in qualche modo mi è sfuggito.

Grazie, va bene così.

 
ddd06:

Come posso determinare il profitto attuale su un trade magico?

Questo codice restituisce i profitti sui trade chiusi, ma ne ho bisogno su quelli aperti

Guarda l'articolo di Dmitry(Integer). Tutto è implementato in modo ottimale lì. Articolo:Metodo ottimale di calcolo del volume di posizione cumulativo per numero magico specificato.
 
Buon pomeriggio, ho iniziato a scrivere multivariante, chiamo iMA, per qualche motivo nel commercio reale tutto funziona bene, non appena ho eseguito nel tester un esperto errore rimosso perché l'indicatore 'Moving Average' non può caricare [4804], qual è l'indicatore sull'indicatore, non molto chiaro, non ho potuto trovare una risposta plausibile su Internet. Per favore, consigliatemi, ve ne sarei molto grato.
Документация по MQL5: Технические индикаторы / iMA
Документация по MQL5: Технические индикаторы / iMA
  • www.mql5.com
Технические индикаторы / iMA - Документация по MQL5