Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 963

 
the size of local variables is too large (more than 512 kb)

O que significa este erro de tempo de compilação e como corrigi-lo? Tenho uma turma com cerca de 80.000 linhas. Tenho de fazer duas aulas com ele? Isto é um disparate. Qual é o sentido desta versão de 64 bits se tudo é limitado de tal forma?
 
Juer:
Como se pode dizer o que está a causar a longa compilação (mais de 10 minutos). O ficheiro ex5 resultante pesa cerca de 12mb, não tanto assim. Como posso diagnosticar e corrigir as razões que causam uma compilação tão longa?

https://www.mql5.com/ru/forum/165399#comment_3968004

Optimizar=0

Acho que já resolvi isso.

Время компиляции
Время компиляции
  • 2017.01.02
  • www.mql5.com
Всем привет! Код компилируется очень долго (около минуты). Строк кода - около 4000. От чего зависит время и как можно ускорить...
 
Ao modificar uma ordem, a ordem a que OrderGetDouble se refere deve ser especificada antes do ponto=
 
Ivan Ivanov:
Ao modificar uma ordem, devemos especificar a ordem, à qual OrderGetDouble se refere, antes do ponto=

Obrigado Ivan, estou a experimentar, mas não está a funcionar para mim.

Não compreendo a lógica em si, como seleccionar uma ordem de modificação por tipo e não por bilhete e depois referir as suas propriedades.

Não compreendo a lógica, porque na própria modificação da ordem o bilhete é o campo obrigatório a preencher e não existe nenhum tipo de ordem.

m_trade.OrderModify(ticket,Bid-(SHAG_s*_Point),Ask+((SLL_s-SHAG_s) *_Point),Ask-((TPP_s+SHAG_s)*_Point),0,0,0);

No meu caso, há duas encomendas em aberto: Buy_Stop e Sell_Stop. A sequência da sua abertura pode ser qualquer.

O número do bilhete não me ajuda em nada.

Na condição de verificação, posso descobrir se Sell_Stop (por exemplo) está entre as encomendas em aberto.

Mas não consigo descobrir como devo dirigir-me a esta encomenda em particular Sell_Stop, para que quando aOrderModify for chamada

para modificar exactamente Sell_Stop, e não algo que por acaso estava debaixo do bilhete.

Tenho a sensação de que a sintaxe da língua me faz passar por todas as encomendas no bilhete, apenas para preencher o campo do bilhete naOrderModify.

Foi aqui que me confundi com a modificação de encomendas. Perdi a lógica do processo.

 

Existe alguma função para anexar a um gráfico EA? Como ChartIndicatorAdd().

Ou como posso programar anexar uma EA a um determinado gráfico, se não houver um modelo?

 

Como é que se traduz para mql5?

OP_LOTS = (((AccountBalance() * _LosPercent) / 100) / MarketInfo(Symbol(), MODE_TICKVALUE)) / (pp);
        OP_LOTS = MathRound(OP_LOTS / MarketInfo(Symbol(), MODE_LOTSTEP)) * MarketInfo(Symbol(), MODE_LOTSTEP);
        OP_LOTS = MathMax(OP_LOTS, MarketInfo(Symbol(), MODE_MINLOT));
        OP_LOTS = MathMin(OP_LOTS, MarketInfo(Symbol(), MODE_MAXLOT));
 
Sprut112:

Como posso traduzir para mql5?

double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);
double lotMax = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
double lotMin = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
double lotStep = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
int digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);
Funcionará em ambas as versões.
 

Por favor, aconselhar.

Há um exemplo na ajuda: Algoritmo geral de trabalho com encomendas.

  {
//--- получим общее количество ордеров
   int orders=OrdersTotal();
//--- пробежим по списку ордеров
   for(int i=0;i<orders;i++)
   {
   ResetLastError();
//--- скопируем в кэш ордер по его номеру в списке
   ulong ticket=OrderGetTicket(i);
   if(ticket!=0)// если ордер успешно скопирован в кэш, работаем с ним
   {
   double price_open   =OrderGetDouble(ORDER_PRICE_OPEN);
   datetime time_setup =OrderGetInteger(ORDER_TIME_SETUP);
   string symbol       =OrderGetString(ORDER_SYMBOL);
   long magic_number   =OrderGetInteger(ORDER_MAGIC);
   if(magic_number    ==m_magic)
   {
//  обработаем ордер с заданным ORDER_MAGIC
   }
   PrintFormat("Ордер #%d по %s был выставлен %s, ORDER_MAGIC=%d",ticket,symbol,TimeToString(time_setup),magic_number);
   }
   else  // вызов OrderGetTicket() завершился неудачно
   {
   PrintFormat("Ошибка при получении ордера из списка в кэш. Код ошибки: %d",GetLastError());
   }
   }
  }

Na compilação recebo um aviso de tipodata/hora, aparentemente, há um conflito de tipo de conversão.

Não compreendo qual é o problema; de acordo com Help,ORDER_TIME_SETUP tem tipo dedata/hora.

Qual é o problema e como resolvê-lo?

 
vladzeit:

Por favor, aconselhar.

Há um exemplo na ajuda: Algoritmo geral de trabalho com encomendas.

Na compilação recebo um aviso sobre o tipo dedata e hora, aparentemente, existe um conflito de conversão de tipo.

Não compreendo qual é o problema; de acordo com Help,ORDER_TIME_SETUP tem tipo dedata/hora.

Qual é o problema e como resolvê-lo?

datetime time_setup =(datetime)OrderGetInteger(ORDER_TIME_SETUP);
//....
long magic_number   =(long)OrderGetInteger(ORDER_MAGIC);

OrderGetInteger deve ser convertido para o tipo correcto, o mesmo com INT

 
Konstantin Nikitin:

OrderGetInteger precisa de ser convertido para o tipo correcto, o mesmo com INT

Obrigado pelo exemplo.

Por favor, esclareça... se bem entendi.

com isto=(datetime)OrderGetInteger. estamos a dizer à OrderGetInteger para adoptar o tipo dedata/horaexplícita.?

Esta regra aplica-se a todas as funções que não têm um tipo explícito ou que não correspondem ao tipo da variável a ser atribuída? ou é apenas um caso especial?

Quero compreender se isto é uma regra ou se apenas precisa de ser recordado como um caso especial.