Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 1043

 

Ich werde es noch genauer beschreiben.

Der Hauptindikator befindet sich auf dem Euro-Dollar-Paar. Dieser Indikator ruft Indikatoren von anderen Paaren von Gold, Dollar-Index, und Euro-Währung. Dieser Indikator arbeitet auf 1-Minuten-Paaren und manchmal gibt es keine Notierungen auf dem Dollar-Index, zum Beispiel, der Euro hat eine 15-Minuten-Kerze, aber der Dollar-Index hat keine solche Kerze, der Index ist eingefroren und tickt nicht. Nach einiger Zeit erscheint dann die 16-Minuten-Kerze für den EUR und die 16-Minuten-Kerze für den USD-Index. Wie lautet die Frage? Wie kann die Berechnung des Indikators synchronisiert werden, so dass er nur gezählt wird, wenn die Balken aller aufgerufenen Symbole in time???? übereinstimmen?

Ich habe diese Konstruktion ausprobiert

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

Es scheint in Ordnung zu sein, aber die Berechnung wird nur für den aktuellen Tag durchgeführt, es gibt keine Signale für die vorherigen Tage. Vielleicht gibt es Standardlösungen für die Synchronisierung von Symbolen????

 
nikelodeon:

Ich werde es noch genauer beschreiben.

Der Hauptindikator befindet sich auf dem Euro-Dollar-Paar. Dieser Indikator ruft Indikatoren von anderen Paaren von Gold, Dollar-Index, und Euro-Währung. Dieser Indikator arbeitet auf 1-Minuten-Paaren und manchmal gibt es keine Notierungen auf dem Dollar-Index, zum Beispiel, der Euro hat eine 15-Minuten-Kerze, aber der Dollar-Index hat keine solche Kerze, der Index ist eingefroren und tickt nicht. Nach einiger Zeit erscheint dann die 16-Minuten-Kerze für den EUR und die 16-Minuten-Kerze für den USD-Index. Wie lautet die Frage? Wie kann die Berechnung des Indikators synchronisiert werden, so dass er nur gezählt wird, wenn die Balken aller aufgerufenen Symbole in time???? übereinstimmen?

Ich habe diese Konstruktion ausprobiert

Es scheint in Ordnung zu sein, aber die Berechnung wird nur für den aktuellen Tag durchgeführt, es gibt keine Signale für die vorherigen Tage. Vielleicht gibt es eine Standardlösung für die Synchronisierung von Symbolen????

Versuchen Sie es mit einem Timer in der Schleife SymbolInfoTick(), um Daten über die Symbole zu erhalten. Und schon synchronisieren Sie, was Sie brauchen.

Die Sache ist die, dass das Programm auf dem aktuellen Symbol nur mit der Ankunft des Ticks für dieses Symbol startet. Daher werden Sie nicht in der Lage sein, die Zecken von den anderen Symbolen rechtzeitig zu bekommen. Aber in einem Timer, der unabhängig von den Ticks läuft, können Sie Ticks von anderen Symbolen erhalten.

Der Timer kann auf Millisekunden eingestellt werden, wenn Sie eine schnelle Reaktion auf einen Tick bei einem Symbol benötigen, das nicht Ihr eigenes ist.

 
artmedia70:
Und Sie haben eine furchtbar unklare Frage, die nur Sie verstehen können.

HERZLICH WILLKOMMEN!!! DANKESCHÖN! FROHE FESTTAGE!

Noch 2 Punkte, meine Liebe. 1) Sie können den Indikator in einem separaten Fenster entfernen?

2) eine Funktion hinzufügen, wenn die aktuelle ATR höher ist als die ATR (für H-Periode), dann die ATR über der Bar, würde es in einer anderen Farbe hervorgehoben werden? oder der Wert würde nur über diese Bar geschrieben werden?

 
kocunyc89:

HAIL TO YOU!!! DANKESCHÖN! FROHE FESTTAGE!

Noch 2 Punkte, meine Liebe. 1) Können Sie den Indikator in einem separaten Fenster entfernen?

2) Fügen Sie eine Funktion hinzu, wenn die aktuelle ATR höher ist als die ATR (für die H-Periode), dann wird die ATR oberhalb des Balkens in einer anderen Farbe hervorgehoben? oder der Wert wird nur oberhalb dieses Balkens geschrieben?

Ach, du liebe Zeit... Hier, bearbeiten Sie es selbst:

//+------------------------------------------------------------------+
//|                                                 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);
}
//+------------------------------------------------------------------+

Oder willst du, dass ich auch alles für dich tue?

 
artmedia70:

Ach, du liebe Zeit... Hier machen Sie es selbst:

Oder soll ich es auch für Sie tun?

Vielen Dank! Guter Mann!
 
kocunyc89:
Vielen Dank, lieber Mann!
Sie sind herzlich willkommen.
 
Guten Abend, ist es möglich, dass der Indikator die Pufferdaten in zwei Fenstern anzeigt, ein Teil im Hauptchart und ein Teil im Subend? Wenn ja, geben Sie bitte an, wie ...
 
artmedia70:

Bitte sehr. Wenn es kein Geheimnis ist, warum brauchen Sie dann einen Zeitstempel, der die Zeit des letzten Programmlaufs anzeigt - die Zeit darin wird sich nicht ändern.

Nur aus reiner Neugierde...

Dies ist für das Offline-Tick-Chart.



 
Hallo.

Welche Funktionen können verwendet werden, um Variablen zwischen zwei MT4-Terminals zu senden? Wenn möglich, fügen Sie bitte einen Link zur Dokumentation hinzu.
 
abeiks Welche Funktionen gibt es für das Senden von Variablen zwischen zwei MT4-Terminals?

int Flags=FILE_WRITE+FILE_TXT+FILE_COMMON;

int Info = FileOpen(fName,Flags);

FileWrite(Info,What's Up); Auf dem anderen Terminal, lesen. Cursor bei FileOpen und F1 - Hilfe anfordern