Indicators: XMA - page 2

 
fxxx:

п.с. ну тыб granit77...- и такой индикатор испортил, и два пальца зря ...

Пороговый индикатор покрасить не так просто, этот пятиминутный вариант действительно, тянет не больше чем на два пальца. Кроме того, как и с любым индикатором, стоит внимательнее подходить к выбору параметров. Я не кодер, правил под себя. Сделай лучший вариант, с удовольствием воспользуюсь.


 

параметров, а...? ну или тогда хоть укажи что это такая доработка - или поздравим авторов после неперерисовывающегося XMA с первым перерисовывающимся

п.с. не знаю откуда ты этот кусок доцепил - настоящий Vinin - не перерисовывается

ппс. чужих вариантов полно - но чужой Vinin ненужен- неинтересно; при живых авторах - нужен авторский : ))) интересно, как бы они сделали

 

granit77 писал(а):

Сделай лучший вариант, с удовольствием воспользуюсь.

Ты дОбычу дай, а говорить каждый может... :))

 

забил место шоб еще раз Гранита поругать - пришлось пожертвовать для инд. : (((((

----------

неперерисовывающаяся lsma_nrp, ( Vinin lsma: 3lwma-2sma (LRMA)

цвет:


if (lsma[i] > lsma[i+1]) PlotPoint(i,lsmaua,lsmaub,lsma);
if (lsma[i] < lsma[i+1]) PlotPoint(i,lsmada,lsmadb,lsma);
...

void CleanPoint(int i,double& first[],double& second[])
{
if ((second[i] != EMPTY_VALUE) && (second[i+1] != EMPTY_VALUE))
second[i+1] = EMPTY_VALUE;
else
if ((first[i] != EMPTY_VALUE) && (first[i+1] != EMPTY_VALUE) && (first[i+2] == EMPTY_VALUE))
first[i+1] = EMPTY_VALUE;
}

void PlotPoint(int i,double& first[],double& second[],double& from[])
{
if (first[i+1] == EMPTY_VALUE)
{
if (first[i+2] == EMPTY_VALUE) {
first[i] = from[i];
first[i+1] = from[i+1];
second[i] = EMPTY_VALUE;
}
else {
second[i] = from[i];
second[i+1] = from[i+1];
first[i] = EMPTY_VALUE;
}
}
else
{
first[i] = from[i];
second[i] = EMPTY_VALUE;
}

инд: http://forum.alpari-idc.ru/attachment.php?attachmentid=81797&d=1250730514

http://forum.alpari-idc.ru/showpost.php?p=1482330&postcount=3293

p.s.

granit77 писал(а): Ты дОбычу дай, а говорить каждый может... :))

- не дам

-никто Граниту добычу не давайте - потом начнет требовать еще и часть урожая

 

раз авторы не хотят ... ладно, подпортил твою версию

нужно бы подходить фундаментально (стырить у Младена _nrp или у Эксперта /ru/code/8802 https://www.mql5.com/ru/forum/115618/page3) - но ... : )))))

если хочешь покрути- можт баг какой то вылезет

Xma_col.mq4 инд: http://forum.alpari-idc.ru/attachment.php?attachmentid=81800&d=1250735307 код:

//+------------------------------------------------------------------+
//|                                                          Xma.mq4 |
//|                 Copyright © 2009, XrustSolution. Toys from Vinin.|
//|              http://www.xrust.ucoz.net  http://www.vinin.ucoz.ru |
//|                  xrust@land.ru  xrust@gmail.com  xrust@mksat.net |
//|      Õîòü äàííàÿ ïðîãðàììà è ÿâëÿåòñÿ ñâîáîäíî ðàñïðîñòðàíÿåìîé, |
//|           ïóáëèêàöèÿ åå áåç óêàçàíèÿ íà ïåðâîèñòî÷íèê çàïðåùåíà  |   
//-------------------------------------------------------------------+
//mod col granit http://codebase.mql4.com/ru/5899
#property copyright "#Copyright © 2008, XrustSolution.#"
#property link      "#http://www.xrust.ucoz.net#"
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 Red

extern int period=12;
extern int porog =3;
extern int metod =1;
extern int metod2=1;
extern int prise =0;
//---- buffers
double Signal[];
double Up[];
double Dn[];
//+------------------------------------------------------------------+
void init(){
   SetIndexBuffer(0,Signal);
   SetIndexBuffer(1,Dn);
   SetIndexBuffer(2,Up);
   IndicatorShortName("Xma_color"+period+porog);
return;} 
//+------------------------------------------------------------------+
int start() {
   int limit;
   double tmp1,tmp2;
   int counted_bars=IndicatorCounted();
   int i;
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   for (i = limit;i>=0;i--){
     tmp1=iMA(Symbol(),0,period,0,metod,prise,i);
     tmp2=iMA(Symbol(),0,period,1,metod2,prise,i);
     if(MathAbs(tmp1-tmp2)>=porog*Point)
       Signal[i]=tmp2;
     else
       Signal[i]=Signal[i+1];
                                             Up[i]=EMPTY_VALUE;   Dn[i]=EMPTY_VALUE;
         if (Signal[i]<Signal[i+1])      {  
               if (Dn[i+2]==EMPTY_VALUE)  {  Dn[i]=Signal[i];     Dn[i+1]=Signal[i+1]; }
               else                       {  Up[i]=Signal[i];     Up[i+1]=Signal[i+1]; }
                                         }
          if (Signal[i]==Signal[i+1])  {     Up[i]=Up[i+1];       Dn[i]=Dn[i+1];  }
   }
   return(0);
}
 

Спасибо, покручу. С первого взгляда большой разницы не заметил, по крайней мере на тех инструментах, где работаю. У TheXpert'а и тырить ничего не надо, он свою библиотеку и делал для применения простыми пользователями. Я с этого и начал, но результат не очень понравился, возможно, библиотека не ложится на этот индикатор.

//+------------------------------------------------------------------+
//|                                               XMA_Lib_Sample.mq4 |
//|                                       Copyright © 2009, TheXpert |
//|                                           theforexpert@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, TheXpert"
#property link      "theforexpert@gmail.com"
#include <Indicator_Painting.mqh>
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1  White
#property indicator_color2  Red
#property indicator_color3  Red
extern int period=12;
extern int porog =3;
extern int metod =1;
extern int metod2=1;
extern int prise =0;
// buffers
double Values[];           // Собственно значения
double Growing1[];         // первый буфер роста
double Growing2[];         // второй буфер роста
int DigitsUsed = 5;
int EmptyValueUsed = 0;
int init()
{
   IndicatorBuffers(3);
   // ассоциируем буферы
   SetIndexBuffer(0, Values);
   // из-за особенностей реализации необходимо, чтобы буфер со
   // значениями имел меньший индекс, чем вспомогательные буферы
   SetIndexBuffer(1, Growing1);
   SetIndexBuffer(2, Growing2);
   // задаем настройки для буферов
   SetIndexStyle(0, DRAW_LINE);
   SetIndexStyle(1, DRAW_LINE);
   SetIndexStyle(2, DRAW_LINE);
//------
//---выбор набора входных данных для текущего символа
//------   
   return(0);
}
int start()
{
   int toCount = Bars - IndicatorCounted();
   // Считаем значения
   for (int i = toCount - 1; i >=0; i--)
   {
      Values[i] = NormalizeDouble(iCustom(Symbol(), 0,"Xma", period,porog,metod,metod2,0, i), DigitsUsed);
   }
   // Метим уровни роста -- уровни падения автоматически выделятся сами
   MarkGrowing(Values, Growing1, Growing2, toCount - 1, 0, EmptyValueUsed);
   return(0);
}
 
granit77:

Я с этого и начал, но результат не очень понравился, возможно, библиотека не ложится на этот индикатор.

Так и есть. Здесь по хорошему надо маркировать оба направления. А такой функции у меня нетуть, а та, которая есть, красит только вверх.

Допишу.

________

Взять можно тут. Теперь можно так:

//+------------------------------------------------------------------+
//|                                               XMA_Lib_Sample.mq4 |
//+------------------------------------------------------------------+
#include <Indicator_Painting.mqh>
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1  White
#property indicator_color2  Blue
#property indicator_color3  Blue
#property indicator_color4  Red
#property indicator_color5  Red
extern int period=12;
extern int porog =3;
extern int metod =1;
extern int metod2=1;
extern int prise =0;
// buffers
double Values[];           // Собственно значения
double Growing1[];         // первый буфер роста
double Growing2[];         // второй буфер роста
double Reducing1[];        // первый буфер падения
double Reducing2[];        // второй буфер падения
int DigitsUsed = 5;
int EmptyValueUsed = 0;
int init()
{
   // ассоциируем буферы
   SetIndexBuffer(0, Values);
   // из-за особенностей реализации необходимо, чтобы буфер со
   // значениями имел меньший индекс, чем вспомогательные буферы
   SetIndexBuffer(1, Growing1);
   SetIndexBuffer(2, Growing2);
   SetIndexBuffer(3, Reducing1);
   SetIndexBuffer(4, Reducing2);
   return(0);
}
int start()
{
   int toCount = Bars - IndicatorCounted();
   // Считаем значения
   for (int i = toCount - 1; i >=0; i--)
   {
      Values[i] = NormalizeDouble(iCustom(Symbol(), 0,"Xma", period,porog,metod,metod2,0, i), DigitsUsed);
   }
   MarkGrowing(Values, Growing1, Growing2, toCount - 1, 0, EmptyValueUsed);
   MarkReducing(Values, Reducing1, Reducing2, toCount - 1, 0, EmptyValueUsed);
   
   return(0);
}
 

библиотеки -хорошо, но на каком МТ установишь, на каком -нет... потом всегда заморочек куча "а че у меня не работает !"... - самостоятельный инд. удобнее

 

Цветной вариант :

//+------------------------------------------------------------------+
//|                                                 Xma_Coloured.mq4 |
//|                 Copyright © 2009, XrustSolution. Toys from Vinin.|
//|              http://www.xrust.ucoz.net  http://www.vinin.ucoz.ru |
//|                  xrust@land.ru  xrust@gmail.com  xrust@mksat.net |
//|      Хоть данная программа и является свободно распространяемой, |
//|           публикация ее без указания на первоисточник запрещена  |   
//-------------------------------------------------------------------+
#property copyright "#Copyright © 2008, XrustSolution.#"
#property link      "#http://www.xrust.ucoz.net#"
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color2 Yellow
#property indicator_color3 Blue
#property indicator_color4 Red
extern int period=12;
extern int porog =3;
extern int metod =1;
extern int metod2=1;
extern int prise =0;
//---- buffers
double Signal[];
double Up[];
double Dn[];
double Fl[];
//+------------------------------------------------------------------+
void init(){
   SetIndexStyle(0,DRAW_NONE);
   SetIndexDrawBegin(0,0);
   SetIndexBuffer(0,Signal);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexDrawBegin(1,0);
   SetIndexBuffer(1,Fl);   
   SetIndexStyle(2,DRAW_LINE);
   SetIndexDrawBegin(2,0);
   SetIndexBuffer(2,Up);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexDrawBegin(3,0);
   SetIndexBuffer(3,Dn);      
   IndicatorShortName("Xma"+period+porog);
return;} 
//+------------------------------------------------------------------+
int start() {
   int limit;
   double tmp1,tmp2;
   int counted_bars=IndicatorCounted();
   int i;
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   for (i = limit;i>=0;i--){
     tmp1=iMA(Symbol(),0,period,0,metod,prise,i);
     tmp2=iMA(Symbol(),0,period,1,metod2,prise,i); 
     if(MathAbs(tmp1-tmp2)>=porog*Point){
       Signal[i]=tmp2;
       if(i>0){
         if(Close[i]<=Signal[i]){Dn[i]=Signal[i];}else{Fl[i]=Signal[i];}
         if(Close[i] >=Signal[i]){Up[i]=Signal[i];}else{Fl[i]=Signal[i];}
       }else{Fl[i]=Signal[i];}  
     }else{
       Signal[i]=Signal[i+1];
       Fl[i]=Signal[i];
     }
   }
   return(0);}
//+------------------------------------------------------------------+ 
 

ого три цвета..! : (

- ну Винин с Хрустом молодцы...

...

Гранит, если будешь тестировать .... - по крайней мере этот вариант - не перерисовывается (как некотрые) - хоть и многоцветный, но библиотеку за собой носить не нада тоже ()

п.с. отредактировал немного :- \\\