Erros, bugs, perguntas - página 42

 
Kos:
De que serve a compilação de uma construção deste tipo, se isso levar à incapacidade de carregar o programa MQL5?

Obrigado pelo correio. O erro de análise NULL para ooperador do condit foi corrigido.
 

Qual é o número máximo de arrays dinâmicos num indicador?

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
dentraf:

Qual é o número máximo de arrays dinâmicos num indicador?

As limitações são ditadas pelos seus recursos de hardware.

Quanta memória está disponível.

 
dentraf:

Qual é o número máximo de arrays dinâmicos num indicador?

Não existem mais do que 512 matrizes de indicadores. Em geral, quaisquer arrays - tantos quantos houver memória suficiente
 

escreveu este guião para verificar a função

OrderCalcMargin()

devolve erro 4002, o que fiz de errado?

void OnStart()
  {
   int total=SymbolsTotal(false);
   double marginbay;
   double marginsell;
   MqlTick pr;
   for(int i=0;i<=total;i++)
     {
      if(OrderCalcMargin(ORDER_TYPE_BUY,SymbolName(i,false),1.0,pr.ask,marginbay))
         Print("Маржа для покупки "+SymbolName(i,false)+" = ",DoubleToString(marginbay));
      else Print("Ошибка  № - ",GetLastError());

      if(OrderCalcMargin(ORDER_TYPE_SELL,SymbolName(i,false),1.0,pr.bid,marginsell))
         Print("Маржа для продажи "+SymbolName(i,false)+" = ",DoubleToString(marginsell));
      else Print("Ошибка  № - ",GetLastError());

     }
  }
 

é estranho se não se utilizar a estrutura do pedido de preços correntes então tudo é calculado excepto instrumentos como #AA neste caso devolve zero, pergunto-me porquê? como calcular então a margem para tais instrumentos

void OnStart()
  {
   int total=SymbolsTotal(false);
   double marginbay;
   double marginsell;
   //MqlTick pr;
   for(int i=0;i<=total;i++)
     {
      if(OrderCalcMargin(ORDER_TYPE_BUY,SymbolName(i,false),1.0,SymbolInfoDouble(SymbolName(i,false),SYMBOL_ASK),marginbay))
         Print("Маржа для покупки "+SymbolName(i,false)+" = ",DoubleToString(marginbay));
      else Print("Ошибка  № - ",GetLastError());

      if(OrderCalcMargin(ORDER_TYPE_SELL,SymbolName(i,false),1.0,SymbolInfoDouble(SymbolName(i,false),SYMBOL_BID),marginsell))
         Print("Маржа для продажи "+SymbolName(i,false)+" = ",DoubleToString(marginsell));
      else Print("Ошибка  № - ",GetLastError());

     }
  }
Документация по MQL5: Получение рыночной информации / SymbolInfoTick
Документация по MQL5: Получение рыночной информации / SymbolInfoTick
  • www.mql5.com
Получение рыночной информации / SymbolInfoTick - Документация по MQL5
 
Descobri porque é que a primeira opção não funcionava, tive de escrever a função
SymbolInfoTick(SymbolName(i,false),pr);
no corpo do laço para obter a cotação do símbolo solicitado.
void OnStart()
  {
   int total=SymbolsTotal(false);
   double marginbay;
   double marginsell;
   MqlTick pr;
   for(int i=0;i<=total;i++)
     {
      SymbolInfoTick(SymbolName(i,false),pr);
      if(OrderCalcMargin(ORDER_TYPE_BUY,SymbolName(i,false),1.0,pr.ask,marginbay))
         Print("Маржа для покупки "+SymbolName(i,false)+" = ",DoubleToString(marginbay));
      else Print("Ошибка  № - ",GetLastError());

      if(OrderCalcMargin(ORDER_TYPE_SELL,SymbolName(i,false),1.0,pr.bid,marginsell))
         Print("Маржа для продажи "+SymbolName(i,false)+" = ",DoubleToString(marginsell));
      else Print("Ошибка  № - ",GetLastError());

     }
  }
A questão sobre os valores nulos de instrumentos do tipo #AA ainda é relevante
 
sergey1294:

escreveu este guião para verificar a função

Erro de retorno 4002, o que fiz de errado?


sergey1294:
Descobri porque é que a primeira versão não funcionou, devia ter escrito a função no corpo do laço para obter as citações para o símbolo solicitado.

Decide apenas ajudar... :)

PS

Não sei de outros, mas o mercado está meio fechado para #AA...

 
Compreendo correctamente que um código do seguinte tipo
AccountInfoDouble(ACCOUNT_FREEMARGIN) - OrderCalcMargin();
é um análogo da função MT4
AccountFreeMarginCheck()
 
sergey1294:
Também tenho uma pergunta, se entendo correctamente, que este tipo de código é um análogo da função MT4?

Se não houver posições abertas, a afirmação será provavelmente correcta, se houver posições abertas, a imagem é um pouco diferente...