Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 803

 

Una semplice domanda.

È possibile uscire dal ciclo in questo modo? O tale semplicità non è libera?

while(1)
{
 .........
 if(............ ) return;
 ..........
}
 

Un'altra domanda.

C'è una struttura MqlTick con il seguente campo

longtime_msc;// Tempo dell'ultimo aggiornamento del prezzo in millisecondi

Per quanto ho capito, time_msc memorizza il numero di millisecondi dal 1970.

La funzione CopyTick ha il seguente parametro

ulongfrom=0,//data a partire dalla quale i tick sono richiesti

Nell'aiuto, si specifica che è "Data a partire dalla quale vengono richiesti i tick". Specificato in millisecondi dal 01.01.1970".

Domanda di attenzione.

Perché vengono usati diversi tipi di dati nella struttura MqlTick e nel parametro della funzione CopyTick? Dopo tutto, entrambi memorizzano il tempo dal 1970.

 
pivomoe:

Un'altra domanda.

C'è una struttura MqlTick con il seguente campo

longtime_msc;// Tempo dell'ultimo aggiornamento del prezzo in millisecondi

Per quanto ho capito, time_msc memorizza il numero di millisecondi dal 1970.

La funzione CopyTick ha il seguente parametro

ulongfrom=0,//data a partire dalla quale i tick sono richiesti

Nell'aiuto, si specifica che è "Data a partire dalla quale vengono richiesti i tick". Specificato in millisecondi dal 01.01.1970".

Domanda di attenzione.

Perché vengono usati diversi tipi di dati nella struttura MqlTick e nel parametro della funzione CopyTick? Dopo tutto, entrambi memorizzano il tempo dal 1970.

ulong - tipo unsigned long

 
Lo so. Perché si usa un tipo firmato in un caso e un tipo senza segno nell'altro? I casi sono simili.
 
pivomoe:

Una semplice domanda.

È possibile uscire dal ciclo in questo modo? O tale semplicità non è libera?

Qual è la preoccupazione? Cessazione per condizione. Solo se vuoi solo uscire dal ciclo, non tornare ma interrompere

 
Alexey Viktorov:

Cosa ti preoccupa? Fine dell'esecuzione per condizione. Solo se vuoi solo uscire dal ciclo, non tornare ma interrompere

Non capisco il consumo di memoria dopo che tale ciclo returnom esce o no?
 
pivomoe:
Non capisco il consumo di memoria dopo una tale uscita returnom o no?

Perché dovrei? Non si faccia prendere la mano da un mucchio di sciocchezze. Questo tipo di uscita funzionerà velocemente.

 

Come posso rinunciare a un'utilità gratuita (indicatore) scaricata tramite il mercato nel terminale. Disinstallarlo non aiuta. Continuo a ricevere messaggi sull'aggiornamento del prodotto, anche se è stato disinstallato da molto tempo.

 

Signori, aiutatemi a capire la situazione, nello Strategy Tester tutto va senza errori e problemi anche su un conto demo, ma quando carico un EA nel mercato, Autotester dice:

2016.04.01 00:00:12 failed instant sell 0,10 EURUSD a 1,13780 sl: 1,14030 tp: 1,13030 [volume non valido]
2016.04.01 00:00:24 failed instant sell 0,10 EURUSD a 1,13779 sl: 1,14029 tp: 1,13029 [volume non valido]
2016.04.01 00:00:59 failed instant sell 0,10 EURUSD a 1,13782 sl: 1,14032 tp: 1,13032 [volume non valido]
2016.04.01 00:01:00 fallito vendita istantanea 0,10 EURUSD a 1,13793 sl: 1,14043 tp: 1,13043 [volume non valido]
2016.04.01 00:01:08 failed instant sell 0,10 EURUSD a 1,13783 sl: 1,14033 tp: 1,13033 [Volume non valido]
2016.04.01 00:01:17 failed instant sell 0,10 EURUSD a 1,13784 sl: 1,14034 tp: 1,13034 [volume non valido]
2016.04.01 00:01:25 failed instant sell 0,10 EURUSD a 1,13774 sl: 1,14024 tp: 1,13024 [volume non valido]
2016.04.01 00:01:34 failed instant sell 0,10 EURUSD a 1,13776 sl: 1,14026 tp: 1,13026 [volume non valido]
2016.04.01 00:01:59 failed instant sell 0,10 EURUSD a 1,13778 sl: 1,14028 tp: 1,13028 [volume non valido]
2016.04.01 00:02:00 failed instant sell 0,10 EURUSD a 1,13778 sl: 1,14028 tp: 1,13028 [volume non valido]
2016.04.01 00:02:08 failed instant sell 0,10 EURUSD a 1,13776 sl: 1,14026 tp: 1,13026 [volume non valido]

codice della funzione qui sotto:

OpenPos(NormalizeDouble(Lot,2), NormalizeDouble(Bid,_Digits), NormalizeDouble(_sl,_Digits),NormalizeDouble(_tp,_Digits),ORDER_TYPE_SELL,MagicSell,Comm);
void OpenPos(const double volume,const double price, const double stop, const double take, const ENUM_ORDER_TYPE o_type, const int magic,const string coment=NULL)
{
   MqlTradeRequest request={0};
   MqlTradeResult result={0};
   
   string t=(o_type==ORDER_TYPE_BUY)?"Buy":"Sell";
   
   ZeroMemory(request);
   ZeroMemory(result);
   
   request.action=TRADE_ACTION_DEAL;
   request.symbol=Symbol();
   request.volume=volume;
   request.type=o_type;
   request.magic=magic;
   request.price=price;
   request.sl=stop;
   request.tp=take;
   request.comment=coment;
   
   if(IsFillingTypeAllowed(Symbol(),SYMBOL_FILLING_FOK))
      request.type_filling=ORDER_FILLING_FOK;
   else if(IsFillingTypeAllowed(Symbol(),SYMBOL_FILLING_IOC))
      request.type_filling=ORDER_FILLING_IOC;
   else
      request.type_filling=ORDER_FILLING_RETURN;
   
   if(!OrderSend(request,result))
      PrintFormat("Can't open position %s error %i",t,GetLastError());
}
 
Andrii Djola:

Voglio chiedervi di aiutarmi a capire la situazione, nello Strategy Tester tutto funziona senza alcun errore o problema, anche sul mio conto demo non ho problemi, ma quando carico il mio EA nel mercato, l'Autotester scrive:

Stampa il risultato di OrderCheck e la sua struttura completa. Fate lo stesso con OrderSend.

Imposta conti demo su dieci diversi server di trading. E prova il tuo codice lì. Il più delle volte non viene presa in considerazione qualche caratteristica particolare del server di trading, che viene riprodotta quando si controlla nel Mercato.

E non dimenticate di emettere LastError. Tutto questo insieme vi permetterà molto rapidamente di andare a fondo delle cause dell'errore.