[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 616

 
Naturellement, vous avez raison. L'implication était que vous avez déjà un code pour prendre des lectures seulement une fois par barre.
 
sllawa3:
Je pense que tu as raison... J'ai aussi des doutes...

Vous pouvez utiliser cette méthode pour surveiller l'équité afin de fermer toutes les positions et de supprimer les ordres dès que le pourcentage spécifié de bénéfice sur l'équité est atteint :

//--------------------------------------------------------------
// Описание глобальных переменных советника
// ----------------- Трал эквити -------------
extern double  PercentEquityForClose=15;
double         Equ_OLD,
               Equ_NEW,
               EquPerc,
               Equ_Start;

// ---- Дальнейшее описание глобальных переменных советника

//==========================================================

int init()                             // Функция init
{
   Equ_OLD=AccountEquity();
   Equ_Start=Equ_OLD; 
   EquPerc=Equ_Start/100*PercentEquityForClose;
   
// ---- Дальнейший код функции ----

   return;                             // Выход из init() 
}

//==========================================================
// ---- В функции слежения за событиями ----
// ---- вызываемой из функции start ----

   Equ_NEW=AccountEquity();                              // С новым тиком запоминаем текущее значение эквити
   if (Equ_OLD!=Equ_NEW)                                 // Если новое значение не равно старому, то
         {
            if (Equ_NEW>=Equ_OLD+EquPerc)                // Если эквити увеличилось по отношению к своему прошлому значению на EquPerc процентов,
               {                                         
                  ClosePosFirstProfit(NULL, -1, -1);     // то закрываем все позиции
                  DeleteOrders(NULL, -1, -1);            // и удаляем все ордера
                  Equ_NEW=AccountEquity();               // Запоминаем текущее значение эквити
                  Equ_OLD=Equ_NEW;                       // и заносим его в "прошлое" значение для проверки на изменение на след. тике
               }
         }

Je l'ai écrit sur le vif, il peut donc y avoir des erreurs.
Pour suivre les changements d'équité sur chaque barre, il suffit de vérifier l'ouverture d'une nouvelle barre et si c'est le cas, vous devez exécuter ce fragment de code :

   Equ_NEW=AccountEquity();                              // С новым тиком запоминаем текущее значение эквити
   if (Equ_OLD!=Equ_NEW)                                 // Если новое значение не равно старому, то
         {
            if (Equ_NEW>=Equ_OLD+EquPerc)                // Если эквити увеличилось по отношению к своему прошлому значению на EquPerc процентов,
               {                                         
                  ClosePosFirstProfit(NULL, -1, -1);     // то закрываем все позиции
                  DeleteOrders(NULL, -1, -1);            // и удаляем все ордера
                  Equ_NEW=AccountEquity();               // Запоминаем текущее значение эквити
                  Equ_OLD=Equ_NEW;                       // и заносим его в "прошлое" значение для проверки на изменение на след. тике
               }
         }

Je pense que ça donne quelque chose comme ça...

 
Roger:
Naturellement, vous avez raison. L'implication était que vous avez déjà un code pour prendre des lectures seulement une fois par barre.
Non, je ne le fais pas, mais j'ai écrit quelque chose ci-dessus pour vérifier l'équité à chaque tick. Il suffit de vérifier l'ouverture d'un nouveau bar et, si c'est le cas, de vérifier les fonds propres... Je ne pense pas que ce soit difficile à faire...
 
intéressé par le renversement de l'équité de la hausse à la baisse, à condition que l'équité soit au-dessus de l'équilibre... pour fermer tout ce qui est ouvert...
 
sllawa3:
Je suis intéressé par le renversement de l'équité de l'augmentation à la diminution, à condition que l'équité soit au-dessus de l'équilibre ... pour fermer tout ce qui est ouvert ...

Voici la fonction permettant de définir une nouvelle barre :

//+------------------------------------------------------------------+
//|  возвращает признак появления нового бара для указанного периода |
//+------------------------------------------------------------------+
bool isNewBar(int timeFrame)
   {
   bool res=false;
   
   // массив содержит время открытия текущего (нулевого) бара
   // по 7 (семь) таймфреймам
   static datetime _sTime[7];  
   int i=6;
 
   switch (timeFrame) 
      {
      case 1  : i=0; break;
      case 5  : i=2; break;
      case 15 : i=3; break;
      case 30 : i=4; break;
      case 60 : i=5; break;
      case 240: break;
      case 1440:break;
      default:  timeFrame = 1440;
      }
//----
   if (_sTime[i]==0 || _sTime[i]!=iTime(Symbol(),timeFrame,0))
      {
      _sTime[i] = iTime(Symbol(),timeFrame,0);
      res=true;
      }
      
//----
   return(res);   
   }
   

... intéressé par le renversement de l'équité de la hausse à la baisse tant que l'équité est au-dessus de l'équilibre ... pour fermer tout ce qui est ouvert ...

Ensuite, nous devons vérifier l'équité à chaque tic. Après tout, si vous travaillez sur des ticks, par exemple, une heure avant le prochain contrôle des actions, celles-ci risquent de perdre leur valeur...

Ainsi, nous ne devons pas comparer l'augmentation de l'équité de 1%, mais son augmentation ou sa diminution par rapport à l'état au tick précédent, enregistré dans la variable Equ-OLD avec sa valeur actuelle dans Equ_NEW
.

 
sllawa3:
intéressé par le renversement de l'équité de la hausse à la baisse, à condition que l'équité soit au-dessus du solde... pour fermer tout ce qui est ouvert...

Quelque chose comme ça :

   Equ_NEW=AccountEquity();                              // С новым тиком запоминаем текущее значение эквити
   if (Equ_OLD!=Equ_NEW)                                 // Если новое значение не равно старому, то
         {
            if (NormalizeDouble(Equ_NEW-Equ_OLD,8)<0)    // Если эквити уменьшилось по отношению к своему прошлому значению,
               {                                         
                  ClosePosFirstProfit(NULL, -1, -1);     // то закрываем все позиции
                  DeleteOrders(NULL, -1, -1);            // и удаляем все ордера.
                  Equ_NEW=AccountEquity();               // Запоминаем текущее значение эквити
                  Equ_OLD=Equ_NEW;                       // и заносим его в "прошлое" значение для проверки на изменение на след. тике
               }
         }

// (NormalizeDouble(Equ_NEW-Equ_OLD,8)<0) - возможно здесь нужно сравнивать не с нулём, а с каким-то числом, 
                                         // а то может в последующем и не дать увеличиться балансу, 
                                         // постоянно закрывая вновь открываемые позиции (они ведь требуют залога)

Cependant, il ne s'agit que d'informations à prendre en compte, pas de code prêt à l'emploi...

 
drknn:

Bien sûr. Seulement ça ne s'appelle pas un stop, ça s'appelle un ordre en attente. Ouvrez un terminal. Appuyez sur la touche F1. Dans la fenêtre qui s'affiche, ouvrez Contenu - Commerce - Types de commande.

)))) merci, mais après la confusion des fonds et le manque d'habitude de l'exécution par les offres et les demandes au lieu des transactions, lorsque quelque chose est confus - ne pas hésiter à poser des questions stupides pour lever les doutes. )))
 

