• Добро пожаловать на инвестиционный форум!

    Во всем многообразии инвестиций трудно разобраться. MMGP станет вашим надежным помощником и путеводителем в мире инвестиций. Только самые последние тренды, передовые технологии и новые возможности. 400 тысяч пользователей уже выбрали нас. Самые актуальные новости, проверенные стратегии и способы заработка. Сюда люди приходят поделиться своим опытом, найти и обсудить новые перспективы. 16 миллионов сообщений, оставленных нашими пользователями, содержат их бесценный опыт и знания. Присоединяйтесь и вы!

    Впрочем, для начала надо зарегистрироваться!
  • 🐑 Моисей водил бесплатно. А мы платим, хотя тоже планируем работать 40 лет! Принимай участие в партнеской программе MMGP
  • 📝 Знаешь буквы и умеешь их компоновать? Платим. Дорого. Бессрочная акция от MMGP: "ОПЛАТА ЗА СООБЩЕНИЯ"

Ищу индикатор размера свечи - Страница 2

Регистрация
10.04.2011
Сообщения
2,217
Реакции
1,182
Поинты
0.000
Владислав Сергее..., а можете изменить индикатор Bar Value так, чтобы он выдавал алерт сразу как только тело достигнет нужного размера, а не по закрытию? Или, если такой уже есть, дать ссылку.
Заранее спасибо
Здравствуйте. Давайте я лучше изменю код своего предыдущего примера (не люблю "потрошить" чужое). Это будет полезно, в том числе, и в качестве изучения MQL. Индикатор будет выдавать alert при достижении баром требуемого размера (в пунктах):
PHP:
//+------------------------------------------------------------------+ 
//|                                 candle_size_for_Retrade_mmgp.mq4 | 
//|                                 Vlad Sergeev aka moneyinnetwork  | 
//+------------------------------------------------------------------+ 
#property copyright "Vlad Sergeev" 
#property version   "2.00" 
#property strict 
#property indicator_chart_window 

input int      TextSize = 10; //размер шрифта 
input string   FontName = "Verdana"; //наименование шрифта 
input color    TextColor = clrWhite; //цвет текста 
input int      PosX = 0;  //координата текста по x 
input int      PosY = 50; //координата текста по у 
input int      Max_Bar = 20; //размер бара при котором выдается Alert

int OnInit() 
{ 
   return(INIT_SUCCEEDED); 
} 

void OnDeinit(const int reason) 
{ 
   if ( ObjectFind ("candlesizeXX") >=0 )   { 
             ObjectDelete("candlesizeXX"); 
   } 
} 

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[]) 
{ 
   double bar_size = (high[0]-low[0]+Point)/Point;
   if ( ObjectFind ("candlesizeXX") >=0 )   { 
             ObjectDelete("candlesizeXX"); 
      } 
      ObjectCreate ("candlesizeXX", OBJ_LABEL, 0, 0, 0); 
      ObjectSet ("candlesizeXX", OBJPROP_ANGLE, 0); 
      ObjectSet("candlesizeXX", OBJPROP_CORNER, 0); 
      ObjectSet("candlesizeXX", OBJPROP_BACK, FALSE); 
      ObjectSet("candlesizeXX", OBJPROP_XDISTANCE, PosX); 
      ObjectSet("candlesizeXX", OBJPROP_YDISTANCE, PosY); 
      ObjectSetText ( "candlesizeXX",  
                      "Свеча: "+DoubleToStr(bar_size, 0),  
                      TextSize,  
                      FontName,  
                      TextColor 
                     ); 
   if ( bar_size >= Max_Bar) {  //размер бара достиг заданного уровня? 
      Alert("Размер бара достиг уровня ", Max_Bar, "пунктов!");   //выводим Alert
   }
   return(rates_total); 
}
 
Регистрация
10.04.2011
Сообщения
2,217
Реакции
1,182
Поинты
0.000
Finansello, там в коде идет расчет не размера тела свечи, а полный размер свечи. Если требуется именно размер тела, то вот эту строку:
PHP:
double bar_size = (high[0]-low[0]+Point)/Point;
следует заменить вот таким вариантом:
PHP:
double bar_size = MathAbs(close[0]-open[0])/Point;
А вообще вот улучшенный код, который выдает алерт для каждой новой свечи только 1 раз, а не на каждом ценовом тике, как ранее:
PHP:
//+------------------------------------------------------------------+ 
//|                                              body_size_alert.mq4 | 
//|                                 Vlad Sergeev aka moneyinnetwork  | 
//+------------------------------------------------------------------+ 
#property copyright "Vlad Sergeev" 
#property link "http://moneyinnetwork.ru" 
#property version   "4.00" 
#property strict 
#property indicator_chart_window 

input int      TextSize = 10; //размер шрифта 
input string   FontName = "Verdana"; //наименование шрифта 
input color    TextColor = clrWhite; //цвет текста 
input int      PosX = 0;  //координата текста по x 
input int      PosY = 50; //координата текста по у 
input int      Max_Bar = 20; //размер бара при котором выдается Alert
bool  no_alert;
datetime time_old;

