Aide au codage - page 629

 
traderduke:

mladen & mrtools

J'ai un EA qui s'autodétruit avec des transactions. J'ai besoin d'aide pour construire un Void ou une fonction qui peut être ajoutée à un EA existant. Cette fonction doit traiter :

input bool doBasketExit = true ; // Vérifier les conditions de sortie du panier.
input double BasketTP = 250.0 ; // Prise de profit du panier (devise du compte) La paire du graphique
input double BasketSL = -100.0 ; // Stop Loss du panier (devise du compte) La paire du graphique

J'exécute 9 paires/chartes avec un EA agressif sur le H1 et je veux un panier de trading spécifique à la paire sur chacun des 9 graphiques.
Voici ce qui vient de m'arriver. 9 graphiques en cours d'exécution, 3 graphiques sont en cours d'échange avec, bien sûr, 3 paires distinctes, chacune avec 15 trades, oui 45 trades ouverts, 2 sont en profit et un est en perte. Je cherche un moyen d'additionner chaque groupe/paire des 15 séparément et de comparer chaque groupe à un panier de limites SL & TP. J'ai trouvé une configuration de panier mais elle doit bien sûr être affinée. L'astuce est d'obtenir la même paire additionnée à partir de la colonne Ordre Profit Commerce. En étant sur un graphique avec une paire spécifique, je pensais avoir trouvé un vide mais c'est un peu compliqué. La fonction doit en quelque sorte lire l'OrderProfit par paire ???

Voir mon code comme un mauvais exemple ;

void closeTrades( CURRENCY* &currencies[] ) {
// Vérifier la sortie du panier
if ( doBasketExit ) {
double basketProfit = getBasketProfit() ;
si ( ( BasketTP > 0.0 ) && ( basketProfit > BasketTP ) ) ||
( ( BasketSL < 0.0 ) && ( basketProfit < BasketSL ) ) ) ) {
closeAll() ;
}
}
double getBasketProfit() {
double basketProfit = 0.0 ;
for (int iOrder=OrdersTotal()-1 ; iOrder >= 0 ; iOrder--) {
if (OrderSelect(iOrder,SELECT_BY_POS,M ODE_TRADES)) {
if ( OrderMagicNumber() == MagicNumber ) {
if ( (OrderType() == OP_BUY) || (OrderType() == OP_SELL) ) {
basketProfit += OrderProfit() + OrderSwap() + OrderCommission() ;
}
}
}
}
return(basketProfit) ;
}

