Просьба помощи в написании простого индикатора

 

Не силен я в програмировании, но очень хочется на график прилепить 1 простой индикатор.

Цель индикатора нарисовать 3 линии:

1. максимум за последние 10 торговых дней

2. минимум за последние 10 торговых дней

3. средняя между 1 и 2 линией.

И неплохо бы еще число в уголочке = среднему значению дневной свечки (МАКС-МИН) за 25 дней.

Думаю знающим, умеющим людям такое написать - 5 минут и если кто потратит немного времени и создаст такой индикатор, тому огромное спасибо.

 
Период сглаживние поставите равным 1.
Файлы:
ipchs.zip  2 kb
 
Integer писал(а) >>
Период сглаживние поставите равным 1.

Спасибо.

Только есть вопрос: можно ли сделать так, что бы линия не была кривой? Просто горизонтальная линия, обозначающая 10 дневный минимум или максимум на данный момент. Просто изгибы этой линии несут ненужную инфу и загромождают график.

 
BuzmakovIV писал(а) >>

Спасибо.

Только есть вопрос: можно ли сделать так, что бы линия не была кривой? Просто горизонтальная линия, обозначающая 10 дневный минимум или максимум на данный момент. Просто изгибы этой линии несут ненужную инфу и загромождают график.

Зато можно историю поизучать. Если нет интереса к изучению истории, надо полагать вы уже мастер трединга! Со всеми вытекающими последствиями. Готового такого индикатора у меня нет.

 
Integer писал(а) >>

Зато можно историю поизучать. Если нет интереса к изучению истории, надо полагать вы уже мастер трединга! Со всеми вытекающими последствиями. Готового такого индикатора у меня нет.

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

 
Еще есть идея, можно не индикатор, а скрипт. Дейсвия: найти линию мин - удалить, найти линию макс - удалить, найти линию сред - удалить. Нарисовать горизонтальную линию макс с ценой равной макс-10, нарисовать линию мин с ценой равной мин-10, нарисовать линию сред с ценой равной - (макс+мин)/2
 

//+------------------------------------------------------------------+
//| ma.mq4 |
//| Copyright © 2009, MetaQuotes Software Corp. |
//| https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link "https://www.metaquotes.net/"

#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+

ObjectSet("MAX", 6, Yellow);
ObjectSet("MIN", 6, Yellow);
ObjectSet("SRD", 6, Yellow);
ObjectSet("SRD", 7, 2);

int init()
{
//---- indicators

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectDelete("MAX");
ObjectDelete("MIN");
ObjectDelete("SRD");

double h = 1;
double minimum1 = iLow(NULL, PERIOD_D1, h);
double maximum1 = iHigh(NULL, PERIOD_D1, h);

for(; h < 11; h ++)

{

double minimum = iLow(NULL, PERIOD_D1, h);
double maximum = iHigh(NULL, PERIOD_D1, h);

if (minimum < minimum1) minimum1 = minimum;
if (maximum > maximum1) maximum1 = maximum;

}

//----
ObjectCreate("MAX", OBJ_HLINE, 0, 0, maximum1);
ObjectCreate("MIN", OBJ_HLINE, 0, 0, minimum1);
ObjectCreate("SRD", OBJ_HLINE, 0, 0, (minimum1 + maximum1)/2);

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
//----

//----
return(0);
}
//+------------------------------------------------------------------+

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

 

Есть такие вопросы: как сделать чтобы цвета линий запрашивались? как сделать что бы линии появлялись сразу после запуска индикатора, а не при перещелкивании временных интервалов?

 
BuzmakovIV писал(а) >>

что бы линии появлялись сразу после запуска индикатора, а не при перещелкивании временных интервалов?

Достаточно перенести расчетную часть из функции деинит() в функцию старт().

//+------------------------------------------------------------------+
//|                                                           ma.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+


int init()
{
  ObjectSet("MAX", 6, Yellow);
  ObjectSet("MIN", 6, Yellow);
  ObjectSet("SRD", 6, Yellow);
  ObjectSet("SRD", 7, 2);
  return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
ObjectDelete("MAX");
ObjectDelete("MIN");
ObjectDelete("SRD");
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
   ObjectDelete("MAX");
   ObjectDelete("MIN");
   ObjectDelete("SRD");
   double h = 1;
   double minimum1 = iLow(NULL, PERIOD_D1, h);
   double maximum1 = iHigh(NULL, PERIOD_D1, h);
   for(; h < 11; h ++)
   {
      double minimum = iLow(NULL, PERIOD_D1, h);
      double maximum = iHigh(NULL, PERIOD_D1, h);
      if (minimum < minimum1) minimum1 = minimum;
      if (maximum > maximum1) maximum1 = maximum;
  }
  //----
  ObjectCreate("MAX", OBJ_HLINE, 0, 0, maximum1);
  ObjectCreate("MIN", OBJ_HLINE, 0, 0, minimum1);
  ObjectCreate("SRD", OBJ_HLINE, 0, 0, (minimum1 + maximum1)/2);
  //----
  return(0);
}
//+------------------------------------------------------------------+

