[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 189

 
solnce600:

J'ai décidé de prendre ce qui me semblait être une voie plus simple.

Pas pour supprimer l'ordre en attente - mais pour placer un ordre en attente seulement si une bougie de cinq minutes n'est pas terminée

C'est-à-dire que l'ordre en attente ne doit être placé que lorsque deux conditions sont remplies. Si la première condition est remplie

- J'ai vérifié, l'ordre est fixé.

Bien sûr que oui, car cette condition est TOUJOURS vraie, elle ne peut tout simplement pas être fausse. Cela ne peut tout simplement pas être faux puisque cela signifie que la barre du zéro existe tout simplement.

Comment définir la deuxième condition, c'est-à-dire que l'ordre en attente n'est défini que si 5 minutes ne se sont pas écoulées. if (---------- && ? ????????)

Veuillez indiquer clairement la condition en mots. Il n'est pas encore clair si vous voulez placer l'ordre en attente au début d'un nouveau chandelier ou quoi ?
 
belozad:

J'ai besoin de connaître la plus petite et la plus grande fractale pour les n dernières barres, qu'est-ce qui ne va pas ici ? Aidez-moi !

   for (ii = 0; ii = n; ii++)
      {
         i = iFractals(NULL, 0, MODE_LOWER, ii);
         if (i < StopLos_L) StopLos_L = i;
         i = iFractals(NULL, 0, MODE_UPPER, ii);
         if (i > StopLos_H) StopLos_H = i;
      }



comment la variable i est-elle déclarée, pouvons-nous y jeter un œil ?
 
alsu:

la variable i telle qu'elle est déclarée, puis-je y jeter un œil ?


int ii;

double i;

 
belozad:


Cela devrait fonctionner comme suit :

   int ii;
   double i;
   double StopLos_L,StopLos_H;

   for (ii = 0; ii <= n; ii++)
      {
         i = iFractals(NULL, 0, MODE_LOWER, ii);
         if (i < StopLos_L || ii==0) StopLos_L = i;
         i = iFractals(NULL, 0, MODE_UPPER, ii);
         if (i > StopLos_H || ii==0) StopLos_H = i;
      } 
 
alsu:

Cela devrait fonctionner comme suit :


Bon sang, c'est évident.
ii <=n


alsu - merci, merci beaucoup =)

 
artmedia70:
Vous pouvez

Pouvez-vous me dire s'il est possible de peindre le corps d'une bougie désirée dans un EA ?
Où puis-je voir comment faire cela, j'en ai vraiment besoin.
 
beginner:
Pouvez-vous me dire s'il est possible de peindre le corps de la bougie désirée dans l'EA ?
Où puis-je voir comment faire cela, j'en ai vraiment besoin.

https://www.mql5.com/ru/code/7835 C'est seulement un indicateur. Vous devez utiliser des objets dans l'EA
 
alsu:

Bien sûr qu'elle l'est, car cette condition est TOUJOURS vraie, elle ne peut tout simplement pas être fausse. Comme cela signifie que la barre zéro existe tout court.

Veuillez indiquer clairement la condition en mots. Ce n'est pas encore clair, voulez-vous placer l'ordre en attente au début d'un nouveau chandelier ou quoi ?

Merci. Désolé, je suis un peu confus. Dans ce cas, je ne devrais pas placer un ordre en attente mais un ordre au marché à Open[0]+30 pips.

Mais nous ne devons fixer l'ordre de marché qu'à partir du début de la formation d'une bougie zéro jusqu'à la suivante.

C'est-à-dire que le fait de ne pas passer un ordre au marché dans les 5 minutes, selon mon idée, équivaut à l'annulation d'un ordre en attente s'il n'est pas ouvert dans les 5 minutes.

Comment dois-je rédiger la deuxième condition ?

Et ai-je correctement fixé le prix d'ouverture de l'ordre de marché ?

Merci.

 int start()

  {
 double Price=Open[0]+300*Point;        
 double SL=Price-300*Point;     
 double TP=Price+150*Point;
 if (Time[0]&& ???????)                         
 int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP );
 
solnce600:

Merci. Désolé, je suis un peu confus. Dans ce cas, je ne devrais pas placer un ordre en attente, mais un ordre au marché à Open[0]+30 pips.

Mais nous ne devrions fixer l'ordre de marché qu'à partir de la date de formation d'une bougie zéro jusqu'à la suivante.

