[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 222

 
 Что за хрень. Тут ФЛУД или всё-таки форум тематический. За такой порожняк банить нужно forever.
 

Здравствуйте.Я уже задавал этот вопрос.Мне ответили,за что огромное СПАСИБО.Но на слух трудно воспринимать да и в программировании я не силён.А суть вопроса в том,что мне нужно подсчитать количество баров в каждом НЕПРЕРЫВНОМ блоке гистограммы верхнего индикатора.Я написал такой индикатор (самый нижний).В нём значение каждого столбца гистограммы соответствует количеству баров в непрерывном блоке верхнего индикатора,но он начинает отображаться ТОЛЬКО с момента его установки (красная вертикальная линия).А мне нужно,чтобы он отображался и на предыдущих барах (ну как при установке AO или CCI),т.е. чтобы "картинка" была похожа на средний индикатор (это тот же нижний индикатор,только установленный ещё раньше).С благодарностью выслушаю любые предложения(желательно с фрагментами кода).Код нижнего индикатора прилагаю.

#property indicator_separate_window
#property indicator_minimum -7
#property indicator_maximum 7
#property indicator_buffers 2
#property indicator_color1 Yellow
#property indicator_color2 DarkOrange
#property indicator_width1  2
#property indicator_width2  2
#property indicator_level1 0.0
//--- buffers
double UpMapBuffer[];
double DnMapBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,UpMapBuffer);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1,DnMapBuffer);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {   
    
    int i;

    for(i=1;i<Bars;i++)                                                  
     {
      double AO_Sig_Sig_1 = iCustom(NULL,0,"Signal-Signal",0,i);                           
      double AO_Sig_Sig_2 = iCustom(NULL,0,"Signal-Signal",0,i+1);
                  
      if((AO_Sig_Sig_1!=AO_Sig_Sig_2))
       {
        break;
        i=0;
       }                                                                
     }
         
    i=i*(AO_Sig_Sig_1); 
            
    if(i>0)            
     {
      UpMapBuffer[0]=i;
     }
    else
     {
      UpMapBuffer[0]=0;
     } 
         
    if(i<0)         
     {
      DnMapBuffer[0]=i;
     }
    else
     {
      DnMapBuffer[0]=0;
     }            
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
MK07:

Здравствуйте.Я уже задавал этот вопрос.Мне ответили,за что огромное СПАСИБО.Но на слух трудно воспринимать да и в программировании я не силён.А суть вопроса в том,что мне нужно подсчитать количество баров в каждом НЕПРЕРЫВНОМ блоке гистограммы верхнего индикатора.Я написал такой индикатор (самый нижний).В нём значение каждого столбца гистограммы соответствует количеству баров в непрерывном блоке верхнего индикатора,но он начинает отображаться ТОЛЬКО с момента его установки (красная вертикальная линия).А мне нужно,чтобы он отображался и на предыдущих барах (ну как при установке AO или CCI),т.е. чтобы "картинка" была похожа на средний индикатор (это тот же нижний индикатор,только установленный ещё раньше).С благодарностью выслушаю любые предложения(желательно с фрагментами кода).Код нижнего индикатора прилагаю.

Что-то типа такого?

-

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 DodgerBlue
#property indicator_color2 Bisque
#property indicator_width1 2
#property indicator_width2 2
//===============================
double fx1[],fx2[];
double ao,ao1;
int ti,n,fs;
//******************************************************************
int init()
{
   SetIndexBuffer(0,fx1); SetIndexStyle(0,2);
   SetIndexBuffer(1,fx2); SetIndexStyle(1,2);
   
   SetLevelValue(0,0);
   SetLevelValue(1,10);
   SetLevelValue(2,20);
   SetLevelValue(3,-10);
   SetLevelValue(4,-20);   

   return(0);
}
//******************************************************************
int start()
{
   int cbi=Bars-IndicatorCounted()-1; if (cbi<0) return(-1); 
   if (cbi==1) cbi--;
   if (cbi>1) {cbi=Bars-37; n=0; ti=Time[cbi];}  
   //-------------------------------------------------
   for(int i=cbi; i>=0; i--) 
   {
      if (ti!=Time[i]) {n++; ti=Time[i];}
      
      ao  = iAO(NULL,0,i); 
      ao1 = iAO(NULL,0,i+1); 
      
      if (ao>ao1) {if (fs==2) n=1; fs=1;} else
      if (ao<ao1) {if (fs==1) n=1; fs=2;}
      
      if (fs==1) {fx1[i]=n;  fx2[i]=0;} else
      if (fs==2) {fx2[i]=-n; fx1[i]=0;}
   } 
   
   return(0);
}
//******************************************************************
 
ANG3110:

Что-то типа такого?

-

 


Огромное СПАСИБО! Именно то,что нужно!
 
Здравствуйте! Подскажите пожалуйста, почему позиция открывается, а стоп и профит нет. Заранее спасибо!

int start()
{
double Sl =Low[1];
double Tpb =((High[1]-Open[1])/Tp)+Open;
double bar2b;
if (Open[2]<Close[2])bar2b=(High[2]-Open[2]);
double bar1b;
if (Open[1]<Close[1])bar1b=(High[1]-Open[1]);
if(bar2b<bar1b)OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Sl,Tpb,"",16384,0,Green);
 
xanzel:

помогите!!!

простой индикатор moving average

как прописывается в советнике применить к : Previous Indicators Data

iMA(NULL,0,8,0,MODE_EMA,PRICE_PREVIOUS,0);


Спамим. Хватит отдельной ветки
 
Vinin:

лучше кучу слов написать чем просто помочь "это выше жизненное кредо я так понимаю"
 
xanzelлучше кучу слов написать чем просто помочь "это выше жизненное кредо я так понимаю" 
За спам существует одно наказание - бан. Так что я просто спасаю заблудшую душу. Если не нравится, то всегда с баней помогу
 

Господа!Добрый вечер!

Скажите пожалуйста - почему компилятор считает что в нижеприведенном коде

переменная  int Ticket  не определена.

Он выдает одну ошибку

'Ticket' - variable not defined    C:\Program Files\Alpari NZ MT4(2)\experts\hhhh.mq4 (18, 6)

int start()



{

 double Price=iOpen (Symbol (),0,0);        
 double SL=NormalizeDouble (Price-3000*Point, Digits);         
 double TP=NormalizeDouble (Price+100*Point, Digits);
 
 
 #include <OMASS.mq4> //объявление и инициализация массива
 double value =  Bid ;// параметру value функции ArrayBsearch присваивается значение текущей цены
 int S = ArrayBsearch(  massiv[43],  value, WHOLE_ARRAY,  0, MODE_ASCEND) //функция ищет самое близкое к текущей цене значение
 if (MathAbs(NormalizeDouble(Bid - S,Digits))<=0.5*Point//если текущая цена отличается от значени возвращенного функцией не более чем 0,5 п.
 if (Bid==Price  )
 int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP,"jfh",123 );//открыть ордер       
}





Хотя в нижеприведенном коде переменная Ticket так же определена в операторе присвоения и код компилируется успешно

int start()

{

 double Price=iOpen (Symbol (),0,0);        
 double SL=NormalizeDouble (Price-3000*Point, Digits);         
 double TP=NormalizeDouble (Price+100*Point, Digits);    
 

  
      if (Bid==Price  )
     
  int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP,"jfh",123 );



Спасибо.
 
solnce600:

Господа!Добрый вечер!

Скажите пожалуйста - почему компилятор считает что в нижеприведенном коде

переменная  int Ticket  не определена.

Он выдает одну ошибку

'Ticket' - variable not defined    C:\Program Files\Alpari NZ MT4(2)\experts\hhhh.mq4 (18, 6)


Хотя в нижеприведенном коде переменная Ticket так же определена в операторе присвоения и код компилируется успешно


Наверно просто скобок в одном месте не хватает

 

if (MathAbs(NormalizeDouble(Bid - S,Digits))<=0.5*Point//если текущая цена отличается от значени возвращенного функцией не более чем 0,5 п.