Хотелось бы сделать простой индикатор.
Вот как это оформить по всем правилам?
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 DodgerBlue
#property indicator_color2 Red
#property indicator_width1 1
#property indicator_width2 1
extern int k=5,s=3,l=20;
extern color txtColor=Yellow;
int d=3;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,1);
SetIndexArrow(0,241);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexEmptyValue(0,0.0);
SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,1);
SetIndexArrow(1,242);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexEmptyValue(1,0.0);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
for(int i=0;i<ObjectsTotal();i++){
if(StringFind(ObjectName(i),"txt_",0)==0){
ObjectDelete(ObjectName(i));
i--;
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
string on;
int limit;
int counted_bars=IndicatorCounted(); // определим количество просчитаных баров
у индикатора
if(counted_bars>0){
counted_bars--;
}
limit=Bars-counted_bars; // определяем границу до которой рассчитываем
значения индикатора
for(int i=0;i<limit;i++){
double mc=iStochastic(NULL,0,k,d,s,0,0,MODE_MAIN, i);
double mp=iStochastic(NULL,0,k,d,s,0,0,MODE_MAIN, i+1);
ExtMapBuffer1[i]=EMPTY_VALUE;
ExtMapBuffer2[i]=EMPTY_VALUE;
if(mc>l && mp<=l){
ExtMapBuffer1[i]=Low[i]-iATR(NULL, 0, 14,i);
on="txt_"+Time[i];
ObjectDelete(on);
ObjectCreate(on,OBJ_TEXT,0,Time[i], Low[i]-1. 5*iATR(NULL, 0, 14,i));
ObjectSetText(on,DoubleToStr(Close[i], Digits)+" "+TimeToStr(Time[i],
TIME_MINUTES),8,"Arial",txtColor);
}
if(mc<100-l && mp>=100-l){
ExtMapBuffer2[i]=High[i]+iATR(NULL, 0,14,i);
on="txt_"+Time[i];
ObjectDelete(on);
ObjectCreate(on,OBJ_TEXT,0,Time[i], High[i]+2*iATR(NULL, 0,14, i));
ObjectSetText(on,DoubleToStr(Close[i], Digits)+" "+TimeToStr(Time[i],
TIME_MINUTES),8,"Arial",txtColor);
}
}
//----
return(0);
}
Произведение искусства!!!
Работает!! Правда пока непонятно ,что показывает, но всё равно здорово!
Большое спасибо!!
пересечение главной линией уровня 20 снизу вверх и 80 сверху вниз. Переменная l - определяет нижний уровень, верзний расчитывается как 100-l. Остальные переменные k и s - перид k стохатика и его сглаживание.
Integer, как бы решить вопрос по "маленькой" модернизации вашего произведения?
Как сделать, чтобы при прохождении Rsi или Stochstic Oscillator или другим обычным индикатором определённого значения ,на графике выпечатывались бы значение цены в этот момент и время, когда это происходит. По всей истории ессно.Мне кажется это пару строк для того кто умеет.