Новые сообщения · Участники · Правила форума · Поиск · RSS · Вход · Регистрация ·

Страница 1 из 41234»
Форум трейдеров » Скрипты Советники Индикаторы для Metatrader4/Metatrader5 » MT 4 MQL программирование, помощь. » Индикатор в Советник
Индикатор в Советник

Mike299Дата: Четверг, 13.11.2014, 17:54 | Сообщение # 1
Трейдер - Майор
Группа: Пользователи
Сообщений: 87
Награды: 0
Статус: Offline


[Бонусы за сообщения ]

Здравствуйте! Прошу добавить индикатор (см. вложение) в шаблон Советника (с другого сайта). Просьба пояснить подробно, какие переменные надо добавить/заменить в коде.
Синяя точка - buy, красная - sell.

Прикрепления: 4709492.jpg(96Kb) · PerfecTrendLine.mq4(4Kb)
 
СообщениеЗдравствуйте! Прошу добавить индикатор (см. вложение) в шаблон Советника (с другого сайта). Просьба пояснить подробно, какие переменные надо добавить/заменить в коде.
Синяя точка - buy, красная - sell.

Автор - Mike299
Дата добавления - 13.11.2014 в 17:54

expforexДата: Понедельник, 17.11.2014, 11:58 | Сообщение # 2
Главный Администартор
Группа: Администраторы
Сообщений: 8959
Награды: 29
Статус: Offline


[Бонусы за сообщения ]

Mike299, приветствую, 
в настройки советника вынести переменные настройки индикатора: 

Код
extern int Z = 7;
extern int Z1 = 3;
extern int S = 0;
extern int S1 = 0;


далее в советнике формируем сигналы, 
для начала объявим и вызовем индикатор и его буферы
Код
double BUY = iCustom(Symbol(),0,"PerfecTrendLine",Z,Z1,S,S1,4,0);
double SELL = iCustom(Symbol(),0,"PerfecTrendLine",Z,Z1,S,S1,5,0);


буферы для сигналов здесь 4 и 5
Последний параметр в функции вызова - это шифт бара, на котором проверяется сигнал
я поставил 0 - но лучше ставить 1, или по месту ориентироваться, смотря как индикатор рисует.

далее формируем сами сигналы:
Код
if (BUY!=EMPTY_VALUE){/*..торгуем в бай */}if (SELL!=EMPTY_VALUE){/*..торгуем в селл */}

Вот собственно и все что требуется для вставки индикатора в советник. 

если говорить о Вашем советнике то Ваш блок:

     
Код
if(FirstArrow)
         {
          bv=iCustom(NULL,TimeFrame,IND,Variant,MACDFastPeriod,MACDSlowPeriod,MACDSignalPeriod,MACDPrice,2,SignalShift);
          sv=iCustom(NULL,TimeFrame,IND,Variant,MACDFastPeriod,MACDSlowPeriod,MACDSignalPeriod,MACDPrice,3,SignalShift);
         }
       else
         {
          bv=iCustom(NULL,TimeFrame,IND,Variant,MACDFastPeriod,MACDSlowPeriod,MACDSignalPeriod,MACDPrice,0,SignalShift);
          sv=iCustom(NULL,TimeFrame,IND,Variant,MACDFastPeriod,MACDSlowPeriod,MACDSignalPeriod,MACDPrice,1,SignalShift);
         }

       bool BuySignal=false;
       bool SellSignal=false;
       if(bv!=0 && bv!=EMPTY_VALUE)
         {
          if(!ReverseTrades)BuySignal=true;
          if(ReverseTrades)SellSignal=true;
         }
       if(sv!=0 && sv!=EMPTY_VALUE)
         {
          if(!ReverseTrades)SellSignal=true;
          if(ReverseTrades)BuySignal=true;
         }


Можно заменить на такой:
Код
double BUY = iCustom(Symbol(),0,"PerfecTrendLine",Z,Z1,S,S1,4,SignalShift);
double SELL = iCustom(Symbol(),0,"PerfecTrendLine",Z,Z1,S,S1,5,SignalShift);
       if(BUY!=0 && BUY!=EMPTY_VALUE)
         {
          if(!ReverseTrades)BuySignal=true;
          if(ReverseTrades)SellSignal=true;
         }
       if(SELL!=0 && SELL!=EMPTY_VALUE)
         {
          if(!ReverseTrades)SellSignal=true;
          if(ReverseTrades)BuySignal=true;
         }


Также обратите внимание на название индикатора в данном примере, я взял то что у меня на форуме.



Программирование на заказ || Наши Разработки

 
СообщениеMike299, приветствую, 
в настройки советника вынести переменные настройки индикатора: 
Код
extern int Z = 7;
extern int Z1 = 3;
extern int S = 0;
extern int S1 = 0;


далее в советнике формируем сигналы, 
для начала объявим и вызовем индикатор и его буферы
Код
double BUY = iCustom(Symbol(),0,"PerfecTrendLine",Z,Z1,S,S1,4,0);
double SELL = iCustom(Symbol(),0,"PerfecTrendLine",Z,Z1,S,S1,5,0);


буферы для сигналов здесь 4 и 5
Последний параметр в функции вызова - это шифт бара, на котором проверяется сигнал
я поставил 0 - но лучше ставить 1, или по месту ориентироваться, смотря как индикатор рисует.

далее формируем сами сигналы:
Код
if (BUY!=EMPTY_VALUE){/*..торгуем в бай */}if (SELL!=EMPTY_VALUE){/*..торгуем в селл */}

Вот собственно и все что требуется для вставки индикатора в советник. 

если говорить о Вашем советнике то Ваш блок:

     
Код
if(FirstArrow)
         {
          bv=iCustom(NULL,TimeFrame,IND,Variant,MACDFastPeriod,MACDSlowPeriod,MACDSignalPeriod,MACDPrice,2,SignalShift);
          sv=iCustom(NULL,TimeFrame,IND,Variant,MACDFastPeriod,MACDSlowPeriod,MACDSignalPeriod,MACDPrice,3,SignalShift);
         }
       else
         {
          bv=iCustom(NULL,TimeFrame,IND,Variant,MACDFastPeriod,MACDSlowPeriod,MACDSignalPeriod,MACDPrice,0,SignalShift);
          sv=iCustom(NULL,TimeFrame,IND,Variant,MACDFastPeriod,MACDSlowPeriod,MACDSignalPeriod,MACDPrice,1,SignalShift);
         }

       bool BuySignal=false;
       bool SellSignal=false;
       if(bv!=0 && bv!=EMPTY_VALUE)
         {
          if(!ReverseTrades)BuySignal=true;
          if(ReverseTrades)SellSignal=true;
         }
       if(sv!=0 && sv!=EMPTY_VALUE)
         {
          if(!ReverseTrades)SellSignal=true;
          if(ReverseTrades)BuySignal=true;
         }


Можно заменить на такой:
Код
double BUY = iCustom(Symbol(),0,"PerfecTrendLine",Z,Z1,S,S1,4,SignalShift);
double SELL = iCustom(Symbol(),0,"PerfecTrendLine",Z,Z1,S,S1,5,SignalShift);
       if(BUY!=0 && BUY!=EMPTY_VALUE)
         {
          if(!ReverseTrades)BuySignal=true;
          if(ReverseTrades)SellSignal=true;
         }
       if(SELL!=0 && SELL!=EMPTY_VALUE)
         {
          if(!ReverseTrades)SellSignal=true;
          if(ReverseTrades)BuySignal=true;
         }


Также обратите внимание на название индикатора в данном примере, я взял то что у меня на форуме.

Автор - expforex
Дата добавления - 17.11.2014 в 11:58

Mike299Дата: Понедельник, 17.11.2014, 14:14 | Сообщение # 3
Трейдер - Майор
Группа: Пользователи
Сообщений: 87
Награды: 0
Статус: Offline


[Бонусы за сообщения ]

Владислав, спасибо!
А как определить, что буферы для сигналов это 4 и 5 в индикаторе?
По этой надписи? SetIndexArrow
Т.е. слово "стрелка" всегда означает сигнал?
Например в другом индикаторе буфферы сигналов под какими цифрами?

int init()
{
   string short_name;
//---- indicator line
   IndicatorBuffers(8);
   SetIndexBuffer(0,UpTrendSignal);
   SetIndexBuffer(1,DownTrendSignal);
   SetIndexBuffer(2,UpTrendBar);
   SetIndexBuffer(3,DownTrendBar);
   SetIndexBuffer(4,bsmax);
   SetIndexBuffer(5,bsmin);
   SetIndexBuffer(6,time);
   SetIndexBuffer(7,trend);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexStyle(3,DRAW_HISTOGRAM);
   SetIndexArrow(0,108);
   SetIndexArrow(1,108);

 
СообщениеВладислав, спасибо!
А как определить, что буферы для сигналов это 4 и 5 в индикаторе?
По этой надписи? SetIndexArrow
Т.е. слово "стрелка" всегда означает сигнал?
Например в другом индикаторе буфферы сигналов под какими цифрами?

int init()
{
   string short_name;
//---- indicator line
   IndicatorBuffers(8);
   SetIndexBuffer(0,UpTrendSignal);
   SetIndexBuffer(1,DownTrendSignal);
   SetIndexBuffer(2,UpTrendBar);
   SetIndexBuffer(3,DownTrendBar);
   SetIndexBuffer(4,bsmax);
   SetIndexBuffer(5,bsmin);
   SetIndexBuffer(6,time);
   SetIndexBuffer(7,trend);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexStyle(3,DRAW_HISTOGRAM);
   SetIndexArrow(0,108);
   SetIndexArrow(1,108);

Автор - Mike299
Дата добавления - 17.11.2014 в 14:14

expforexДата: Понедельник, 17.11.2014, 15:30 | Сообщение # 4
Главный Администартор
Группа: Администраторы
Сообщений: 8959
Награды: 29
Статус: Offline


[Бонусы за сообщения ]

Цитата Mike299 ()
А как определить, что буферы для сигналов это 4 и 5 в индикаторе?
нет, на примере этого индикатора смотрите на график: 


если на Вашем и\примере код, 
то тут наверно стрелки, буферы 0 и 1. 

по поводу открытия и бай и селл
Вы слишком много заменили
Вы сделали так : 

     
Код
double BUY = iCustom(Symbol(),0,"PerfecTrendLine",Z,Z1,S,S1,4,SignalShift);
double SELL = iCustom(Symbol(),0,"PerfecTrendLine",Z,Z1,S,S1,5,SignalShift);
        if(BUY!=0 && BUY!=EMPTY_VALUE)
          {
           if(!ReverseTrades)BUY=true;
           if(ReverseTrades)SELL=true;
          }
        if(SELL!=0 && SELL!=EMPTY_VALUE)
          {
           if(!ReverseTrades)SELL=true;
           if(ReverseTrades)BUY=true;
          }


А я просил только так:

Код
double BUY = iCustom(Symbol(),0,"PerfecTrendLine",Z,Z1,S,S1,4,SignalShift);  
double SELL = iCustom(Symbol(),0,"PerfecTrendLine",Z,Z1,S,S1,5,SignalShift);  
        if(BUY!=0 && BUY!=EMPTY_VALUE)  
          {  
           if(!ReverseTrades)BuySignal=true;  
           if(ReverseTrades)SellSignal=true;  
          }  
        if(SELL!=0 && SELL!=EMPTY_VALUE)  
          {  
           if(!ReverseTrades)SellSignal=true;  
           if(ReverseTrades)BuySignal=true;  
          }


Т.е. у Вас и буферы и сигнал одни именем названы

Прикрепления: 8494353.png(75Kb)


Программирование на заказ || Наши Разработки

 
Сообщение
Цитата Mike299 ()
А как определить, что буферы для сигналов это 4 и 5 в индикаторе?
нет, на примере этого индикатора смотрите на график: 


если на Вашем и\примере код, 
то тут наверно стрелки, буферы 0 и 1. 

по поводу открытия и бай и селл
Вы слишком много заменили
Вы сделали так : 

     
Код
double BUY = iCustom(Symbol(),0,"PerfecTrendLine",Z,Z1,S,S1,4,SignalShift);
double SELL = iCustom(Symbol(),0,"PerfecTrendLine",Z,Z1,S,S1,5,SignalShift);
        if(BUY!=0 && BUY!=EMPTY_VALUE)
          {
           if(!ReverseTrades)BUY=true;
           if(ReverseTrades)SELL=true;
          }
        if(SELL!=0 && SELL!=EMPTY_VALUE)
          {
           if(!ReverseTrades)SELL=true;
           if(ReverseTrades)BUY=true;
          }


А я просил только так:

Код
double BUY = iCustom(Symbol(),0,"PerfecTrendLine",Z,Z1,S,S1,4,SignalShift);  
double SELL = iCustom(Symbol(),0,"PerfecTrendLine",Z,Z1,S,S1,5,SignalShift);  
        if(BUY!=0 && BUY!=EMPTY_VALUE)  
          {  
           if(!ReverseTrades)BuySignal=true;  
           if(ReverseTrades)SellSignal=true;  
          }  
        if(SELL!=0 && SELL!=EMPTY_VALUE)  
          {  
           if(!ReverseTrades)SellSignal=true;  
           if(ReverseTrades)BuySignal=true;  
          }


Т.е. у Вас и буферы и сигнал одни именем названы

Автор - expforex
Дата добавления - 17.11.2014 в 15:30

Mike299Дата: Понедельник, 17.11.2014, 17:27 | Сообщение # 5
Трейдер - Майор
Группа: Пользователи
Сообщений: 87
Награды: 0
Статус: Offline


[Бонусы за сообщения ]

Когда я заменяю BUY на BuySignal, то компилятор выдает ошибку:
'BuySignal' - undeclared identifier    PerfecTrendLines www.expforex.com.mq4    151    30

 
СообщениеКогда я заменяю BUY на BuySignal, то компилятор выдает ошибку:
'BuySignal' - undeclared identifier    PerfecTrendLines www.expforex.com.mq4    151    30

Автор - Mike299
Дата добавления - 17.11.2014 в 17:27

expforexДата: Понедельник, 17.11.2014, 18:20 | Сообщение # 6
Главный Администартор
Группа: Администраторы
Сообщений: 8959
Награды: 29
Статус: Offline


[Бонусы за сообщения ]

Mike299

было так:
     

Код
if(FirstArrow)
         {
          bv=iCustom(NULL,TimeFrame,IND,Variant,MACDFastPeriod,MACDSlowPeriod,MACDSignalPeriod,MACDPrice,2,SignalShift);
          sv=iCustom(NULL,TimeFrame,IND,Variant,MACDFastPeriod,MACDSlowPeriod,MACDSignalPeriod,MACDPrice,3,SignalShift);
         }
       else
         {
          bv=iCustom(NULL,TimeFrame,IND,Variant,MACDFastPeriod,MACDSlowPeriod,MACDSignalPeriod,MACDPrice,0,SignalShift);
          sv=iCustom(NULL,TimeFrame,IND,Variant,MACDFastPeriod,MACDSlowPeriod,MACDSignalPeriod,MACDPrice,1,SignalShift);
         }

       bool BuySignal=false;
       bool SellSignal=false;
       if(bv!=0 && bv!=EMPTY_VALUE)
         {
          if(!ReverseTrades)BuySignal=true;
          if(ReverseTrades)SellSignal=true;
         }
       if(sv!=0 && sv!=EMPTY_VALUE)
         {
          if(!ReverseTrades)SellSignal=true;
          if(ReverseTrades)BuySignal=true;
         }


надо так:
Код
double BUY = iCustom(Symbol(),0,"PerfecTrendLine",Z,Z1,S,S1,4,SignalShift);  
double SELL = iCustom(Symbol(),0,"PerfecTrendLine",Z,Z1,S,S1,5,SignalShift);
    bool BuySignal=false;
       bool SellSignal=false;  
        if(BUY!=0 && BUY!=EMPTY_VALUE)  
          {  
           if(!ReverseTrades)BuySignal=true;  
           if(ReverseTrades)SellSignal=true;  
          }  
        if(SELL!=0 && SELL!=EMPTY_VALUE)  
          {  
           if(!ReverseTrades)SellSignal=true;  
           if(ReverseTrades)BuySignal=true;  
          }



Программирование на заказ || Наши Разработки

 
СообщениеMike299

было так:
     
Код
if(FirstArrow)
         {
          bv=iCustom(NULL,TimeFrame,IND,Variant,MACDFastPeriod,MACDSlowPeriod,MACDSignalPeriod,MACDPrice,2,SignalShift);
          sv=iCustom(NULL,TimeFrame,IND,Variant,MACDFastPeriod,MACDSlowPeriod,MACDSignalPeriod,MACDPrice,3,SignalShift);
         }
       else
         {
          bv=iCustom(NULL,TimeFrame,IND,Variant,MACDFastPeriod,MACDSlowPeriod,MACDSignalPeriod,MACDPrice,0,SignalShift);
          sv=iCustom(NULL,TimeFrame,IND,Variant,MACDFastPeriod,MACDSlowPeriod,MACDSignalPeriod,MACDPrice,1,SignalShift);
         }

       bool BuySignal=false;
       bool SellSignal=false;
       if(bv!=0 && bv!=EMPTY_VALUE)
         {
          if(!ReverseTrades)BuySignal=true;
          if(ReverseTrades)SellSignal=true;
         }
       if(sv!=0 && sv!=EMPTY_VALUE)
         {
          if(!ReverseTrades)SellSignal=true;
          if(ReverseTrades)BuySignal=true;
         }


надо так:
Код
double BUY = iCustom(Symbol(),0,"PerfecTrendLine",Z,Z1,S,S1,4,SignalShift);  
double SELL = iCustom(Symbol(),0,"PerfecTrendLine",Z,Z1,S,S1,5,SignalShift);
    bool BuySignal=false;
       bool SellSignal=false;  
        if(BUY!=0 && BUY!=EMPTY_VALUE)  
          {  
           if(!ReverseTrades)BuySignal=true;  
           if(ReverseTrades)SellSignal=true;  
          }  
        if(SELL!=0 && SELL!=EMPTY_VALUE)  
          {  
           if(!ReverseTrades)SellSignal=true;  
           if(ReverseTrades)BuySignal=true;  
          }

Автор - expforex
Дата добавления - 17.11.2014 в 18:20

Mike299Дата: Понедельник, 17.11.2014, 19:34 | Сообщение # 7
Трейдер - Майор
Группа: Пользователи
Сообщений: 87
Награды: 0
Статус: Offline


[Бонусы за сообщения ]

Все понятно! good rah

 
СообщениеВсе понятно! good rah

Автор - Mike299
Дата добавления - 17.11.2014 в 19:34

expforexДата: Понедельник, 17.11.2014, 22:58 | Сообщение # 8
Главный Администартор
Группа: Администраторы
Сообщений: 8959
Награды: 29
Статус: Offline


[Бонусы за сообщения ]

Mike299, ну как заработал?



Программирование на заказ || Наши Разработки

 
СообщениеMike299, ну как заработал?

Автор - expforex
Дата добавления - 17.11.2014 в 22:58

Mike299Дата: Понедельник, 17.11.2014, 23:53 | Сообщение # 9
Трейдер - Майор
Группа: Пользователи
Сообщений: 87
Награды: 0
Статус: Offline


[Бонусы за сообщения ]

да конечно! большой палец вверх же! smile Спасибо! Попробую теперь с др. индюками. Если что напишу biggrin

 
Сообщениеда конечно! большой палец вверх же! smile Спасибо! Попробую теперь с др. индюками. Если что напишу biggrin

Автор - Mike299
Дата добавления - 17.11.2014 в 23:53

Mike299Дата: Вторник, 18.11.2014, 17:48 | Сообщение # 10
Трейдер - Майор
Группа: Пользователи
Сообщений: 87
Награды: 0
Статус: Offline


[Бонусы за сообщения ]

Владислав, у меня есть индикатор, в котором на одном буфере сделан и бай и селл. Номер 7 по счету. Как я понимаю больше 8 буферов нельзя использовать? Посм. пож-та этот индюк. Может можно как то разделить сигналы на бай и селл за счет других буферов?
Он был вставлен у меня в другой шаблон давно знакомым программистом, но эксперт тестируется оч. медленно. Поэтому хочу попробовать вставить его в новый шаблон. Вот код, как там разграничивались бай и селл в старом шаблоне:

Код
int IndicatorSignal()
{
int Sig=0;
double Cmd = iCustom(Symbol(),Period(),IndicatorName,.....
//Указываем Сигналы:
if(Cmd==0.0001)Sig=1; // открываемся в бай
if(Cmd==-0.0001)Sig=2; // открываемся в селл

// 1 - бай  2 - селл
return(Sig);
}


Вот как я заменил наш код (понятно что это не работает):
Код
double BUY = iCustom(Symbol(),0,"Divergence-EP",gi_84,gi_88,gi_92,gs_unused_96,g_period_104,g_period_108,g_period_112,Line_Distance,Max_Bars_Lookback,gi_  124,gi_128,ReguSignals,ContSignals,HiddSignals,7,SignalShift);
double SELL = iCustom(Symbol(),0,"Divergence-EP",gi_84,gi_88,gi_92,gs_unused_96,g_period_104,g_period_108,g_period_112,Line_Distance,Max_Bars_Lookback,gi_  124,gi_128,ReguSignals,ContSignals,HiddSignals,7,SignalShift);

Прикрепления: Divergence-EP.mq4(34Kb)
 
СообщениеВладислав, у меня есть индикатор, в котором на одном буфере сделан и бай и селл. Номер 7 по счету. Как я понимаю больше 8 буферов нельзя использовать? Посм. пож-та этот индюк. Может можно как то разделить сигналы на бай и селл за счет других буферов?
Он был вставлен у меня в другой шаблон давно знакомым программистом, но эксперт тестируется оч. медленно. Поэтому хочу попробовать вставить его в новый шаблон. Вот код, как там разграничивались бай и селл в старом шаблоне:
Код
int IndicatorSignal()
{
int Sig=0;
double Cmd = iCustom(Symbol(),Period(),IndicatorName,.....
//Указываем Сигналы:
if(Cmd==0.0001)Sig=1; // открываемся в бай
if(Cmd==-0.0001)Sig=2; // открываемся в селл

// 1 - бай  2 - селл
return(Sig);
}


Вот как я заменил наш код (понятно что это не работает):
Код
double BUY = iCustom(Symbol(),0,"Divergence-EP",gi_84,gi_88,gi_92,gs_unused_96,g_period_104,g_period_108,g_period_112,Line_Distance,Max_Bars_Lookback,gi_  124,gi_128,ReguSignals,ContSignals,HiddSignals,7,SignalShift);
double SELL = iCustom(Symbol(),0,"Divergence-EP",gi_84,gi_88,gi_92,gs_unused_96,g_period_104,g_period_108,g_period_112,Line_Distance,Max_Bars_Lookback,gi_  124,gi_128,ReguSignals,ContSignals,HiddSignals,7,SignalShift);

Автор - Mike299
Дата добавления - 18.11.2014 в 17:48
Форум трейдеров » Скрипты Советники Индикаторы для Metatrader4/Metatrader5 » MT 4 MQL программирование, помощь. » Индикатор в Советник
Страница 1 из 41234»
Поиск:


WebMoney Яндекс цитирования.