Лучший онлайн брокер в России и СНГ

Go Back   Форум ведущих трейдеров и брокеров рынка форекс (forex), фьючерсов и акций > Профессия трейдер > Автоматические торговые стратегии

Reply
 
Thread Tools Display Modes
Old 15-04-2010, 06:03 AM   #1
joi7
Новичок
 
Join Date: Nov 2008
Posts: 3
joi7 (больше 10)
Default Помогите с индикатором

Добрый всем день! Уважаемые форумчане, обращаюсь с просьбой, помогите написать индикатор. Сам в програмировании пока не селён, вот летом будет отпуск попробую разобраться. Собственно что требуется от индикатора. Внизу графика в отдельном окне, полосочка или что то типа, которая будет брать информацию из стандартного индикатора МАСD, если МАСD выше ноля то полосочка или палочка зелёного цвета например, если ниже то красного. Вот и все условия, думаю для знающих людей это не составит большого труда Индикатор этот хочу использовать в соей работе в качестве вспомогательного. Т.к. Работаю на больших таймфреймах и только в направлении тренда, но часто пытаюсь ловить развороты и т.д. результат ненужный убыток. Надеюсь индикатор поможет соблюдать дисциплину и правила системы глянул он зелёный значит работаем только вверх и т.д. Что то похожее на систему импульсную Элдера он на семенаре так и говорит, это не система игры, а система убеждений (или как то так). Вот пожалуй и всё, единственное пожелание что бы индюк выглядел в виде одной ровной полоски, или из столбиков гистограммы одинаковой длины. Вот и всё.
Спасибо, надеюсь на помошь.

Last edited by joi7; 15-04-2010 at 06:06 AM.
joi7 is offline   Reply With Quote
Old 15-04-2010, 09:32 AM   #2
EQU
Эксперт
 
EQU's Avatar
 
Join Date: Apr 2008
Posts: 1,732
EQU Более 18000EQU Более 18000EQU Более 18000EQU Более 18000EQU Более 18000EQU Более 18000EQU Более 18000EQU Более 18000EQU Более 18000EQU Более 18000EQU Более 18000
Default

Quote:
Originally Posted by joi7 View Post
Добрый всем день! Уважаемые форумчане, обращаюсь с просьбой, помогите написать индикатор. Сам в програмировании пока не селён, вот летом будет отпуск попробую разобраться. Собственно что требуется от индикатора. Внизу графика в отдельном окне, полосочка или что то типа, которая будет брать информацию из стандартного индикатора МАСD, если МАСD выше ноля то полосочка или палочка зелёного цвета например, если ниже то красного. Вот и все условия, думаю для знающих людей это не составит большого труда Индикатор этот хочу использовать в соей работе в качестве вспомогательного. Т.к. Работаю на больших таймфреймах и только в направлении тренда, но часто пытаюсь ловить развороты и т.д. результат ненужный убыток. Надеюсь индикатор поможет соблюдать дисциплину и правила системы глянул он зелёный значит работаем только вверх и т.д. Что то похожее на систему импульсную Элдера он на семенаре так и говорит, это не система игры, а система убеждений (или как то так). Вот пожалуй и всё, единственное пожелание что бы индюк выглядел в виде одной ровной полоски, или из столбиков гистограммы одинаковой длины. Вот и всё.
Спасибо, надеюсь на помошь.
Думаю, что научиться - это лучше, чем пользовать стороннюю разработку, не очень хорошо представляя, как и что работает..

Попробуйте, например
* взять стандартный индикатор из МТ
* изменить количество индикаторов - 2
* создать 2 буфера для индикации - например GreenBuffer[], RedBuffer[]
* установить цвета - красный и зелёный
* разместите примерно такой текст в цикле
...
for(i=...){
double M=iMACD(...,i)// синтаксис смотрим-копируем-вставляем из справки
if(M>0)GreenBuffer[i]=M;
if(M<0)RedBuffer[i]=M;
}
...
Справка на русском - доступна и понятна.. В редакторе надо поставить курсор на iMACD и нажать <F1>..
Образцы индикаторов доступны в редакторе..

Last edited by EQU; 15-04-2010 at 09:35 AM.
EQU is offline   Reply With Quote
Old 15-04-2010, 11:12 AM   #3
Chslav
Старожил
 
Chslav's Avatar
 
Join Date: May 2007
Location: NUMB3RS
Posts: 430
Chslav (больше 2000)Chslav (больше 2000)Chslav (больше 2000)Chslav (больше 2000)Chslav (больше 2000)Chslav (больше 2000)Chslav (больше 2000)Chslav (больше 2000)Chslav (больше 2000)Chslav (больше 2000)Chslav (больше 2000)
Send a message via ICQ to Chslav
Default

видимо что то такое нужно
Attached Files
File Type: zip indicators.zip (17.8 KB, 10 views)
__________________
Touched By The Saviour
Chslav is offline   Reply With Quote
Old 15-04-2010, 06:48 PM   #4
lazyboy1027
Стажер
 