Aide . le dealer a cinq décimales . la fonction iOpen (NULL,0,n) ne donne que quatre décimales (les lectures sont prises par impression) . comment résoudre le problème .

 
pips500:

Aide . le dealer a cinq décimales . la fonction iOpen(NULL,0,n) ne donne que quatre décimales (les lectures sont prises par impression) . comment puis-je résoudre le problème . merci d'avance.

Print() arrondit à 4 chiffres afin d'afficher correctement sur la console le type double(qui retourne iOpen() 5 décimales, dans ce cas), vous devez utiliser la fonction DoubleToStr()

string DoubleToStr( double value, int digits)
Convertit une valeur numérique en une chaîne de texte contenant la représentation en caractères d'un nombre dans le format de précision spécifié.

Paramètres :

value - Величина с плавающей точкой.

digits - Формат точности, число цифр после десятичной точки (0-8).

 
sllawa3:
Je suis intéressé par le renversement de l'équité de l'ascendant vers le descendant, à condition que l'équité soit au-dessus du solde... pour fermer tout ce qui est ouvert...

Et voici un exemple de son fonctionnement... J'ai délibérément fait une ouverture de position sur chaque nouvelle barre... Donc, nous avons ici "OC Killer"... :)


Ci-joint le rapport du testeur, où il n'y a pas de limite et l'ouverture des positions à chaque tick - énorme pourcentage ... Et pas d'inconvénient :) C'est dommage que personne ne vous laisse travailler comme ça...

Voici une photo du rapport :


J'ai gagné beaucoup d'argent avec ces "raids", avec presque pas de drawdowns. Je n'ai même pas réussi à atteindre les takeovers (vous pouvez les voir ci-dessus) :


Dossiers :