Comment coder ? - page 69

 

Salut Wolfe

wolfe:
Je sais que ce sujet a déjà été abordé, mais quelqu'un peut-il me montrer un code permettant de n'autoriser qu'une seule transaction par barre ? Merci.

Ceci fonctionne pour moi

datetime LastOpenTime=0 ;

//////////////////////////////////////////

int Order ;

for(int t=0;t<OrdersTotal();t++)

{

if(OrderSelect(t, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumbers && OrderType() == OP_SELL))

{

if(OrderOpenTime()>LastOpenTime)LastOpenTime=OrderOpenTime() ;

}

}

}

Ensuite, je le colle simplement dans mon code

if(LastOpenTime0)

{ OrderSend(blah blah

Time[0] étant le début de la bougie de votre cadre temporel, assurez-vous de choisir le bon cadre temporel.

 
waltini:
Ceci fonctionne pour moi

datetime LastOpenTime=0 ;

//////////////////////////////////////////

....................

Time[0] étant le début de la bougie de votre cadre temporel, assurez-vous de choisir le bon cadre temporel.

Ceci est peut-être un peu plus simple :

datetime LastOpenTime; //Global var

[/CODE]

[CODE]

int init()

{

LastOpenTime=Time[0];

}

int start()

{

................

if(LastOpenTime!=Time[0])

{

// do your trade code

LastOpenTime=Time[0];

}

..............

return(0);

}

Votre "trade code" sera exécuté une seule fois sur une bougie. Il n'y aura plus de transaction sur cette bougie même si vous fermez votre MT4 et le rallumez. Mais attention, si vous activez l'EA sur une bougie de 17h, il n'y aura pas de trade sur cette bougie, vous devrez attendre la bougie suivante.

 
wolfe:
Je sais que cela a déjà été abordé, mais quelqu'un peut-il me montrer un code permettant de n'autoriser qu'une seule transaction par barre ? Merci.

Global, mettez ceci avant init()

datetime PreviousBar;[/CODE]

In the order placement and/or order close stuff, wrap it in this:

if(NewBar() == true)

{

if blah blah blah, gimme pips // not actual functions but you get the idea

if blah blah blah, close orders // um

}

Common function outside main loop:

[CODE]//--- returns true if current bar just formed

bool NewBar()

{

if(PreviousBar<Time[0])

{

PreviousBar = Time[0];

return(true);

}

else

{

return(false);

}

return(false);

}
 

Aide à la programmation

Bonjour,

J'ai fait de mon mieux pour essayer de programmer certaines choses, mais je me suis heurté à un mur de briques. J'ai donc essayé quelque chose de très simple. Si je décommente "Print("Five") ;" et teste le programme, il n'imprimera que "Yahooooooo". (En fait, il imprime aussi "One"). Maintenant, avec "Print("Five") ;" commenté, même le "Yahooooooo" ne s'imprime pas. Qu'est-ce que j'ai raté ?

Dossiers :
trial.mq4  2 kb
 

Fermer tous les ordres en attente et ouverts lorsqu'une transaction atteint le TP

Bonjour,

J'essaie d'écrire un code dans mon EA qui fermera tous les ordres en attente et ouverts dès qu'une transaction aura atteint le TP. Voici les codes que j'ai utilisés, mais ils ne semblent pas fonctionner. Quelqu'un peut-il jeter un coup d'oeil et me dire ce qui manque ? Merci.

if( PreviousOpenOrders > OpenOrders )

{

for( cnt = OrdersTotal()-1 ; cnt >= 0 ; cnt-- )

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) ;

mode = OrderType() ;

if( OrderSymbol() == Symbol() &&

OrderMagicNumber()==Magic)

{

if( mode == OP_BUY ) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,Blue) ;

si( mode == OP_SELL ) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,Red) ;

si (mode == OP_SELLLIMIT ) OrderDelete(OrderTicket()) ;

si (mode == OP_BUYLIMIT) OrderDelete(OrderTicket()) ;

}

}

}

}

 

Utilisez respectivement Bid et Ask au lieu de OrderClosePrice()...

 
ralph.ronnquist:
Utilisez respectivement Bid et Ask au lieu de OrderClosePrice()...

Bonjour Ralph,

pouvez-vous m'aider à donner un exemple. Merci pour l'aide.

 
timebandit:
Bonjour, j'ai fait de mon mieux pour essayer de programmer certaines choses, mais je me suis heurté à un mur de briques. J'ai donc essayé quelque chose de très simple. Si je décommente "Print("Five") ;" et teste le programme, il n'imprimera que "Yahooooooo". (En fait, il imprime aussi "One"). Maintenant, avec "Print("Five") ;" commenté, même le "Yahooooooo" ne s'imprime pas. Qu'est-ce que j'ai raté ?

Si vous n'utilisez pas de parenthèses, une seule ligne est exécutée. Cela dépend de ce que vous voulez faire, mais vous devriez le faire comme ceci :

if(d>5)

{

Print("Five");

Print("Yahoooooooooooooooooooooooo");

}
 

if( mode == OP_BUY ) OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Blue);

if( mode == OP_SELL ) OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Red);

 

Déplacer le Stop une fois

Voici mon petit code pour déplacer le stoploss au breakeven après un certain profit. Y a-t-il un problème avec ce code ?

//MoveOnce

if(MoveStopOnce && MoveStopWhenPrice > 0) {

if(Bid - OrderOpenPrice() == Point * MoveStopWhenPrice) {

OrderModify(OrderTicket(),OrderOpenPrice(), Bid - Point * MoveStopTo, OrderTakeProfit(), 0, Red);

if (!EachTickMode) BarCount = Bars;

continue;

}

}