Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1598

 
Maxim Kuznetsov:

juste pour ajouter, il n'est PAS GARANTI que le terminal a et donnera un historique suffisant.

dans l'exemple ci-dessus, il n'y a pas de référence à l'histoire

ainsi il est garanti que le résultat de OrderSelect() est vrai.

UPD : OrderSelect en 4 fonctionne très bien, je l'ai testé une fois - pour les ordres au marché, le moment d'accès aux propriétés de l'ordre..... c'est vraiment des millions de fois par seconde, je ne veux pas chercher, je crois que je me disputais avec le modérateur Artem, mais comme on dit "toutes les pointes de pieds sont différentes", j'aime bien - gardez-le.

 

Bonjour, il y a un besoin de données sur le drawdown de chaque transaction.

Quelqu'un peut-il rencontrer un script pour collecter de telles statistiques et les sortir sous forme de rapport ?

Merci.

 
законопослушный гражданин:

Bonjour, il y a un besoin de données sur le drawdown de chaque transaction.

Quelqu'un peut-il rencontrer un script pour collecter de telles statistiques et les sortir sous forme de rapport ?

merci

for(int i=OrdersTotal()-1;i>=0;i--) {

   if (!OrderSelect(i,SELECT_BY_POSITON,MODE_TRADES)) continue;

   double prosad=DBL_MIN;

   if (OrderType()!=OP_BUY && OrderType!=OP_SELL) continue;

   for(int j=iBarShift(OrderSymbol(),OrderOpenTime(),PERIOD_M1); j>=0;j--) {

      double delta=( OrderType()==OP_BUY? OrderOpenPrice()-iLow(OrderSymbol(),PERIOD_M1,j) : iHigh(OrderSymbol(),PERIOD_M1,j)-OrderOpenPrice() );

      delta /= MarketInfo(OrderSymbol(),MODE_POINT);

      if (delta>prosad) prosad=delta;

   }

  PrintFormat("Максимальная просадка по ордеру %d = %d пунктов , %f денег",OrderTicket(),(int)(prosad),prosad*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE);

}

il est "écrit à la main", non testé, plein de bogues :-) il suffit de l'adapter à vos besoins et de l'utiliser.

 
Maxim Kuznetsov:

for(int i=OrdersTotal()-1;i>=0;i--) {

   if (!OrderSelect(i,SELECT_BY_POSITON,MODE_TRADES)) continue;

   double prosad=DBL_MIN;

   if (OrderType()!=OP_BUY && OrderType!=OP_SELL) continue;

   for(int j=iBarShift(OrderSymbol(),OrderOpenTime(),PERIOD_M1); j>=0;j--) {

      double delta=( OrderType()==OP_BUY? OrderOpenPrice()-iLow(OrderSymbol(),PERIOD_M1,j) : iHigh(OrderSymbol(),PERIOD_M1,j)-OrderOpenPrice() );

      delta /= MarketInfo(OrderSymbol(),MODE_POINT);

      if (delta>prosad) prosad=delta;

   }

  PrintFormat("Максимальная просадка по ордеру %d = %d пунктов , %f денег",OrderTicket(),(int)(prosad),prosad*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE);

}

écrit "à la main", non vérifié, plein d'erreurs :-) à adapter à vos besoins et à votre utilisation

Merci, je vais essayer de trouver une solution !

 
@Igor Makanu, merci beaucoup pour vos réponses concernant les ordres de tri dans le terminal. Je vais probablement les enregistrer comme un tableau de structures et les trier moi-même. Mes doutes venaient principalement du fait que je craignais que de telles actions effectuées à chaque tic n'aient un impact négatif notable sur les performances.
 
Janis Ozols:
@Igor Makanu, merci beaucoup pour vos réponses concernant les ordres de tri dans le terminal. Je vais probablement les enregistrer comme un tableau de structures et les trier moi-même. Les doutes venaient principalement du fait que je craignais que de telles actions effectuées à chaque tic n'aient un impact négatif notable sur les performances.

Alors pourquoi trier à chaque tique ? Cela ne suffit que lorsque le nombre d'entrées change ou que la liste change complètement...

 
Bonjour Veuillez m'aider à comprendre pourquoi l'indicateur téléchargé depuis le navigateur n'est pas traîné sur le graphique. Il est dans le catalogue.
Dossiers :
image002.jpg  38 kb
 
Après-midi. S'il n'y a pas de chargement automatique de l'outil indicateur de la place de marché dans leterminal de trading, quel est le problème ?
 
Igor Makanu:

dans l'exemple ci-dessus, il n'y a pas de référence à l'histoire

ainsi il est garanti que le résultat de OrderSelect() est vrai.

UPD : OrderSelect en 4 fonctionne très bien, je l'ai testé une fois - pour les ordres au marché, le moment d'accès aux propriétés de l'ordre..... c'est vraiment des millions de fois par seconde, je ne veux pas chercher, je crois que je me disputais avec le modérateur Artem, mais comme on dit "toutes les pointes de pieds sont différentes", j'aime bien - gardez-le.

Le modérateur Artem ne discute pas. Le modérateur Artem débat :)
 
void OnTick()
  {
    if(isCrossing() == 1)          
      
    ... 

    if(isCrossing() == 2)
      
    ... 
  }

int isCrossing(){  
  double ma = iMA(NULL, g_timeFrame, g_maPeriod, g_maShift, g_maMethod, g_maApplietPrice, 0);
  double low = iLow(Symbol(), g_timeFrame, 0);
  double high = iHigh(Symbol(), g_timeFrame, 0);

  if(g_barTime < iTime(NULL,g_timeFrame,0) && high > ma && Bid <= ma){
    g_barTime = iTime(NULL,g_timeFrame,0);
    return 1;
  } 
  
  if(g_barTime < iTime(NULL,g_timeFrame,0) && low < ma && Bid >= ma){
    g_barTime = iTime(NULL,g_timeFrame,0);
    return 2;
  }
   
  return 0;
}
Pourquoi isCrossing() ne renvoie pas 2? ?? La fonction isCrossing() elle-même a une deuxième entrée if, mais il n'y a pas d'entrée if dans OnTick() lorsque isCrossing() == 2. C'est quoi cette absurdité...