[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 298

 

Les gars qui sont amicaux avec Pyatra. S'il vous plaît, regardez mon Indy pour le championnat. Je suis coincé - je n'arrive pas à me décider...

Traduction de 4 à 5 - là sur le forum - silence. Mettez le code dans la branche - sur cette page. Description - sur le précédent.

Merci.

 
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {                     // !!!!!!!!?????? ХОТЬ КТО-ТО МОЖЕТ ОБЪЯСНИТЬ ЗНАЧЕНИЕ СТРОК КОДА, КОТОРЫЕ НАЧИНАЮТСЯ С ЭТОГО МЕСТА?
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(True);
  }
  return(False);
 
okvseok:

bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
 datetime t;
 double ocp, otp;
 int dg, i, j=-1, k=OrdersHistoryTotal();

 if (sy=="0") sy=Symbol();
 for (i=0; i<k; i++) {
 if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
 if (OrderSymbol()==sy || sy=="") {
 if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
 if (op<0 || OrderType()==op) {
 if (mn<0 || OrderMagicNumber()==mn) {
 if (t<OrderCloseTime()) {
 t=OrderCloseTime();
 j=i;
 }
 }
 }
 }
 }
 }
 }
 // !!!!!!!!?????? ХОТЬ КТО-ТО МОЖЕТ ОБЪЯСНИТЬ ЗНАЧЕНИЕ СТРОК КОДА, КОТОРЫЕ НАЧИНАЮТСЯ С ЭТОГО МЕСТА?
 if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {// Если очередной ордер истории торгов выбран, то
 dg=MarketInfo(sy, MODE_DIGITS);// переменная dg принимет значение дигитса по валютной паре, имя которой лежит в переменной sy
 // далее я возможно не верно расставил приоритет скобок, но по сути должно быть так:
 if (dg==0){// если дигитс равен нулю, то
 if(StringFind(OrderSymbol(),"JPY")<0){// если в имени инструмента ордера найдена подстрока то (только это не правильно написано - функция может верноуть значение > 1)
 dg=4;// дигитс принимает значение = 4
 }
 else{// иначе
 dg=2;// дигитс принимает значение = 2
 }
 }
 ocp=NormalizeDouble(OrderClosePrice(), dg);// нормализация цены закрытия ордера
 otp=NormalizeDouble(OrderTakeProfit(), dg);// нормализация цены ТейкПрофита ордера
 if (ocp==otp) return(True);
 }
 return(False);// команда вернуть из подпрограммы значение "ложь"
 }
 
drknn:

bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
date t ;
double ocp, otp ;
int dg, i, j=-1, k=OrdersHistoryTotal() ;

si (sy=="0") sy=Symbole() ;
for (i=0 ; i<k ; i++) {
si (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
si (OrderSymbol()==sy || sy==") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
si (op<0 || OrderType()==op) {
si (mn<0 || OrderMagicNumber()==mn) {
si (t<OrderCloseTime()) {
t=OrderCloseTime() ;
j=i ;
}
}
}
}
}
}
}
// ! !!!!!!!?????? QUELQU'UN PEUT-IL EXPLIQUER LA SIGNIFICATION DES LIGNES DE CODE QUI COMMENCENT À CET ENDROIT ?
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {// Si l'ordre suivant de l'historique des transactions est sélectionné
dg=MarketInfo(sy, MODE_DIGITS);// la variable dg acceptera la valeur des chiffres par la paire de devises dont le nom est dans la variable sy
// ci-après j'ai probablement mal placé les parenthèses mais en fait cela devrait être comme ceci
if (dg==0){// if digits is zero, then
if(StringFind(OrderSymbol(), "JPY")<0){// si une sous-chaîne est trouvée dans le nom du symbole de l'ordre alors (seulement ce n'est pas écrit correctement - la fonction peut valider > 1)
dg=4;// les chiffres prennent la valeur = 4
}
else{// else
dg=2;// les chiffres prennent la valeur = 2
}
}
ocp=NormalizeDouble(OrderClosePrice(), dg);//normaliser le prix de clôture de l'ordre
otp=NormalizeDouble(OrderTakeProfit(), dg);//normaliser le prix TakeProfit de l'ordre
if (ocp==otp) return(True) ;
}
return(False);// commande pour retourner(false) de la sous-routine
}
Merci, c'est quoi les chiffres ?
 
okvseok:
Merci, c'est quoi les chiffres ?

Les chiffres d'un instrument de négociation - le nombre de chiffres après la virgule qu'il possède.
 
drknn:

Signification d'un instrument commercial - le nombre de chiffres après la virgule qu'il comporte.

C'est-à-dire que si je sais que les chiffres sont 4, alors le code peut être raccourci comme ceci ?

int dg = 4 ;

............ code

if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {

ocp=NormalizeDouble(OrderClosePrice(), dg);// normaliser le prix de clôture de l'ordre
otp=NormalizeDouble(OrderTakeProfit(), dg);// normaliser le prix TakeProfit de l'ordre
if (ocp==otp) return(True) ;
}

retourner(Faux) ;

}

 
Je ne sais pas si c'est possible - d'après l'idée de l'auteur (enfin, il me semble), cette partie du code est conçue pour déterminer automatiquement les chiffres - afin que le code puisse déterminer exactement le nombre de chiffres après la virgule pour arrondir les prix. Seule cette partie du code est faite de manière inutile.
 
Pouvez-vous me dire s'il existe un indicateur qui calcule le nombre total d'ordres ouverts pour toutes les paires impliquées dans le processus de négociation ?
 
yosuf:
Pouvez-vous me dire s'il existe un indicateur qui calcule le nombre total d'ordres ouverts pour toutes les paires impliquées dans le processus de négociation ?
Non, non. Il est plus facile de créer un simple conseiller expert qui calcule le nombre de positions ouvertes.
 
Question pour le patron de CodeBase. J'y ai envoyé 3 publications (plus 3 en anglais). L'un d'eux a été envoyé le 18 juillet et n'a pas été publié. Au début, lorsque j'y envoyais les codes, ils apparaissaient dans les 3-4 jours. Maintenant, on ne sait pas si de nouvelles seront publiées ou non. J'aimerais savoir si, par exemple, le matériel est faible et que, de l'avis du superviseur, il ne faut pas les insérer dans CodeBase, est-ce que je recevrai un message indiquant qu'ils n'apparaîtront pas et qu'ils seront ensuite, par exemple, supprimés de l'application ? Si je savais qu'ils ne seraient pas publiés, je préparerais la publication différemment, de manière plus approfondie. Y a-t-il un temps d'attente moyen pour la publication ?