Рисовать поверх графический объект горизонтальную линию.
Как-то так
CreateHLine ("Bid", 0, Aqua, Bid ) //========================= void CreateHLine (string HLineName, int window, color LineColor, double price ) { ObjectCreate(HLineName, OBJ_HLINE, window, 0, price); ObjectSet(HLineName, OBJPROP_COLOR, LineColor); ObjectSet(HLineName, OBJPROP_PRICE1, price); } //=========================
Делать ли для этого индикатор или можно как-то иначе? Если индикатор, то у меня 3 500 000 баров на минутках. А это 6*8 = 48 * 3 500 000 = байт ... И это только чтобы поменять цвет?
Приведенный код надо вставить в эксперт или индикатор.
Бары тут не причем, линия рисуется как графический объект и с барами никак не связана.
Приветствую.
Тема старая, но все же. Спецы, расскажите подробнее как на графике отобразить отдельную линию цены Bid выбранным цветом?
Копирую приведенный выше код в любой индикатор - выдает ошибку. В программировании еще не силен.
Пытался добавить вот сюда:
//+------------------------------------------------------------------+ //| Custom Moving Average.mq4 | //| Copyright © 2004, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2004, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Red //---- indicator parameters extern int MA_Period=13; extern int MA_Shift=0; extern int MA_Method=0; //---- indicator buffers double ExtMapBuffer[]; //---- int ExtCountedBars=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { int draw_begin; string short_name; //---- drawing settings SetIndexStyle(0,DRAW_LINE); SetIndexShift(0,MA_Shift); IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)); if(MA_Period<2) MA_Period=13; draw_begin=MA_Period-1; //---- indicator short name switch(MA_Method) { case 1 : short_name="EMA("; draw_begin=0; break; case 2 : short_name="SMMA("; break; case 3 : short_name="LWMA("; break; default : MA_Method=0; short_name="SMA("; } IndicatorShortName(short_name+MA_Period+")"); SetIndexDrawBegin(0,draw_begin); //---- indicator buffers mapping SetIndexBuffer(0,ExtMapBuffer); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { if(Bars<=MA_Period) return(0); ExtCountedBars=IndicatorCounted(); //---- check for possible errors if (ExtCountedBars<0) return(-1); //---- last counted bar will be recounted if (ExtCountedBars>0) ExtCountedBars--; //---- switch(MA_Method) { case 0 : sma(); break; case 1 : ema(); break; case 2 : smma(); break; case 3 : lwma(); } //---- done return(0); } //+------------------------------------------------------------------+ //| Simple Moving Average | //+------------------------------------------------------------------+ void sma() { double sum=0; int i,pos=Bars-ExtCountedBars-1; //---- initial accumulation if(pos<MA_Period) pos=MA_Period; for(i=1;i<MA_Period;i++,pos--) sum+=Close[pos]; //---- main calculation loop while(pos>=0) { sum+=Close[pos]; ExtMapBuffer[pos]=sum/MA_Period; sum-=Close[pos+MA_Period-1]; pos--; } //---- zero initial bars if(ExtCountedBars<1) for(i=1;i<MA_Period;i++) ExtMapBuffer[Bars-i]=0; } //+------------------------------------------------------------------+ //| Exponential Moving Average | //+------------------------------------------------------------------+ void ema() { double pr=2.0/(MA_Period+1); int pos=Bars-2; if(ExtCountedBars>2) pos=Bars-ExtCountedBars-1; //---- main calculation loop while(pos>=0) { if(pos==Bars-2) ExtMapBuffer[pos+1]=Close[pos+1]; ExtMapBuffer[pos]=Close[pos]*pr+ExtMapBuffer[pos+1]*(1-pr); pos--; } } //+------------------------------------------------------------------+ //| Smoothed Moving Average | //+------------------------------------------------------------------+ void smma() { double sum=0; int i,k,pos=Bars-ExtCountedBars+1; //---- main calculation loop pos=Bars-MA_Period; if(pos>Bars-ExtCountedBars) pos=Bars-ExtCountedBars; while(pos>=0) { if(pos==Bars-MA_Period) { //---- initial accumulation for(i=0,k=pos;i<MA_Period;i++,k++) { sum+=Close[k]; //---- zero initial bars ExtMapBuffer[k]=0; } } else sum=ExtMapBuffer[pos+1]*(MA_Period-1)+Close[pos]; ExtMapBuffer[pos]=sum/MA_Period; pos--; } } //+------------------------------------------------------------------+ //| Linear Weighted Moving Average | //+------------------------------------------------------------------+ void lwma() { double sum=0.0,lsum=0.0; double price; int i,weight=0,pos=Bars-ExtCountedBars-1; //---- initial accumulation if(pos<MA_Period) pos=MA_Period; for(i=1;i<=MA_Period;i++,pos--) { price=Close[pos]; sum+=price*i; lsum+=price; weight+=i; } //---- main calculation loop pos++; i=pos+MA_Period; while(pos>=0) { ExtMapBuffer[pos]=sum/weight; if(pos==0) break; pos--; i--; price=Close[pos]; sum=sum-lsum+price*MA_Period; lsum-=Close[i]; lsum+=price; } //---- zero initial bars if(ExtCountedBars<1) for(i=1;i<MA_Period;i++) ExtMapBuffer[Bars-i]=0; } //+------------------------------------------------------------------+
Заранее благодарен
С ув. Sergey
Чего проще, позаимствуем функцию у KimIVа, и готов индикатор:
#property copyright "Copyright 2013, Mikhail <Sepulca> Kozhemyako" #property link "ua3xcm@obninsk.ru" #property indicator_chart_window extern color Colour=Yellow; int init(){return(0);} int deinit(){return(0);} int start(){ SetTLine(Colour,WindowExpertName()+"BidLine",Time[Bars-1],Bid,0,Bid,true,0,1); return(0); } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 12.10.2007 | //| Описание : Установка объекта OBJ_TREND трендовая линия | //+----------------------------------------------------------------------------+ //| Параметры: | //| cl - цвет линии | //| nm - наименование ( "" - время открытия текущего бара) | //| t1 - время открытия бара ( 0 - Time[10] | //| p1 - ценовой уровень ( 0 - Low[10]) | //| t2 - время открытия бара ( 0 - текущий бар) | //| p2 - ценовой уровень ( 0 - Bid) | //| ry - луч (False - по умолчанию) | //| st - стиль линии ( 0 - простая линия) | //| wd - ширина линии ( 1 - по умолчанию) | //+----------------------------------------------------------------------------+ void SetTLine(color cl, string nm="",datetime t1=0, double p1=0, datetime t2=0, double p2=0,bool ry=False, int st=0, int wd=1) { if (nm=="") nm=DoubleToStr(Time[0], 0); if (t1<=0) t1=Time[10]; if (p1<=0) p1=Low[10]; if (t2<=0) t2=Time[0]; if (p2<=0) p2=Bid; if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TREND, 0, 0,0, 0,0); ObjectSet(nm, OBJPROP_TIME1 , t1); ObjectSet(nm, OBJPROP_PRICE1, p1); ObjectSet(nm, OBJPROP_TIME2 , t2); ObjectSet(nm, OBJPROP_PRICE2, p2); ObjectSet(nm, OBJPROP_COLOR , cl); ObjectSet(nm, OBJPROP_RAY , ry); ObjectSet(nm, OBJPROP_STYLE , st); ObjectSet(nm, OBJPROP_WIDTH , wd); }
Рисовать поверх графический объект горизонтальную линию.
Как-то так
Что за танцы с бубном... Проще всего: на выбранном чарте F8 (свойства), на вкладке ЦВЕТА выбираем нужный цвет для параметра СЕТКА, а на вкладке ОБЩИЕ снимаем флажок ПОКАЗЫВАТЬ СЕТКУ.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования