Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 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 - получим справку