Что-то примерно так
 

//+------------------------------------------------------------------+
//| ma.mq4 |
//| Copyright © 2009, MetaQuotes Software Corp. |
//| https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link "https://www.metaquotes.net/"

#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+



int init() //
{ //
ObjectSet("MAX", 6, Yellow); //цвет линии MAX желтый
ObjectSet("MIN", 6, Yellow); //цвет линии MIN желтый
ObjectSet("SRD", 6, Yellow); //цвет линии SRD желтый
ObjectSet("SRD", 7, 2); //линия SRD пунктирная
return(0); //
} //
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectDelete("MAX"); //удаляем старую линию
ObjectDelete("MIN"); //удаляем старую линию
ObjectDelete("SRD"); //удаляем старую линию
return(0);
}


//----

//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start() ///
{ ///

double h = 1; //задаем переменную сдвига назад
double minimum1 = iLow(NULL, PERIOD_D1, h); ///задаем начальное мин и макс значение в дневном диапозоне
double maximum1 = iHigh(NULL, PERIOD_D1, h); ///со сдвигом h дней назад(равно 1 сейчас)

for(; h < 11; h ++) //начинаем цикл в 10 шагов (1 шаг 1 день)

{ //начало цикла

double minimum = iLow(NULL, PERIOD_D1, h); //находим мин значение h дней назад
double maximum = iHigh(NULL, PERIOD_D1, h); //находим макс значение h дней назад

if (minimum < minimum1) minimum1 = minimum; //если найденное значение меньше то прировниваем
if (maximum > maximum1) maximum1 = maximum; //если найденное значение больше то прировниваем

} //конец цикла

//----
ObjectCreate("MAX", OBJ_HLINE, 0, 0, maximum1); //рисуем лининию с наименьшим найденным значением
ObjectCreate("MIN", OBJ_HLINE, 0, 0, minimum1); //рисуем лининию с наибольшим найденным значением
ObjectCreate("SRD", OBJ_HLINE, 0, 0, (minimum1 + maximum1)/2); //рисуем среднюю линию

Comment("MIN10=", minimum1," MAX10=", maximum1); //надпись сверху в углу
//---- ///
return(0); ///
} ///
//+------------------------------------------------------------------+

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

Вернее они вначале красные а потом переделываются как надо... интересно почему?

Добавил надписи в углу с цифрами мин и макс за 10 дней

 

//+------------------------------------------------------------------+
//| ma.mq4 |
//| Copyright © 2009, MetaQuotes Software Corp. |
//| https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link "https://www.metaquotes.net/"

#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+



int init() //
{ //

return(0); //
} //
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectDelete("MAX"); //удаляем старую линию
ObjectDelete("MIN"); //удаляем старую линию
ObjectDelete("SRD"); //удаляем старую линию

return(0);
}


//----

//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start() ///
{ ///

double h = 1; //задаем переменную сдвига назад
double minimum1 = iLow(NULL, PERIOD_D1, h); ///задаем начальное мин и макс значение в дневном диапозоне
double maximum1 = iHigh(NULL, PERIOD_D1, h); ///со сдвигом h дней назад(равно 1 сейчас)

for(; h < 11; h ++) //начинаем цикл в 10 шагов (1 шаг 1 день)

{ //начало цикла

double minimum = iLow(NULL, PERIOD_D1, h); //находим мин значение h дней назад
double maximum = iHigh(NULL, PERIOD_D1, h); //находим макс значение h дней назад

if (minimum < minimum1) minimum1 = minimum; //если найденное значение меньше то прировниваем
if (maximum > maximum1) maximum1 = maximum; //если найденное значение больше то прировниваем

} //конец цикла

//----
ObjectCreate("MAX", OBJ_HLINE, 0, 0, maximum1); //рисуем лининию с наименьшим найденным значением
ObjectCreate("MIN", OBJ_HLINE, 0, 0, minimum1); //рисуем лининию с наибольшим найденным значением
ObjectCreate("SRD", OBJ_HLINE, 0, 0, (minimum1 + maximum1)/2); //рисуем среднюю линию
ObjectSet("MAX", 6, Yellow); //цвет линии MAX желтый
ObjectSet("MIN", 6, Yellow); //цвет линии MIN желтый
ObjectSet("SRD", 6, Yellow); //цвет линии SRD желтый
ObjectSet("SRD", 7, 2); //линия SRD пунктирная
Comment("MIN10=", minimum1," MAX10=", maximum1); //надпись сверху в углу

//---- ///
return(0); ///
} ///
//+------------------------------------------------------------------+

Так вроде хорошо, но вопрос как сделать запрос на цвет линий перед тем как включить индикатор? и как задать их по умолчанию определенного цвета?

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