Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 1043

 

Lo describiré bien con más detalle.

El indicador principal se encuentra en el par euro-dólar. Este indicador llama a los indicadores de otros pares de oro, índice del dólar y moneda del euro. Este indicador trabaja en pares de 1 minuto y a veces no hay cotizaciones en el índice del dólar, por ejemplo, el euro tiene una vela de 15 minutos, y el índice del dólar no tiene tal vela, el índice se congela y no hace tick. Luego, después de un tiempo, aparece la vela de 16 minutos en el EUR y la vela de 16 minutos en el índice del USD. ¿Cuál es la pregunta? Cómo sincronizar el cálculo del indicador, para que sólo se cuente cuando las barras de todos los símbolos llamados coincidan en el tiempo????

Probé esta construcción

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

Parece estar bien, pero el cálculo se realiza sólo para el día actual, no hay señales para los días anteriores. Tal vez haya soluciones estándar para la sincronización de los símbolos????

 
nikelodeon:

Lo describiré bien con más detalle.

El indicador principal se encuentra en el par euro-dólar. Este indicador llama a los indicadores de otros pares de oro, índice del dólar y moneda del euro. A veces no hay cotizaciones en el índice del dólar, por ejemplo, el euro tiene una vela de 15 minutos, y el índice del dólar no tiene dicha vela, el índice está congelado y no hace tick. Luego, después de un tiempo, aparece la vela de 16 minutos en el EUR y la vela de 16 minutos en el índice del USD. ¿Cuál es la pregunta? Cómo sincronizar el cálculo del indicador, para que sólo se cuente cuando las barras de todos los símbolos llamados coincidan en el tiempo????

Probé esta construcción

Parece estar bien, pero el cálculo se realiza sólo para el día actual, no hay señales para los días anteriores. Tal vez haya una solución estándar para la sincronización de los símbolos????

Prueba en un temporizador en el bucle SymbolInfoTick() para obtener datos sobre los símbolos. Y ahí ya se sincroniza como se necesita.

La cuestión es que, en el símbolo actual, el programa se inicia sólo con la llegada del tick para este símbolo. Por lo tanto, no podrá obtener los ticks de los otros símbolos a tiempo. Pero en un temporizador que se ejecuta independientemente de los ticks, podrá obtener ticks de otros símbolos.

El temporizador puede ajustarse en milisegundos si necesita una respuesta rápida a un tic en un símbolo que no es el suyo.

 
artmedia70:
Y tú tienes una pregunta terriblemente borrosa y sólo tú puedes entenderla.

¡¡¡SALUDO A USTED!!! ¡GRACIAS! ¡FELICES FIESTAS!

2 puntos más, querida. 1) ¿se puede quitar el indicador de una ventana separada?

2)añadir una función, si el ATR actual es mayor que el ATR (para el periodo H), entonces el ATR por encima de la barra, ¿se resaltaría en un color diferente? o el valor se escribiría sólo por encima de esta barra?

 
kocunyc89:

¡¡¡SALUDO A USTED!!! ¡GRACIAS! ¡FELICES FIESTAS!

2 puntos más, querida. 1) ¿Se puede quitar el indicador de una ventana separada?

2)añadir una función, si el ATR actual es más que el ATR (para el período H), entonces el ATR por encima de la barra se destacaría en un color diferente? o el valor se escribiría sólo por encima de esta barra?

Oh, querido... Toma, edítalo tú mismo:

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

¿O también quieres que lo haga todo por ti?

 
artmedia70:

Oh, querido... Aquí, lo haces tú mismo:

¿O debería hacerlo yo también por ti?

¡Muchas gracias! ¡Buen hombre!
 
kocunyc89:
¡Muchas gracias! ¡Un hombre amable!
No hay de qué.
 
Buenas noches, ¿es posible hacer que el indicador muestre los datos del buffer en dos ventanas, una parte en el gráfico principal y otra en el sub-fin? Si es así, por favor, indique cómo ...
 
artmedia70:

De nada. Si no es un secreto, ¿por qué necesitas una marca de tiempo que muestre la hora de la última ejecución de tu programa?

Sólo por curiosidad...

Es para el gráfico de ticks offline.



 
Hola.

¿Qué funciones se pueden utilizar para enviar variables entre dos terminales MT4? Si es posible, añada un enlace a la documentación.
 
abeiks¿Qué funciones están disponibles para el envío de variables entre dos terminales MT4?

int Flags=FILE_WRITE+FILE_TXT+FILE_COMMON;

int Info = FileOpen(fName,Flags);

FileWrite(Info,What's Up); En la otra terminal, leer. Cursor en FileOpen y F1 - obtener ayuda