Errori, bug, domande - pagina 886

 
Yedelkin:
Ci potrebbe essere un numero qualsiasi di ragioni... I più noti sono la divisione per zero, lasciando l'array.

Grazie.

Cos'è l'output al di fuori dell'array? Mi scuso per la mia ignoranza.

Ho solo 3 divisioni:

TradeLot=AccountInfoDouble(ACCOUNT_BALANCE)*(PercentSize/100)/(100); 
MaxLotAllowed=MathFloor((MeansFree/MeansOneLot)*100)/100;
(PositionVolume()+Volume())*(100)*(100))/AccountInfoDouble(ACCOUNT_BALANCE)
 
G001: Ho solo 3 divisioni:

Qui è dove la divisione per zero potrebbe potenzialmente verificarsi:

/AccountInfoDouble(ACCOUNT_BALANCE)

È necessario un controllo di base.

G001 : che cosa è l'uscita fuori dalla matrice? Mi scuso per la mia ignoranza.

È quando, per esempio:

double array[3];
for (int i=0; i<=3; i++) array[i];

All'ultima iterazione ci sarà un'uscita fuori dall'array.

 
Yedelkin:

Qui è dove la divisione per zero potrebbe potenzialmente verificarsi:

È necessario un controllo di base.

Questo è quando, per esempio:

All'ultima iterazione ci sarà un'uscita fuori dall'array.

Grazie.

Bene, dobbiamo controllare se la funzione funziona correttamente?

AccountInfoDouble(ACCOUNT_BALANCE)

 
G001: Forte, devi controllare se la funzione funziona correttamente?
Bene, cosa succede quando il saldo va a zero e la funzione funziona correttamente? :)
 

Non ci sono problemi con un contatore come questo?

int TotalBullStopOrders()
{
  int BullCounter=0;
  int Total = OrdersTotal();
  for(i = 0; i < Total; i++)
  {
    if(OrderSelect(OrderGetTicket(i)))
    {
      if(OrderGetString(ORDER_SYMBOL)==Symbol() && OrderGetInteger(ORDER_MAGIC)==Magic)
      {
        if(OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_BUY_STOP)
        {
          BullCounter++;
        }
      }
    }
  }
  return(BullCounter);
}
 
Yedelkin:
Bene, cosa succede quando il saldo va a zero e la funzione funziona correttamente? :)
Hai ragione, lo sistemerò lì.
Ma ora il mio saldo non è zero e il mio EA sorride verde ma smette di funzionare, in modo anomalo e senza alcun avvertimento, sarebbe meglio non sorridere... :)
 
G001: Non ci sono problemi con questo contatore?

L'istruzione for non ha il tipo di variabile i definito. La variabile Magic non è definita. Nella linea.

if(OrderSelect(OrderGetTicket(i)))
La funzione OrderSelect() non è necessaria. Non ho notato altro.
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
  • www.mql5.com
Основы языка / Операторы / Оператор цикла for - Документация по MQL5
 
AndreyS:

problema con l'errore (Error CopyBuffer - numero di errore: 4806) - lo rimuovo, lo curo conSleep(1000); - lo attribuisco all'indicatore che non ha abbastanza tempo per creare.

Il problema dell'errore (4194304 byte non disponibili) rimane.

Molto probabilmente verrà creato. Ma prima di copiare i dati, dobbiamo controllare se i dati che vogliamo ricevere (l'indicatore ha avuto il tempo di calcolare?). La funzione BarsCalculated dovrebbe aiutare.

Poi richiedete tutti i timeframe per simbolo. Se questi dati sono pronti - vengono scaricati dal disco nella memoria, se non lo sono - si comincia a costruire (si consuma anche la memoria) + 100 indicatori con un periodo diverso per ogni TF, e tutto questo nella memoria. I dati non sono immediatamente scaricati dalla memoria (nel caso si voglia richiederli di nuovo)...

Riduci il numero di barre sul grafico.

Документация по MQL5: Доступ к таймсериям и индикаторам / BarsCalculated
Документация по MQL5: Доступ к таймсериям и индикаторам / BarsCalculated
  • www.mql5.com
Доступ к таймсериям и индикаторам / BarsCalculated - Документация по MQL5
 
Yedelkin:

L'istruzione for non ha il tipo di variabile i definito. La variabile Magic non è definita. Nella linea

OrderSelect() è ridondante. Non ho notato altro.

Grazie.

Ce n'è uno fuori dall'operatore.

input int    Magic          = 55;

MqlTradeRequest request={0};
MqlTradeResult result={0};
MqlTradeCheckResult check={0};
//-----
int LotsDigits;
int Indicator;
double IndicatorVal[5];
double Ask;
double Bid;
int i;
int pos;
double TradeLot;
ulong StopLevel;
double MeansFree;
double MaxLotAllowed;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
 
alexvd:

È probabile che sia stato creato. Solo prima di copiare i dati, dovreste controllare se i dati sono disponibili (l'indicatore si è stabilizzato?). La funzione BarsCalculated dovrebbe aiutare.

Poi richiedete tutti i timeframe per simbolo. Se i dati sono pronti - vengono scaricati dal disco nella memoria, se non lo sono - si comincia a costruire (si consuma anche la memoria) + 100 indicatori con un periodo diverso per ogni TF, e tutto questo nella memoria. I dati non vengono immediatamente scaricati dalla memoria (nel caso si voglia richiederli di nuovo)...

Riduci il numero di barre sul grafico.

        while(BarsCalculated(m_handle)==-1 && !IsStopped()) Sleep(1); // Спасибо alexvd - откоректировал строку с учётом замечаний

Il numero di barre non cambia nulla,

Il problema è nascosto nei periodi, per le varianti

for(int iperiod=5; iperiod<=19; iperiod++) 

non funziona, 19-5=14 - periodi diversi,

Se sono ridotti a 4, allora tutto funziona, per esempio:

for(int iperiod=16; iperiod<=19; iperiod++)

Anche se foru IndicatorRelease(m_handle) - è effettivamente utilizzato in modo errato.

Penso che anche se non rilasciate le maniglie con la funzione IndicatorRelease, dovrebbe funzionare comunque,

Quindi, il problema è nel numero di periodi diversi.

Oppure...