Как добавить уровни фибо?

 
Здравствуйте, прошу встроить(или же объяснить как это сделать или же кинуть простой код в котором уже встроены уровни фибо) сюда колонку, через которую в строчку можно было бы прописать % — уровни фибо)

#property copyright "Copyright 2010"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window

input int t1=1;
input int t2=11;
input double p1=1.16;
input double p2=1.15;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutFibo(string name,datetime time1,double price1,datetime time2,double price2)
  {
   ObjectCreate(0,name,OBJ_FIBO,0,time1,price1,time2,price2);
//--- установим цвет
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим стиль линии
   ObjectSetInteger(0,name,OBJPROP_STYLE,0);
//--- установим толщину линии
   ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
//--- успешное выполнение
   return;
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   PutFibo("f1",time[t1],p1,time[t2],p2);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
ares96:
Здравствуйте, прошу встроить(или же объяснить как это сделать или же кинуть простой код в котором уже встроены уровни фибо) сюда колонку, через которую в строчку можно было бы прописать % — уровни фибо)

    ObjectSetString(0,nm,OBJPROP_LEVELTEXT,e,lev[e]); // описание
    ObjectSetDouble(0,nm,OBJPROP_LEVELVALUE,e,lev[e]); // значение
    ObjectSetInteger(0,nm,OBJPROP_LEVELCOLOR,e,lev[e]); // цвет
    ObjectSetInteger(0,nm,OBJPROP_LEVELSTYLE,e,lev[e]); // стиль
    ObjectSetInteger(0,nm,OBJPROP_LEVELWIDTH,e,lev[e]); // толщина

Нужно задать количество уровней фибо, и заполнить их значениями: ObjectSetInteger(0,nm,OBJPROP_LEVELCOLORномер уровня, значение уровня);

 

Так вот-же в документации есть пример

//+------------------------------------------------------------------+
//| Задает количество уровней и их параметры                         |
//+------------------------------------------------------------------+
bool FiboLevelsSet(int             levels,            // количество линий уровня
                   double          &values[],         // значения линий уровня
                   color           &colors[],         // цвет линий уровня
                   ENUM_LINE_STYLE &styles[],         // стиль линий уровня
                   int             &widths[],         // толщина линий уровня
                   const long      chart_ID=0,        // ID графика
                   const string    name="FiboLevels") // имя объекта
  {
//--- проверим размеры массивов
   if(levels!=ArraySize(colors) || levels!=ArraySize(styles) ||
      levels!=ArraySize(widths) || levels!=ArraySize(widths))
     {
      Print(__FUNCTION__,": длина массива не соответствует количеству уровней, ошибка!");
      return(false);
     }
//--- установим количество уровней
   ObjectSetInteger(chart_ID,name,OBJPROP_LEVELS,levels);
//--- установим свойства уровней в цикле
   for(int i=0;i<levels;i++)
     {
      //--- значение уровня
      ObjectSetDouble(chart_ID,name,OBJPROP_LEVELVALUE,i,values[i]);
      //--- цвет уровня
      ObjectSetInteger(chart_ID,name,OBJPROP_LEVELCOLOR,i,colors[i]);
      //--- стиль уровня
      ObjectSetInteger(chart_ID,name,OBJPROP_LEVELSTYLE,i,styles[i]);
      //--- толщина уровня
      ObjectSetInteger(chart_ID,name,OBJPROP_LEVELWIDTH,i,widths[i]);
      //--- описание уровня
      ObjectSetString(chart_ID,name,OBJPROP_LEVELTEXT,i,DoubleToString(100*values[i],1));
     }
//--- успешное выполнение
   return(true);
  }
OBJ_FIBO - Типы объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL4
OBJ_FIBO - Типы объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL4
  • docs.mql4.com
Следующий скрипт создает и перемещает на графике "Уровни Фибоначчи". Для создания и изменения свойств графического объекта написаны специальные функции, которые вы можете использовать "как есть" в своих собственных программах. //| Cоздает "Уровни Фибоначчи" по заданным координатам               |               time1=0,           ...
 
Vitaly Muzichenko:

