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
voici mon dernier code. je ne vois rien d'anormal, si ce n'est qu'il ne me donne pas les résultats que je souhaite.
//+------------------------------------------------------------------+ //| RSI_strategy_cyxstudio.mq4 | //| Copyright 2013, Tjipke de Vries | //| https://forum.mql4.com/53695/ | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #include <stderror.mqh> #include <stdlib.mqh> extern int RSIPeriod = 2; //number of periods for RSI extern double UpperBound = 95; //set upper bound value for RSI extern double LowerBound = 5; //set lower bound value for RSI extern double Lots = 0.1; extern double StopLoss = 60; //Set the stop loss level extern double TakeProfit = 120; //Set the take profit level extern double TrailingStop = 40; //extra settings for OrderSend extern int MagicNumber = 54333; extern string CommentEA = "RSI strategy"; extern int Slippage.Pips = 3; //--- //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- Alert(OrdersTotal()); //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- int Ticket1; int Ticket2; bool Ticket3; bool Ticket4; double SL,TP; int Total; double MagicNo; double Slippage; int cnt; double pAsk = MarketInfo(Symbol(), MODE_ASK); double pBid = MarketInfo(Symbol(), MODE_BID); double MA200 = iMA(NULL, 1440, 200, 0,MODE_SMA,PRICE_CLOSE, 0); //200 day Moving Average double MA5 = iMA(NULL, 1440, 5, 0,MODE_SMA,PRICE_CLOSE, 0); // 5 day Moving Average double CurrentRSI = iRSI (NULL, 0, RSIPeriod,PRICE_CLOSE ,0); double PrevRSI = iRSI (NULL, 0, RSIPeriod,PRICE_CLOSE ,1); double LastRSI = iRSI (NULL, 0, RSIPeriod,PRICE_CLOSE ,2); if(Bars<100) { Print("bars less than 100"); return(0); } if(AccountFreeMargin()<(1000*Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } //Check for open orders if there are none then check for conditions to open one if (OrdersTotal() ==0 && LastRSI > PrevRSI && PrevRSI > CurrentRSI && CurrentRSI < LowerBound && pAsk > MA200) { //Condition to execute buy entry Ticket1 = OrderSend(Symbol(), OP_BUY, Lots, pAsk, Slippage.Pips, pBid - ( StopLoss * Point ), pAsk + ( TakeProfit * Point ), "Buy.", MagicNumber,0,Yellow); //execute buy order if(Ticket1>0) { if(OrderSelect(Ticket1,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } if (Ticket1 < 0) { Print("Error opening BUY order : ",GetLastError()); return(0); } if (OrdersTotal() ==0 && LastRSI < PrevRSI && PrevRSI < CurrentRSI && CurrentRSI > UpperBound && pBid < MA200) { //Condition to execute sell entry Ticket2 = OrderSend(Symbol(), OP_SELL, Lots, pBid, Slippage.Pips, pAsk + ( StopLoss * Point ), pBid - ( TakeProfit * Point ), "Sell.",MagicNumber, 0, Yellow) ; //execute sell order if(Ticket2>0) { if(OrderSelect(Ticket2,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); } if (Ticket2<0) { Print("Error opening SELL order : ",GetLastError()); return(0); } } } int ticket=OrderTicket(); double lots=OrderLots(); for (int i = OrdersTotal() - 1; i >= 0; i--) { if (OrderSelect(i, SELECT_BY_POS)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_BUY && pBid > MA5) { Ticket3 = OrderClose(ticket, lots, pBid, Slippage.Pips); if (Ticket3 == true ) { Print("BUY position closed", OrderClosePrice()); } if (Ticket3 == false) { Print("Error closing BUY position", ErrorDescription(GetLastError())); } } if (OrderType() == OP_SELL && pBid < MA5) { Ticket4 = OrderClose(ticket, lots, pAsk, Slippage.Pips); if (Ticket4 == true ) { Print("SELL position closed", OrderClosePrice()); } if (Ticket4 == false) { Print("Error closing SELL position", ErrorDescription(GetLastError())); } } } } } return(0); }Si vous regardez à la page 2 de ce sujet, vous trouverez ce que je vous ai donné.
C'est le début.....
Donnez votre commentaire ..... sur ce qui est différent du vôtre jusqu'à présent...
Puis lisez https://www.mql5.com/en/forum/139654 et essayez de faire une boucle de décompte pour vérifier les transactions.
Comme vous pouvez le voir, je vous ai demandé de créer une boucle de comptage descendant pour vérifier les transactions.
C'est ma prochaine étape dans le code
Je ne vous demande que cette partie du code
pour qu'il compte les transactions d'achat et de vente séparément.
Si vous regardez à la page 2 de ce sujet, vous trouverez ce que je vous ai donné.
je l'ai enlevé parce que je ne savais pas comment l'utiliser. tu m'as donné le code partiellement je ne pouvais pas voir comment il fonctionne.
--
C'est le début.....
Donnez votre commentaire ..... sur ce qui est différent du vôtre jusqu'à présent...
Puis lisez https://www.mql5.com/en/forum/139654 et essayez de faire une boucle de décompte pour vérifier les transactions.
Comme vous pouvez le voir, j'ai demandé à faire une boucle de décompte pour vérifier les transactions.
C'est ma prochaine étape dans le code
Je ne vous demande que cette partie du code
pour qu'il compte les transactions d'achat et de vente séparément.
comme ceci ?
int ticket=OrderTicket() ;//blocs de codes à exécuter
}
je l'ai supprimé parce que je ne savais pas comment l'utiliser. vous m'avez donné le code partiellement je ne pouvais pas voir comment il fonctionne.
Au moment où l'EA redémarre
BUYS est mis à 1
SELLS est fixé à 1
OrdersTotal() donne le total de toutes les transactions ouvertes sur votre compte.
Il peut être égal à zéro, dans ce cas nous n'avons pas de transactions ouvertes et nous n'avons pas besoin de vérifier s'il y a des transactions de cet EA.
SiOrdersTotal() > 0 BUYS reste à 1 et SELLS reste à 1
nous devons vérifier dans ce cas si cela provient de notre EA et nous devons compter les différents types (buy,sell,buylimit....)
donc
comme ça ?
int ticket=OrderTicket() ;//blocs de codes à exécuter
}
Utiliser le bouton SRC
Cette boucle ne fait que commencer (pour quelle condition).
Comment savez-vous que la transaction sélectionnée dans la boucle est un achat ou une vente ?
Et comment les compter ?
Utiliser le bouton SRC
Cette boucle ne fait que commencer (pour quelle condition).
Comment savez-vous que la transaction sélectionnée dans la boucle est un achat ou une vente ?
Et comment les compter ?
opps.
if (OrderType() == OP_BUY && pBid > MA5) { Ticket3 = OrderClose(ticket, lots, pBid, Slippage.Pips); if (Ticket3 == true ) { Print("BUY position closed", OrderClosePrice()); } if (Ticket3 == false) { Print("Error closing BUY position", ErrorDescription(GetLastError())); } } if (OrderType() == OP_SELL && pBid < MA5) { Ticket4 = OrderClose(ticket, lots, pAsk, Slippage.Pips); if (Ticket4 == true ) { Print("SELL position closed", OrderClosePrice()); } if (Ticket4 == false) { Print("Error closing SELL position", ErrorDescription(GetLastError())); } } }pour la fonction de transaction fermée.
en utilisant
if (OrderType() == OP_SELL && pBid < MA5)pour différencier l'achat et la vente.
Y a-t-il un problème avec mes conditions d'ouverture de l'ordre ?
Devrais-je les supprimer et les remplacer par la boucle que j'ai utilisée pour la fonction d'ordre de fermeture ?
opps.
pour la fonction de commerce fermé.
en utilisant
pour différencier l'achat et la vente.
Y a-t-il un problème avec mes conditions d'ouverture de l'ordre ?
Dois-je les supprimer et les remplacer par la boucle que j'ai utilisée pour la fonction d'ordre de fermeture ?
À ce moment-là, vous devez vérifier s'il y a déjà une transaction ouverte.
Avant d'ouvrir une position, vous devez savoir s'il y a une position ouverte.
Je ne vois toujours pas que vous avez effectué le comptage des transactions.
.
Jetez un coup d'oeil au code de l' EA Moyenne Mobile sur votre station metatrader et voyez comment il est fait là .....