Ребята может кто поможет??? ( ( High + Low ) / 2 ) - 13 EMA_Close Написать Индикатор

 

Вопрос еще актуален?

 
vivik:

Вопрос еще актуален?

Да актуален, приятно, что меня заметили!
 

//+------------------------------------------------------------------+
//|                                                        Delta.mq4 |
//|                           Copyright © 2008, D500                 |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, D500."
 
 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 White
#property indicator_width1 2
 
#property indicator_color2 Red
#property indicator_width2 3
/*
Applied_Price - используемая ценовая константа при расчете ЕМА
 
PRICE_CLOSE 0 Цена закрытия 
PRICE_OPEN 1 Цена открытия 
PRICE_HIGH 2 Максимальная цена 
PRICE_LOW 3 Минимальная цена 
PRICE_MEDIAN 4 Средняя цена, (high+low)/2 
PRICE_TYPICAL 5 Типичная цена, (high+low+close)/3 
PRICE_WEIGHTED 6 Взвешенная цена закрытия, (high+low+close+close)/4 
*/
extern int PeriodMA=2;
extern int Applied_Price=0;
double Buffer1[],Buffer2[];
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
SetIndexBuffer(0,Buffer1);
SetIndexStyle(0,DRAW_LINE);
SetIndexLabel(0,"13EMA ");
 
SetIndexBuffer(1,Buffer2);
SetIndexStyle(1,DRAW_LINE);
SetIndexLabel(1,"UnconstMA ");
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int limit;
   
  double t;
  double v;
  double ma;
  double m;
//----
   if(counted_bars>0)
      counted_bars--;
   
   limit=Bars-counted_bars;
  
   for(int i=0;i<limit;i++)
   {
 
 v=iMA(NULL,0,13,0,1,0,i);
 t=(High[i]+Low[i])/2; 
 m=t-v;
 ma= t-(iMA(NULL,0,PeriodMA,0,1,Applied_Price,i));
   Buffer1[i]=m;
   Buffer2[i]=ma;
   }
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
Вот Ваш индикатор. Что делать с этим кодом, будем надеятся, Вы знаете.


 

Индикотор в нижнем подокне.

Только скажите, что особенного в этом индикаторе с Вашей формулой?

 
d500:

Индикотор в нижнем подокне.

Только скажите, что особенного в этом индикаторе с Вашей формулой?

Основан на Лучах Элдера, удобнее чем существующие в сдешней базе Сила Быков и Сила Медведей
 
Совсем не селен в програмировании, но могли бы Вы пустить в окно индикатора, еще одну линию как на моем рисунке ЕМА с подбираемым периодом?
 
Используется при торговле с 13 ЕМА по Close и RSI(13) - за месяц увеличил количество прибыльных сделок на 17%. Главное работать в направлении 13ЕМА.
 
baz:
Совсем не селен в програмировании, но могли бы Вы пустить в окно индикатора, еще одну линию как на моем рисунке ЕМА с подбираемым периодом?


Я все исправил как Вы просили. Исправленый код можете взять из первого моего поста в этой ветке. Я не стал впихивать новый исправленый код в новое сообщение чтобы не загромождать ветку.

Если бы Вы все сразу сказали как Вам нужно сделать, я бы сделал это сразу. Советую впредь делать нечто похожее на тех. задание. Съэкономите и свое время и время тех, кто не прочь Вам помочь.

Об изменениях в индикаторе:

1- 13ЕМА теперь неизменна по периоду и считается только по закрытию бара.

2-добавлена вторая линия ЕМА, она считается по той же формуле что и 13ЕМА. Её период можно менять как вам угодно. Также Вы можете изменить используемую ценовую константу (переменная Applied_Price ) по умолчанию стоит значение "по цене закрытия".

На Вашем рисунке видно что 2 значения индикатора отображаются по разному. 13ЕМА в виде линии, а 2ЕМА в виде гистограммы.

Я попытался сделать подобное, но получилась какая то чушь. Зато когда оба значения в виде линии, получилась доволно неплохая и более понятная картинка.


.

Вы уж простите мою вольность.

 

Cпасибо большое, а я сам вот сижу и пытаюсь пальцем в небо попасть - сам пробовал в Вашем коде дописать, и вот что получилось:


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

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Aqua
//---- input parameters
extern int PeriodMA=13;
extern int Applied_Price=4;

//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

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

double t;
double v;
double ma;
double m;
double z;
//----
if(counted_bars>0)
counted_bars--;

limit=Bars-counted_bars;

for(int i=0;i<limit;i++)
{

v=iMA(NULL,0,PeriodMA,0,1,Applied_Price,i);
t=(High[i]+Low[i])/2;
m=t-v;
z=iMA(NULL,0,PeriodMA,0,1,m);

Buffer1[i]=m; variable not defined

Buffer2[i]=z; variable not defined

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

 
Так и не смог понять почему не определены переменные??? :)