Нужно задать количество уровней фибо, и заполнить их значениями: ObjectSetInteger(0,nm,OBJPROP_LEVELCOLORномер уровня, значение уровня);

Alexey Viktorov:

Так вот-же в документации есть пример

т.к у меня много уровней фибо, и чтобы не создавать в настройках каждое новое поля, я бы хотел чтобы можно было вывести уровни через 1 строчку, собственно это и есть вопрос, как прописать вывод:
50,75,150,155 и тд в 1 стройке?

Спасибо
 
ares96:
т.к у меня много уровней фибо, и чтобы не создавать в настройках каждое новое поля, я бы хотел чтобы можно было вывести уровни через 1 строчку, собственно это и есть вопрос, как прописать вывод:
50,75,150,155 и тд в 1 стройке?

Спасибо

Создать массив данных, и занести туда руками значения.

Далее, перебирать в цикле, и заполнять значениями с массивов

for(int i=e;e<9;e++) { // в данном случае 9 уровней, и соответственно в массивах по 9 элементов
  ObjectSetString(0,nm,OBJPROP_LEVELTEXT,e,txt[e]); // описание
  ObjectSetDouble(0,nm,OBJPROP_LEVELVALUE,e,val[e]); // значение
  ObjectSetInteger(0,nm,OBJPROP_LEVELCOLOR,e,clr[e]); // цвет
  ObjectSetInteger(0,nm,OBJPROP_LEVELSTYLE,e,stl[e]); // стиль
  ObjectSetInteger(0,nm,OBJPROP_LEVELWIDTH,e,wdt[e]); // толщина
}
 
Vitaly Muzichenko:

Создать массив данных, и занести туда руками значения.

Далее, перебирать в цикле, и заполнять значениями с массивов

Пожалуйста помогите:

нету результата:

вот массив:

double lev[5]={10,20,30,40,70};

вот он в цикле:

void PutFibo(string name,datetime time1,double price1,datetime time2,double price2)
  {
   ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_FIBO,0,time1,price1,time2,price2);
   for(int i=0;i<5;i++) ObjectSetDouble(0,name,OBJPROP_LEVELVALUE,i,lev[i]); 
   return;
  }
 
vebster005:

Пожалуйста помогите:

нету результата:

вот массив:

вот он в цикле:

Пробуйте

#property copyright "Copyright 2010"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots   0

input int t1=1;
input int t2=11;
input double p1=1.16;
input double p2=1.15;

double lev[]={0, 1, 1.3, 1.5, 1.7, 1.9};
string txt[]={"0","100","30","50","70","90"};
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutFibo(string name,datetime time1,double price1,datetime time2,double price2)
  {
   ObjectDelete(0,name);
   if(ObjectFind(0,name)<0) 
    ObjectCreate(0,name,OBJ_FIBO,0,time1,price1,time2,price2);
   int c=ArraySize(lev);
    ObjectSetInteger(0,name,OBJPROP_LEVELS,c);
   for(int i=0;i<c;i++) {
    ObjectSetDouble(0,name,OBJPROP_LEVELVALUE,i,lev[i]);
    ObjectSetString(0,name,OBJPROP_LEVELTEXT,i,txt[i]);
    if(i==2) ObjectSetInteger(0,name,OBJPROP_LEVELCOLOR,i,clrRed);
    else ObjectSetInteger(0,name,OBJPROP_LEVELCOLOR,i,clrAqua);
   }
   return;
  }
//+------------------------------------------------------------------+
//| 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[])
  {
 // ArraySetAsSeries(time,true); MT5
 // ArraySetAsSeries(high,true); MT5
 // ArraySetAsSeries(low,true); MT5
//---
   PutFibo("f1",time[12],high[12],time[31],low[31]);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Vitaly Muzichenko:

Пробуйте

работает Спасибо!!!
но почему у меня не работало, я не могу понять, я уровни писал не 1.9 а 90
хмм

Спасибо еще раз

 
vebster005:

работает Спасибо!!!
но почему у меня не работало, я не могу понять, я уровни писал не 1.9 а 90
хмм

Спасибо еще раз

Обратите внимание на: ObjectSetInteger(0,name,OBJPROP_LEVELS,c);