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
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
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 ?
euroLes ordres longs sont fermés au prix "bid", tandis que les ordres courts sont fermés au prix "ask".
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 BeJe 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 ?
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
Merci de votre réponse.
Pour une raison quelconque, mon code ne fonctionne pas :
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.
euroExact ; "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 !
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
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 (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é.