Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1050

 

Come posso aggiungere minuti al blocco di ore del consulente?

//input parametrs
input uchar                InpStartHour            = 1;           // Start hour
input uchar                InpEndHour              = 23;           // End hour

//---------------------------

void OnTick()
  { 
   MqlDateTime STimeCurrent;
   TimeToStruct(TimeCurrent(),STimeCurrent);
  
   if(STimeCurrent.hour<InpStartHour || STimeCurrent.hour>InpEndHour)
      return;
   }

 
Vladimir Baskakov:

Come posso aggiungere minuti al blocco orario di un EA?

Alto Basso Strategia in tempo 2:

La bool TimeControl() è una funzione responsabile del controllo dell'ora. Può funzionare in due stati: entrambe le date entro un giorno o le date oltre un giorno.

//--- input parameters
***
input bool     InpTimeControl       = true;        // Use time control
input uchar    InpStartHour         = 10;          // Start Hour 
input uchar    InpStartMinute       = 01;          // Start Minute 
input uchar    InpEndHour           = 15;          // End Hour 
input uchar    InpEndMinute         = 02;          // End Minute 
***
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!TimeControl())
      return;
  }
//+------------------------------------------------------------------+
//| TimeControl                                                      |
//+------------------------------------------------------------------+
bool TimeControl(void)
  {
   if(!InpTimeControl)
      return(true);
   MqlDateTime STimeCurrent;
   datetime time_current=TimeCurrent();
   if(time_current==D'1970.01.01 00:00')
      return(false);
   TimeToStruct(time_current,STimeCurrent);
   if((InpStartHour*60*60+InpStartMinute*60)<(InpEndHour*60*60+InpEndMinute*60)) // intraday time interval
     {
/*
Example:
input uchar    InpStartHour      = 5;        // Start hour
input uchar    InpEndHour        = 10;       // End hour
0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15
_  _  _  _  _  +  +  +  +  +  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  +  +  +  +  +  _  _  _  _  _  _
*/
      if((STimeCurrent.hour*60*60+STimeCurrent.min*60>=InpStartHour*60*60+InpStartMinute*60) && 
         (STimeCurrent.hour*60*60+STimeCurrent.min*60<InpEndHour*60*60+InpEndMinute*60))
         return(true);
     }
   else if((InpStartHour*60*60+InpStartMinute*60)>(InpEndHour*60*60+InpEndMinute*60)) // time interval with the transition in a day
     {
/*
Example:
input uchar    InpStartHour      = 10;       // Start hour
input uchar    InpEndHour        = 5;        // End hour
0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15
_  _  _  _  _  _  _  _  _  _  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  _  _  _  _  _  +  +  +  +  +  +
*/
      if(STimeCurrent.hour*60*60+STimeCurrent.min*60>=InpStartHour*60*60+InpStartMinute*60 || 
         STimeCurrent.hour*60*60+STimeCurrent.min*60<InpEndHour*60*60+InpEndMinute*60)
         return(true);
     }
   else
      return(false);
//---
   return(false);
  }
 

Si prega di avvisare,

In MQL5 ho bisogno di chiudere metà di una posizione, ma devo controllare se metà della posizione è inferiore al lotto minimo e poi chiudere l'intero volume, è corretto?

double volume=MathMax(PositionGetDouble(POSITION_VOLUME)/2,SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN)/AccountInfoInteger(ACCOUNT_LEVERAGE));
 
Evgeny Dyuka:

Si prega di avvisare,

In MQL5 ho bisogno di chiudere metà di una posizione, ma devo controllare se metà della posizione è inferiore al lotto minimo e poi chiudere l'intero volume, è corretto?

Forse è più facile controllare prima della divisione, se il lotto è inferiore a 2x il minimo, allora non c'è bisogno di disturbare il terminale?

 

Non riesco a passare il test per il mercato, restituisce un errore, ma non c'è nessun errore nel rapporto

Cosa fare?


 
Evgeny Dyuka:

Non riesco a passare il test per il mercato, restituisce un errore, ma non c'è nessun errore nel rapporto

Cosa fare?


Si prega di riprovare più tardi.
 

Come posso ottenere il prezzo di chiusura di un ordine (trade, posizione - qualsiasi cosa)?

Per gli ordini, solo ORDER_PRICE_OPEN è disponibile, ma ORDER_PRICE_CLOSE no.

Le posizioni hanno solo POSITION_PRICE_OPEN.

I mestieri non hanno niente di astratto: PREZZO_AFFARE.

Ho cercato su Google il forum, ma non l'ho trovato.

 
secret:

Come posso ottenere il prezzo di chiusura di un ordine (trade, posizione - qualsiasi cosa)?

Per gli ordini, solo ORDER_PRICE_OPEN è disponibile, ma ORDER_PRICE_CLOSE no.

Le posizioni hanno solo POSITION_PRICE_OPEN.

Gli scambi non hanno nulla di astratto: PREZZO_AFFARE.

Ho cercato nel forum, ma non l'ho trovato.

Per facilitare la comprensione e il lavoro in MQL5:

1. ***

2. Se hai bisogno di un prezzo di chiusura, non puoi fare a meno di accedere alla storia del trading. LaHistorySelect è responsabile della richiesta della storia del trading

3. L'esempio di lavorare con la storia, con l'output delle informazioni in un file o nella scheda "Esperti" è nel codice diHistory Deals and Orders

Per capire di che affare si tratta, bisogna sapere

ENUM_DEAL_ENTRY-direzione della negoziazione - entrata nel mercato, uscita dal mercato o inversione

ENUM_DEAL_ENTRY

Identificatore

Descrizione

DEAL_ENTRY_IN

Entrata nel mercato

DEAL_ENTRY_OUT

Uscita dal mercato

INGRESSO_INOUT

U-turn

INGRESSO_FUORI_DA

Chiudere la posizione del contatore


ENUM_DEAL_TYPE-Tipo di accordo

ENUM_DEAL_TYPE

Identificatore

Descrizione

DEAL_TYPE_BUY

Compra

DEAL_TYPE_SELLVendere

***



Queste sono le basi.

 
Vladimir Karputov:

Grazie per la risposta, ho guardato sia la documentazione che il tuo esempio, ma non ho ancora trovato come ottenere un parametro simile a OrderClosePrice() in MT4.

 
secret:

Grazie per la risposta, ho guardato sia la documentazione che il tuo esempio ma non ho ancora trovato come ottenere un parametro simile a OrderClosePrice() in MT4.

in alternativa aprirehttps://www.mql5.com/ru/code/16006

e guarda l'implementazione di @fxsaber

o semplicemente collegare la libreria di cui sopra e trasferire il codice da MT4 a MT5, nel 99% dei casi non dovrete modificare nulla, tutto funzionerà come in MT4

MT4Orders
MT4Orders
  • www.mql5.com
Данная библиотека позволяет работать с ордерами в MQL5 (MT5-hedge) точно так же, как в MQL4. Т.е. ордерная языковая система (ОЯС) становится идентичной MQL4. При этом сохраняется возможность параллельно использовать MQL5-ордерную систему. В частности, стандартная MQL5-библиотека будет продолжать полноценно работать. Выбор между ордерными...