Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 110

 
artmedia70:
Où dans cette fonction lisez-vous le StopLoss de la dernière fermeture ? Il n'y a rien là.

C'est juste là. Directement pointé.
OrderSelect(1,SELECT_BY_POS,MODE_HISTORY);
      take=OrderTakeProfit();
       ts=take;
 
borilunad:
Allez dormir, tout le monde ! C'est toujours mieux le matin ! Il est 1 heure du matin ! Bonne nuit ! Et Artem a déjà fait la grasse matinée !

Cela fait maintenant cinq jours que je fais ce que vous faites, et j'ai déjà commencé à réfléchir la nuit. Bonne nuit.
 
Ooh ! L'erreur 130 apparaît dans le journal de bord. Ce sont les mauvais arrêts, n'est-ce pas ? MAIS le nouveau stop loss est à 1.3282. Le stop loss est actuellement de 1.3275 (c'est aussi le prix d'ouverture de l'ordre) et la cotation actuelle est de 1.3297. Où est l'erreur ?
 

Bonjour. Pourquoi dans la variable prédéfinie "Point", les zéros ne sont pas définis dans le journal du testeur de stratégie, à la fin, les chiffres ronds ?

Пример:

static double lBUY;

lBUY=100*Point; //Так-же можно написать 10,20,180 или 520.

if(lBUY==0.01)

{

Alert("НУЛИ НЕ ПИШУТСЯ В КОНЦЕ Point ",lBUY);

}

 
artmedia70:
Je suis un sibérien, oui. Près de Krasnoyarsk.


Sibiryak, donc, presque, zamlYak)).
 
webip:

Mais cela fait cinq jours que je fais ce que vous faites et j'ai déjà commencé à réfléchir la nuit.

C'est plus facile de dire qui ne pense pas la nuit, si c'est l'inverse. Je suis dans la même situation. D'ailleurs, personne ne me dérange la nuit. Au fait, j'ai lu une fois que, genre, le cerveau pense mieux la nuit. C'est comme si les scientifiques avaient découvert...
 
semiromid:

Bonjour. Pourquoi dans la variable prédéfinie "Point", les zéros ne sont pas définis dans le journal du testeur de stratégie, à la fin, les chiffres ronds ?

Пример:

static double lBUY;

lBUY=100*Point; //Так-же можно написать 10,20,180 или 520.

if(lBUY==0.01)

{

Alert("НУЛИ НЕ ПИШУТСЯ В КОНЦЕ Point ",lBUY);

}



Et que produit réellement Alert ?
 
artmedia70:
DoubleToStr(nombre,chiffre) est pour vous


Merci beaucoup ! J'en avais besoin pour comparer les caractéristiques des bougies (plus, moins, etc.) Je l'ai vissé - ça marche. Seulement je ne comprends pas comment il compare le type de données string ? ou double to string ne traduit pas nombre to string? :-D


PS. Cela ne fonctionne pas dans l'indicateur - seulement dans le script... Lorsque j'appelle High[i] - je n'obtiens que 4 décimales dans celui-ci.

Je suis en train d'écrire :

