[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 591

 
vik-777:

Aidez-moi à résoudre un problème

J'échantillonne tous les articles fermés

for (int i=0 ; i<OrdersHistoryTotal() ; i++)// Pour toutes les commandes
si(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true)

puis filtrer par numéro magique

si (OrderMagicNumber()==12)

le filtre satisfait 3 positions, mais je n'ai besoin que de la dernière fermée

Je n'arrive pas à trouver comment laisser seulement le dernier ?

Merci

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара закрытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) t=OrderCloseTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}
Ce qui est pertinent pour votre question est souligné.
 

Encore une fois, c'est très nécessaire.

Aidez-moi à résoudre ce problème.

Je sélectionne par toutes les positions fermées

for (int i=0 ; i<OrdersHistoryTotal() ; i++)// sur toutes les commandes du terminal
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true)

après avoir filtré par numéro magique

si (OrderMagicNumber()==12)

le filtre correspond à 3 positions mais je n'ai besoin que de la dernière fermée

Vous n'arrivez pas à trouver comment ne laisser que le dernier ?

Merci

 
- C'est bon d'être bête ! Tumtz-tumtz (paroles d'une chanson)
 

Aidez-moi ! J'ai besoin qu'il ouvre un ordre immédiatement après avoir fermé l'ancien, au prix Tp ou SL.

#property copyright "Copyright © 2010, MetaQuotes Software Corp.
#lien de propriété "http://www.metaquotes.net"
#property show_confirm
extern int MaxRisk=3 ;
extern bool Buy=false ; //pour ouvrir un ordre d'achat
extern bool Sell=true ; //pour ouvrir un ordre de vente.
extern inttern MagicNumber=7749 ;
externe TP=210 ;
extern inttern SL=420 ;

{
double point=MarketInfo(Symbol(),MODE_POINT);//demande de Point
double Free=AccountFreeMargin() ;
double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED) ;
double Step =MarketInfo(Symbol(),MODE_LOTSTEP) ;
double Lot =MathFloor(Free*MaxRisk/100/One_Lot/Step)*Step ;
int pos,total=OrdersTotal() ;
//----

si(Buy==true && OrdersTotal()<=1)
{
OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-SL*Point,Ask+TP*Point, "777"+ Symbol(), MagicNumber, 0, DarkGreen) ;

Acheter=faux ;
}
si(Sell==true && OrdersTotal()<=1)
{
OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+SL*Point,Bid-TP*Point, "4949"+ Symbol(), MagicNumber, 0, DarkGreen) ;

Sell=false ;
}

pour (pos=0 ; pos<total ; pos++)
si(OrderSelect(pos,SELECT_BY_POS )==true)

si(OrdersTotal()==OP_BUY)
si(PRICE_CLOSE==OrderTakeProfit()) Buy=true ;
if(PRICE_CLOSE==OrderStopLoss()) Vendre=vrai ;

}
}

si(OrderSelect(pos,SELECT_BY_POS )==true)
si (OrdersTotal()==OP_SELL)
{
si(PRICE_CLOSE==OrderStopLoss()) Buy=true ;
if(PRICE_CLOSE==OrderTakeProfit()) Vendre=vrai ;

}
} }

//----
retour(0) ;
}
//+------------------------------------------------------------------+




 

Les gars, voici une question, un EA essaie d'ouvrir un ordre, mais le prix change et affiche une erreur mauvais prix, comment puis-je le contourner, afin qu'il essaie d'acheter jusqu'à ce qu'il achète ?

void CLOSEORDER(string ord)
{
   for (int i=0; i<OrdersTotal(); i++)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {
         if (OrderSymbol()!=Symbol()) continue;
         if (OrderType()==OP_BUY && ord=="Buy")
            OrderClose(OrderTicket(),OrderLots(),Bid,30,CLR_NONE);// Закрываем Buy
         if (OrderType()==OP_SELL && ord=="Sell")
            OrderClose(OrderTicket(),OrderLots(),Ask,30,CLR_NONE);// Закрываем Sell
      }   
   }
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
   int error;
   if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, LOT,Ask,20,SL,TP,"", 1,3);
   if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,LOT,Bid,20,SL,TP,"",-1,3);
   if (error==-1) //неудачная покупка OK
   {  
      ShowERROR(error,0,0);
   }

C'était le cas avant.

Bid,3,CLR_NONE

J'ai ajouté 30 parce que j'ai un signe 5 mais c'est inutile.

 
vik-777:

Encore une fois, c'est très nécessaire.

Aidez-moi à résoudre ce problème.

J'échantillonne tous les articles fermés.



Commencez par la fin, puis le premier correspondant est le bon.

for (int i=OrdersHistoryTotal()-1;i>=0 ; i--)//
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true)


 
Craft:

Il y a encore un autre inconvénient, il y a des sections où il n'y a que la fermeture d'une position et non un renversement, bien que les conditions pour un stop et l'ouverture d'une nouvelle position soient les mêmes.


Ces situations peuvent se produire parce que les conditions d'achat et de vente dans le conseiller expert ne sont pas mutuellement exclusives. Essayez de retrouver les valeurs des variables requises dans le testeur en fonction de

if(Time[0]=='время_нужного_бара') //чтоб не засорять логи берем на конкретном баре - посмотрите на картинке, где именно ошибка
{
   Print("переменная=", значение);
}
 
Pyxlik2009:

Les gars, voici une question, un EA essaie d'ouvrir un ordre, mais le prix change et affiche une erreur mauvais prix, comment puis-je le contourner, afin qu'il essaie d'acheter jusqu'à ce qu'il achète ?

C'était le cas avant.

J'ai ajouté 30 parce que j'ai un signe 5 mais c'est inutile.

Faites un ordre while(true), vérifiez les 135 erreurs et ensuite RefreshRates(). Regardez, il y a des scripts avec des exemples dans le paquet avec le terminal, tout y est expliqué.
 
alsu:

Cela doit être examiné en détail, de telles situations peuvent se produire parce que les conditions d'ouverture d'achat et de vente dans l'EA ne sont pas mutuellement exclusives. Essayez de retracer les valeurs des variables requises dans le testeur en suivant les lignes suivantes

OK, dans quelle partie du code cela doit-il être inséré, comment l'appliquer concrètement ?
 
SergNF:

Ce qui est pertinent pour votre question est souligné.
donc je sélectionne la dernière commande fermée et j'ai besoin de la dernière fermée avec le magicien, par exemple c'est les lignes 3,6 et 9 donc j'ai besoin de la ligne 3 car c'est la dernière fermée avec le magicien