Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1043

 

Хорошо опишу подробнее. 

Основной индикатор расположен на паре евро доллар. В этом индикаторе происходит вызов индикаторов с других пар золота, индекса доллара, и евроены. Индикатор работает на минутках и случается так что на индексе доллара отсутствуют иногда котировки, допустим на евре есть свеча за 15-тую минуту часа, а на индексе доллара такой свечи нет, индекс замер и не тикает. Потом через какоето время на евре появляется 16 минута и на индексе появляется 16 минута. Вопрос? Как синхронизировать расчёт инидикатора, чтобы он считался только в том случае когда бары на всех вызываемых инструментах совпадали по времени????

Я попробовал вот такую конструкцию

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

 И вроде бы всё классно, однако расчёт происходит только за текущий день, за предыдущие дни сигналов нет. Может быть есть стандартные решения синхронизации символов????

 
nikelodeon:

Хорошо опишу подробнее. 

Основной индикатор расположен на паре евро доллар. В этом индикаторе происходит вызов индикаторов с других пар золота, индекса доллара, и евроены. Индикатор работает на минутках и случается так что на индексе доллара отсутствуют иногда котировки, допустим на евре есть свеча за 15-тую минуту часа, а на индексе доллара такой свечи нет, индекс замер и не тикает. Потом через какоето время на евре появляется 16 минута и на индексе появляется 16 минута. Вопрос? Как синхронизировать расчёт инидикатора, чтобы он считался только в том случае когда бары на всех вызываемых инструментах совпадали по времени????

Я попробовал вот такую конструкцию

 И вроде бы всё классно, однако расчёт происходит только за текущий день, за предыдущие дни сигналов нет. Может быть есть стандартные решения синхронизации символов????

Попробуйте в таймере в цикле SymbolInfoTick() для получения данных по символам. А там уже и синхронизируйте как вам нужно.

Дело в том, что на текущем символе программа запускается лишь с приходом тика по этому символу. Поэтому получить тики с других символов вовремя вы не сможете. А вот в таймере, работающем независимо от тиков, вы сможете получить тики с других символов.

Таймер можно и милисекундным сделать если требуется быстрая реакция на пришедший тик на не своём символе.

 
artmedia70:
А у вас вопрос жутко размыт и понятен лишь вам.

НИЗКИЙ ПОКЛОН ВАМ!!! БЛАГОДАРЮ! С ПРАЗДНИКОМ!

еще 2 момента, уважаемый. 1) можно убрать индикатор с отдельного окна?

2)добавить функцию, если текущий ATR больше ATR (за Н период), то ATR над баром, выделся бы иным цветом? либо писалось бы значение только над этим баром?

 
kocunyc89:

НИЗКИЙ ПОКЛОН ВАМ!!! БЛАГОДАРЮ! С ПРАЗДНИКОМ!

еще 2 момента, уважаемый. 1) можно убрать индикатор с отдельного окна?

2)добавить функцию, если текущий ATR больше ATR (за Н период), то ATR над баром, выделся бы иным цветом? либо писалось бы значение только над этим баром?

Вот же ж... Нате, сами правьте:

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

Или тоже за вас всё сделать?

 
artmedia70:

Вот же ж... Нате, сами правьте:

Или тоже за вас всё сделать?

спасибо большое! добрый человек!
 
kocunyc89:
спасибо большое! добрый человек!
Пожалуйста.
 
Добрый вечер, есть вопрос можно ли в индикаторе сделать отображения данных буферов  в двух окнах, часть на основном графике,  часть в подоконе ? Если да то подскажите пожалуйста как ...
 
artmedia70:

Не за что. Если не секрет, зачем вам метка, показывающая время последнего запуска вашей программы - время в ней меняться не будет.

Просто праздное любопытство...

Это для offline тикового графика.



 
Здравствуйте.

Какими функциями можно отправлять переменные между двумя МТ4 терминалами? Если можно, пожалуйста, добавьте ссылку на документацию.
 
abeiksКакими функциями можно отправлять переменные между двумя МТ4 терминалами?

int       Флаги=FILE_WRITE+FILE_TXT+FILE_COMMON;

int Инфо = FileOpen(fName,Флаги);

FileWrite(Инфо, ТоЧтоНадо);  На другом терминале читаем. Курсор на FileOpen и F1 - получим справку