Erros, bugs, perguntas - página 886

 
Yedelkin:
Pode haver várias razões... Os mais conhecidos são a divisão por zero, deixando a matriz.

Obrigado.

O que é produzido fora da matriz? Peço desculpa pela minha ignorância.

Tenho apenas 3 divisões:

TradeLot=AccountInfoDouble(ACCOUNT_BALANCE)*(PercentSize/100)/(100); 
MaxLotAllowed=MathFloor((MeansFree/MeansOneLot)*100)/100;
(PositionVolume()+Volume())*(100)*(100))/AccountInfoDouble(ACCOUNT_BALANCE)
 
G001: Tenho apenas 3 divisões:

É aqui que a divisão por zero poderia potencialmente ocorrer:

/AccountInfoDouble(ACCOUNT_BALANCE)

É necessária uma verificação básica.

G001 : O que é produzido fora da matriz? Peço desculpa pela minha ignorância.

É quando, por exemplo:

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

Na última iteração, haverá uma saída fora da matriz.

 
Yedelkin:

É aqui que a divisão por zero poderia potencialmente ocorrer:

É necessária uma verificação básica.

Isto é quando, por exemplo:

Na última iteração, haverá uma saída fora da matriz.

Obrigado.

Fixe, devemos verificar se a função funciona correctamente?

AccountInfoDouble(ACCOUNT_BALANCE)

 
G001: Fixe, tem de verificar se a função funciona correctamente?
Bem, o que acontece quando o equilíbrio vai a zero e a função funciona correctamente? :)
 

Não há problema com um contador como este?

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:
Bem, o que acontece quando o equilíbrio vai a zero e a função funciona correctamente? :)
Tens razão, eu arranjo-o lá.
Mas agora o meu equilíbrio não é zero e o meu EA sorri verde mas deixa de funcionar, anormalmente e sem quaisquer avisos, seria melhor não sorrir... :)
 
G001: Não há nenhum problema com este balcão?

A para declaração não tem o tipo de variável i definido. A variável Magia não está definida. Na linha.

if(OrderSelect(OrderGetTicket(i)))
A função OrderSelect() é desnecessária. Não reparei em mais nada.
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
  • www.mql5.com
Основы языка / Операторы / Оператор цикла for - Документация по MQL5
 
AndreyS:

problema com erro (Error CopyBuffer - número de erro: 4806) - Removo-o, curo-o porSleep(1000); - Coloquei-o no indicador não tendo tempo suficiente para criar.

A questão com o erro (4194304 bytes não disponíveis) permanece.

O mais provável é que seja criado. Mas antes de copiarmos os dados, devemos verificar se os dados que queremos receber (o indicador teve tempo para calcular?). A função BarsCalculated deve ajudar.

Em seguida, solicita-se todos os prazos por símbolo. Se estes dados estiverem prontos - são descarregados do disco para a memória, se não - começam a ser construídos (a memória também é consumida) + 100 indicadores com um período diferente para cada TF, e tudo isto na memória. Os dados não são imediatamente descarregados da memória (caso queira solicitá-los novamente)...

Reduzir o número de barras na tabela.

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

O for statement não tem o tipo de variável i definido. A variável Magia não está definida. Na linha

OrderSelect() é redundante. Não reparei em mais nada.

Obrigado.

Existe um fora do 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:

É provável que tenha sido criada. Apenas antes de copiar os dados, deve verificar se os dados estão disponíveis (o indicador já está regularizado?). A função BarsCalculated deve ajudar.

Em seguida, solicita-se todos os prazos por símbolo. Se os dados estiverem prontos - são descarregados do disco para a memória, caso contrário - começam a ser construídos (a memória também é consumida) + 100 indicadores com um período diferente para cada TF, e tudo isto na memória. Os dados não são imediatamente descarregados da memória (caso queira solicitá-los novamente)...

Reduzir o número de barras na tabela.

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

O número de barras não altera nada,

O problema é escondido nos períodos, para variantes

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

não funciona, 19-5=14 - períodos diferentes,

Se forem reduzidos a 4, então tudo funciona, por exemplo:

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

Embora o foru IndicatorRelease(m_handle) - seja de facto incorrectamente utilizado.

Penso que mesmo que não se soltem pegas com a função IndicatorRelease, esta deve funcionar de qualquer forma,

Portanto, o problema está no número de períodos diferentes.

Ou...