Questions des débutants MQL5 MT5 MetaTrader 5 - page 798

 

Bonjour ! J'ai besoin de votre aide, membres du forum. Je suis en train d'écrire un indicateur. J'ai besoin d'une heure d'ouverture du bar à traiter. Il semblerait que ce temps devrait être stocké dans time[], mais il y a un certain non-sens.

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) année 2016 29 15 26

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

2017.11.20 17:48:01.878 (RTS-12.17,M1) année 2016 29 15 29

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

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

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

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

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

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

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

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

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

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

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

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

On a l'impression qu'il n'y a que quelques bars par jour. Pouvez-vous me donner un indice s'il vous plaît, mon cerveau est déjà détraqué.

 
fxsaber:

Oui, mais de travers.

pivomoe:
A première vue, CopyTick fonctionne dans le testeur. Y a-t-il des bogues connus dans l'opération CopyTicks dans le testeur ? CopyTicksRange dans la vie réelle fonctionne sans bogues ?

Dans le prochain build les développeurs feront un affichage correct des drapeaux TRADE dans le testeur.

fxsaber:

Il y a un bug avec les temps de tic dans le testeur. Nous devons soustraire une certaine valeur à chaque fois. SD est conscient du problème.

Pouvez-vous nous en dire plus ?
 
J'étudie la structure de la demande de transaction (MqlTradeRequest) dans différentes variantes. J'ai pris le conseiller expert prêt à l'emploi my_first_ea.mq5 sur https://www.mql5.com/ru/articles/100 et j'ai essayé de changer la condition pour ouvrir une position au croisement des SAR dans le code source - cela a fonctionné. Ensuite, j'ai ajouté le code de suivi (changer/modifier la position par SAR) de MQL5 par la structure MqlTradeRequest. Mais cela a produit une erreur [Invalid stops]. Je pense qu'il y a un problème avec la demande. En bref, je me suis retrouvé coincé à étudier la modification de la position. Je ne comprends pas vraiment ce que je fais de mal.
Dossiers :
SAR_SAR.mq5  27 kb
 
Alexey Kozitsyn:

Pouvez-vous nous en dire plus ?

void OnTick()
{
  MqlTick Ticks[];
  
  if (CopyTicksRange(_Symbol, Ticks) != -1)
  {
    ArrayPrint(Ticks);              
    
    ExpertRemove();
  }
}
 
Merci pour votre aide, tant de personnes prêtes à aider ! !!!!!!!!!!! Je suis fatigué de lire les commentaires sur mon code..............
 
DCodec:
Merci pour votre aide, tant de personnes prêtes à aider ! !!!!!!!!!!! Je suis fatigué de lire les commentaires sur mon code..............
Pas de code, pas de commentaires.
 

Veuillez m'indiquer comment trouver l'échelon de prix (dans la spécification "taille du teck") ?

 
Aleksey Vyazmikin:

Veuillez m'indiquer comment trouver l'échelon de prix (dans la spécification "taille du teck") ?

ht

 
Vladislav Andruschenko:
ht


Merci ! J'ai cherché et je ne l'ai pas trouvé...

Ensuite, la question suivante, disons que l'étape est 25, alors comment organiser l'arrondi à un nombre divisible par 25, peut-être y a-t-il une fonction ?

 
Aleksey Vyazmikin:

Merci ! J'ai cherché et je ne l'ai pas trouvé...

Ensuite, la question suivante, disons que l'étape est 25, alors comment organiser l'arrondi à un nombre divisible par 25, peut-être y a-t-il une fonction ?


J'ai créé une fonction, elle semble fonctionner

//+------------------------------------------------------------------+
//|Функция округления числа до кратного целого                       |
//+------------------------------------------------------------------+
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);
  }  
Raison: