Fonctions utiles de KimIV - page 113

 
togomsk:


Bonjour !

Pour une raison quelconque, lorsque votre bibliothèque est connectée, l'opérateur extern ne fonctionne plus, c'est-à-dire que les variables sont définies, tout se compile normalement, et en principe, l'EA fonctionne, mais en même temps, l'EA n'a aucun paramètre au démarrage du type, alors qu'il y a pas mal de paramètres. Quelle peut en être la raison ?


Trouvez dans le code

#property library

Et supprimer.

 

J'ai ajouté une variable j à cette fonction, pour l'avant-dernière transaction.

double GetProfitLastClosePos(string sy="", int op=-1, int mn=-1, int j=0) {
datetime o ;
double p=-1 ;
int i, k=OrdersHistoryTotal() ;

si (sy=="0") sy=Symbole() ;
for (i=0 ; i<k ; i++) {
if(OrderSelect(i-j, SELECT_BY_POS, MODE_HISTORY)) {
si (OrderSymbol()==sy || sy=="") {
si (OrderType()==OP_BUY || OrderType()==OP_SELL) {
si (op<0 || OrderType()==op) {
si (mn<0 || OrderMagicNumber()==mn) {
si (o<OrderCloseTime()) {
o=OrderCloseTime() ;
p=OrderProfit() ;
}
}
}
}
}
}
}
retour(p) ;
}
 
abdul1:

J'ai ajouté une variable j à cette fonction pour les avant-dernières transactions.

Si l'on considère que les commandes qui ont été clôturées sont prises en compte dans OrdersHistoryTotal() selon l'heure de clôture de droite à gauche (la dernière à droite) :

double GetProfitLastClosePos (string sy="", int op=-1, int mn=-1,
                              int j=0)          // Искомый (по номеру) ордер от последнего закрытого 
{
    int k = OrdersHistoryTotal(), li_cnt = 0;
//----
    if (sy == "0" || sy == "") sy = Symbol();
    for (int i = k - 1; i >= 0; i--)
    {
        if (!OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) continue;
        if (OrderSymbol() != sy) continue;
        if (OrderType() > 1) continue;
        if (op >= 0) if (OrderType() != op) continue;
        if (mn >= 0) if (OrderMagicNumber() != mn) continue;
        if (j == li_cnt) return (OrderProfit());
        li_cnt++;
    }
//----
    return (-1.0);
}

La fonction retourne le profit j-ième du dernier ordre fermé, "filtré" par symbole, magik, type. Et les chiffres sont comptés à partir de 0.

 
TarasBY:

Si l'on tient compte du fait que les ordres clôturés sont comptabilisés dans OrdersHistoryTotal() en fonction de l'heure de clôture de droite à gauche (le plus récent à l'extrême droite) :

La fonction retourne le profit j-ième du dernier ordre clôturé, "filtré" par instrument, Magik, type. Et les chiffres sont comptés à partir de 0.

C'est ce dont j'ai besoin !
 

Bonjour à tous.

Besoin d'une fonction pour fermer les ordres d'achat et de vente de lots égaux par des contre-ordres, lorsque leur profit passe à +. J'ai essayé d'exécuter cette fonction, mais l'erreur 4108 s'est produite (mauvais billets).

Pouvez-vous me dire quel est le problème ?

//+------------------------------------------------------------------+
int fCloseBu(){
        // Закрываем встречные
  double LotB,LotS,PrB=0,PrS=0;
  int TicketB,TicketS,i, k=OrdersTotal();

  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==Symbol() || Symbol()=="")) {
        if (Magic_N<0 || OrderMagicNumber()==Magic_N) {
        //----------
        if(OrderType()==OP_BUY){
          if (PrB<OrderProfit()+OrderSwap()+OrderCommission()) {
            PrB=OrderProfit()+OrderSwap()+OrderCommission();
            LotB=OrderLots();
            TicketB=OrderTicket();
          }
        }
        if(OrderType()==OP_SELL){
          if (PrS<OrderProfit()+OrderSwap()+OrderCommission()) {
            PrS=OrderProfit()+OrderSwap()+OrderCommission();
            LotS=OrderLots();
            TicketS=OrderTicket();
          }
        }
       if (PrB>0 && PrS>0 && LotB==LotS) {
          OrderCloseBy(TicketB,TicketS,CLR_NONE);
          Print("Закрываем пару встречных ордеров c одинаковыми лотами в плюсе");
          }  
        }
      }
    }
  }
//-------------
   return(0);
}
//+------------------------------------------------------------------+
 
Les commandes doivent être clôturées lorsque le cycle complet de vérifications est terminé, c'est-à-dire après l 'instruction for, et non à l'intérieur.
 
Pouvez-vous m'indiquer où je peux trouver un EA qui fonctionne sur le croisement d'une moyenne mobile avec la possibilité de déplacer la moyenne mobile dans les paramètres ?
 
Roger:
Les commandes doivent être clôturées lorsque le cycle complet de vérifications est terminé, c'est-à-dire après l'instruction for, et non à l'intérieur.


Merci ! Si quelqu'un d'autre a besoin d'une telle fonction, ce sera comme ceci :

//+------------------------------------------------------------------+
//|    Закрываем встречные                                           |
//+------------------------------------------------------------------+
int fCloseBu(){
  double LotB,LotS,PrB=0,PrS=0;
  int TicketB,TicketS,i, k=OrdersTotal();

  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==Symbol() || Symbol()=="")) {
        if (Magic_N<0 || OrderMagicNumber()==Magic_N) {
        //----------
        if(OrderType()==OP_BUY){
          if (PrB<OrderProfit()+OrderSwap()+OrderCommission()) {
            PrB=OrderProfit()+OrderSwap()+OrderCommission();
            LotB=OrderLots();
            TicketB=OrderTicket();
          }
        }
        if(OrderType()==OP_SELL){
          if (PrS<OrderProfit()+OrderSwap()+OrderCommission()) {
            PrS=OrderProfit()+OrderSwap()+OrderCommission();
            LotS=OrderLots();
            TicketS=OrderTicket();
             }
           }
         }
       }
     }
   }//for
   if(PrB>0 && PrS>0 && LotB==LotS) {
     OrderCloseBy(TicketB,TicketS,CLR_NONE);
     Print("Закрываем пару встречных ордеров c одинаковыми лотами в плюсе");
  }
//-------------
   return(0);
}
//+------------------------------------------------------------------+
 
Existe-t-il des tutoriels vidéo sur ce langage ?
 
Andrei5:
Existe-t-il des tutoriels vidéo sur ce langage ?
Il existe un livre. Vous pouvez le lire en ligne ou le télécharger sur votre ordinateur. Regardez ci-dessus -> "Tutorial".
Raison: