Comment coder ? - page 106

 

Ç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

 
: : iBarShift trouvera pour vous la barre qui commence ce jour/heure... ou aussi la barre de fin pour ce jour/heure... (cela dépend de l'unité de temps ou du graphique que vous voulez utiliser pour trouver votre haut/bas).

int iBarShift( string symbol, int timeframe, datetime time, bool exact=false)

Ensuite...

: : utilisez ces positions de barres pour trouver les résultats de iHighest et iLowest

int iHighest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)

int iLowest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)

: : résultats & faits , n'utilisez pas de boucles dans ce cas !

 

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 ?

 
IngvarDagmar:
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

Dossiers :
 

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...