Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 222

 

Aidez-moi, s'il vous plaît. Je ne comprends pas la boucle for(), tout le temps après la mise à jour, à cause du décalage(iMA(NULL,PERIOD_M1,1,1,MODE_SMA,PRICE_OPEN,i)) L'indicateur se redessine !


//+------------------------------------------------------------------+
//|                                                         help.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+

#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "http://www.mql4.com"
#property strict
#include <MovingAverages.mqh>
//--- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 2
#property   indicator_color1  clrSilver
#property   indicator_color2  clrRed
#property   indicator_width1  2

//--- indicator parameters
input int SignalSMA=8;            // Signal SMA Period
//--- indicator buffers
double    ExtBuffer[];
double    ExtSignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
   IndicatorDigits(Digits+1);
//--- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexStyle(1,DRAW_LINE);
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtBuffer);
   SetIndexBuffer(1,ExtSignalBuffer);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
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 i,limit;
//--- last counted bar will be recounted
   limit=rates_total-prev_calculated;
   if(prev_calculated>0)
      limit++;
//--- counted in the 1-st buffer
   for(i=0;i<limit;i++)
      ExtBuffer[i]=(
                    iMA(NULL,PERIOD_CURRENT,1,0,MODE_SMA,PRICE_HIGH,i)
                    +iMA(NULL,PERIOD_M1,1,1,MODE_SMA,PRICE_OPEN,i)
                    );
//--- signal line counted in the 2-nd buffer
   SimpleMAOnBuffer(rates_total,prev_calculated,0,SignalSMA,ExtBuffer,ExtSignalBuffer);
//--- done
   return(rates_total);
  }
//+------------------------------------------------------------------+

Merci d'avance.

 
Alexey Viktorov:

À mon avis, cette approche n'est pas du tout logique. Pourquoi définir le jour de la semaine ? Quelle différence cela fait-il de savoir quel jour on est, si la condition doit dire "ne pas ouvrir plus de xxx ordres aujourd'hui" ?

Il me semble plus logique de compter les ordres ouverts aujourd'hui et de spécifier la condition correspondante.

il n'y a pas de date d'ouverture de la commande dans l'état.


Si vous le savez, veuillez écrire comment le faire)
Je ne comprends pas comment faire en sorte que, pour un jour donné, le nombre d'ordres ouverts pendant toute la journée ne dépasse pas le n-ième.

 
cripple:

Aidez-moi, s'il vous plaît. Je ne comprends pas la boucle for(), tout le temps après la mise à jour, à cause du décalage(iMA(NULL,PERIOD_M1,1,1,MODE_SMA,PRICE_OPEN,i)) L'indicateur se redessine !


Je vous remercie d'avance.

Les MA ont des TF différentes. Vous devez en quelque sorte faire correspondre l'intervalle de temps supérieur à la TF M1, c'est-à-dire compter les MA deux fois avec des nombres de ticks différents. Dans ce cas, une seule et même valeur de la période la plus ancienne sera ajoutée à différentes valeurs de la période la plus récente.

Si vous regardez à travers i, vous obtenez, par exemple, 10 bougies de période D1 et 10 M1. Logiquement, quelque chose ne va pas....

Autre chose, si l'indicateur est réglé sur M1, il fonctionnera très probablement sans rebroussement.

 
Renat Akhtyamov:

les MAs ont des TFs différents. vous devez en quelque sorte faire correspondre l'intervalle de temps supérieur à la TF M1, c'est-à-dire compter les MAs deux fois avec des nombres de ticks différents.

En passant par i vous prenez maintenant par exemple 10 bougies de période D1 et 10 M1. Logiquement, quelque chose ne va pas....

Oui, vous avez raison, mais mon esprit n'est pas suffisant pour comprendre comment faire compter M1 correctement.
 
cripple:
Oui, vous avez raison, mais mon esprit n'est pas encore assez développé pour comprendre comment faire compter M1 correctement.

En outre, il faudra synchroniser M1 avec un cadre temporel plus élevé, car une barre de M5 ne correspondra pas nécessairement à 5 bougies de M1, mais peut-être à 4 ou 1.

 
cripple:
Oui, vous avez raison, mais mon esprit n'est pas encore assez développé pour comprendre comment faire compter M1 correctement.

