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

 
barudkinarseniy:
Olá Camaradas! Pode por favor dizer-me qual é o erro, o compilador dá um aviso sobre a possível perda de dados(
É necessária uma conversão de tipo explícita:
int ts = (int)SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL);
 
Vasiliy Sokolov:
É necessária uma conversão de tipo explícita:
Obrigado! Não me consigo lembrar de todas estas nuances de conversão))
 
barudkinarseniy:
Obrigado! Não me consigo lembrar de todas estas nuances de conversão))
Muitas vezes é isto:SymbolInfoInteger que é enganador. É por isso que é melhor procurar mais uma vez na ajuda.
 
Por favor, digam-me qual é o problema. O compilador não dá quaisquer erros. No verificador, a maioria dos negócios está bem, mas por vezes o manipulador de erros na impressora escreve paragens erradas e o preço aberto escreve com 6 casas decimais: Preço inválido (stop) OrderSendX(symbol=AUDCAD,cmd=SELLL,volume=0,29,price=0,995120,slippage=50,stoploss=0,996470,takeprofit=0,991070)

//+------------------------------------------------------------------+
//Открытие ордеров
void OrderOpen(int otype, double OpenPriceW1)
{
 int msl = (int) MarketInfo(Symbol(),MODE_STOPLEVEL);
 int stsl = (int) SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL);
 
 if(otype == OP_BUY)
 {
  StepSTBAY = (int)(Ask/Point - OpenPriceW1/Point);
  
  if(StepSTBAY < msl) StepSTBAY = msl;
  if(StepSTBAY < stsl) StepSTBAY = StepSTBAY + stsl;
  
  lots = LotsByRisk(OP_BUY,StepSTBAY);
  ST_BAY = NormalizeDouble(Ask - StepSTBAY*Point,Digits);
  TP_BAY = NormalizeDouble(Ask + StepSTBAY*RR*Point,Digits);
      
  OrderSendX(Symbol(),OP_BUY,lots,Ask,slipage,ST_BAY,TP_BAY,"",Magic,0,clrGreen);
 }
 if(otype == OP_SELL)
 {
  StepSTSELL = (int)(OpenPriceW1/Point - Bid/Point);
  
  if(StepSTSELL < msl) StepSTSELL = msl;
  if(StepSTSELL < stsl) StepSTSELL = StepSTSELL + stsl;
  
  lots = LotsByRisk(OP_SELL,StepSTSELL);
  ST_SELL = NormalizeDouble(Bid + StepSTSELL*Point,Digits);
  TP_SELL = NormalizeDouble(Bid - StepSTSELL*RR*Point,Digits);
     
  OrderSendX(Symbol(),OP_SELL,lots,Bid,slipage,ST_SELL,TP_SELL,"",Magic,0,clrRed);
 }
}
//+------------------------------------------------------------------+
 
barudkinarseniy:
Por favor, digam-me qual é o problema. O compilador não dá quaisquer erros. No verificador, a maioria dos negócios está bem, mas por vezes o manipulador de erros na impressora escreve paragens erradas e o preço aberto escreve com 6 casas decimais: Preço inválido (stop) OrderSendX(symbol=AUDCAD,cmd=SELLL,volume=0,29,price=0,995120,slippage=50,stoploss=0,996470,takeprofit=0,991070)

A primeira coisa que me chamou a atenção foi este fragmento de código, estas duas funções são as mesmas
 int msl = (int) MarketInfo(Symbol(),MODE_STOPLEVEL);
 int stsl = (int) SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL);
o primeiro é velho, o segundo é novo
 
Pode informar se um EA continuará a trabalhar se eu alterar o perfil no MT4? Ou será que todas as janelas da EA têm de estar abertas no mesmo perfil para funcionarem permanentemente?
 

Bom dia, caros programadores!

É possível escrever um programa em MQL4 que desenhe um gráfico sob a forma de castiçais de acordo com os valores calculados em diferentes intervalos de tempo? Talvez existam códigos prontos para tais problemas?

 
Ivan Molchanov:
Pode informar se a EA vai continuar a trabalhar quando eu alterar o perfil no MT4? Ou será que todas as janelas da EA têm de ser abertas num único perfil para funcionarem permanentemente?

Ferramentas => Definições



e faça o que quiser...

 
Olá, poderia por favor dizer-me como prescrever nos parâmetros definidos a selecção de prazos externos? Seria exactamente uma selecção e não uma impressão manual.
 
barudkinarseniy:
Olá, poderia por favor dizer-me como escrever nos parâmetros definidos no exterior para seleccionar o período de tempo? Isso seria exactamente uma selecção e não uma impressão manual.

Utilizar a variável do tipo enumeração ENUM_TIMEFRAMES.