int OnInit() 
{ 
   no_alert = false;
   time_old = 0;
   return(INIT_SUCCEEDED); 
} 

void OnDeinit(const int reason) 
{ 
   if ( ObjectFind ("candlesizeXX") >=0 )   { 
             ObjectDelete("candlesizeXX"); 
   } 
} 

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[]) 
{ 
   double bar_size = MathAbs(close[0]-open[0])/Point;
   if ( ObjectFind ("candlesizeXX") >=0 )   { 
             ObjectDelete("candlesizeXX"); 
      } 
      ObjectCreate ("candlesizeXX", OBJ_LABEL, 0, 0, 0); 
      ObjectSet ("candlesizeXX", OBJPROP_ANGLE, 0); 
      ObjectSet("candlesizeXX", OBJPROP_CORNER, 0); 
      ObjectSet("candlesizeXX", OBJPROP_BACK, FALSE); 
      ObjectSet("candlesizeXX", OBJPROP_XDISTANCE, PosX); 
      ObjectSet("candlesizeXX", OBJPROP_YDISTANCE, PosY); 
      ObjectSetText ( "candlesizeXX",  
                      "Размер тела текущей свечи: "+DoubleToStr(bar_size, 0)+" пунктов",  
                      TextSize,  
                      FontName,  
                      TextColor 
                     ); 
   if ( time_old != time[0] )  {
      no_alert = false;
      time_old = time[0];
   }
   if ( bar_size > Max_Bar && !no_alert ) {
      Alert("Размер тела свечи превысил заданный уровень в ", Max_Bar, " пунктов!");   
      no_alert = true;
   }
   return(rates_total); 
}
 

Aleks132016

Интересующийся
Регистрация
10.12.2016
Сообщения
6
Реакции
0
Поинты
0.000
Здравствуйте!!
А можно Вас попросить сделать версию Вашего индикатора, который помимо определения размера последней свечи (от хая до лоу) мог бы сопоставлять также её размеры с размерами предыдущих, скажем, 10 свечей (или больше, если надо пользователю) и показывал это значение словами "широкий", "средний" или "узкий" при наведении мышки на свечу, чтобы не захламлять график?
Буду очень признателен!!!
 
Регистрация
10.04.2011
Сообщения
2,217
Реакции
1,182
Поинты
0.000
Здравствуйте!!
А можно Вас попросить сделать версию Вашего индикатора, который помимо определения размера последней свечи (от хая до лоу) мог бы сопоставлять также её размеры с размерами предыдущих, скажем, 10 свечей (или больше, если надо пользователю) и показывал это значение словами "широкий", "средний" или "узкий" при наведении мышки на свечу, чтобы не захламлять график?
Буду очень признателен!!!

Здравствуйте. Я бы с удовольствием переделывал все и подо всех, если бы только этим с утра и до вечера занимался и не делал бы более ничего. Однако, у меня, к счастью, есть свои интересы, дела и пр. Это первое.
Второе. Я вижу, что на нашем форуме активность данного раздела (программирование, индикаторы, советники) форекс тематики угасла и снисходит на нет, по-сравнению, скажем, с годами прошлыми, а тянуть этот раздел (поддерживать "дохлую" дискуссию) лично у меня желания нет. Сейчас народ тусит все более в новостях, что лично для меня весьма странно (ну, не странно, конечно, поинты всему виной). Копипаст популярнее раздела с уникальными текстами и "программингом". Странно, правда.
Если интересуют разработки "под Вас", то обращайтесь в личку: будет время сделаю, естественно, не бесплатно. :l-1no:
 
Последнее редактирование:

Aleks132016

Интересующийся
Регистрация
10.12.2016
Сообщения
6
Реакции
0
Поинты
0.000
Здравстуйте.
Благодарю за Ваш ответ!
К сожалению, не могу написать Вам в личку, т.к. при попытке отправить письмо мне написали, что писать в личку можно при 5 сообщениях на форуме, а у меня только 1.
Есть еще варианты связаться с Вами, чтобы обговорить мой вопрос?
 

Aleks132016

Интересующийся
Регистрация
10.12.2016
Сообщения
6
Реакции
0
Поинты
0.000
Благодарю Владислава!!!
Индикатор получился как и требовалось.
Все четко по заказанным мною параметрам!
 

andrejka217

Новичок
Регистрация
12.03.2017
Сообщения
1
Реакции
0
Поинты
0.000
Добрый день ! Влад будь другом -подскажи как запустить этот индикатор с алертом ?
 
Регистрация
10.04.2011
Сообщения
2,217
Реакции
1,182
Поинты
0.000
Влад будь другом -подскажи как запустить этот индикатор с алертом ?
Как и обычно. Взять файл индикатора, "положить" его в папку терминала Indicators и установить на график нужного инструмента.
 

Вложения

  • candle_size4.zip
    1.2 KB · Просмотры: 207
Сверху Снизу