lazyboy1027's Avatar
 
Join Date: Mar 2010
Posts: 61
lazyboy1027 (больше 1300)lazyboy1027 (больше 1300)lazyboy1027 (больше 1300)lazyboy1027 (больше 1300)lazyboy1027 (больше 1300)lazyboy1027 (больше 1300)lazyboy1027 (больше 1300)lazyboy1027 (больше 1300)lazyboy1027 (больше 1300)lazyboy1027 (больше 1300)lazyboy1027 (больше 1300)
Default Готовый код

Code:
#property indicator_separate_window 

#property indicator_buffers 3

#property indicator_color1 Red
#property indicator_color2 Green
#property indicator_color3 Gray

#property indicator_maximum 1
#property indicator_minimum -1

extern int MACD_Fast_Value=12;
extern int MACD_Slow_Value=26;
extern int MACD_Averaging_Value=9;

double RedBuffer[];
double GreenBuffer[];
double GrayBuffer[];

int init()
{
   SetIndexBuffer(0,RedBuffer);
   SetIndexBuffer(1,GreenBuffer);
   SetIndexBuffer(2,GrayBuffer);
   SetIndexStyle(0, DRAW_HISTOGRAM, EMPTY, 4, Red);
   SetIndexStyle(1, DRAW_HISTOGRAM, EMPTY, 4, Green);
   SetIndexStyle(2, DRAW_HISTOGRAM, EMPTY, 4, Gray);
   IndicatorShortName("Осциллятор MACD");
   SetIndexLabel(0, "MACD Osc");
   SetIndexLabel(1, "MACD Osc");
   SetIndexLabel(2, "MACD Osc");
   return(0);
  }
int deinit()
  {return(0);}

int start()
  {
   int counted_bars=IndicatorCounted();
   int limit=Bars-counted_bars;
   for (int i=0; i<=limit; i++)
   {
      if (iMACD(NULL,0,MACD_Fast_Value,MACD_Slow_Value, MACD_Averaging_Value, PRICE_CLOSE, MODE_MAIN,i) > 0)
      {
         GreenBuffer[i]=0.1;
      }
      if (iMACD(NULL,0,MACD_Fast_Value,MACD_Slow_Value, MACD_Averaging_Value, PRICE_CLOSE,MODE_MAIN,i) < 0)
      {
         RedBuffer[i]=0.1;
      }
      if (iMACD(NULL,0,MACD_Fast_Value,MACD_Slow_Value, MACD_Averaging_Value, PRICE_CLOSE,MODE_MAIN,i) == 0)
      {
         GrayBuffer[i]=0.1;
      }
   } 
   return(0);
  }
Копируешь все в пустой индикатор и компилируешь. В окне навигатора будет называться "MACD_Zero_Line".
__________________
Яндекс - найдётся всё!
Google - ничего и не терялось!
lazyboy1027 is offline   Reply With Quote
Old 15-04-2010, 07:06 PM   #5
EQU
Эксперт
 
EQU's Avatar
 
Join Date: Apr 2008
Posts: 1,732
EQU Более 18000EQU Более 18000EQU Более 18000EQU Более 18000EQU Более 18000EQU Более 18000EQU Более 18000EQU Более 18000EQU Более 18000EQU Более 18000EQU Более 18000
Default

Quote:
Originally Posted by lazyboy1027 View Post
Code:
#property indicator_separate_window 

#property indicator_buffers 3

#property indicator_color1 Red
#property indicator_color2 Green
#property indicator_color3 Gray

#property indicator_maximum 1
#property indicator_minimum -1

extern int MACD_Fast_Value=12;
extern int MACD_Slow_Value=26;
extern int MACD_Averaging_Value=9;

double RedBuffer[];
double GreenBuffer[];
double GrayBuffer[];

int init()
{
   SetIndexBuffer(0,RedBuffer);
   SetIndexBuffer(1,GreenBuffer);
   SetIndexBuffer(2,GrayBuffer);
   SetIndexStyle(0, DRAW_HISTOGRAM, EMPTY, 4, Red);
   SetIndexStyle(1, DRAW_HISTOGRAM, EMPTY, 4, Green);
   SetIndexStyle(2, DRAW_HISTOGRAM, EMPTY, 4, Gray);
   IndicatorShortName("Осциллятор MACD");
   SetIndexLabel(0, "MACD Osc");
   SetIndexLabel(1, "MACD Osc");
   SetIndexLabel(2, "MACD Osc");
   return(0);
  }
int deinit()
  {return(0);}

int start()
  {
   int counted_bars=IndicatorCounted();
   int limit=Bars-counted_bars;
   for (int i=0; i<=limit; i++)
   {
      if (iMACD(NULL,0,MACD_Fast_Value,MACD_Slow_Value, MACD_Averaging_Value, PRICE_CLOSE, MODE_MAIN,i) > 0)
      {
         GreenBuffer[i]=0.1;
      }
      if (iMACD(NULL,0,MACD_Fast_Value,MACD_Slow_Value, MACD_Averaging_Value, PRICE_CLOSE,MODE_MAIN,i) < 0)
      {
         RedBuffer[i]=0.1;
      }
      if (iMACD(NULL,0,MACD_Fast_Value,MACD_Slow_Value, MACD_Averaging_Value, PRICE_CLOSE,MODE_MAIN,i) == 0)
      {
         GrayBuffer[i]=0.1;
      }
   } 
   return(0);
  }
Копируешь все в пустой индикатор и компилируешь. В окне навигатора будет называться "MACD_Zero_Line".
ДА!
Это и есть - к чему надо б стремицца - красиво, понятно, аккуратно..
Единственно - предложение/замечание - нет смысла перерасчитывать несколько раз МАКД..
т.е М=МАКД, а потом сравниваем..

Хотя, честно признаю - так понятнее..

и индекс-лейблы - должны нести какую-то смысловую нагрузку.. Иначе, к чему они?

SetIndexLabel(0, "MACD Osc");
SetIndexLabel(1, "MACD Osc");
SetIndexLabel(2, "MACD Osc");

++
Quote:
В окне навигатора будет называться "MACD_Zero_Line".
Нууу.. не знаю..))))

Last edited by EQU; 15-04-2010 at 07:19 PM. Reason: ++
EQU is offline   Reply With Quote
Old 15-04-2010, 07:28 PM   #6
joi7
Новичок
 
Join Date: Nov 2008
Posts: 3
joi7 (больше 10)
Default

Quote:
Originally Posted by lazyboy1027 View Post
Code:
#property indicator_separate_window 

#property indicator_buffers 3

#property indicator_color1 Red
#property indicator_color2 Green
#property indicator_color3 Gray

#property indicator_maximum 1
#property indicator_minimum -1

extern int MACD_Fast_Value=12;
extern int MACD_Slow_Value=26;
extern int MACD_Averaging_Value=9;

double RedBuffer[];
double GreenBuffer[];
double GrayBuffer[];

int init()
{
   SetIndexBuffer(0,RedBuffer);
   SetIndexBuffer(1,GreenBuffer);
   SetIndexBuffer(2,GrayBuffer);
   SetIndexStyle(0, DRAW_HISTOGRAM, EMPTY, 4, Red);
   SetIndexStyle(1, DRAW_HISTOGRAM, EMPTY, 4, Green);
   SetIndexStyle(2, DRAW_HISTOGRAM, EMPTY, 4, Gray);
   IndicatorShortName("Осциллятор MACD");
   SetIndexLabel(0, "MACD Osc");
   SetIndexLabel(1, "MACD Osc");
   SetIndexLabel(2, "MACD Osc");
   return(0);
  }
int deinit()
  {return(0);}

int start()
  {
   int counted_bars=IndicatorCounted();
   int limit=Bars-counted_bars;
   for (int i=0; i<=limit; i++)
   {
      if (iMACD(NULL,0,MACD_Fast_Value,MACD_Slow_Value, MACD_Averaging_Value, PRICE_CLOSE, MODE_MAIN,i) > 0)
      {
         GreenBuffer[i]=0.1;
      }
      if (iMACD(NULL,0,MACD_Fast_Value,MACD_Slow_Value, MACD_Averaging_Value, PRICE_CLOSE,MODE_MAIN,i) < 0)
      {
         RedBuffer[i]=0.1;
      }
      if (iMACD(NULL,0,MACD_Fast_Value,MACD_Slow_Value, MACD_Averaging_Value, PRICE_CLOSE,MODE_MAIN,i) == 0)
      {
         GrayBuffer[i]=0.1;
      }
   } 
   return(0);
  }
Копируешь все в пустой индикатор и компилируешь. В окне навигатора будет называться "MACD_Zero_Line".
Спасибо!!! Помогли
joi7 is offline   Reply With Quote
Old 15-04-2010, 08:27 PM   #7
lazyboy1027
Стажер
 
lazyboy1027's Avatar
 
Join Date: Mar 2010
Posts: 61
lazyboy1027 (больше 1300)lazyboy1027 (больше 1300)lazyboy1027 (больше 1300)lazyboy1027 (больше 1300)lazyboy1027 (больше 1300)lazyboy1027 (больше 1300)lazyboy1027 (больше 1300)lazyboy1027 (больше 1300)lazyboy1027 (больше 1300)lazyboy1027 (больше 1300)lazyboy1027 (больше 1300)
Default

Quote:
Originally Posted by EQU View Post

Нууу.. не знаю..))))
))) ну так будет в окне Data Window.
__________________
Яндекс - найдётся всё!
Google - ничего и не терялось!
lazyboy1027 is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 07:50 AM.


Powered by vBulletin® Version 3.8.2
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Форум о форекс

Broco - Брокер трейдинг на рынке форекс, futures, также cfd.