Bon, allez, je me lance...
J'essaye de faire un EA qui suive la tendance (quand on voit comment se comporte EURUSD en M1/M5...)
En gros, mon idée est d'ouvrir un ordre dans le sens de la vague en fonction de la barre précédente : elle finie en baisse, j'ouvre un sell, sinon un buy.
Jusque là , ça va.
Ensuite, le problème vient du fait que je souhaite fermer tous les ordres ouverts dès que la barre en cour se termine dans le sens opposé à celle d'avant. (Oui, c'est simpliste, mais bon, c'est un début)....
Voici le code que j'ai fait hier soir :
Code:
extern double lots = 0.01;
extern double Slippage = 2;
static int last_bar = 0;
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int nb_bars;
if (nb_bars < 1)
{
nb_bars = Bars ;
}
RefreshRates();
//---- Deja un ordre ouvert sur cette barre ?
if(last_bar != Bars)
{
last_bar = Bars ;
int ticket;
int sens;
int i;
int tendance;
// A-t-on un changement de tendance ?
if(tendance != sens)
{
tendance = sens ;
for(i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS);
int type = OrderType();
bool result = false;
switch(type)
{
//Close opened long positions
case OP_BUY : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),Slippage,Green);
break;
//Close opened short positions
case OP_SELL : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),Slippage,Green);
break;
}
}
}
// On ouvre un ordre dans le sens du résultat de la dernière barre connue
if(Open[1] > Ask) // En baisse
{
ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, 1, 0, 0, "Order SELL bar #"+last_bar, 0, 0, Red);
sens = -1 ;
}
if(Open[1] < Ask) // En hausse
{
ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, 1, 0, 0, "Order BUY bar #"+last_bar, 0, 0, Blue);
sens = 1 ;
}
}
}
Là , mes ordres s'ouvrent bien dans le sens que je souhaite. Par contre, en cas de barre différente, ils ne se ferment pas...