Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 414

 
Leanid Aladzyeu:

sputa

possibile perdita di dati dovuta alla conversione del tipo .mq4 1697 29

tipo Doble a SL.

Il compilatore è rigoroso al giorno d'oggi, dovrebbe essere così, MarketInfo restituisce il tipo double

sl = NormalizeDouble(sl,(int)MarketInfo(Symbol(),MODE_DIGITS));
 
Alexey Volchanskiy:

Il compilatore è rigoroso al giorno d'oggi, dovrebbe essere così, MarketInfo restituisce il tipo double

La variabile "sumbol" è corretta, ce l'ho come variabile nel wrapper del modificatore.

Grazie ho messo(int) e tutto va bene.

Non so come ho fatto prima; la mia esperienza nello scrivere EAs è di 21 giorni))

Non so da quanto tempo scrivo i miei EA e non so come farlo correttamente).

 

Leanid Aladzyeu:

Non so come facevo a scrivere gli EA (li ho scritti per 21 giorni)). E il mio EA si sta persistentemente facendo strada verso la cima degli EA gratuiti))

Bene, allora siete molto fortunati, fino alla versione 600 il vecchio MQL4 era orribile )) Per favore, mandami il link al mio EA, può essere nella tua casella di posta elettronica
 
Alexey Volchanskiy:
Beh, allora sei molto fortunato, fino alla versione 600 il vecchio MQL4 era orribile )) Per favore, mandami il link al MQL4 Expert Advisor.
Al mio nickname e al mio prodotto.
 

Per qualche motivo dà un errore sull'ultima riga.

'}' - non tutti i percorsi di controllo restituiscono un valore Expert4.mq4

Ogni funzione non vuota dovrebbe finire con l'operatore di ritorno.

Sto solo guardando questo codice dal video tutorial, ma potrebbe essere per una vecchia build.



#include#include <stderror.mqh>

//+------------------------------------------------------------------+
//|Esperto4.mq4 |
//|Mikhail |
//||
//+------------------------------------------------------------------+
#proprietà copyright "Mikhail"
#proprietà link ""
#proprietà versione "1.00"
#proprietà rigorosa

segnale int = 1;

int start()
{
se (segnale == 1)
{
OrderSendX (Symbol(), OP_BUY, 0.2, Ask, 30, 0, 0, 0, "Test", 123, 0, Blue);
}
ritorno(0);
}
//+------------------------------------------------------------------+
int OrderSendX (simbolo stringa, int cmd, doppio volume, doppio prezzo, int slippage, doppio stoploss,
double takeprofit,string comment=NULL,int magic=0,datetime expiration=0,color arrow_color=CLR_NONE)
{
int err = GetLastError();
errare = 0;
bool exit_loop = false;
int ticket = -1;

int Retry = 10;
int cnt = 0;
se (cmd == OP_BUY || cmd == OP_SELL)
{
mentre(!exit_loop)
{
ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment,magic, expiration, arrow_color);
err = GetLastError();

interruttore(err)
{
caso ERR_NO_ERROR:
exit_loop = true;
pausa;

{ caso ERR_SERVER_BUSY:
caso ERR_NO_CONNECTION:
caso ERR_INVALID_PRICE:
caso ERR_OFF_QUOTES:
caso ERR_BROKER_BUSY:
caso ERR_TRADE_CONTEXT_BUSY:
cnt++;
pausa;

caso ERR_PRICE_CHANGED:


RefreshRates();
continuare;

default:
exit_loop +true;
pausa;

}
se (cnt> Riprova)
exit_loop = true;


se (!exit_loop)
{
Dormire(1000);
RefreshRates();

}
else
{
se(err != ERR_NO_ERROR)
{
Stampa ("ERRORE: " + err);

}

}

se(err == ERR_NO_ERROR)
{
OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES);
return(ticket);
}

Print("Error: order open failed after" + cnt + "atempts");
ritorno(-1);


}//while
}//if
}//exit
 
Mikhail Nikolaev:

Qui....

}


}


return(ticket);

}

 
Mikhail Nikolaev:

Leanid Aladzyeu:

Inserire correttamente il codice nel forum

 
Mikhail Nikolaev:

Per qualche motivo dà un errore sull'ultima riga.

'}' - non tutti i percorsi di controllo restituiscono un valore Expert4.mq4

Ogni funzione non vuota dovrebbe finire con l'operatore di ritorno.

Ho appena visto questo codice nel video tutorial ma potrebbe essere per vecchie build.



#include#include <stderror.mqh>

//+------------------------------------------------------------------+
//|Esperto4.mq4 |
//|Mikhail |
//||
//+------------------------------------------------------------------+
#proprietà copyright "Mikhail"
#proprietà link ""
#proprietà versione "1.00"
#proprietà rigorosa