Essayez

int  Bars(
   string           symbol_name,     // имя символа
   ENUM_TIMEFRAMES  timeframe,       // период
   datetime         start_time,      // с какой даты
   datetime         stop_time        // по какую дату
   );

l'heure de la i-ème barre et mettre le numéro de la barre résultante à la place de i.

 
Pouvez-vous me dire si vous pouvez utiliser le clavier pour faire défiler les paires ouvertes dans le terminal mt4 ?
 
LRA:
Cher novikov433! !! Je vous apprendrai la programmation, ou je vous écrirai un conseiller expert gratuit, ou les deux ! En échange, apprenez-moi comment les ordres à perte sont transformés en ordres sans perte. Vous pouvez utiliser un exemple simple. Je donne un ordre à ma femme (ordre) : acheter un seau de pommes de terre tôt le matin au marché, et à 10 heures (analyse fondamentale) le prix augmente - vendre. Mais parfois un camion de pommes de terre arrive à 10h30 (nouvelles). Et le prix (aux nouvelles) baisse instantanément et cela dure jusqu'à la fin de la journée, voire pendant toute la semaine. Je place un Stop Loss - si le prix baisse de 10 roubles, je vends dès que possible (au prix du marché). Comment changer l'ordre, pour éviter les pertes. Si cette variante vous intéresse - envoyez-nous votre e-mail.
Le problème est que le marché s'est légèrement orienté vers le côté souhaité, puis est revenu en arrière. Vous devez donc conclure l'opération au seuil de rentabilité et l'ouvrir pour un retournement. je suis devenu accro dès que j'ai commencé. j'étais nerveux quand j'ai commencé à échanger. j'ai eu une autre impression une fois de plus que c'est une connerie d'échanger avec les mains.
 
Alexey Viktorov:

Essayez

l'heure de la i-ème mesure et mettre le numéro de la mesure résultante à la place de i.


Avez-vous pensé à quelque chose comme ça ?
//+------------------------------------------------------------------+
//|                                                         help.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+

#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "http://www.mql4.com"
#property description "Moving Averages Convergence/Divergence"
#property strict
#include <MovingAverages.mqh>
//--- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 2
#property   indicator_color1  clrSilver
#property   indicator_color2  clrRed
#property   indicator_width1  2

//--- indicator parameters
input int SignalSMA=8;            // Signal SMA Period
//--- indicator buffers
double    ExtBuffer[];
double    ExtSignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
   IndicatorDigits(Digits+1);
//--- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexStyle(1,DRAW_LINE);
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtBuffer);
   SetIndexBuffer(1,ExtSignalBuffer);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
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 i,limit;
//--- last counted bar will be recounted
   limit=rates_total-prev_calculated;
   if(prev_calculated>0)
      limit++;
//--- counted in the 1-st buffer
   for(i=0;i<limit;i++)
     {
      int bars=iBarShift(Symbol(),PERIOD_M1,iTime(Symbol(),PERIOD_CURRENT,i),false);
      ExtBuffer[i]=(
                    iMA(NULL,PERIOD_CURRENT,1,0,MODE_SMA,PRICE_HIGH,i)
                    +iMA(NULL,PERIOD_M1,1,1,MODE_SMA,PRICE_OPEN,bars)
                    );
      Print(bars);
     }
//--- signal line counted in the 2-nd buffer
   SimpleMAOnBuffer(rates_total,prev_calculated,0,SignalSMA,ExtBuffer,ExtSignalBuffer);
//--- done
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
ax00071:
Merci de votre attention ;)) Je suis un pigeon ... ... à la clôture, j'avais la condition de conclure l'affaire à 22h00 le vendredi, sans aucune condition supplémentaire pour vérifier le type d'affaire. L'affaire elle-même a été conclue quelques heures plus tôt. Eh bien, quand 22 heures sont arrivées, le conseiller expert a commencé à envoyer des ordres pour fermer un ordre qui était déjà fermé ... .
Tu ne devrais pas t'appeler une plante. Si vous avez réussi à localiser, comprendre et corriger une telle erreur, vous vous rapprochez du niveau d'un programmeur !
Raison: