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

 
int start()
  {
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(Period() > 240)  return(-1);

int LastPrevDay = iBars(Symbol(), PERIOD_D1);
int barnH= iBars(Symbol(),PERIOD_H1);

for (int i = LastPrevDay-1; i >= 0; i--)
{
datetime NowDay = iTime(Symbol(), PERIOD_D1, i);
int PrevDay = iBarShift(Symbol(), PERIOD_D1, NowDay);
datetime x_time= StrToTime(TimeToStr(NowDay, TIME_DATE)+" "+shift_time); 
int x_shift= iBarShift(Symbol(),PERIOD_H1,x_time);
double CL= iClose(Symbol(),PERIOD_H1,x_shift);

int LastDay = iBarShift(Symbol(), PERIOD_D1,iTime(Symbol(), PERIOD_D1, i))-1;
if(LastDay>0)   // тут я запутался 
buffer[i]= CL;
}
return(0);

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

ПРОШУ РАЗОБРАТЬСЯ.... я никак(((

 
nlp2311:

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

ПРОШУ РАЗОБРАТЬСЯ.... я никак(((

Ну вот допустим Вам нужно в 5 часов взять мувинг периодом, длительностью в 4 часа на любом таймфрейме, естественно, не на дневках, а поменьше. Допустим начиная с часовок и меньше.

И прочертить его до 5-ти часов следующего дня. Вот как это делается.

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
#property indicator_width1 2
//==============================
extern int    hour = 5;
extern int    hrma = 4;
//==============================
double fx[];
double mai;
int p,hr,hrp;
//************************************************************
int init()  
{   
   SetIndexBuffer(0,fx);
   
   p=hrma*60/Period(); // пересчет периода мувинга на любой таймфрейм
   
   return(0);
}
//************************************************************
int start()
{
   int cbi=Bars-IndicatorCounted()-1; if (cbi<0) return(-1);
   if (cbi==1) cbi--;
   if (cbi>1) cbi=Bars-p-1;
   //-------------------------------
   for(int i=cbi; i>=0; i--)
   {
      hrp=TimeHour(Time[i+1]); 
      hr=TimeHour(Time[i]);
      
      if (hr==hour && hrp!=hr) mai=iMA(NULL,0,p,0,0,0,i); // сам простой мувинг, в момент, когда час равен нашему и не неравен на предыдущем баре
      
      fx[i]=mai; // просто приравнивание индикаторного буффера к глобальной переменной 
   }
  
   return(0);
}
//***************************************************************
 

Да сделал я, тот же ответ... что с

ti=Time[i]; // время текущего бара
      
      tiip=tii; // предыдущее состояние времени
      tii=(ti-dth)/dtd*dtd;// время начала суток сдвинутое на нужный нам час
      
      if (tiip!=tii)

НО РЕЗУЛЬТАТ ТО НЕ ВЕРНЫЙ!!!!!!!!!!!!!!! Взял пример из пивота через

if(TimeDay(Time[i]) != TimeDay(Time[i+1]))
Общий вид такой

int start()
  {
double LastHigh,LastLow;
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(Period() > 240)  return(-1);

int LastPrevDay = iBars(Symbol(), PERIOD_D1);
int barnH= iBars(Symbol(),PERIOD_H1);

for (int i = LastPrevDay-1; i >= 0; i--)
{
datetime NowDay = iTime(Symbol(), PERIOD_D1, i);
int PrevDay = iBarShift(Symbol(), PERIOD_D1, NowDay);
datetime LastD =  iTime(Symbol(), PERIOD_D1, i+1);
int LastDay = iBarShift(Symbol(), PERIOD_D1, LastD);

if(TimeDay(Time[i]) != TimeDay(Time[i+1]))
{ 
datetime x_time= StrToTime(TimeToStr(NowDay, TIME_DATE)+" "+shift_time); 
int x_shift= iBarShift(Symbol(),PERIOD_H1,x_time);
double CL= iClose(Symbol(),PERIOD_H1,x_shift);
}

buffer[i]= CL;
}

return(0);
}

ВСЕРАВНО ЭТО НЕ ПРАВИЛЬНЫЙ РЕЗУЛЬТАТ.

ЗАДАЧА ПРОСТАЯ пустить линию КАК пивот ровную, но не по пиватному уровню, а от значения некоторого часа. И все!!! А я парюсь и не понимаю как...ВЫРАВНИТЬ линию от Х часа до Time[0] !!!!!!!!!!!!!!!!

 
nlp2311:

Да сделал я, тот же ответ... что с

НО РЕЗУЛЬТАТ ТО НЕ ВЕРНЫЙ!!!!!!!!!!!!!!! Взял пример из пивота через

Общий вид такой

ВСЕРАВНО ЭТО НЕ ПРАВИЛЬНЫЙ РЕЗУЛЬТАТ.

ЗАДАЧА ПРОСТАЯ пустить линию КАК пивот ровную, но не по пиватному уровню, а от значения некоторого часа. И все!!! А я парюсь и не понимаю как...ВЫРАВНИТЬ линию от Х часа до Time[0] !!!!!!!!!!!!!!!!

Ну вот я там написал пример попроще.

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

for(int i=cbi; i>=0; i--)
{
hrp=TimeHour(Time[i+1]);
hr=TimeHour(Time[i]);

if (hr==hour && hrp!=hr) x=то что нужно...

fx[i]=x; // просто приравнивание индикаторного буффера к глобальной переменной
}

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

Вот к примеру суточные максимумы в 5 часов. Так же можно поступить и со всеми другими уровнями. Скопируйте код в пустой индикатор, откомпилируйте и посмотрите, я думаю это примерно то что нужно.

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

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
#property indicator_width1 2
//==============================
extern int    hour = 5;
extern int    hrma = 24;
//==============================
double fx[];
double hm;
int p,hr,hrp;
//************************************************************
int init()  
{   
   SetIndexBuffer(0,fx); SetIndexEmptyValue(0,EMPTY); 
   
   p=hrma*60/Period();
   
   return(0);
}
//************************************************************
int start()
{
   int cbi=Bars-IndicatorCounted()-1; if (cbi<0) return(-1);
   if (cbi==1) cbi--;
   if (cbi>1) cbi=Bars-p-1;
   //-------------------------------
   for(int i=cbi; i>=0; i--)
   {
      hrp=TimeHour(Time[i+1]); 
      hr=TimeHour(Time[i]);
      
      if (hr==hour && hrp!=hr) 
      {
         fx[i+1]=EMPTY;
         hm=High[iHighest(NULL,0,MODE_HIGH,p,i+1)];
      }
      
      fx[i]=hm; 
   }
  
   return(0);
}
//***************************************************************
 
Привет всем. А кто как добавляет индикаторы на график? Тоесть есть советник, в нем расчитывается некое значение скажем iMA. Как кто рисует индикатор на графике? Я так понимаю, через спец. функцию или "ручками" через трендлайн? Нет ли способа попроще, чтобы отображался индикатор с параметрами из советника?
 
Pyro:
Привет всем. А кто как добавляет индикаторы на график? Тоесть есть советник, в нем расчитывается некое значение скажем iMA. Как кто рисует индикатор на графике? Я так понимаю, через спец. функцию или "ручками" через трендлайн? Нет ли способа попроще, чтобы отображался индикатор с параметрами из советника?

не встречал, может кто и написал поищите на форуме отображение буферов через трендлайн.

или сами напишите, там ничего сложного нет.(если очн надо в л.с.)

 
Pyro:
Привет всем. А кто как добавляет индикаторы на график? Тоесть есть советник, в нем расчитывается некое значение скажем iMA. Как кто рисует индикатор на графике? Я так понимаю, через спец. функцию или "ручками" через трендлайн? Нет ли способа попроще, чтобы отображался индикатор с параметрами из советника?


Если эксперт подвешан на график и внутри его считается что-то, то чтобы увидеть что, нужно сделать индикатор с точно такой же функцией и установить те же параметры, что и в эксперте, и набросить на график. Или если это стандартная МТ-шная функция, типа мувинга, то тоже набросить на грфик и установить те же параметры что и в эксперте. Сам эксперт не вызывает отрисовку индикаторов на графике. Только в тестере после тестирвания отрисовывает. А во время торговли нет. Есть еще один способ, но геморный, - это рисовать объектами, типа черточками ObjectCreate(name+Time[0],OBJ_ARROW,0,Time[0],price); ObjectSet(name+Time[0],OBJPROP_ARROWCODE,4); или отрезками трендлайн, но тогда нужно еще запоминать состояние функции на предыдущем баре. Но это когда индикатор невозможно поставить, например нужно отрисовывать что-нибудь по Аскам, а МТ же масссив асков не хранит, или какой-нибудь синтетик из двух пар. Вот и приходится извращаться для контроля.

Ну можно еще сделать темплейт (tpl) на который навесить что нужно. Но чисто практически все-таки лучше сделать кастомный индикатор, и выставлять в ручную и записать новый профиль и когда нужно торговать, просто вызывать соответствующий профиль. Вообщем техника на грани фантастики.

 
Вручную накидывать больно муторно - если параметры постоянно менять в советнике. Ладно, спасибо коллеги, теперь есть определенность.
 
Через GV передавать из советника в индикатор.
 

1) Делайте шаблоны с предустановленными параметрами советника и и индикаторов

2) Передавайте параметры в индикаторы при помощи GV

3) вызывайте индикаторы на чарт из советника при помощи WINAPI

Я предпочитаю рисовать из советника графику индикатора через Объект Arrow