Помогите написать простой советник - страница 2

 
Armen:

во вложении тот советник, который получился через генератор 

Там библиотеки есть Сигнал*.mqh  в папке инклюде
 
zfs:
Там библиотеки есть Сигнал*.mqh  в папке инклюде

так я при создании советника добавил 2 сигнала  DeMarker и SAR    

или я что-то сделал не так?

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

 
Armen:

так я при создании советника добавил 2 сигнала  DeMarker и SAR    

или я что-то сделал не так?

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

Изучайте библиотеки).
 
zfs:
Изучайте библиотеки).

ответ немногим лучше, чем "погугли"  (((

в том то все и дело, что из библиотеки он подтягивает, если я правильно понимаю стандартный вариант CSignalDeM со всеми его "плюшками". а мне надо, чтобы он брал от DeMarker-a только моменты пересечения 30 и 70 в нужном направлении. и в эти моменты анализировал с трендом SAR-a (восходящий или нисходящий).

плохо объясняю, да? :(

 
Armen:

ответ немногим лучше, чем "погугли"  (((

в том то все и дело, что из библиотеки он подтягивает, если я правильно понимаю стандартный вариант CSignalDeM со всеми его "плюшками". а мне надо, чтобы он брал от DeMarker-a только моменты пересечения 30 и 70 в нужном направлении. и в эти моменты анализировал с трендом SAR-a (восходящий или нисходящий).

плохо объясняю, да? :(

Вам нужно на основе стандартного сигнала CSignalDeM создать свой пользовательский сигнал. В нем можно будет безболезненно, для стандартной библиотеки, изменять любые условия. https://www.mql5.com/ru/articles/691 Эта статья Вам поможет.
Генератор торговых сигналов пользовательского индикатора
Генератор торговых сигналов пользовательского индикатора
  • 2013.07.19
  • Karputov Vladimir
  • www.mql5.com
Как сделать генератор торговых сигналов основанный на пользовательском индикаторе. Как создать пользовательский индикатор. Как получить доступ к данным пользовательского индикатора. Зачем нужна конструкция IS_PATTERN_USAGE(0) и model 0.
 

допустим. 

в настройках:

input string ind="=========   Indicators  options =========";
input int iDeMarkerma_period=14;
input double          iSARstep=0.02;        // шаг увеличения скорости - ускорение
input double          iSARmaximum=0.2;      // максимальный коэффициент следования за ценой
input double DemarklevelSell=0.7;//if ( DeMArk[1] < 70 && DeMark[2] > 70 && SAP < BID ) openSell
input double DemarklevelBUY=0.3;//if ( DeMArk[1] > 30 && DeMark[2] < 30 && SAP > BID ) openBuy 
//+------------------------------------------------------------------+
//| Объявим переменные для хранения хэндлов индикаторов              |
//+------------------------------------------------------------------+
int h_demark   = INVALID_HANDLE;
int h_SAR  = INVALID_HANDLE;
//+------------------------------------------------------------------+
//| Объявим необходимые массивы для хранения данных индикаторов      |
//+------------------------------------------------------------------+
double DEMARK_BUF[];
double SAR_BUF[];
далее 
в функции OnTick
       h_demark=iDeMarker(symb,Period(),iDeMarkerma_period);
       h_SAR=iSAR(symb,Period(),iSARstep,iSARmaximum);
// собственно сигналы:
   if( TradeSignal_01(Symbol(),Period())==-1   ) // условие для продаж
   if( TradeSignal_01(Symbol(),Period())==1 ) //условие для покупок
 
 

функция сигналов:

int TradeSignal_01(string symToWork3="",int TF=0)
  {
   if(symToWork3=="")symToWork3=symToWork; if(TF==0)TF=TFToInd;
//--- ноль означает отсутствие сигнала
   int sig=0;
//--- проверим хендлы индикаторов
   if(h_demark==INVALID_HANDLE)//--- если хэндл невалидный
     {
      //--- создадим его снова                                                      
       h_demark=iDeMarker(symb,Period(),iDeMarkerma_period);
      //--- выходим из функции
      return(0);
     }
   else //--- если хэндл валидный 
     {
      //--- копируем значения из индикатора в массив
      if(CopyBuffer(h_demark,0,0,3,DEMARK_BUF)<3) //--- и если данных меньше требуемых
         //--- выходим из функции
         return(0);
      //--- зададим индексацию в массиве как таймсерию                                   
      if(!ArraySetAsSeries(DEMARK_BUF,true))
         //--- в случае ошибки индексации выходим из функции
         return(0);
     }
   if(h_SAR==INVALID_HANDLE)//--- если хэндл невалидный
     {
      //--- создадим его снова                                                      
       h_SAR=iSAR(symb,Period(),iSARstep,iSARmaximum);
      //--- выходим из функции
      return(0);
     }
   else //--- если хэндл валидный 
     {
      //--- копируем значения из индикатора в массив
      if(CopyBuffer(h_SAR,0,0,2,SAR_BUF)<2) //--- и если данных меньше требуемых
         //--- выходим из функции
         return(0);
      //--- зададим индексацию в массиве как таймсерию                                   
      if(!ArraySetAsSeries(SAR_BUF,true))
         //--- в случае ошибки индексации выходим из функции
         return(0);
     }
if ( DEMARK_BUF[shift] < DemarklevelSell && DEMARK_BUF[shift+1] > DemarklevelSell && SAR_BUF[shift] < SymbolInfoDouble(symb,SYMBOL_BID) )// openSell
sig=-1;else
if ( DEMARK_BUF[shift] > DemarklevelBUY && DEMARK_BUF[shift+1] < DemarklevelBUY && SAR_BUF[shift] > SymbolInfoDouble(symb,SYMBOL_BID) )// openBuy 
sig=1;
   else sig=0;
//--- возвращаем торговый сигнал
   return(sig);
  } 

 

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

Надеюсь я помог Вам как-то разобраться с данным добром.

 

 

 

Код советника дать не могу, Поймите правильно. Делал на своем платном шаблоне. что касается сигналов все написал как есть.  

 

 

 


 

хотя я бы сделал так:

if ( DEMARK_BUF[shift] < DemarklevelSell && DEMARK_BUF[shift+1] > DemarklevelSell && SAR_BUF[shift] > SymbolInfoDouble(symb,SYMBOL_BID) )// openSell
sig=-1;else
if ( DEMARK_BUF[shift] > DemarklevelBUY && DEMARK_BUF[shift+1] < DemarklevelBUY && SAR_BUF[shift] < SymbolInfoDouble(symb,SYMBOL_BID) )// openBuy 
sig=1;
   else sig=0;

 

 т.е. все тоже самое, только для селла - Сар должен быть выше цены. для бая ниже цены. Ведь Сар в данном случае показывает тренд. 

 

а кстати забыл. 

в настрйоках

 

input int shift=0;  // c какого бара бьерем сигнал 1 - с закрытого 0 - с текущего.  

 

такой себе результат на стандартных настройках 

Причина обращения: