Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 1043

 

Je vais le décrire plus en détail.

L'indicateur principal est situé sur la paire euro-dollar. Cet indicateur appelle les indicateurs d'autres paires d'or, de l'indice du dollar et de la devise euro. Cet indicateur fonctionne sur des paires 1 minute et parfois il n'y a pas de cotation sur l'indice dollar, par exemple, l'euro a un chandelier de 15 minutes, mais l'indice dollar n'a pas un tel chandelier, l'indice est gelé et ne tique pas. Puis, après un certain temps, la bougie de 16 minutes apparaît sur l'indice EUR et la bougie de 16 minutes sur l'indice USD. Quelle est la question ? Comment synchroniser le calcul de l'indicateur, pour qu'il ne soit compté que lorsque les barres de tous les symboles appelés coïncident dans le temps ????.

J'ai essayé cette construction

if((iTime(NULL,0,i)==iTime("XAUUSD",0,i))&&(iTime(NULL,0,i)==iTime("EURJPY",0,i))){

Cela semble être cool, mais le calcul est effectué uniquement pour le jour en cours, il n'y a pas de signaux pour les jours précédents. Il existe peut-être des solutions standard pour la synchronisation des symboles ????.

 
nikelodeon:

Je vais le décrire plus en détail.

L'indicateur principal est situé sur la paire euro-dollar. Cet indicateur appelle les indicateurs d'autres paires d'or, de l'indice du dollar et de la devise euro. Cet indicateur fonctionne sur des paires 1 minute et parfois il n'y a pas de cotation sur l'indice dollar, par exemple, l'euro a un chandelier de 15 minutes, mais l'indice dollar n'a pas un tel chandelier, l'indice est gelé et ne tique pas. Puis, après un certain temps, la bougie de 16 minutes apparaît sur l'indice EUR et la bougie de 16 minutes sur l'indice USD. Quelle est la question ? Comment synchroniser le calcul de l'indicateur, pour qu'il ne soit compté que lorsque les barres de tous les symboles appelés coïncident dans le temps ????.

J'ai essayé cette construction

Cela semble être cool, mais le calcul est effectué uniquement pour le jour en cours, il n'y a pas de signaux pour les jours précédents. Il existe peut-être des solutions standard pour la synchronisation des symboles ????.

Essayez d'insérer un timer dans la boucle SymbolInfoTick() pour obtenir des données sur les symboles. Et là déjà synchroniser selon vos besoins.

Le fait est que sur le symbole actuel, le programme ne démarre qu'à l'arrivée du tick pour ce symbole. Par conséquent, vous ne serez pas en mesure d'obtenir les ticks des autres symboles à temps. Mais dans une minuterie qui fonctionne indépendamment des ticks, vous pourrez obtenir des ticks à partir d'autres symboles.

Le minuteur peut être réglé sur la milliseconde si vous avez besoin d'une réponse rapide à un tick sur un symbole qui n'est pas le vôtre.

 
artmedia70:
Votre question est terriblement floue et vous êtes le seul à pouvoir la comprendre.

HAIL TO YOU ! !! MERCI ! JOYEUSES FÊTES !

2 points de plus, ma chère. 1) vous pouvez supprimer l'indicateur dans une fenêtre séparée ?

2)ajouter une fonction, si l'ATR actuel est supérieur à l'ATR (pour la période H), alors l'ATR au-dessus de la barre, serait-il mis en évidence dans une couleur différente ? ou la valeur serait-elle écrite uniquement au-dessus de cette barre ?

 
kocunyc89:

HAIL TO YOU ! !! MERCI ! JOYEUSES FÊTES !

2 points de plus, ma chère. 1) Peut-on supprimer l'indicateur dans une fenêtre séparée ?

2)ajouter une fonction, si l'ATR actuel est supérieur à l'ATR (pour la période H), alors l'ATR au-dessus de la barre sera mis en évidence dans une couleur différente ? ou la valeur sera écrite seulement au-dessus de cette barre ?

Oh, mon Dieu... Tenez, éditez-le vous-même :

//+------------------------------------------------------------------+
//|                                                 iATRwithData.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot ATR
#property  indicator_label1  "ATR"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrDodgerBlue
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//+------------------------------------------------------------------+
//| enums                                                          |
//+------------------------------------------------------------------+
enum enumYN
  {
   enYes=1, // Yes
   enNo=0,  // No
  };
//+------------------------------------------------------------------+
//| input parameters                                                 |
//+------------------------------------------------------------------+
input int      PeriodATR=14;           // ATRs calculation period
int periodATR=(PeriodATR<1)?1:PeriodATR;
sinput enumYN DrawGraphic=enYes;       // Drawing ATR data over the candles
sinput int StartDrawingBar=100;        // Max bar for drawing ATRs data
int startDrawingBar;
sinput int TextSize=5;                 // Text size
sinput color TextColor=clrDodgerBlue;  // Text color
//--- indicator buffers
double         BufferATR[];
string Prefix;
//+------------------------------------------------------------------+
//| Classes                                                          |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,BufferATR);
   
   Prefix="iATRwd("+IntegerToString(periodATR)+")";
   IndicatorSetString(INDICATOR_SHORTNAME,Prefix);
   int bars=Bars(Symbol(),Period());
   startDrawingBar=(StartDrawingBar<1)?1:(StartDrawingBar>bars)?bars:StartDrawingBar;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- delete graphics
   ObjectsDeleteAll(0,Prefix,0);
//---
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration 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[])
  {
//---
   if(rates_total<periodATR) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1) limit=rates_total-periodATR-1;
   //---
   for(int i=limit; i>=0; i--) {
      BufferATR[i]=iATR(Symbol(),Period(),periodATR,i);
      if(DrawGraphic && i<startDrawingBar) {
         string tm_txt=TimeToString(time[i],TIME_DATE|TIME_MINUTES);
         string nm=Prefix+"_"+tm_txt;
         string text=IntegerToString(int(BufferATR[i]/Point()));
         string tooltip="ATRs period for candle on "+tm_txt+" is "+text;
         SetArrowText(0,nm,TextColor,text,0,ANCHOR_LOWER,time[i],high[i],"Arial",TextSize,tooltip);
         }
      }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Functions                                                        |
//+------------------------------------------------------------------+
void SetArrowText(long chart_id, string name, color text_color, string text, int sub_window, 
                  long text_anchor, long text_time1, double text_price1, string font="Arial", long font_size=5, 
                  string tooltip="\n", bool selection=false, bool hidden=true) {
   
   if(ObjectFind(chart_id,name)<0) ObjectCreate(chart_id,name,OBJ_TEXT,sub_window,text_time1,text_price1);
   ObjectSetInteger(chart_id,name,OBJPROP_ANCHOR,text_anchor);
   ObjectSetInteger(chart_id,name,OBJPROP_WIDTH,font_size);
   ObjectSetString(chart_id,name,OBJPROP_FONT,font);
   ObjectSetString(chart_id,name,OBJPROP_TEXT,text);
   ObjectSetInteger(chart_id,name,OBJPROP_COLOR,text_color);
   ObjectSetInteger(chart_id,name,OBJPROP_FONTSIZE,font_size);
   ObjectSetInteger(chart_id,name,OBJPROP_TIME1,text_time1);
   ObjectSetDouble(chart_id,name,OBJPROP_PRICE1,text_price1);
   ObjectSetInteger(chart_id,name,OBJPROP_SELECTED,selection);
   ObjectSetInteger(chart_id,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_id,name,OBJPROP_HIDDEN,hidden);
   ObjectSetString(chart_id,name,OBJPROP_TOOLTIP,tooltip);
}
//+------------------------------------------------------------------+

Ou tu veux que je fasse tout pour toi aussi ?

 
artmedia70:

Oh, mon Dieu... Ici, vous le faites vous-même :

Ou dois-je le faire pour toi aussi ?

Merci beaucoup ! Brave homme !
 
kocunyc89:
Merci beaucoup ! gentil monsieur !
Vous êtes les bienvenus.
 
Bonsoir, est-il possible de faire en sorte que l'indicateur affiche les données tampons dans deux fenêtres, une partie sur le graphique principal et une partie sur le graphique secondaire ? Si oui, veuillez indiquer comment ...
 
artmedia70:

Vous êtes les bienvenus. Si ce n'est pas un secret, pourquoi avez-vous besoin d'un horodatage indiquant l'heure de la dernière exécution de votre programme - l'heure qu'il contient ne changera pas.

Simple curiosité...

Ceci est pour le graphique en tic-tac hors ligne.



 
Bonjour.

Quelles fonctions peuvent être utilisées pour envoyer des variables entre deux terminaux MT4 ? Si possible, veuillez ajouter un lien vers la documentation.
 
abeiks Quelles sont les fonctions disponibles pour envoyer des variables entre deux terminaux MT4 ?

int Flags=FILE_WRITE+FILE_TXT+FILE_COMMON ;

int Info = FileOpen(fName,Flags) ;

FileWrite(Info,What's Up) ; Sur l'autre terminal, lire. Curseur sur FileOpen et F1 - obtenir de l'aide