Comment coder ? - page 84

 

Acheter et vendre sur les 100

Zamanib,

Je comprends ce que vous avez écrit, mais je ne vois pas comment vous fermez à profit.

Cela me semble être un EA de type Hedge.

Il y en a plusieurs dans forex-tsd,

et vous n'êtes pas obligé de faire une martingale.

Big Be

 
european:
Quelqu'un peut partager des idées/codes sur la façon de fermer un ordre à la valeur TakeProfit.

Pour une raison quelconque, la fonction "TakeProfit" de la fonction OrderSend() ne fonctionne pas toujours sur les ordres de vente à découvert dans MT4, alors qu'elle fonctionne bien sur les ordres d'achat à découvert.

J'ai écrit un code comparant la valeur TakeProfit de l'ordre avec le prix actuel, mais cela ne fonctionne pas correctement. Avez-vous une idée ?

euro

Les ordres longs sont fermés au prix "bid", tandis que les ordres courts sont fermés au prix "ask".

 
Big Be:
Zamanib,

Je comprends ce que vous avez écrit, mais je ne vois pas comment vous fermez à profit.

Cela me semble être un EA de type Hedge.

Il y en a plusieurs dans forex-tsd,

et vous n'êtes pas obligé de faire une martingale.

Big Be

Je vois le marché se déplacer par vagues vers le haut et vers le bas. Certaines semaines, vous avez 2 cycles vers le haut et vers le bas.

S'il vous plaît, dirigez-moi vers le hedge ea. J'ai vu beaucoup de choses, mais ce n'est pas exactement ce que je veux.

 

problème de code ou de plateforme ?

ralph.ronnquist:
les positions longues sont fermées au prix "bid", tandis que les positions courtes sont fermées au prix "ask".

Merci de me répondre.

Pour une raison quelconque, mon code ne fonctionne pas :

si (OrderSelect(orderNo, SELECT_BY_TICKET)==true) {

si (OrderType() == OP_BUY && Close[0] >= OrderTakeProfit()) CloseOrder(orderNo) ;

si (OrderType() == OP_SELL && Close[0] <= OrderTakeProfit()) CloseOrder(orderNo) ; }

Je vous serais reconnaissant de me conseiller.

euro

 
european:
Merci de votre réponse.

Pour une raison quelconque, mon code ne fonctionne pas :

if (OrderSelect(orderNo, SELECT_BY_TICKET)==true) {

if (OrderType() == OP_BUY && Close[0] >= OrderTakeProfit()) CloseOrder(orderNo);

if (OrderType() == OP_SELL && Close[0] <= OrderTakeProfit()) CloseOrder(orderNo); }

[/PHP]

I would be grateful for advice.

euro

Exact ; "Close[0]" est le prix "bid", qui n'est pas le prix contre lequel une OP_SELL est fermée. Un OP_SELL est fermé contre le prix "ask", qui est quelques pips (aka spread) au-dessus du prix "bid".

Lorsque votre EA s'exécute, le prix "bid" est également disponible comme variable nommée "Bid" et le prix "ask" comme variable nommée "Ask". Il serait donc préférable que l'extrait de code ressemble à ceci :

[PHP]if (OrderSelect(orderNo, SELECT_BY_TICKET)==true) {

si (OrderType() == OP_BUY && Bid >= OrderTakeProfit()) CloseOrder(orderNo) ;

si (OrderType() == OP_SELL && Ask <= OrderTakeProfit()) CloseOrder(orderNo) ; }

 

S'il vous plaît aider dans le code, merci...

Bonjour,

Je suis nouveau dans l'écriture d'EA, j'ai essayé ce qui suit mais j'ai obtenu une erreur de "ticket invalide pour la fonction OrderModify", Quelqu'un peut-il s'il vous plaît avoir un regard et aider ? Merci d'avance.

void ModifyHedgeSL(int SL) {

if (SL<1) return ;

bool bres ;

double sl,openadj ;

if (lastopenbuy==1 && lastopensell==0) {openadj=Ask-Bid;} else {openadj=0;}

for (int i = 0 ; i < OrdersTotal() ; i++) {

OrderSelect (i, SELECT_BY_POS,MODE_TRADES) ;

if ( OrderSymbol() == Symbol() || OrderMagicNumber() == expertId && OrderType() == OP_BUY )

{

sl = GetLastLongOpenPrice()-openadj-SL*Point ;

bres = OrderModify (OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, White) ;

if (bres) Print("Modification du hedge BUY terminée") ;

if (!bres) Print("Erreur lors de la modification de l'ordre Hedge BUY : ",ErrorDescription(GetLastError())) ;

}

if ( OrderSymbol() == Symbol() || OrderMagicNumber() == expertId && OrderType() == OP_SELL )

{

sl = GetLastShortOpenPrice()-openadj+SL*Point ;

bres = OrderModify (OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, Gold) ;

if (bres) Print("Modification de la couverture SELL terminée") ;

if (!bres) Print("Erreur lors de la modification de l'ordre Hedge SELL: ",ErrorDescription(GetLastError()) ;)

}

}

return ;

}

double GetLastLongOpenPrice() {

int ord ;

double LastLongOpenPrice=0 ;

//----

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

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES) ;

si (OrderSymbol() == Symbol() && OrderMagicNumber()==expertId && OrderType() == OP_BUY)

{

LastLongOpenPrice=OrderOpenPrice() ;

}

}

if (LastLongOpenPrice>0) {return(LastLongOpenPrice);}

else {return(-1);}

}

 

Comment coder les ordres d'achat/de vente lorsque le SL est atteint ?

Par exemple, si j'achète 1 lot d'EUR/JPY à 164.30 et que le SL est à 164.00.

Si le seuil de déclenchement est atteint, je passe un autre ordre d'achat au même prix, 164,30, avec le même seuil de déclenchement à 164, et avec plus de lots, disons 1,5. Ensuite, si le seuil de déclenchement est à nouveau atteint, un autre ordre d'achat sera placé pour acheter 2 lots au même prix avec le même seuil de déclenchement.

Existe-t-il un code pour cela ? Merci !

 
boostrade:
Par exemple, si j'achète 1 lot d'EUR/JPY à 164.30 et Sl à 164.00.

si le seuil de déclenchement est atteint, je passe un autre ordre d'achat au même prix, 164,30, avec le même seuil de déclenchement à 164, et avec plus de lots, disons 1,5. Ensuite, si le SL est à nouveau atteint, un autre ordre d'achat sera placé pour acheter 2 lots au même prix avec le même SL.

Existe-t-il un code pour cela ? Merci !

Regardez ce fil de discussion sur Frank EA https://www.mql5.com/en/forum

Je pense que c'est ce dont vous avez besoin ou vous pouvez l'utiliser comme exemple.

 

ok

newdigital:
Regardez ce fil de discussion sur Frank EA https://www.mql5.com/en/forum Je pense que c'est ce dont vous avez besoin ou vous pouvez l'utiliser comme exemple.

Merci beaucoup Newdigital, si vous avez des questions, je les poserai ici. Merci encore.

 

Numéro de TP

if (OrderSelect(orderNo, SELECT_BY_TICKET)==true) {

if (OrderType() == OP_BUY && Bid >= OrderTakeProfit()) CloseOrder(orderNo);

if (OrderType() == OP_SELL && Ask <= OrderTakeProfit()) CloseOrder(orderNo); }

Ralph,

Comme vous pouvez le voir, j'ai appelé une fonction séparée CloseOrder() où j'ai utilisé 'Ask' et 'Bid' comme vous le recommandez mais le problème existe toujours.

// Fonction CloseOrder **********************************************************

bool CloseOrder(int orderT) {

double sA ;

if (OrderSelect(orderT, SELECT_BY_TICKET)==true) {

si (OrderType() == OP_BUY) sA = Bid ;

sinon sA = Ask ;

bool bClosed = OrderClose(orderT,OrderLots(),sA,0,CLR_NONE) ;

if (bClosed == 1) {

pTrades = 0 ; return(1) ; }

sinon return(0) ; }}

**********************************************************

J'espérais que cela garantirait que la transaction serait fermée une fois le TP atteint, mais ce n'est pas le cas, voir le graphique ci-joint, où l'ordre court a été ouvert à 104,03 avec un TP à 103,79. Bien que le prix l'ait atteint (TP), l'ordre n'a pas été fermé.

Dossiers :
tp_failed.jpg  32 kb