[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 1121
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Bonne journée/nuit
J'essaie d'inverser une transaction en utilisant cette méthode primitive qui ne fonctionne pas (le conseiller expert calcule par ticks) :
if(CalculateCurrentOrders(Symbol())>0 && Close[1]<LowLevel) // détermine s'il y a eu des ordres d'achat && si une bougie a clôturé en dessous du niveau inférieur.
{
CheckForClose() ; // clôture de l'ordre.
OpenSell() ; // ouvrir un ordre de vente
retour ;
}
Veuillez me dire où je me trompe. Je serais également reconnaissant pour les liens qui me permettraient de combler cette lacune.
dzhini:
J'essaie de faire du reverse trade de cette manière primitive, ce qui ne fonctionne pas (l'Expert Advisor calcule par ticks) :
if(CalculateCurrentOrders(Symbol())> 0 && Close[1]<LowLevel) // il vérifie s'il y a eu des ordres d'achat && si une bougie a clôturé sous le niveau inférieur
Comment puis-je déterminer combien de minutes il y a entre l'heure 1 et l'heure 2 ?
c'est probablement la fonction où vous comptez toutes les commandes. cela devrait être Buy
Il s'agit d'une fonction standard :
int CalculateCurrentOrders(string symbol)}
si >0 alors c'est un ordre d'achat, si <0 alors c'est un ordre de vente ))))
Comment puis-je déterminer le nombre de minutes entre l'heure 1 et l'heure 2 ?
la différence renvoie le nombre de secondes.
divisez par 60. vous obtenez le nombre de minutes.
extern double TP = 70 ; //bénéfice
extern double SL = 0 ; //perte
extern double Lot = 0.1 ;
double HighLevel ;
double LowLevel ;
int resBuy=0 ;
int resSell=0 ;
//+------------------------------------------------------------------+
//| fonction d' initialisation de l'expert |
//+------------------------------------------------------------------+
int init()
{
HighLevel=High[1] ;
LowLevel=Low[1] ;
return ;
}
//+------------------------------------------------------------------+
//| fonction expert |
//+------------------------------------------------------------------+
void start()
{
if(Bars<100 && IsTradeAllowed()==false) return ;
if(resBuy==0 && resSell==0 && CheckBreak()==-1)
{
resSell=OrderSend(Symbol(),OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red) ;
HighLevel=LowLevel ;
LowLevel=Close[1] ;
return ;
}
if(resBuy==0 && resSell==0 && CheckBreak()==-1& CheckBreak()==1)
{
resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask + TP,"",MAGICMA,0,Blue) ;
LowLevel=HighLevel ;
HighLevel=Close[1] ;
return ;
}
if(resBuy !=0 && resSell==0 && Close[1]<LowLevel) //------------------------------------- intéressé par cette partie : fermeture et ouverture sur une barre
{
bool closeBuy=OrderClose(resBuy, Lot, Bid, 2, Blue) ;
// while(!IsTradeAllowed()) Sleep(100) ;
resSell=OrderSend(Symbol(),OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red) ;
HighLevel=LowLevel ;
LowLevel=Close[1] ;
return ;
}
if(resSell !=0 && resBuy==0 && Close[1]>HighLevel) //------------------------------------- intéressé par cette partie : fermeture et ouverture sur une barre
{
bool closeSell=OrderClose(resSell, Lot, Ask, 0.0002, Red) ;
// while(!IsTradeAllowed()) Sleep(100) ;
resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask + TP,"",MAGICMA,0,Blue) ;
LowLevel=HighLevel ;
HighLevel=Close[1] ;
return ;
}
}
//----------------------------------------------------------------- Vérifier le Low&.High break (Func)
double CheckBreak()
{
double candle=Open[1]-Close[1] ;
if(candle>0 && Low[1]<LowLevel) return(-1) ;
if(candle<0 && High[1]>HighLevel) return(1) ;
}
différence renvoie le nombre de secondes.
diviser par 60. cela donne le nombre de minutes.
Je n'obtiens que la date 1971.03.04 12:00, peut-être faut-il la convertir ?
Je n'obtiens que la date, peut-être faut-il la convertir ?
Tout d'abord, pourquoi multipliez-vous par 60 ?
Deuxièmement, si vous voulez afficher le nombre de minutes sous la forme d'une heure comme 00:15,
vous n'avez pas besoin de diviser ou de multiplier par 60.
Tout d'abord, pourquoi multipliez-vous par 60 ?
Deuxièmement, si vous voulez représenter le nombre de minutes à l'écran sous la forme d'une heure comme 00:15,
il n'est pas nécessaire de diviser ou de multiplier par 60.
Oui, j'ai corrigé pour la division, mais l'année sort 1970.01.01 02:51
Je n'en ai pas besoin pour l'écran, je voulais juste trouver le nombre de minutes sans dates, pour cet intervalle de temps.....
même sans diviser, il sort toujours la date, ou dois-je soustraire la date à partir de laquelle la fonction est basée ?
Si vous voulez simplement un nombre de minutes, vous n'avez absolument aucune raison d'utiliser TimeToStr.
Le temps est un nombre int normal.
Ou bien, utilisez TimeToStr uniquement avec l'indicateur TIME_MINUTE
.