[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
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é.
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);// Закрываем Buyif (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.
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("переменная=", значение);
}
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é.
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
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
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
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 ?
C'était le cas avant.
J'ai ajouté 30 parce que j'ai un signe 5 mais c'est inutile.
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)
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("переменная=", значение); }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.
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
Ce qui est pertinent pour votre question est souligné.