Alert ("doubletostr High = ", DoubleToStr(High[1],5)) ;
if (DoubleToStr(High[2],5)>(DoubleToStr(High[3],5))
{
Alert ("More") ;
}
si (DoubleToStr(High[2],5)<(DoubleToStr(High[3],5))
{
Alerte ("Plus petit") ;

}

Fonctionne, il écrit le résultat avec cinq chiffres, les comptes plus/moins. Le problème est que dans l'indicateur, le tableau de chaînes n'apparaît pas sur le graphique. Par conséquent...

...l'écriture :

Alert ("Normalized Double High = ", NormalizeDouble(High[1],5)) ;

Cela ne fonctionne pas - le résultat est > 1,1234

Je ne comprends pas les développeurs - pourquoi ont-ils dû compliquer les choses à ce point ? Pourquoi, s'il affiche tant de chiffres sur le graphique, il ne raye pas la fonction appelée avec cinq chiffres ? Peut-être existe-t-il une solution simple ?

 

J'ai du mal avec une fonction qui doit retourner Vrai si la dernière position sur le marché a été fermée avec un profit, et Faux si elle n'a pas été fermée avec une perte. Si cette fonction renvoie Vrai, alors toutes les positions (en attente et sur le marché) sont fermées.

Voici ce qui en est ressorti :

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
bool isCloseByTakeLastOpenPos(int delta)
{
   datetime lastOrderCloseTime = 0,               // Время закрытия последнего открытого ордера
            lastOOTHist = -1;                     // Время открытия последнего открытого ордера из истории
   
   for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1) continue;               // Все удалённые отложки нас не интересуют..
  
      if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
      {
         lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
         int j = i;
      }
   }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
      if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
      }
   }
   else
   {
     // Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      return(false);
   }
  
   for(int h=OrdersTotal()-1; h>=0; h--)
   {
      if (OrderSelect(h, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderMagicNumber() != i_magic)   continue;
         if (OrderSymbol() != Symbol())       continue;
         if (OrderType() > 1)                 continue;
         if (lastOOTHist < OrderOpenTime()) return(false);  // Выбранная рыночная позиция открыта позже закрытой по тейку
      }
      else {Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать рыночный ордер");return(false);}
   }
   
   return (true);
}

Artyom ci-dessus a suggéré où j'avais un bug. Je l'ai réécrit pour moi. Ce n'est pas encore la variante finale, mais... c'est déjà très clair. Après avoir lancé le conseiller expert, j'ai immédiatement remarqué que les positions restantes n'étaient pas fermées et ne sont pas fermées du tout. J'ai commencé à chercher la raison. J'ai recommandé quelques fonctions et je me suis rendu compte qu'elle se trouve dans ce bloc :

 if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
      if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
      }
   }
   else
   {
      Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      return(false);
   }

Le commentaire est déclenché tout le temps exactement :

Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");

Je l'ai commenté et j'ai continué à rouler. J'ai remarqué que ce commentaire :

Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);

Ne se déclenche jamais, même lorsqu'il y a une dernière position fermée. Qu'est-ce qui pourrait ne pas aller ?

Mes pensées, bien que je puisse me tromper... Peut-être que tu dois mettre ce bloc

 if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
      if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
      }
   }
   else
   {
     // Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      return(false);
   }

le mettre dans la boucle for aussi ? Sinon, qui sait dans quelle direction ira le trop-plein. La variable j contiendra le numéro d'index de la position et il n'est pas explicitement spécifié dans quelle direction la recherche se fera.

 
hoz:

J'ai du mal avec une fonction qui doit retourner Vrai si la dernière position sur le marché a été fermée avec un profit, et Faux si elle n'a pas été fermée avec une perte. Si cette fonction renvoie Vrai, alors toutes les positions (en attente et sur le marché) sont fermées.

Voici ce qui en est ressorti :

Artyom ci-dessus a suggéré où j'avais un bug. Je l'ai réécrit pour moi. Ce n'est pas encore la variante finale, mais... c'est déjà très clair. Après avoir exécuté le conseiller expert, j'ai tout de suite remarqué que les positions restantes n'étaient pas fermées et ne l'étaient pas du tout. J'ai commencé à chercher la raison. J'ai recommandé quelques fonctions et je me suis rendu compte qu'elle se trouve dans ce bloc :

Le commentaire est déclenché tout le temps exactement :

Je l'ai commenté et j'ai continué à rouler. J'ai remarqué que ce commentaire :

Ne se déclenche jamais, même lorsqu'il y a une dernière position fermée. Qu'est-ce qui peut bien se passer ?

Mes pensées, bien que je puisse me tromper... Peut-être que tu dois mettre ce bloc

le mettre dans la boucle for aussi ? Sinon, qui sait dans quelle direction ira le trop-plein. La variable j contiendra le numéro d'index de la position et il n'est pas explicitement spécifié dans quelle direction la recherche se fera.

La variable j doit être initialisée explicitement au début de la fonction avec une valeur négative. Essayez-le. Je n'ai pas encore cherché plus loin.