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
Ça marche pour le prix. Il veut trouver le plus haut et le plus bas d'un indicateur.
Lux
Bonjour,
Vous pouvez essayer ceci :
....
int highest=0, lowest=0, bar=WindowBarsPerChart();
for(int shift=0;shift<bar;shift++)
{
double indie=iCustom(.........,shift);
if(highest<indie) highest=indie;
if(lowest==0) lowest=indie;
if(lowest>indie) lowest=indie;
}
.....
note : ce code calcule la bougie ouverte actuelle aussi, si vous voulez calculer la bougie fermée seulement, utilisez shift=1.
J'espère que cela vous aidera,
Ardie
Rafraîchir par programme l'indicateur de repeinte
Bonjour,
Je cherche à trouver un moyen de rafraîchir un indicateur de repeint toutes les x minutes.
La seule façon de le rafraîchir actuellement, est de cliquer dans l'indicateur sur le graphique et ensuite de cliquer sur "ok". Peut-on l'automatiser avec du code MQL4 ?
J'ai trouvé quelque chose sur le site de codersguru, Programmatically Refresh your charts | www.metatrader.info, mais cela ne semble pas fonctionner pour moi. Est-ce que quelqu'un l'a essayé et a obtenu un résultat différent (qui fonctionne) ?
Je vous remercie.
Désolé pour mon Englsih.
Je veux compter le nombre de fois que la condition est vraie une seule fois par barre. Ordinateur ajouter plusieurs fois par barre. Qu'est-ce que je fais de mal ?
Désolé pour mon Englsih. Je veux compter le nombre de fois que la condition est vraie seulement une fois par barre. Ordinateur ajouter plusieurs fois par barre. Qu'est-ce que je fais mal ?
Utilisez une fonction comme celle-ci...
bool NewBar() {
static datetime LastTime = 0;
if (Time[0] != LastTime) {
LastTime = Time[0];
return (true);
} else
return (false);
}
[/php]
Then put an if statement round your main code, like...
[php]
if(NewBar() == true){
// do the main processing here
}
J'espère que cela vous aidera.
Lux
C'est gentil de ta part, Lux.
J'ai trouvé ceci :
Traiter chaque barre une seule fois - MQL4 forum
Automated 2008.01.15 18:54 Vous pourriez exécuter votre code au tout premier tick d'une nouvelle barre (c'est-à-dire juste après la fermeture de la barre précédente).
Voici une fonction qui retournera VRAI si une nouvelle barre vient de se former :
// Cette fonction renvoie VRAI au tout premier tick d'une barre, c'est-à-dire après la fermeture de la barre précédente.
bool NewBar()
{
if(PreviousBarTime<Time[0])
{
PreviousBarTime = Time[0] ;
return(true) ;
}
return(false) ; // dans le cas où l'instruction if - else n'est pas exécutée
} vous devez déclarer le datetime PreviousBarTime au début de votre EA...
Ensuite, dans votre code, vous pouvez simplement utiliser
if ( NewBar() )
{
...... le code dont vous avez besoin doit être exécuté après la fermeture d'une barre ici ....
} merci
automatedfx@gmail.com
---------------------------------------------------
J'ai remarqué que vous avez utilisé STATIC... Je me suis renseigné... quel est l'avantage d'utiliser STATIC par rapport à une variable globale ?
ea à entrées multiples
j'aimerais trouver ou avoir de l'aide pour créer une ea avec les paramètres d'entrée suivants. quatre entrées de transaction distinctes, chacune ayant un nombre de lots, un stop loss, un stop suiveur, un seuil de rentabilité et un objectif de profit. les transactions s'ouvriront en cliquant sur le bouton du conseiller expert.
Merci de votre aide.
Besoin d'aide sur l'option de trailing stop
J'ai trouvé cet EA sur le forum MQL4, un EA assez intéressant.
Quelqu'un pourrait-il m'aider à ajouter une option de trailing stop qui permettrait d'activer le trailing stop uniquement après avoir atteint la valeur de profit que j'ai définie ?
themastermind2.mq4
Bonjour à tous...
J'ai un problème avec l'EA que j'ai écrit... en fait, l'EA est basé sur l'indicateur MACD... quand le MACD prend la forme d'un 'n', il ouvre le post Sell, et quand le MACD prend la forme d'un 'u', l'EA ouvre le Buy...
Le problème est que l'EA n'a pas ouvert de poste... après avoir fait quelques backtests également, il n'y a pas de poste ouvert par cet EA... quelqu'un peut-il m'aider à trouver ce qui ne va pas avec le code ?
voici le code...
extern double TakeProfit = 20;
extern double Lots = 0.1;
extern double StopLoss = 20;
extern double MagicNumber = 17384;
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
double MacdBuffer1[];
double MacdBuffer2[];
double MacdBuffer3[];
double MacdBuffer4[];
double MacdBuffer5[];
double MacdBuffer6[];
double MacdBuffer7[];
double MacdBuffer8[];
int init()
{
//----
//SetIndexBuffer(0, lag1_buffer);
//SetIndexBuffer(1, lag2_buffer);
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int limit;
int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---- macd counted in the 1-st buffer
for(int i=0; i<limit; i++)
MacdBuffer1=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
MacdBuffer2=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i-1)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i-1);
MacdBuffer3=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i+1)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i+1);
MacdBuffer4=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i-2)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i-2);
MacdBuffer5=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i+2)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i+2);
MacdBuffer6=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i-3)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i-3);
MacdBuffer7=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i+3)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i+3);
/*Alert( "MacdBuffer7 =",MacdBuffer7);
Alert( "MacdBuffer5 =",MacdBuffer5);
Alert( "MacdBuffer3 =",MacdBuffer3);
Alert( "MacdBuffer1 =",MacdBuffer1);
Alert( "MacdBuffer2 =",MacdBuffer2);
Alert( "MacdBuffer4 =",MacdBuffer4);
Alert( "MacdBuffer6 =",MacdBuffer6);*/
//----
int ticket_buy, ticket_sell, total;
total=OrdersTotal();
//MACD become 'u' shape
if (MacdBuffer7>MacdBuffer5&&MacdBuffer5>MacdBuffer3&&MacdBuffer3>MacdBuffer1
&&MacdBuffer1<MacdBuffer2&&MacdBuffer2<MacdBuffer4&&MacdBuffer4<MacdBuffer6)
{
if (total < 1) {
ticket_buy=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"scalp 1 min - buy",MagicNumber,0,Green);
if(ticket_buy>0)
{
if(OrderSelect(ticket_buy,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return(0);
} else {
}
}
//MACD become 'n' shape
if(MacdBuffer7<MacdBuffer5&&MacdBuffer5<MacdBuffer3&&MacdBuffer3<MacdBuffer1
&&MacdBuffer1>MacdBuffer2&&MacdBuffer2>MacdBuffer4&&MacdBuffer4>MacdBuffer6)
{
if (total < 1) {
ticket_sell=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"scalp 1 min - sell",MagicNumber,0,Red);
if(ticket_sell>0)
{
if(OrderSelect(ticket_sell,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
return(0);
} else {
}
}
//----
return(0);
}
//+------------------------------------------------------------------+J'espère que quelqu'un pourra m'aider à résoudre ce problème... Je ne suis pas un bon programmeur... Merci...