void closeAll() {
double closePrice ;
string symbolName ;
int résultat ;
for (int iOrder=OrdersTotal()-1 ; iOrder >= 0 ; iOrder--) {
if (OrderSelect(iOrder,SELECT_BY_POS,M ODE_TRADES)) {
if ( OrderMagicNumber() == MagicNumber ) {
if ( (OrderType() == OP_BUY) || (OrderType() == OP_SELL) ) {
symbolName = OrderSymbol() ;
closePrice = ( OrderType() == OP_BUY ) ? MarketInfo( symbolName, MODE_BID ) : MarketInfo( symbolName, MODE_ASK ) ;
result = OrderCloseReliable(OrderTicket(), OrderLots(), closePrice, 50 ) ;
}
}



J'apprécie vraiment que vous vous penchiez sur cette question.

Merci
Ray

Ray


Vous avez besoin d'une sorte d'"EA mère" - qui connaîtrait tous les chiffres magiques manipulés par d'autres EA et ferait ensuite les opérations "sur le groupe" dont vous avez besoin.

 
M. MLADEN, vérifiez votre boîte de réception, s'il vous plaît.
 
mladen:

Essayez de faire ce qui suit :

Au lieu de

Merci Mladen, j'ai fait quelques ajustements dans le code et cela fonctionne maintenant.
 
mladen:

Ray


Vous avez besoin d'une sorte d'"EA mère" - qui connaîtrait tous les chiffres magiques manipulés par d'autres EA et ferait ensuite les opérations "sur le groupe" dont vous avez besoin.

mladen

Merci pour vos réflexions sur ce sujet. Alors NON.

Merci encore


Ray

 

j'ai essayé de faire apparaître la flèche après la fermeture de la bougie de signal afin d'éviter de repeindre, mais sans succès.merci de m'aider MR. TOOLS et MLADEN, ci-dessous le code.

//+------------------------------------------------------------------+
//|                                              signalindicator.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 4
#property  indicator_color1 Blue
#property  indicator_color2 Yellow
#property  indicator_color3 Aqua
#property  indicator_color4 Red

extern int FastEMA = 5;
extern int SlowEMA = 6;
extern int RSIPeriod = 7;
extern bool Alerts = TRUE;
double buffer_1[];
double buffer_2[];
double arrow_1[];
double arrow_2[];
int a = 0;
int b = 0;
double x = 0.0;
double y = 0.0;

int init() {
   SetIndexStyle(0, DRAW_LINE);
   SetIndexBuffer(0, buffer_1);
   SetIndexStyle(1, DRAW_LINE);
   SetIndexBuffer(1, buffer_2);
   SetIndexStyle(2, DRAW_ARROW, 0,4);
   SetIndexArrow(2, 217);
   SetIndexBuffer(2, arrow_1);
   SetIndexEmptyValue(2, 0.0);
   SetIndexStyle(3, DRAW_ARROW, 0,4);
   SetIndexArrow(3, 218);
   SetIndexBuffer(3, arrow_2);
   SetIndexEmptyValue(3, 0.0);
   return (0);
}

int deinit() {
   return (0);
}

int start() {
   int counted_bars = IndicatorCounted();
   double irsi_1 = 0;
   bool c = FALSE;
   double price_10 = 0;
   if (counted_bars < 0) return (-1);
   if (counted_bars > 0) counted_bars--;
   int li_0 = Bars - counted_bars;
   for (int i = 0; i < li_0; i++) {
      buffer_1[i] = iMA(NULL, 0, FastEMA, 0, MODE_EMA, PRICE_CLOSE, i);
      buffer_2[i] = iMA(NULL, 0, SlowEMA, 0, MODE_EMA, PRICE_CLOSE, i);
      irsi_1 = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i);
      x = buffer_1[i] - buffer_2[i];
      if (x > 0.0 && irsi_1 > 50.0) a = 1;
      else
         if (x < 0.0 && irsi_1 < 50.0) a = 2;
      if (a == 1 && b == 2) {
         arrow_2[i - 1] = High[i - 1] - 5.0 * Point;
         c= TRUE;
         price_10 = Ask;
      } else {
         if (a == 2 && b == 1) {
            arrow_1[i - 1] = Low[i - 1] - 5.0 * Point;
            c = TRUE;
            price_10 = Bid;
         }
      }
      b = a;
      y = x;
   }
   if (Alerts && c) {
      PlaySound("alert.wav");
      if (b == 2) Alert(Symbol(),"  M",Period(),"Buy at " + price_10 + "!!", "Entry Point", 0);
      else
         if (b == 1) Alert(Symbol(),"  M",Period(),"Sell at " + price_10 + "!!", "Entry Point", 0);
      c= FALSE;
   }
   return (0);
}
 
Bonjour

Bonjour mladen

J'ai besoin de l'indicateur ITM X-Gen Daily Scalper Indicator.mq4

Aidez-moi

Merci

 
alozard:

Bonjour mladen

J'ai besoin de l'indicateur ITM X-Gen Daily Scalper Indicator.mq4

Aidez-moi

Merci

alozard

Cet indicateur a été renommé mon indicateur de bandes TMA centrées. Vous pouvez le trouver ici : https://www.mql5.com/en/forum/181241

 
M. mladen, s'il vous plaît aidez-moi avec la version des codes ci-dessus.
 

M. Mladen, s'il vous plaît regardez les codes ci-dessous, la flèche ne s'affiche pas en direct jusqu'à ce que je change de cadre temporel.


//+------------------------------------------------------------------+
//|                                              signalindicator.mq4 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 4
#property  indicator_color1 Blue
#property  indicator_color2 Yellow
#property  indicator_color3 Aqua
#property  indicator_color4 Red

#property  indicator_color4 Red

extern int FastEMA = 5;
extern int SlowEMA = 6;
extern int RSIPeriod = 7;
extern bool Alerts = TRUE;
double buffer_1[];
double buffer_2[];
double arrow_1[];
double arrow_2[];
int a = 0;
int b = 0;
double x = 0.0;
double y = 0.0;
 double alertshow;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   SetIndexStyle(0, DRAW_NONE);
   SetIndexBuffer(0, buffer_1);
   SetIndexStyle(1, DRAW_NONE);
   SetIndexBuffer(1, buffer_2);
   SetIndexStyle(2, DRAW_ARROW, 0,4);
   SetIndexArrow(2, 241);
   SetIndexBuffer(2, arrow_1);
   SetIndexEmptyValue(2, 0.0);
   SetIndexStyle(3, DRAW_ARROW, 0,4);
   SetIndexArrow(3, 242);
   SetIndexBuffer(3, arrow_2);
   SetIndexEmptyValue(3, 0.0);

   return (0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   return (0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int counted_bars = IndicatorCounted();
   double irsi_1 = 0;
   int li_0;
   bool c = FALSE;
   double price_10 = 0;
   if (counted_bars < 0) return (-1);
   if (counted_bars > 0) counted_bars--;
   if(counted_bars==0)
      li_0=MathMin(Bars-10-1,Bars-MathMax(FastEMA,SlowEMA)-1);
   else
      li_0=Bars-counted_bars;
   for (int i = 0; i < li_0; i++) {
      buffer_1[i] = iMA(NULL, 0, FastEMA, 0, MODE_EMA, PRICE_CLOSE, i);
      buffer_2[i] = iMA(NULL, 0, SlowEMA, 0, MODE_EMA, PRICE_CLOSE, i);
      irsi_1 = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i);
      x = buffer_1[i] - buffer_2[i];
      if (x > 0.0 && irsi_1 > 50.0) a = 1;
      else
         if (x < 0.0 && irsi_1 < 50.0) a = 2;
      if (a == 1 && b == 2) {
         arrow_2[i - 1] = High[i - 1] - 5.0 * Point;
         c= TRUE;
         price_10 = Ask;
      } else {
         if (a == 2 && b == 1) {
            arrow_1[i - 1] = Low[i - 1] - 5.0 * Point;
            c = TRUE;
            price_10 = Bid;
         }
      }
      b = a;
      y = x;
   }
   if (Alerts && c) {
      PlaySound("alert.wav");
      if (b == 2)  
      
         if(alertshow<Time[1] && counted_bars!=0)
           {
            PlaySound("news.wav");// buy wav
            Alert(Symbol()," buy signal");
            alertshow=Time[1];
           }
      else
         if (b == 1) if(alertshow<Time[1] && counted_bars!=0)
           {
            PlaySound("news.wav");// buy wav
            Alert(Symbol(),"  sell signal");
            alertshow=Time[1];
           }
   }
//----
   return(prev_calculated);
  }
//+------------------------------------------------------------------+
 
kapoo:

M. Mladen, s'il vous plaît regardez les codes ci-dessous, la flèche ne s'affiche pas en direct jusqu'à ce que je change de cadre temporel.


kapoo

Comme je vous l'ai déjà dit plusieurs fois : cet indicateur est un mauvais repainter et c'est pourquoi il fait ce qu'il fait. Mon meilleur conseil est de l'oublier