Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 585

 
barudkinarseniy:
Ciao Compagni! Potete dirmi per favore qual è l'errore, il compilatore dà un avvertimento sulla possibile perdita di dati (
È necessaria una conversione esplicita del tipo:
int ts = (int)SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL);
 
Vasiliy Sokolov:
È necessaria una conversione esplicita del tipo:
Grazie! Non posso ricordare tutte queste sfumature di conversione))
 
barudkinarseniy:
Grazie! Non posso ricordare tutte queste sfumature di conversione))
Spesso è questo:SymbolInfoInteger che è fuorviante. Ecco perché è meglio guardare ancora una volta nell'aiuto.
 
Per favore, ditemi qual è il problema. Il compilatore non dà alcun errore. Nel tester, la maggior parte dei trade sono ok, ma a volte il gestore degli errori nella stampante scrive stop sbagliati e il prezzo aperto scrive con 6 decimali: 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:
Per favore, ditemi qual è il problema. Il compilatore non dà alcun errore. Nel tester, la maggior parte dei trade sono ok, ma a volte il gestore degli errori nella stampante scrive stop sbagliati e il prezzo aperto scrive con 6 decimali: Invalid price (stop) OrderSendX(symbol=AUDCAD,cmd=SELL,volume=0.29,price=0.995120,slippage=50,stoploss=0.996470,takeprofit=0.991070)

La prima cosa che ha attirato la mia attenzione è stato questo frammento di codice, queste due funzioni sono le stesse
 int msl = (int) MarketInfo(Symbol(),MODE_STOPLEVEL);
 int stsl = (int) SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL);
il primo è vecchio, il secondo è nuovo
 
Potete per favore consigliarmi se un EA continuerà a funzionare se cambio il profilo in MT4? O tutte le finestre EA devono essere aperte nello stesso profilo per funzionare in modo permanente?
 

Buon giorno cari programmatori!

È possibile scrivere un programma in MQL4 che disegni un grafico in forma di candele secondo i valori calcolati in diversi timeframe? Forse ci sono codici già pronti per questi problemi?

 
Ivan Molchanov:
Puoi per favore consigliarmi se l'EA continuerà a funzionare quando cambio il profilo in MT4? O tutte le finestre EA devono essere aperte in un profilo per funzionare in modo permanente?

Strumenti => Impostazioni



e fare quello che vuoi...

 
Ciao, potresti dirmi come prescrivere nei parametri impostati la selezione del timeframe esterno? Sarebbe esattamente una selezione e non da stampare manualmente.
 
barudkinarseniy:
Ciao, potresti dirmi come scrivere nel set di parametri extern per selezionare il timeframe? Sarebbe esattamente una selezione e non la stampa manuale.

Usa la variabile di tipo enumerazione ENUM_TIMEFRAMES.