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

 
silhouette:

Je suis un peu bloqué sur l'implémentation de l'algorithme de placement des commandes.

L'essentiel est qu'il y a un ticket, je déclenche l'énumération avec une condition pour trouver le ticket :

Si l'un des ordres correspond à un magik, nous le modifions.

Nous avons une autre tâche : si aucun des ordres ne correspond à un Magic, nous devons définir un nouvel ordre en attente. if(OrderMagicNumber()!=magic) ne fonctionnera pas ici.

Comment pouvons-nous mettre en œuvre cette condition sans recourir à des fonctions personnalisées tierces ?

C'est très simple. Créer une variable booléenne. Avant de traiter les commandes, mettez-le à false. Dès que la commande est traitée, changez-le en vrai. Après avoir vérifié tous les ordres, vérifiez la valeur de la variable - si elle reste fausse, cela signifie qu'il n'y a pas eu d'ordre avec la magie nécessaire. Vous ouvrez une nouvelle commande.

 
midorum:

C'est très simple. Créer une variable booléenne. Définissez-le sur false avant de traiter les commandes. Dès que la commande est traitée, changez-le en vrai. Après avoir vérifié tous les ordres, vérifiez la valeur de la variable - si elle reste fausse, cela signifie qu'il n'y a pas eu d'ordre avec la magie nécessaire. Vous ouvrez une nouvelle commande.

Merci !
 
Roman.:
Essayez de jouer avec (modifiez selon vos besoins) isCloseLastPosByStop de Kim - Renvoie le drapeau de fermeture de la dernière position par le stop.

et NumberOfPositions - Renvoie le nombre de positions, et peut-être que d'autres répondront à votre question...


MERCI MON POTE, JE VAIS CONTINUER À CREUSER :D
 

J'ai décidé de comprendre comment fonctionne l'indicateur ATR, et en même temps d'étudier son code. J'ai compris l'essentiel, mais c'est écrit bizarrement.

Voici sa fonction de démarrage:

int start()
  {
   int i,counted_bars=IndicatorCounted();
//----
   if(Bars<=AtrPeriod) return(0);
//---- initial zero
   if(counted_bars<1)
      for(i=1;i<=AtrPeriod;i++) AtrBuffer[Bars-i]=0.0;
//----
   i=Bars-counted_bars-1;
   while(i>=0)
     {
      double high=High[i];
      double low =Low[i];
      if(i==Bars-1) TempBuffer[i]=high-low;
      else
        {
         double prevclose=Close[i+1];
         TempBuffer[i]=MathMax(high,prevclose)-MathMin(low,prevclose);
        }
      i--;
     }
//----
   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;
   for(i=0; i<limit; i++)
      AtrBuffer[i]=iMAOnArray(TempBuffer,Bars,AtrPeriod,0,MODE_SMA,i);
//----
   return(0);
  }
//+----------------

Voici le premier bloc avec la confusion :

//---- initial zero
   if(counted_bars<1)
      for(i=1;i<=AtrPeriod;i++) AtrBuffer[Bars-i]=0.0;
//----

Quel est l'intérêt de faire quelque chose si la valeur counted_bars <1. A mon avis, cela signifie que l'indicateur n'a pas compté de barre et que je devrais juste quitter la fonction car il n'y a pas encore de valeurs.... Quel est le piège ?

Pourquoi AtrBuffer a l'index[Bars-i]? J'ai compris que l'idée est de mettre le tampon à 0.0 s'il n'y a pas de valeurs. Mais il s'avère que la valeur 0.0 n'est définie que pour les barres allant de (Bars) à (AtrPeriod), alors que deAtrPeriod à la 0ème barre, rien n'est écrit dans le tampon. Pourquoi ?

Je ne comprends pas la logique de ce fragment de code

Dans le bloc suivant :

//----
   i=Bars-counted_bars-1;
   while(i>=0)
     {
      double high=High[i];
      double low =Low[i];
      if(i==Bars-1) TempBuffer[i]=high-low;
      else
        {
         double prevclose=Close[i+1];
         TempBuffer[i]=MathMax(high,prevclose)-MathMin(low,prevclose);
        }
      i--;
     }
//----

Dans la ligne :

if(i==Bars-1) TempBuffer[i]=high-low;

Condition si i==Bars-1. Il semble que la valeur de la 1ère barre depuis le début du graphique de gauche soit prise en compte... Mais c'est très loin, à quoi bon cette valeur ?

 

J'ai besoin d'aide !

Comment faire pour qu'un EA ferme tous les ordres ouverts et en attente à un niveau de drawdown donné, par exemple 30%, puis le redémarre et recommence tout à zéro ?

Dossiers :
 
OrderSend
(  string symbol, int cmd, double volume, double price, int slippage,
double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

Pourriez-vous me dire ce que devrait contenir le paramètre d'expiration de la date dans la fonction de placement de l'ordre, afin que l'ordre en attente se supprime au bout de 5 minutes s'il n'a pas fonctionné ? Est-ce que c'est TimeCurrent()+300 ou pas ?

 
BeerGod:

Pourriez-vous me dire ce que devrait contenir le paramètre d'expiration de la date dans la fonction de placement de l'ordre, afin que l'ordre en attente se supprime au bout de 5 minutes s'il n'a pas fonctionné ? Est-ce que c'est TimeCurrent()+300 ou pas ?

il indique les secondes, si je ne me trompe pas. donc vous avez raison 5 min fera 300. Essayez d'utiliser le temps d'ouverture sans stop ni profit et le temps de fermeture, imprimez-le et vous pourrez comparer.
 
Bonjour à tous, j'aimerais vous aider, parier 0.10 stop 200pip quel montant dois-je avoir pour soutenir 200pip ?
 
laveosa:
Bonjour à tous, j'aimerais vous aider, parier 0.10 stop 200pip combien dois-je avoir pour soutenir 200pip ?
Je ne sais pas, cela dépend du type de compte que vous utilisez, par exemple normal ou cent. Parfois, 1 pip pour 0,01 lot = 1 cent (x10x200 = 20 USD), et parfois 1 pip pour 0,01 lot = 10 cents (x10x200 = 200 USD).
 
paladin80:
Eh bien, cela dépend du type de compte que vous utilisez, par exemple un compte normal ou un compte cent. Parfois, 1 pip pour 0,01 lot = 1 cent (x10x200 = 20 USD), et parfois 1 pip pour 0,01 lot = 10 cents (x10x200 = 200 USD).
j'ai 1 pip - 1 cent. donc j'ai besoin de 20 usd pour pouvoir arrêter jusqu'à 200 pips ?
Raison: