J'ai l'habitude de mettre en œuvre ce type de fonctionnalité :
//+----------------------------------------------------------------------------+ //| Управление позициями | //+----------------------------------------------------------------------------+ void ManagePositions() { double sl=0, tp=0; int ms[2]; ArrayInitialize(ms, 0); GetTradeSignal(ms); if (ExistPositions("", -1, Magic)) { if (ms[1]>0) ClosePositions("", OP_BUY , Magic); if (ms[1]<0) ClosePositions("", OP_SELL, Magic); } else { if (ms[0]>0) { if (StopLoss>0) sl=Ask-StopLoss*Point; else sl=0; if (TakeProfit>0) tp=Ask+TakeProfit*Point; else tp=0; OpenPosition(OP_BUY, sl, tp, Magic); } if (ms[0]<0) { if (StopLoss>0) sl=Bid+StopLoss*Point; else sl=0; if (TakeProfit>0) tp=Bid-TakeProfit*Point; else tp=0; OpenPosition(OP_SELL, sl, tp, Magic); } } }Comme vous pouvez le constater, des fonctions sont écrites pour effectuer des actions bien spécifiques. Ces fonctions sont ensuite combinées de manière à mettre en œuvre les tactiques souhaitées pour travailler sur les positions.
Probablement quelque chose avec Stochast_1, Stochast_0, tout le reste est bien.
Non..... Les stochastiques sont bien. (travail sur les prix d'ouverture)
double Stochast_0 =iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,0); double Stochast_1 =iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,1);
Est-ce que je vous ai bien compris ? La position d'achat devrait être fermée
OrderClose(OrderTicket(),OrderLots(),Bid,3,Green) ;
Et la position de vente doit être fermée :
OrderClose(OrderTicket(),OrderLots(),Ask,3,Green) ; ?Est-ce que je vous ai bien compris ?
Vous avez raison en général.
Je ne veux toujours pas fermer des positions par stochastique ! Je l'ai bien fait ! J'ai inséré un interrupteur dans les paramètres externes. A la fin du code - bloc séparé pour la fermeture des positions ! J'ai prévu un triangle vert pour la fermeture.
La tactique est simple : le franchissement des frontières du canal formé par les MA lentes avec des déviations vers le haut et vers le bas. Le code est très simple. Vous trouverez ci-dessous un conseiller expert.
хотел выложить весь код - не принимет сервер! - пишет больше допустимого//********* Закрытие позиций **************************************** if (AutoClose) { //----переменные для закрытия позиций ---- double Stochast_0 =iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,0); double Stochast_1 =iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,1); //---------------------------------------------------------------------- for (int v=0; v<OrdersTotal(); v++) { if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNum) { //----------------------------------------------------- if (OrderType() == OP_BUY) { if(Stochast_1>75 && Stochast_0<75) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию return(0); // выходим } } //-------------------------------------------------------- if (OrderType() == OP_SELL) { if(Stochast_1<25 && Stochast_0>25) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию return(0); // выходим } } //------------------------------------------------------- } // Symbol() } // select } //total } //Close_
Quelqu'un peut-il y jeter un coup d'œil ? Et dis-moi ce qui ne va pas. ....
Peut-être que lors de l'ouverture d'une commande, les offres et les demandes sont mal définies ? J'ai toujours été confus à ce sujet :
ticket=OrderSend(Symbol(),... ....Mais une chose est sûre : au lieu de "if(Stochast_1>75 && Stochast_0<75)", je ferais "if(Stochast_1>75 && Stochast_0<=75)".
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Bonsoir ! Un problème est survenu.
Je dois fermer une position. Par le signal de l'indicateur. En outre, je dois pouvoir clôturer la position par un Stop Loss ou un Take Profit. (Juste au cas où le signal de l'indicateur arrive trop tard. - Cela arrive souvent) :
Par la suite, afin de fermer les positions ouvertes, je stipule :
Cependant, les positions ne sont toujours fermées qu'au niveau du stoploss ou du takeprofit. (à une très rare - unique exception près !)
Bien que l'indicateur sur le graphique montre - que presque toutes les positions ouvertes devraient être fermées juste par le signal de l'indicateur. S'il vous plaît dites-moi - où il peut y avoir une erreur ... ?