Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1227

 

Ciao a tutti, solo un rapido aggiornamento sul thread: c'è una domanda nel codice:

int stoplevel;
int  MinimumUseStopLevel;

// Calculate stoplevel as max of either STOPLEVEL or FREEZELEVEL
   stoplevel = fmax(SymbolInfoInteger(_Symbol,MODE_FREEZELEVEL), SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL));
// Then calculate the stoplevel as max of either this stoplevel or MinimumUseStopLevel
   stoplevel = fmax(MinimumUseStopLevel, stoplevel);

Durante la compilazione, genera un avviso:"possibile perdita di dati a causa della conversione dei tipi...". Di cosa ha bisogno? Non è così critico, ma mi piacerebbe saperlo.


Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Часто возникает необходимость преобразовать один числовой тип в другой. Не каждый числовой тип допустимо преобразовать в другой, допустимые преобразования в MQL5 показаны на схеме: Сплошные линии со стрелками обозначают преобразования, которые выполняются без потери информации. Вместо типа char может выступать тип bool (оба занимают в памяти 1...
 
Sayberix:

Ciao a tutti, solo un rapido aggiornamento sul thread: c'è una domanda nel codice:

Durante la compilazione, genera un avviso:"possibile perdita di dati a causa della conversione dei tipi...". Di cosa ha bisogno? Non così critica, ma vorrebbe sapere.


Il motore del sito stesso ha inserito un link alla risposta, e c'è un esempio di conversione esplicita del tipo .........

//--- ускорение свободного падения
   double g=9.8;
   double round_g=(int)g;
   double math_round_g=MathRound(g);
   Print("round_g = ",round_g);
   Print("math_round_g =",math_round_g);
/*
   Результат:
   round_g = 9
   math_round_g = 10
*/
 
Sayberix:

Ciao a tutti, solo un rapido aggiornamento sul thread: c'è una domanda nel codice:

Durante la compilazione, genera un avviso:"possibile perdita di dati a causa della conversione dei tipi...". Di cosa ha bisogno? Non è così cruciale, ma mi piacerebbe saperlo.


Non hai solo un avvertimento ma anche un errore. Sei sicuro che sia questo particolare codice che stai compilando?

È così che dovrebbe essere:

   int stoplevel=0;
   int MinimumUseStopLevel=0;

// Calculate stoplevel as max of either STOPLEVEL or FREEZELEVEL
   stoplevel = int(fmax(SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL), SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)));
// Then calculate the stoplevel as max of either this stoplevel or MinimumUseStopLevel
   stoplevel = int(fmax((int)MinimumUseStopLevel,(int)stoplevel));

È solo senza scavare nel codice - così non si ottengono errori e avvertimenti.

E se ci pensi, stai mescolando il caldo e l'umido

 
Artyom Trishkin:

Non solo avete un avvertimento, ma anche un errore. Sei sicuro che questo sia il codice che stai compilando?

È così che dovrebbe essere:

È solo senza scavare nel codice - quindi non ci sono errori o avvertimenti.

E se ci pensi, stai mischiando le cose.

Grazie.

Non rimproveratemi, sto solo imparando - cercando di capire il codice degli altri. Mi sembra che sia il modo più rapido per imparare.

Non capisco perché ha bisogno di una conversione di tipo, se tutte le variabili sono int e i valori di ritorno tramite symbolinfointeger?

 
Sayberix:

Grazie.

Non rimproveratemi troppo, sto solo imparando - cercando di dare un senso al codice degli altri. Mi sembra che questo sia il modo più veloce per imparare.

Non capisco perché ha bisogno di una conversione di tipo, se tutte le variabili sono int e i valori di ritorno tramite symbolinfointeger?

SymbolInfoInteger() restituisce long
Документация по MQL5: Получение рыночной информации / SymbolInfoInteger
Документация по MQL5: Получение рыночной информации / SymbolInfoInteger
  • www.mql5.com
2. Возвращает true или false в зависимости от успешности выполнения функции.  В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром. Если функция используется для получения информации о последнем тике, то лучше использовать SymbolInfoTick(). Вполне возможно, что по данному символу с...
 

Buon giorno cari programmatori!

Come posso fare in modo che il mio EA apra le posizioni indipendentemente dalle posizioni aperte manualmente o da altre posizioni aperte da un altro EA? Ho provato a farlo con la magia, ma non ha funzionato. Ho provato a farlo con la magia, ma non ha funzionato:

datetime some_time=TimeCurrent();
extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P=1;          //Таймфрейм
extern int MagicNumber = 100500;


int start()
{

int send;
                                      
double SL=50;                                   
double TP=50;                       
double Lots=3;       

      
//&&(OrderMagicNumber() == MagicNumber)
//&&(OrdersTotal() ==0)&&    
 
              
if ((Close[0]>High[1])&&(OrderMagicNumber() != MagicNumber)) 
{
send=OrderSend(Symbol3,OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,MagicNumber);
}

if ((Close[0]<Low[1])&&(OrderMagicNumber() != MagicNumber))
{
send=OrderSend(Symbol3,OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,MagicNumber);
}

return(0);
}
 
Alexey Belyakov:

Buon giorno cari programmatori!

Come posso fare in modo che il mio EA apra le posizioni indipendentemente dalle posizioni aperte manualmente o da altre posizioni aperte da un altro EA? Ho provato a farlo con la magia, ma non ha funzionato. Ecco il codice:


Mancano dei campi e nessun ordine è selezionato per controllare il numero

int n = 0;
for(int i = OrdersTotal(); i >= 0; i--) {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
      if(OrderSymbol() != _Symbol)continue;
      if(OrderMagicNumber() != magic)continue;     
n++;
}

if(n == 0){
OrderSend(_Symbol, _type, lot, price, 0, sl, tp, comment, magic, 0, clrNONE);
}
 
Come prelevare denaro da un conto

 
Aiuto... Lo metti dentro e non riesci a tirarlo fuori
 
Georgiy Liashchenko:


Hai dei campi mancanti e l'ordine di controllare il numero non viene evidenziato

L'ho fatto. Non l'ho fatto. Si apre in pacchi. Magic lo sta ignorando.


datetime some_time=TimeCurrent();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P=1;          //Таймфрейм
extern int MagicNumber = 100500;


int start()
{

int send;
                                     
double SL=200;                                   
double TP=200;                       
double Lots=1;       

int n = 0;
for(int i = OrdersTotal(); i >= 0; i--) 
{
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
      if(OrderSymbol() != "EURUSD")continue;
      if(OrderMagicNumber() != MagicNumber)continue;     
n++;
}
          
//&&(OrderMagicNumber() == MagicNumber)
//&&(OrdersTotal() ==0)&&    
             
if ((Close[0]>High[1])&&(n==0))
{
send=OrderSend("EURUSD",OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,MagicNumber);
}

if ((Close[0]<Low[1])&&(n==0))  
{
send=OrderSend("EURUSD",OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,MagicNumber);
}

return(0);
}