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

 
deyron:
Если были бы попытки открыть ордер, то было б отображение в сообщениях. А если нет попытки открыть ордер то откуда взяться ошибке. Вопрос состоит в правильности оформления условия прохода Машки через уровни. Почему при жестко заданных параметрах ордера открываются гораздо позже чем ожидалось.

Print() и GetLastError() в нужных местах позволят ответить на все вопросы
 

День добрый!

Мне нужно найти значение последнейточки прошлой серии Параболика. Допустим, вот этой:

Я написал функцию по ее нахождению:

double FindLastLevel ()                             
 {double Level; int i;
  for (i=0; Level==0; i++) 
  {double SAR0=iSAR(Symbol(),Period(), Step, Maximum, i),
          SAR1=iSAR(Symbol(),Period(), Step, Maximum, i+1),
          SAR2=iSAR(Symbol(),Period(), Step, Maximum, i+2);

   if (SAR0>SAR1){if(SAR1<SAR2){Level=SAR2; return (Level);}}
   if (SAR0<SAR1){if(SAR1>SAR2){Level=SAR2;return (Level);}}
  }}

Т.е. идет пересчет каждого значения Параболика, начиная с текущего бара. Как только нарушается условие постепенного уменьшения/увеличения значений - функция возвращает значение на том баре, который "выбился" из тенденции. Однако, если был скачек в 1 бар, типа этого:


То функция его "не видит".

Подскажите как можно переписать функцию? Может быть, есть уже готовое решение?

 
Heroix:

День добрый!

Мне нужно найти значение последнейточки прошлой серии Параболика. Допустим, вот этой:

Я написал функцию по ее нахождению:

Т.е. идет пересчет каждого значения Параболика, начиная с текущего бара. Как только нарушается условие постепенного уменьшения/увеличения значений - функция возвращает значение на том баре, который "выбился" из тенденции. Однако, если был скачек в 1 бар, типа этого:


То функция его "не видит".

Подскажите как можно переписать функцию? Может быть, есть уже готовое решение?

Надо ориентироваться ещё на положение относительно цены.
 
Zhunko:
Надо ориентироваться ещё на положение относительно цены.

Т.е. сравнивать не только показания самого индикатора, но и положение его значений на i относительно значения цены на i, допустим?
 

Посмотри в этом советнике может что интересное будет https://www.mql5.com/ru/code/10649

 
Люди подскажите почему if(OPN<CLS && (CLS-OPN)>=50*Point) не ищет????
 
nlp2311:

Вопрос.

Почему условие не идет

if(Close_1>Open_1 && ( Close_1-Open_1)>=30*Point) buffer[i]=High_1;

...

Попробуйте вместо

if(Close_1>Open_1 && ( Close_1-Open_1)>=30*Point) buffer[i]=High_1;

сделать вот так

if (Close_1>Open_1)
{  if (Close_1-Open_1>=30*Point) buffer[i]=High_1;
}

Выложите тут ту часть кода где присутствует это условие. Может где в цикле есть ошибка. На форуме код публикуйте с помощью SRC.

 
paladin80:

Попробуйте вместо

сделать вот так

Выложите тут ту часть кода где присутствует это условие. Может где в цикле есть ошибка. На форуме код публикуйте с помощью SRC.


Пробовал....не идет.

По разному ставил скобки, извращался как мог...больше немогу!!!!!!!!!!!)))):

Вот и спрашиваю КАК БЕЗ ИЗВРАЩЕНИЙ)):???

Такое впечатление, что этот гад МТ4 вообще по условию if(.....) пипсы не видет...((

Более того, я уже отдельно индюк написал, что бы ЭТО условие провести как то...Никак((:

ПОЧЕМУ так?

 
nlp2311:

Вот он.... падла(((!!!!

уже злюсььь...


А чему stoplevel равен проверяли?
 

Добрый день.Написал индикатор,в котором поместил два разных MACD в одном окне и в ОДНОМ МАСШТАБЕ.

Теперь мне надо снова пройти по всем ВИДИМЫМ барам,найти момент,когда на НУЛЕВОМ баре сигнальная линия второго индикатора (оранжевая ) будет равна сигнальной линии первого (красная линия).Сигнальные линии должны слиться в одну,но у меня ничего не получается!На рисунке в верхнем окне мой индикатор,а в нижнем - сигнальные линии .

Кто-нибудь поможет разобраться?


Код 2
-----

#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color5 Aqua
#property indicator_color6 DarkOrange
#property  indicator_width1  2
#property  indicator_width5  2


//--- buffers
double Macd1Buffer[];
double Signal1Buffer[];
double Macd2Buffer[];
double Signal2Buffer[];
double Macd3Buffer[];
double Signa13Buffer[];

//--- for one bar
datetime last;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_NONE);
   SetIndexBuffer(0,Macd1Buffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,Signal1Buffer);
   SetIndexStyle(2,DRAW_NONE);
   SetIndexBuffer(2,Macd2Buffer);
   SetIndexStyle(3,DRAW_NONE);
   SetIndexBuffer(3,Signal2Buffer);
   SetIndexStyle(4,DRAW_NONE);
   SetIndexBuffer(4,Macd3Buffer);
   SetIndexStyle(5,DRAW_LINE);
   SetIndexBuffer(5,Signa13Buffer);
   
   
   IndicatorDigits(Digits);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    if(last>=Time[0]) return;
  
    double max_M1=-0.01,min_M1=0.01,
           max_M2=-0.01,min_M2=0.01,
           max_S1=-0.01,min_S1=0.01,
           max_S2=-0.01,min_S2=0.01,
           max1=-0.01,min1=0.01,
           max2=-0.01,min2=0.01,
           max3,
           M,
           Dmax_3,
           D_sig,
           D_sig_Last=1.0;
  
  
   int j=0;                                             
       
    while(j<WindowBarsPerChart()-1)
{          
//----
   for(int i=0;i<=j;i++)
       
      { 
           Macd1Buffer[i]=iMACD(0,PERIOD_H1,6,12,5,PRICE_CLOSE,MODE_MAIN,i+1);          // основная линия 1-ого MACD        
           Macd2Buffer[i]=iMACD(0,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_MAIN,i+1);         // основная линия 2-ого MACD
           
              max_M1=MathMax(Macd1Buffer[i],max_M1);
              min_M1=MathMin(Macd1Buffer[i],min_M1);
           
              max_M2=MathMax(Macd2Buffer[i],max_M2);
              min_M2=MathMin(Macd2Buffer[i],min_M2); 
     
           Signal1Buffer[i]=iMACD(0,PERIOD_H1,6,12,5,PRICE_CLOSE,MODE_SIGNAL,i+1);      // сигнальная линия 1-ого MACD   
           Signal2Buffer[i]=iMACD(0,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+1);     // сигнальная линия 2-ого MACD
              
              max_S1=MathMax(Signal1Buffer[i],max_S1);
              min_S1=MathMin(Signal1Buffer[i],min_S1);
           
              max_S2=MathMax(Signal2Buffer[i],max_S2);
              min_S2=MathMin(Signal2Buffer[i],min_S2); 
    
              max1=MathMax(max_M1,max_S1);                                              // максимум 1-ого MACD
              min1=MathMin(min_M1,min_S1);                                              // минимум 1-ого MACD
           
              max2=MathMax(max_M2,max_S2);                                              // максимум 2-ого MACD
              min2=MathMin(min_M2,min_S2);                                              // минимум 2-ого MACD
      }   
        
           M=(max1-min1)/(max2-min2);                                                   // соотношение диапазонов max-min 1-ого и 2-ого MACD  
           max3=max2*M;                                                                 // max 3-его MACD,т.е."нового" 2-ого MACD
           Dmax_3=max1-max3;                                                            // смещение 3-ого MACD относительно 1-ого MACD
            
           
    for( i=0;i<=j;i++)
       
      {       
         Macd3Buffer[0]=Macd2Buffer[0]*M+Dmax_3;                                        // приведение диапазона max-min 2-ого MACD к диапазону 1-ого MACD,
                                                                                        // т.е.подучаем 3-ий MACD и совмещаем max и min 3-его MACD с                                                                                    // max и min 1-ого MACD                                                                                                                                       
         Signa13Buffer[0]=Signal2Buffer[0]*M+Dmax_3;                                    // max и min 1-ого MACD                                            
      }  
      
      
         D_sig=MathAbs(Signal1Buffer[0]-Signa13Buffer[0]);                              // разница между сигнальными линиями 1-ого и 3-ого MACD на
                                                                                        // нулевом баре
 if(Signa13Buffer[0]==Signal1Buffer[0])
      
        break;          
             
              D_sig_Last=D_sig; 
              
         
         j++;
         
}             
     
      Comment( "\n"," Баров = ",WindowBarsPerChart()-1, 
               "\n"," Macd1Buffer = ",DoubleToStr(Macd1Buffer[0],4),
               "\n"," Signal1Buffer = ",DoubleToStr(Signal1Buffer[0],4),
               "\n"," Macd3Buffer = ",DoubleToStr(Macd3Buffer[0],4),
               "\n"," Signa13Buffer = ",DoubleToStr(Signa13Buffer[0],4),
               "\n"," D_sig = ",DoubleToStr(D_sig,4));
               
               
               
               
               
               
//----
   last=Time[0];
//----
   return(0);
  }
//+------------------------------------------------------------------+