Questions des débutants MQL5 MT5 MetaTrader 5 - page 585

 
barudkinarseniy:
Bonjour Camarades ! Pouvez-vous me dire quelle est l'erreur, le compilateur donne un avertissement sur une possible perte de données(
Une conversion de type explicite est nécessaire :
int ts = (int)SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL);
 
Vasiliy Sokolov:
Une conversion de type explicite est nécessaire :
Merci ! Je ne peux pas me souvenir de toutes ces nuances de conversion))
 
barudkinarseniy:
Merci ! Je ne peux pas me souvenir de toutes ces nuances de conversion))
Souvent, c'est ceci :SymbolInfoInteger qui est trompeur. C'est pourquoi il est préférable de regarder dans l'aide une fois de plus.
 
Veuillez me dire quel est le problème. Le compilateur n'émet aucune erreur. Dans le testeur, dans la plupart des transactions tout va bien, mais parfois le gestionnaire d'erreur dans l'imprimante n'écrit pas les stops corrects et le prix ouvert écrit avec 6 décimales : 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:
Veuillez me dire quel est le problème. Le compilateur n'émet aucune erreur. Dans le testeur, la plupart des transactions sont correctes, mais parfois le gestionnaire d'erreurs dans l'imprimante écrit des stops erronés et le prix ouvert écrit avec 6 décimales : Prix invalide (stop) OrderSendX(symbol=AUDCAD,cmd=SELL,volume=0.29,price=0.995120,slippage=50,stoploss=0.996470,takeprofit=0.991070)

La première chose qui a attiré mon attention est ce fragment de code, ces deux fonctions sont les mêmes
 int msl = (int) MarketInfo(Symbol(),MODE_STOPLEVEL);
 int stsl = (int) SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL);
le premier est ancien, le second est nouveau
 
Pouvez-vous me dire si un EA continuera à fonctionner si je change le profil dans MT4 ? Ou bien toutes les fenêtres EA doivent-elles être ouvertes dans le même profil pour fonctionner en permanence ?
 

Bonne journée chers programmateurs !

Est-il possible d'écrire un programme en MQL4 qui dessine un graphique sous forme de chandeliers en fonction de valeurs calculées à différentes échéances ? Peut-être existe-t-il des codes prêts à l'emploi pour de tels problèmes ?

 
Ivan Molchanov:
Pouvez-vous me dire si l'EA continuera à fonctionner lorsque je changerai le profil dans MT4 ? Ou bien toutes les fenêtres EA doivent-elles être ouvertes dans un seul profil pour fonctionner de manière permanente ?

Outils => Paramètres



et faire ce que tu veux...

 
Bonjour, pourriez-vous me dire comment prescrire dans les paramètres fixés la sélection d'un délai externe ? Il s'agirait exactement d'une sélection et non d'une impression manuelle.
 
barudkinarseniy:
Bonjour, pourriez-vous me dire comment écrire dans l'ensemble des paramètres externes pour sélectionner le délai ? Il s'agirait exactement d'une sélection et non d'une impression manuelle.

Utiliser la variable de type énumération ENUM_TIMEFRAMES.