Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 585

 
barudkinarseniy:
¡Hola camaradas! Pueden decirme cuál es el error, el compilador da un aviso de posible pérdida de datos(
Se necesita una conversión de tipo explícita:
int ts = (int)SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL);
 
Vasiliy Sokolov:
Se necesita una conversión de tipo explícita:
Gracias. No puedo recordar todos estos matices de la conversión))
 
barudkinarseniy:
Gracias. No puedo recordar todos estos matices de la conversión))
A menudo es esto:SymbolInfoInteger lo que es engañoso. Por eso es mejor buscar en la ayuda una vez más.
 
Por favor, dígame cuál es el problema. El compilador no da ningún error. En el probador, en la mayoría de las transacciones todo va bien, pero a veces el manejador de errores en la impresora no escribe los stops correctos y el precio abierto escribe con 6 decimales: Invalid price (stop) OrderSendX(symbol=AUDCAD,cmd=SELL,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, dígame cuál es el problema. El compilador no da ningún error. En el probador, la mayoría de las operaciones están bien, pero a veces el manejador de errores en la impresora escribe stops erróneos y el precio abierto escribe con 6 decimales: Invalid price (stop) OrderSendX(symbol=AUDCAD,cmd=SELL,volume=0.29,price=0.995120,slippage=50,stoploss=0.996470,takeprofit=0.991070)

Lo primero que me llamó la atención fue este fragmento de código, estas dos funciones son iguales
 int msl = (int) MarketInfo(Symbol(),MODE_STOPLEVEL);
 int stsl = (int) SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL);
el primero es viejo, el segundo es nuevo
 
¿Pueden aconsejarme si un EA seguirá funcionando si cambio el perfil en MT4? ¿O todas las ventanas de EA tienen que estar abiertas en el mismo perfil para que funcionen permanentemente?
 

¡Buenos días queridos programadores!

¿Es posible escribir un programa en MQL4 que dibuje un gráfico en forma de velas según los valores calculados en diferentes marcos temporales? ¿Quizás haya códigos ya hechos para estos problemas?

 
Ivan Molchanov:
¿Pueden aconsejarme si el EA seguirá funcionando cuando cambie el perfil en MT4? ¿O hay que abrir todas las ventanas de EA en un perfil para que funcionen permanentemente?

Herramientas => Configuración



y haz lo que quieras...

 
Hola, ¿podríais decirme cómo especificar en los parámetros de ajuste la selección del marco temporal externo? Sería exactamente una selección y no para imprimir manualmente.
 
barudkinarseniy:
Hola, ¿podríais decirme cómo escribir en el set parameters extern para seleccionar el timeframe? Eso sería exactamente una selección y no imprimir manualmente.

Utilice la variable de tipo de enumeración ENUM_TIMEFRAMES.