[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 350

 
да. обновлять график принудительно все равно придется самому.
 
smartemiy:

с тем же зацикливанием?

Попробую
 
Serg16:

Помогите пожалуйста решить проблему с ограничением значения shift в iHigh(Symbol(),timeframe,shift), которое ограничивается числом 1000.

iTime(Symbol(),timeframe,1001) дает 1970.01.01 00:00

Никто не поможет, что вариант только один, читать из файла истории? Если только так, то у кого-то есть готовые наработки определения в файле истории необходимой информации.
 
sergeev:

надо не пробел нажимать, а кнопку питания, удерживать в течении 5-10 секунд до исчезания сигнала.

в КВНе среди модераторов, будешь капитаном команды ... Вопрос повторю, может кто ответит: не выключается алерт, после нажатия пробела ... версия терминала последняя 500 ... раньше такого не наблюдалось.
 
А во вкладке "События" меню "Сервис - Настройки" все совсем плохо, однако. Попробуйте воспользоваться :( 
 

Ребята, подскажите пожалуйста. Я уже задавал этот вопрос, но до ума довести код так и не удалось.

Еще раз опишу суть идеи. По индикатору Awesom от низины (ниже 0) до вершины (выше 0) считается объем волны (индикатор Volumes).

Текстовая метка с суммой объема по волне, должна выводиться на график индикатора и просчитываться по всей истории.

У меня получилось вот, что:

рис4 

В чем ошибка?

 

#property  indicator_separate_window
#property  indicator_buffers 2
#property  indicator_color1  Red
#property  indicator_color2  SteelBlue
#property  indicator_width1  2

//---- basic fan indicator parameters

extern bool Show_AOLine_2=true;
extern int SlowEMA3=34;
extern int EMA=3;
extern bool Show_Volume=true;
extern double coaf=0.5;
//---- indicator buffers
double AOBuffer3[];
double ExtMapBuffer1[];


    double VLUP, AO_up,AO_dn;
    double prhgh_e=0, prhgh_s, prlw_e=0, prlw_s;
    datetime tmhgh, tmlw;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   //---- drawing settings
   
  string name_ind = "Awesome_super_volumes";
   IndicatorShortName("Awesome_super_volumes");
   
   
//---- AO_fan line 2 (basic)
   if(Show_AOLine_2 ==true){Show_AOLine_2=DRAW_LINE; }
   else 
    {Show_AOLine_2=DRAW_NONE; }
   SetIndexBuffer(0,AOBuffer3);
   SetIndexStyle(0,Show_AOLine_2);
   SetIndexLabel(0,"basic line");   

   SetIndexBuffer(1,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexLabel(1,"Volume");
   
  //---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Awesome Oscillator                                               |
//+------------------------------------------------------------------+
int start()
  {
  
   int    limit;
   int    counted_bars=IndicatorCounted();
   double prev,current;
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;

   for(int i=0; i<limit; i++)
   {
     
 //---- AO_fan + Volumes
     
AOBuffer3[i]=iMA(NULL,0,EMA,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,SlowEMA3,0,MODE_SMA,PRICE_MEDIAN,i);
if (Show_Volume==true)
{
double nSum = Volume[i]*Point*coaf;
   if (AOBuffer3[i]<=0)ExtMapBuffer1[i] = nSum;
   if (AOBuffer3[i]>0)ExtMapBuffer1[i] = -nSum;


double Vol_Arr[];
  if (AOBuffer3[i]<=0)Vol_Arr[i]=Volume[i]*Point*coaf;
  if (AOBuffer3[i]>0)Vol_Arr[i] = -Volume[i]*Point*coaf;
}
}

  //-- Поиск High & Time & Min_AO  
  if (AOBuffer3[i]>0)
  {
    
  AO_up = AOBuffer3[i]*0.1+AOBuffer3[i];
  prhgh_s = High[i];
  if (prhgh_s >= prhgh_e) {prhgh_e = prhgh_s; tmhgh = Time[i];}
  //SetText("Awesome_super_volumes"+Close[i], DoubleToStr(VLUP,0), tmhgh, AO_up, Black);
  }   
   
  //-- Поиск Low & Time & Max_AO 
  if (AOBuffer3[i]<0)
  {
  AO_dn = AOBuffer3[i]*0.1+AOBuffer3[i];
  prlw_s = Low[i];
  if (prlw_s > prlw_e) {prlw_e = prlw_s; tmlw = Time[i];}
  //SetText("Awesome_super_volumes"+Close[i], DoubleToStr(VLUP,0), tmlw, AO_dn, Black);
  } 
  
  // -- Пересчет баров от High до Low
  
  if(NewBar())
{ 
int colbr = iBarShift(NULL,0,tmhgh)-iBarShift(NULL,0,tmlw);     
int shift=iBarShift(NULL,0,tmhgh);
 for (i=0; i<=colbr; i++)
{VLUP += MathAbs(iVolume(NULL,0, shift+i));}
}


    
   Comment("Vol_",VLUP,prlw_e,prhgh_e); 
  for(i=0; i<limit; i++)
   {     
SetText("Awesome_super_volumes"+Close[i], DoubleToStr(VLUP,0), tmlw, AO_dn, Black);     
 }
        
//---- done
   return(0);
  }
//+------------------------------------------------------------------+
void SetText(string name, string Vl, datetime t1, double p1, color c)
 {
 // if (ObjectFind(name)!=-1) ObjectDelete(name);
  ObjectCreate(name,OBJ_TEXT,WindowFind("Awesome_super_volumes"),0,0,0,0);
  ObjectSetText(name, Vl, 10, "Times New Roman", c);
  ObjectSet(name, OBJPROP_TIME1 , t1);
  ObjectSet(name, OBJPROP_PRICE1, p1);
  ObjectSet(name, OBJPROP_COLOR, c); 
  }
  
  bool NewBar()
{
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
    return(false);
   }}
 
smartemiy:

1. Ф-я преобразования преобразовует, а изменения переменной в этой ф-ии не изменится в отсутствие тика. TimeToStr(TimeLocal(), TIME_MINUTES) - зависит от тика.

2. А есть идеи как вытащить время из Win32/User32, чтобы не зацыкливать советник?

1. Ни одна из этих функций не зависит от тиков. Только для того чтобы получить возвращаемое значение, надо функцию вызвать. В индикаторе и эксперте это происходит по приходу тика, но это не беда. Можно зациклить эксперт или скрипт. Тогда будет вызов с той частотой, с которой установите.

2. Нет смысла. Будете изобретать тот же TimeLocal().

 
Heroix:

В учебнике что-то не нашел, что значит "&" в формальных параметрах функции. Подскажите, на что это влияет и что это значит?  


https://docs.mql4.com/ru/basis/variables/formal


вторая часть страницы со слов "Существует возможность передавать параметры по ссылке...".  Внимательно рассмотрите там Пример.

 
Быстрый вы, однако. Удалил пост, т.к. сам нашел. Спасибо!
 

Добрый день.

подскажите, как оптимальнее фиксировать пересечение, допустим стохастика:

на первом и третьем баре  сравнивать значения линий сигнал и мэйн или первом и втором ? 

Причина обращения: