Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 798

 

Ciao, ho bisogno del vostro aiuto, membri del forum. Sto scrivendo un indicatore. Ho bisogno di un orario di apertura del bar da elaborare. Sembrerebbe che questo tempo dovrebbe essere memorizzato in time[], ma c'è qualche sciocchezza.

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---check for rates total


   if(rates_total<2)
      return(0);
//--- starting work
   int start=prev_calculated-1;
//--- correct position
   if(start<1) start=1;
//--- main cycle

CalculateVolume(start,rates_total,time);


//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CalculateVolume(const int nPosition,
                     const int nRatesCount,
                     const long &tim[],
                     )
  {
  
MqlDateTime dat1;


for(int j=nPosition;j<nRatesCount && !IsStopped();j++)
{
    TimeToStruct(tim[j],dat1);

    Print("год ",dat1.year," ",dat1.day," ",dat1.hour," ",dat1.min)


 }
} 

2017.11.20 17:48:01.590 (RTS-12.17,M1) anno 2016 29 15 26

2017.11.20 17:48:01.734 (RTS-12.17,M1) anno 2016 29 15 27

2017.11.20 17:48:01.878 (RTS-12.17,M1) anno 2016 29 15 29

2017.11.20 17:48:02.022 (RTS-12.17,M1) anno 2016 29 15 33

2017.11.20 17:48:02.165 (RTS-12.17,M1) anno 2016 29 15 45

2017.11.20 17:48:02.310 (RTS-12.17,M1) anno 2016 29 21 12

2017.11.20 17:48:02.454 (RTS-12.17,M1) anno 2016 1 20 54

2017.11.20 17:48:02.599 (RTS-12.17,M1) anno 2016 2 12 52

2017.11.20 17:48:02.743 (RTS-12.17,M1) anno 2016 2 22 28

2017.11.20 17:48:02.887 (RTS-12.17,M1) anno 2016 2 23 20

2017.11.20 17:48:03.031 (RTS-12.17,M1) anno 2016 3 11 47

2017.11.20 17:48:03.175 (RTS-12.17,M1) anno 2016 3 22 34

2017.11.20 17:48:03.320 (RTS-12.17,M1) anno 2016 3 22 35

2017.11.20 17:48:03.463 (RTS-12.17,M1) anno 2016 4 21 56

2017.11.20 17:48:03.609 (RTS-12.17,M1) anno 2016 4 23 32

Sembra che ci siano solo poche battute al giorno. Puoi darmi un suggerimento plz, il mio cervello è tutto un po' confuso.

 
fxsaber:

Sì, ma storto.

pivomoe:
A prima vista CopyTick funziona nel tester. Ci sono dei bug noti nel funzionamento di CopyTicks nel tester? CopyTicksRange nella vita reale funziona senza bug?

Nella prossima build gli sviluppatori renderanno corretta la visualizzazione delle bandiere TRADE nel tester.

fxsaber:

C'è un bug con i tempi di tick nel tester. Dobbiamo sottrarre ogni volta un certo valore. SD è consapevole del problema.

Puoi spiegarti meglio?
 
Sto studiando la struttura della richiesta di trading (MqlTradeRequest) in diverse varianti. Ho preso l'Expert Advisor my_first_ea.mq5 già pronto da https://www.mql5.com/ru/articles/100 e ho provato a cambiare la condizione per aprire una posizione al SAR crossing nel codice sorgente - ha funzionato. Poi ho aggiunto il codice di trascinamento (cambiare/modificare la posizione tramite SAR) da MQL5 tramite la struttura MqlTradeRequest, ma ha prodotto l'errore [Invalid stops]. Penso che ci sia qualcosa di sbagliato nella richiesta. In breve, sono rimasto bloccato a studiare la modifica della posizione. Non capisco davvero cosa sto sbagliando.
File:
SAR_SAR.mq5  27 kb
 
Alexey Kozitsyn:

Può spiegarsi meglio?

void OnTick()
{
  MqlTick Ticks[];
  
  if (CopyTicksRange(_Symbol, Ticks) != -1)
  {
    ArrayPrint(Ticks);              
    
    ExpertRemove();
  }
}
 
Grazie per il vostro aiuto, così tanti disposti ad aiutare!!!!!!!!!!!! Sono stanco di leggere i commenti sul mio codice..............
 
DCodec:
Grazie per il vostro aiuto, così tanti disposti ad aiutare!!!!!!!!!!!! Sono stanco di leggere i commenti sul mio codice..............
Nessun codice, nessun commento.
 

Si prega di consigliare come trovare il gradino del prezzo (nella specifica "Teak size")?

 
Aleksey Vyazmikin:

Si prega di consigliare come trovare il gradino del prezzo (nella specifica "Teak size")?

ht

 
Vladislav Andruschenko:
ht


Grazie! Ho cercato e non l'ho trovato...

Poi la prossima domanda, diciamo che il passo è 25, allora come organizzare l'arrotondamento a un numero divisibile per 25, forse c'è una funzione?

 
Aleksey Vyazmikin:

Grazie! Ho cercato e non l'ho trovato...

Poi la prossima domanda, diciamo che il passo è 25, allora come organizzare l'arrotondamento a un numero divisibile per 25, forse c'è una funzione?


Ho fatto una funzione, sembra funzionare

//+------------------------------------------------------------------+
//|Функция округления числа до кратного целого                       |
//+------------------------------------------------------------------+
double Okr(double cifra)
  {
     double TickSize=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
     double Okruglenie=NormalizeDouble(cifra/TickSize,_Digits)*TickSize;
     Print ("До кратного округления=",DoubleToString(cifra,_Digits), " После кратного округления=",DoubleToString(Okruglenie,_Digits));
     return(Okruglenie);
  }  
Motivazione: