Caractéristiques du langage mql4, subtilités et techniques - page 20

 
fxsaber:

Il ne le fera pas. L'algorithme TimeCurrent est affecté très indirectement. Vous pouvez prendre les horaires des bars, etc.

Il suffit de calculer la date du dernier dimanche (dans l'historique des barres) d'une manière ou d'une autre - pour qu'il y ait des barres avant dimanche et après dimanche. Vous pouvez utiliser TimeLocal pour cela.

Le résultat sera toujours GMT+3 si la date de cotation est proche de 00:00 (sessions non-stop), ou GMT+3+N - où N est le nombre d'heures entre la clôture de la session et minuit ou entre minuit et l'ouverture. Qu'est-ce que cela a à voir avec le fuseau horaire des citations ?

 
Ivan Titov:

Le résultat sera toujours GMT+3 s'il y a des cotations autour de 00:00 (sessions de 24 heures), ou GMT+3+N - où N est le nombre d'heures entre la clôture de la session et minuit ou entre minuit et l'ouverture. Qu'est-ce que cela a à voir avec le fuseau horaire des citations ?

Je ne me souviens pas du tout de ce sujet, donc je ne peux pas répondre à la question. S'il y a une quelconque incohérence, vous feriez mieux de commencer par la démontrer.

 
fxsaber:

Je ne me souviens pas du tout de ce sujet, donc je ne peux pas répondre à la question. S'il y a une quelconque incohérence, vous feriez mieux de commencer par la démontrer.

Ici, à partir de ce code sur le terminal BCS (symbole ED-9.19), la fonctionTimeServerGMT() renvoie l'heure 2019.08.11 22:48:55 alors que TimeCurrent() est 2019.08.12 11:48:55.

 
Ivan Titov:

A partir de ce code sur le terminal BCS (symbole ED-9.19) la fonction TimeServerGMT() renvoie l'heure 2019.08.11 22:48:55 quand TimeCurrent() est 2019.08.12 11:48:55

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Caractéristiques du langage mql4, subtilités et astuces

fxsaber, 2018.03.29 14:32

// Работает для FOREX-символов, когда M1-история доступна за ближайшую неделю

Je n'ai pas prêté attention à ce commentaire dans le code.

 
fxsaber:

Je n'ai pas prêté attention à ce commentaire dans le code.

Vous voulez dire que si les caractères non forex ont un historique disponible, cela ne fonctionnera pas ?

Voici également un exemple pour le forex sur Alpari-Demo EURUSD,H1 dans le testeur :

Pour 2019.02.19 14:00:00 retours 2019.02.19 11:00:00

Pour 2019.06.19 14:00:00-retour 2019.06.19 11:00:00

Bien qu'en hiver il devrait être GMT+2 et en été GMT+3 (EET).

 
Ivan Titov:

Êtes-vous en train de dire que si les personnages non-forex ont un historique disponible, cela ne fonctionnera pas ?

Je ne me souviens pas. Mais ça a probablement été écrit pour une raison.


Il est important de savoir à quoi sert le décalage GMT. Ma vision de cette valeur est peut-être trop étroite, mais je ne vois son utilité que dans une seule chose : la possibilité de synchroniser différents points de vente de prix entre eux.

Je ne vois pas d'autres raisons. Ces fonctions doivent donc être capables de synchroniser, par exemple, des EURUSD chez différents courtiers (avec un décalage GMT différent). Si cela ne se produit pas, alors seulement il y a une erreur.

 
fxsaber:

Il est important de savoir à quoi sert le décalage GMT. Ma vision de cette valeur est peut-être trop étroite, mais je ne vois son utilité que pour une seule chose : la possibilité de synchroniser les différents points de vente de prix entre eux.

Je ne vois pas d'autres raisons. Ces fonctions doivent donc être capables de synchroniser, par exemple, des EURUSD chez différents courtiers (avec un décalage GMT différent). Si cela ne se produit pas, alors seulement il y a une erreur.

Ou un prix BP avec quelques nouvelles BP. Alors le truc ne marchera pas ?

 
Andrey Khatimlianskii:

Ou un prix BP avec une sorte de nouvelle. Le tour échouera-t-il alors ?

Tout d'abord, les deux symboles forex des différentes sources sont synchronisés. Après quoi le parti pris de l'un par rapport à l'autre devient clair. Sur la base de ces données, le reste des symboles

de ces sources.

La synchronisation avec le calendrier serait bonne à vérifier. Prenez les nouvelles en hiver et en été. Et voir si ça coïncide ou pas.

 
 

Calcul de la rentabilité.

// Вычисляет профитность на истории не пересекающихся закрытых позиций.
bool GetSumGain( const double Risk, double &SumGain, double &MaxDD, double &RF, const string Symb, const int Magic = -1 )
{
  bool Res = true;
  const double Leverage = Risk * 100;  
      
  SumGain = 1;
  MaxDD = 0;
  RF = 1;

  double MaxGain = SumGain;
  double DDGain = SumGain;
    
  for (int i = OrdersHistoryTotal() - 1; (i >= 0) && (Res = (SumGain > 0)); i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL) &&
        (OrderSymbol() == Symb) && ((Magic == -1) || (OrderMagicNumber() == Magic)))        
    {
      SumGain *= 1 - Leverage * ((OrderType() << 1) - 1) * (1 - OrderOpenPrice() / OrderClosePrice());
      
      if (SumGain > MaxGain)
        MaxGain = SumGain;
      else if (1 - SumGain / MaxGain > MaxDD)
      {
        MaxDD = 1 - SumGain / MaxGain;
        
        DDGain = SumGain;
      }
    }
    
  RF = SumGain / DDGain;
      
  return(Res);
}


Appliquer

#property strict
#property  show_inputs

input int MagicNumber = 1; // Для какого мэджика вычислить профитность?

#define  D(A) DoubleToString(A, 2)

void OnStart()
{
  for (int i = 1; i <= 20; i++)
  {
    double SumGain, MaxDD, RF;    
    const double Risk = i * 0.1;
    
    if (GetSumGain(Risk, SumGain, MaxDD, RF, _Symbol, MagicNumber))   
      Print((string)MagicNumber + ": при риске " + D(Risk) +
                                  " увеличение было бы в " + D(SumGain) + " раза" +
                                  " с максимальной относительной просадкой по балансу " + D(MaxDD) + 
                                  ", фактор восстановления = " + D(RF));   
  }
       
}


Résultat

1: при риске 0.30 увеличение было бы в 2.16 раза с максимальной относительной просадкой по балансу 0.19, фактор восстановления = 2.01
1: при риске 0.20 увеличение было бы в 1.68 раза с максимальной относительной просадкой по балансу 0.13, фактор восстановления = 1.60
1: при риске 0.10 увеличение было бы в 1.30 раза с максимальной относительной просадкой по балансу 0.07, фактор восстановления = 1.27