C'est-à-dire que le fait de ne pas passer un ordre au marché dans les 5 minutes, selon mon idée, équivaut à l'annulation d'un ordre en attente s'il n'est pas ouvert dans les 5 minutes.

Comment dois-je rédiger la deuxième condition ?

Et ai-je correctement fixé le prix d'ouverture de l'ordre au marché ?

Merci.


Ok, je l'ai maintenant. Si le prix de la barre actuelle atteint Open[0] + 30, nous ouvrons. Si la barre s'est terminée, Open[0] a changé et le niveau d'ouverture est décalé en conséquence. Il ne devrait y avoir qu'une seule transaction sur le marché, non ?

Alors c'est comme ça :

int start()

{

 double Price=Open[0]+300*Point;        
 double SL=NormalizeDouble (Price-300*Point, Digits);         
 double TP=NormalizeDouble (Price+150*Point, Digits);    
 
 if (OrdesTotal()==0 && Close[0]>=Price)                         
    int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP );

}

Il n'est pas nécessaire de suivre la nouvelle barre, car lorsqu'elle se forme, le système ajoute automatiquement une nouvelle valeur à Open[0] et cela signifie que le nouveau niveau sera calculé correctement. Veuillez noter que l'opération d'achat est ouverte au cours vendeur actuel, tandis qu'elle est fermée (TP et SL) au cours acheteur. En outre, les valeurs des prix doivent être normalisées.

 

Sergey Dubakin m'a gentiment proposé la fonction CloseBy, mais malheureusement elle ne remplit pas la condition importante pour moi de fermer une position avec une perte maximale avec la position opposée avec un profit maximal:


avatar
19
Diubakin 25.02.2013 23:26
borilunad:
Uv. pro ! Où puis-je trouver la fonction СloseBy() qui fonctionne en mode manuel ? Je veux l'insérer dans mon hibou pour pouvoir non pas manuellement, mais automatiquement selon les conditions de fermer la position avec un maximum moins le contraire avec un maximum plus. Je n'ai pas pu le trouver dans le codebase. Je ne l'ai pas trouvé dans le codebase. Merci !

Essayez cette variante :

bool LockOFF(int posit, int oppos, color arrow_color) {
double Result, PrevLoss, PrevProfit;
    int pos, orders_total, order_type, MaxProfitTicket, MaxLossTicket;
   bool Ans;

 MaxProfitTicket=-1; MaxLossTicket=-1;

 orders_total=OrdersTotal();
 for(pos=orders_total-1; pos>=0; pos--) {
  if(!OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) continue;
  if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=EA_Magic) continue; // не наш ордер
  if(OrderType()>1) continue;
  Result=OrderProfit()+OrderSwap()+OrderCommission();
  if(Result<0.0 && (PrevLoss==0.0 || Result<PrevLoss)) {
   PrevLoss=Result; MaxLossTicket=OrderTicket(); order_type=OrderType(); } } // end of for

 if(MaxLossTicket==-1) return(false); // нет убыточной позиции
 if(order_type==OP_BUY) order_type=OP_SELL; else order_type=OP_BUY; 

 orders_total=OrdersTotal();
 for(pos=orders_total-1; pos>=0; pos--) {
  if(!OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) continue;
  if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=EA_Magic) continue; // не наш ордер
  if(order_type!=OrderType()) continue;
  Result=OrderProfit()+OrderSwap()+OrderCommission();
  if(Result>0.0 && (PrevProfit==0.0 || Result>PrevProfit)) {
   PrevProfit=Result; MaxProfitTicket=OrderTicket(); } } // end of for

 if(MaxProfitTicket==-1) return(false); // нет противоположной прибыльной позиции

 Ans=OrderCloseBy(MaxLossTicket, MaxProfitTicket);
 if(!Ans) { Print("Ошибка при встречном закрытие"); return(false); }
 
 return(true); }

J'ai créé des fonctions définissant maxloss GetMaxLoss() et maxprofit GetMaxProfit(), mais je ne peux pas faire en sorte que LockOFF() sélectionne une paire que j'ai spécifiée au lieu de l'une d'entre elles. S'il vous plaît, montrez-moi à quel endroit mettre mes maxima, et peut-être ai-je besoin de plus de fonctions pour déterminer le ticket ou l'index de ces positions, alors ce n'est pas un problème pour moi, mais où mettre tout cela dans ce LockOFF() ? Merci !