segnale int = 1;

int start()
{
se (segnale == 1)
{
OrderSendX (Symbol(), OP_BUY, 0.2, Ask, 30, 0, 0, 0, "Test", 123, 0, Blue);
}
ritorno(0);
}
//+------------------------------------------------------------------+
int OrderSendX (simbolo stringa, int cmd, doppio volume, doppio prezzo, int slippage, doppio stoploss,
double takeprofit,string comment=NULL,int magic=0,datetime expiration=0,color arrow_color=CLR_NONE)
{
int err = GetLastError();
errare = 0;
bool exit_loop = false;
int ticket = -1;

int Retry = 10;
int cnt = 0;
se (cmd == OP_BUY || cmd == OP_SELL)
{
mentre(!exit_loop)
{
ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment,magic, expiration, arrow_color);
err = GetLastError();

interruttore(err)
{
caso ERR_NO_ERROR:
exit_loop = true;
pausa;

{ caso ERR_SERVER_BUSY:
caso ERR_NO_CONNECTION:
caso ERR_INVALID_PRICE:
caso ERR_OFF_QUOTES:
caso ERR_BROKER_BUSY:
caso ERR_TRADE_CONTEXT_BUSY:
cnt++;
pausa;

caso ERR_PRICE_CHANGED:


RefreshRates();
continuare;

default:
exit_loop +true;
pausa;

}
se (cnt> Riprova)
exit_loop = true;


se (!exit_loop)
{
Dormire(1000);
RefreshRates();

}
else
{
se(err != ERR_NO_ERROR)
{
Stampa ("ERRORE: " + err);

}

}

se(err == ERR_NO_ERROR)
{
OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES);
return(ticket);
}

Print("Error: order open failed after" + cnt + "atempts");
ritorno(-1);


}//while
}//if
}//exit

Amico, è davvero così difficile formattare il codice? Non lo guardo nemmeno per principio - è un dolore agli occhi.
 
Sono di nuovo in ritardo, non si adatta
 
Leanid Aladzyeu:
Sono di nuovo in ritardo, non riesco ad adattarlo.

Va bene, che browser stai usando? Prova a cambiare con un altro. Ho FFox. Ho dato la risposta nei commenti del codice alla fine.

#include <stderror.mqh>
//+------------------------------------------------------------------+
//|                                                      Expert4.mq4 |
//|                                                          Mikhail |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Mikhail"
#property link      ""
#property version   "1.00"
#property strict

int signal = 1;

int start()
{
   if (signal == 1)
   {
      OrderSendX (Symbol(), OP_BUY, 0.2, Ask, 30, 0, 0, "Test", 123, 0, Blue);
   }
   return(0);
}
//+------------------------------------------------------------------+
int OrderSendX (string symbol, int cmd, double volume, double price, int slippage,double stoploss,
               double takeprofit, string comment=NULL, int magic=0, datetime expiration=0,color arrow_color=CLR_NONE)
{
   int err = GetLastError();
   err = 0;
   bool exit_loop = false;
   int ticket = -1;
  
   int Retry = 10;
   int cnt = 0;
   if (cmd == OP_BUY || cmd == OP_SELL)
   {
      while(!exit_loop)
      {
         ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment,magic, expiration, arrow_color);
         err = GetLastError();
        
         switch(err)
         {
            case ERR_NO_ERROR:
            exit_loop = true;
            break;
           
            case ERR_SERVER_BUSY:
            case ERR_NO_CONNECTION:
            case ERR_INVALID_PRICE:
            case ERR_OFF_QUOTES:
            case ERR_BROKER_BUSY:
            case ERR_TRADE_CONTEXT_BUSY:
            cnt++;
            break;
           
            case ERR_PRICE_CHANGED:
           
          
            RefreshRates();
            continue;
           
            default:
               exit_loop +true;
               break;
         
         }
         if (cnt> Retry)
            exit_loop = true;
          
           
         if (!exit_loop)
            {
               Sleep(1000);
               RefreshRates();
              
            }
            else
               {
                  if(err != ERR_NO_ERROR)
                  {
                  Print ("ERROR: " + err);
                 
                  }
            
               }
              
               if(err == ERR_NO_ERROR)
               {
                  OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES);
                  return(ticket);
               }
              
               Print("Error: order open failed after" + cnt + "atempts");
               return(-1);
           
           
}//while
}//if
// тут надо вернуть какое-то значение, компилятор не понимает, что у вас есть return-ы внутри while, он не умеет анализировать код. Он ожидает, что при выходе из функции будет возвращаться значение
}//exit