Fonctions utiles de KimIV - page 120

 

Bon après-midi.

J'ai modifié la fonction GetProfitOpenPosInCurrency() pour retourner la pire position perdante. Pouvez-vous indiquer à quelles fonctions conviendraient pour renvoyer l'heure d'ouverture de cette position (OrderOpenTime()) ?

double GetMaxLoseOpenPosInCurrency(string sy="", int op=-1, int mn=-1) {
  double p=0;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) 
            if(p > OrderProfit() + OrderSwap() + OrderCommission()){
            p=OrderProfit()+OrderCommission()+OrderSwap();
          }
        }
      }
    }
  }
  return(p);
}
 
abeiks:

Bon après-midi.

J'ai modifié la fonction GetProfitOpenPosInCurrency() pour retourner la pire position perdante. Pouvez-vous indiquer à quelles fonctions conviendraient pour renvoyer l'heure d'ouverture de cette position (OrderOpenTime()) ?


Renvoyez le numéro du ticket et vous pouvez utiliser les fonctions standard.
 
Vinin:

Renvoyez le numéro du ticket et vous pourrez vous passer des fonctions standard

Merci.
 

KimIV , bonjour.Je cherche - je ne trouve pas le script - à supprimer tous les ordres en attente sur le symbole - et à traînersur le symbole, peut-être qu'il y en a un - postez........ ne le considérez pas comme impertinent.Merci d'avance .

 

Bon après-midi.

J'utilise la fonction isTradeTimeInt() de KimIV. J'utiliserai plusieurs intervalles de temps et pour chaque intervalle, j'attribuerai différentes variables. J'ai fait ce code pour lui (2 intervalles jusqu'à présent). La question est de savoir si cette solution est la plus correcte ou si je dois aborder la tâche différemment.

extern int OH1=9;extern int OM1=0;extern int CH1=12;extern int CM1=0;
extern int OH2=13;extern int OM2=0;extern int CH2=15;extern int CM2=0;

int HourOpenTime()
{
int trade = 0;
if(isTradeTimeInt(OH1,OM1,CH1,CM1))trade = 1;
if(isTradeTimeInt(OH2,OM2,CH2,CM2))trade = 2;
return (trade);
}
 
bestseich:

Cher Igor Kim, aidez-moi à écrire une fonction comme OrderCloseBy(), mais elle doit fonctionner pour différentes paires et OrderProfit(), et peu importe si les ordres sont dirigés différemment ou non, comme un OrderProfit() > un autre, une autre paire, de combien de points et les deux, exactement, seulement ces deux, ferment simultanément. Ma variante est la suivante :

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

{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()!=Symbol()||OrderSymbol()==Symbol())
{
if(OrderProfit()>=pr*Point)//pr est dans les paramètres, points de profit
int ot=OrderTicket();double op=OrderProfit() ;
if(OrderProfit()<=pru*(-1)*Point)//pru-c'est dans les paramètres, points de perte
int otu=OrderTicket();double opu=OrderProfit() ;
if(op>opu*v*(-1)&&(OrderType()==OP_BUY||OrderType()==OP_SELL))
//v est un ratio bénéfices/pertes, c'est-à-dire 1,5
OrderClose(otu,OrderLots(),Bid,sleep,Blue) ;
OrderClose(ot,OrderLots(),Bid,sleep,Blue) ;
OrderClose(otu,OrderLots(),Ask,sleep,Blue) ;
OrderClose(ot,OrderLots(),Ask,sleep,Blue) ;

}}}

Est-ce que ça va marcher ? Corrigez ou proposez votre propre solution, si vous le voulez bien.

 

Cher Igor !

Pourriez-vous nous indiquer si vous disposez d'une fonction permettant de calculer le volume du lot en fonction du solde du compte après la fermeture du dernier ordre et avant l'ouverture du suivant ?

Je vous remercie d'avance.

 
vasabu2012:

Cher Igor !

Pourriez-vous nous indiquer si vous disposez d'une fonction permettant de calculer le volume du lot en fonction du solde du compte après la fermeture du dernier ordre et avant l'ouverture du suivant ?

Je vous remercie d'avance.

Voici la fonction d'Igor.

Dossiers :
b-lots.mqh  3 kb
 

Dans la mise à jour, la fonction PriceOpenLastPos a cessé de fonctionner dans les conditions, j'ai failli me casser le cerveau, elle donne des valeurs dans les commentaires mais ne fonctionne pas dans les conditions, une petite modification a résolu le problème.

double PriceOpenLastPos(string sy="", int op=-1, int mn=-1) {
datetime t;
double r=0, r2=0;
int i, k=OrdersTotal();

if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderOpenTime()) {
t=OrderOpenTime();
r=OrderOpenPrice();
}
}
}
}
}
}
}

r2 = DoubleToStr(r, 4);

return(r2);
}


 
Aidez-nous à recompiler l'EA e-CloseByEquity.rar avec des changements de programmation dans le MetaEditor