Errores, fallos, preguntas - página 886

 
Yedelkin:
Podría haber cualquier número de razones... Los más conocidos son la división por cero, dejando la matriz.

Gracias.

¿Cuál es la salida fuera de la matriz? Pido disculpas por mi ignorancia.

Sólo tengo 3 divisiones:

TradeLot=AccountInfoDouble(ACCOUNT_BALANCE)*(PercentSize/100)/(100); 
MaxLotAllowed=MathFloor((MeansFree/MeansOneLot)*100)/100;
(PositionVolume()+Volume())*(100)*(100))/AccountInfoDouble(ACCOUNT_BALANCE)
 
G001: Sólo tengo 3 divisiones:

Aquí es donde podría producirse la división por cero:

/AccountInfoDouble(ACCOUNT_BALANCE)

Es necesario hacer una comprobación básica.

G001 : ¿Qué es lo que sale fuera de la matriz? Pido disculpas por mi ignorancia.

Es cuando, por ejemplo:

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

En la última iteración habrá una salida fuera del array.

 
Yedelkin:

Aquí es donde podría producirse la división por cero:

Es necesario hacer una comprobación básica.

Esto es cuando, por ejemplo:

En la última iteración habrá una salida fuera del array.

Gracias.

Genial, ¿debemos comprobar si la función funciona correctamente?

AccountInfoDouble(ACCOUNT_BALANCE)

 
G001: Genial, ¿tienes que comprobar si la función funciona correctamente?
Bien, ¿qué ocurre cuando el saldo llega a cero y la función funciona correctamente? :)
 

¿No hay ningún problema con un medidor como éste?

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:
Bien, ¿qué ocurre cuando el saldo llega a cero y la función funciona correctamente? :)
Tienes razón, lo arreglaré ahí.
Pero ahora mi saldo no es cero y mi EA sonríe en verde pero deja de funcionar, de forma anormal y sin avisos, sería mejor no sonreír... :)
 
G001:¿No hay ningún problema con este contador?

La sentencia for no tiene definido el tipo de variable i. La variable Magia no está definida. En la línea.

if(OrderSelect(OrderGetTicket(i)))
La función OrderSelect() es innecesaria. No he notado nada más.
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
  • www.mql5.com
Основы языка / Операторы / Оператор цикла for - Документация по MQL5
 
AndreyS:

problema con el error (Error CopyBuffer - número de error: 4806) - lo quito, lo curo conSleep(1000); - lo achaco a que el indicador no tiene suficiente tiempo para crear.

El problema del error (4194304 bytes no disponibles) se mantiene.

Lo más probable es que se cree. Pero antes de copiar los datos, debemos comprobar si los datos que queremos recibir (¿ha tenido tiempo de calcular el indicador?). La función BarsCalculated debería ayudar.

A continuación, solicita todos los plazos por símbolo. Si estos datos están listos - se descargan del disco a la memoria, si no - se empiezan a construir (la memoria también se consume) + 100 indicadores con un período diferente para cada TF, y todo esto en la memoria. Los datos no se descargan inmediatamente de la memoria (en caso de que quiera volver a solicitarlos)...

Reduzca el número de barras del gráfico.

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

La sentencia for no tiene definido el tipo de variable i. La variable Magia no está definida. En la línea

OrderSelect() es redundante. No he notado nada más.

Gracias.

Hay uno fuera del operador.

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:

Es probable que se haya creado. Sólo antes de copiar los datos, debe comprobar si los datos están disponibles (¿se ha liquidado el indicador?). La función BarsCalculated debería ayudar.

A continuación, solicita todos los plazos por símbolo. Si los datos están listos - se descargan del disco a la memoria, si no - se empiezan a construir (la memoria también se consume) + 100 indicadores con un período diferente para cada TF, y todo esto en la memoria. Los datos no se descargan inmediatamente de la memoria (en caso de que quiera volver a solicitarlos)...

Reduzca el número de barras del gráfico.

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

El número de barras no cambia nada,

El problema se esconde en los períodos, para las variantes

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

no funciona, 19-5=14 - períodos diferentes,

Si se reducen a 4, entonces todo funciona, por ejemplo:

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

Aunque foru IndicatorRelease(m_handle) - sí se utiliza incorrectamente.

Creo que aunque no se liberen las asas con la función IndicatorRelease, debería funcionar igualmente,

Por lo tanto, el problema está en el número de períodos diferentes.

O...