Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 224

 
Integer:


Расскажите, объясните, как так случается, что вместо "этого" пишут "етого"?

1. Вы не знаете, что "это" пишется с буквы "э", а не с "е"?

2. Лень двинуть рукой до буквы "э", проще нажать "е"?

3. На клавиатуре нет клавишы "э"? Если нет, почему ее нет?

4. Какие-то особые понты?

5. Некоторая другая неведомая причина. Какая?


Я не русский и на клаве нет русских букв. Тем боле пользуюсь фонетической клавитурой (такая прога). Нажимаю "p", а пишет "п". Буква э есть тоже. Надо наэать "\".

Граматические ошибки бывают, так как граматика довно забылась. Писать на русском приходиться только на форумах и то после многих лет.

Извеняюсь за ошибки. Непинайте сильно.

 
artmedia70:

Эту строку можно убрать, т.к. iFractals() в качестве отсутствия фрактала возвращает ноль, а не "пустое значение" (EMPTY_VALUE).

У меня к вам вопрос: вы пытаетесь сделать индикатор, который будет искать два идущих подряд фрактала? Или в советнике ищете два подряд фрактала, находящихся ближе всех к текущему бару? В этом вопросе не праздное любопытство, т.к. методы поиска в индикаторе и в советнике разные - индикатор рассчитывается от конца к началу - из прошлого в настоящее, а советник просматривает бары из настоящего в прошлое. Соответственно, и направления поиска тоже разные в советнике и в индикаторе.

И последний вопрос: что должно получиться на выходе?



Не интересовался ( до етого момента не было потребности) что возвращает iFractals(). Если реально 0 - то да, извените что я вам наврал, EMPTY_VALUE не нужно проверять.

В красивое оправдание себя придумал такой вариант формулеровки - был расмотрен общий случай с EMPTY_VALUE, а не локальений с возвратом 0

Но самому смешно и стыдно, что такого елементарного не знал.

Код как я понял вам был для индикатора - artmedia70 прав в том что для советника подход иной.

Времени нет - сделаю все ночью, когда домой вернусь, ведь ми gince не очень друг друга поняли ( после нахождения условия двох фракталов событие надо обработать) а так все норм.

//----
   БЛОК ПРОВЕРКИ НОВОГО БАРА;                //проверить наличие нового бара 

   int   a1=0,                               //преведущий фрактал (-1 ->нижний, 1 -> верхний)
         a2,                                 //нынешний фрактал  (-1 ->нижний, 1 -> верхний)
         a3,                                 //сума преведущий + нынешний
         kilkict,                            //была введена с мыслю уменьшить перерасчет после глобального расчета (идея просто еще не реализована)
         frac,                               //frac - флаг существования фракталов,
         frac1=0,                            //frac1- счетчик фракталов (+1 или 0 за цикл)сейчас просто выполняет роль фильтра, надо найти сперва 2 фрактала чтобы приступить к их сравнению.
         i;
     
   kilkict=Bars;                            

   for (i=3; i<kilkict;i++){                 // 3
      a2=0;
      frac=0;
      if(iFractals(NULL, 0, MODE_UPPER, i)>0) {            
         if (Bufer0!=EMPTY_VALUE) {          //не нужно для iFrctals()данной проверки условий
            a2+=1;                           //к числу фракталов добавляем 1
            frac=1;                          //флаг - фрактал есть
            frac1++;                         //счетчик увеличиваем на 1
         }
      }
      if(iFractals(NULL, 0, MODE_LOWER, i)>0) {            
         if (Bufer0!=EMPTY_VALUE) {          //не нужно для iFrctals() данной проверки условий
            if(a2==0){              
               frac1++;                      //счетчик увеличиваем на 1 
               frac=1;                       //флаг - фрактал есть
            }
            a2+=-1;                          //к числу фракталов добавляем -1(т. е. уменшаем)
         }
      } 
      if (frac==0){continue;}                // если флага нет (фрактал не найден)
      if (frac1==1){                         //если счетчик равен 1,
         a1=a2; 
         continue;
      }          
      a3=a1+a2;
      if(a3<0)           { a1=a2; БЛОК ОБРАБОТКИ УСЛОВИЯ ДВА ФРАКТАЛА НАЙДЕНО; continue;}//Два фрактала вниз  подряд найдено// 
      if(a3>0)           { a1=a2; БЛОК ОБРАБОТКИ УСЛОВИЯ ДВА ФРАКТАЛА НАЙДЕНО; continue;}//Два фрактала вверх подряд найдено //
      if(a3==0 && a1==0) { a1=a2; БЛОК ОБРАБОТКИ УСЛОВИЯ ДВА ФРАКТАЛА НАЙДЕНО; БЛОК ОБРАБОТКИ УСЛОВИЯ ДВА ФРАКТАЛА НАЙДЕНО; }// Два фрактала подряд вверх и два фрактала подряд вниз найдено //
   } 

 
gince:


...

Извеняюсь за ошибки. Непинайте сильно.


Да просто интересуюсь, забавное явление.
 
Integer:

Да просто интересуюсь, забавное явление.

Спасибо, что подправили.
 
if(!SL==0)
   {
  dollarsPerPip = lot/SL;
   }

ну ктож так делает то ???

if(SL>0) dollarsPerPip = lot/SL;

Зачем тулить кучу { } ?? и замедлять процес ...

как вариант можно и так

if(SL) dollarsPerPip = lot/SL;
 
gince:


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

for (i=kilkict;i>0;i--)

Результат - два верхних -> продаем(стрелка в низ), два нижних -> покупаем (стрелка в верх). Сигнал появиться +2 бара в право от фрактала. Вот это и хочу по началу посмотреть на истории визуально. И наверное нужен будет фильтр.

Тогда вопрос: зачем измываете себя написанием этого индикатора, коль просто хотите глянуть на истории? Вам же дали ссылку на индикатор Артикула. Он делает то же самое, что вы хотите:

//+------------------------------------------------------------------+
//|                                                    iFractals.mq4 |
//|                             Copyright © 2010, EGEN Software LTD. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright   "Copyright © 2010, EGEN Software LTD."
#property link        "http://www.metaquotes.net"

#property indicator_chart_window

#property indicator_buffers   2
#property indicator_color1    Lime
#property indicator_color2    Red
#property indicator_width1    2
#property indicator_width2    2

datetime TIME; double F,F1,F2;

double WAVE.0[];
double WAVE.1[];

bool EQ(int value1, int value2)
{
   return(value1==value2);
}

bool ZERO(int value)
{
   return(EQ(value,0));
}

int MathSign(double value1, double value2)
{
   if(value1<0)
      if(value2<0) return(-1);
   if(value1>0)
      if(value2>0) return(1);
   return(0);
}

bool TOTAL(int index)
{
   return(index<Bars);
}

double FRACTALS(int mode, int shift)
{
  return(iFractals(NULL,0,mode,shift));
}

double UPPER(int shift)
{
   return(FRACTALS(MODE_UPPER,shift));
}

double LOWER(int shift)
{
   return(FRACTALS(MODE_LOWER,shift));   
}

int PEAK(int shift)
{
   int peak=0;
   double F1=UPPER(shift); 
   if(F1>0) peak++;
   double F2=LOWER(shift); 
   if(F2>0) peak--;
   F=F1+F2; 
   return(peak);
}

void init()
{
   IndicatorBuffers(2);
   SetIndexBuffer(0,WAVE.0);
   SetIndexStyle(0,DRAW_ARROW,EMPTY);  
   SetIndexArrow(0,236);    
   SetIndexBuffer(1,WAVE.1);
   SetIndexStyle(1,DRAW_ARROW,EMPTY);      
   SetIndexArrow(1,238);
   IndicatorDigits(Digits);
   IndicatorShortName("iFractals");  
}

bool F1(int shift)
{
   int peak=PEAK(shift);
   if(ZERO(peak)) return(false); 
   F1=F*peak;
   return(true);
}

int WAVE.1(int shift)
{   
   for(int i=shift; TOTAL(i); i++) 
      if(F1(i)) break; 
   return(i);
}

bool F2(int shift)
{
   int peak=PEAK(shift);
   if(ZERO(peak)) return(false); 
   F2=F*peak;
   return(true);
}

int WAVE.2(int shift)
{   
   for(int i=shift; TOTAL(i); i++) 
      if(F2(i)) break; 
   return(i);
}

void WAVE(int shift)
{
   WAVE.0[shift]=EMPTY_VALUE;
   WAVE.1[shift]=EMPTY_VALUE;
   shift=WAVE.1(shift); 
   int index=shift; shift++;
   shift=WAVE.2(shift);
   int wave=MathSign(F1,F2);
   F1=MathAbs(F1);
   F2=MathAbs(F2);
   if(wave<0) 
      if(F1<F2) WAVE.1[index]=F1; else WAVE.0[index]=F1;                  
   if(wave>0) 
      if(F1>F2) WAVE.0[index]=F1; else WAVE.1[index]=F1;       
}   

void CheckWave()
{
   for(int i=3; TOTAL(i); i++) WAVE(i);
}   

void start()
{
   CheckWave();
}

Компилируйте и глядите на истории. А далее уже делайте выводы.

Или "в гамаке стоя" удобнее?

 
artmedia70:

Тогда вопрос: зачем измываете себя написанием этого индикатора, коль просто хотите глянуть на истории? Вам же дали ссылку на индикатор Артикула. Он делает то же самое, что вы хотите:

Компилируйте и глядите на истории. А далее уже делайте выводы.

Или "в гамаке стоя" удобнее?



а вы отследите логику индюка ))

не заколебетесь 20 функций раскрывать ???

 
VOLDEMAR:

ну ктож так делает то ???

Зачем тулить кучу { } ?? и замедлять процес ...

как вариант можно и так


прикольно, не знал, надо будет проверить.
 
ALXIMIKS:


а вы отследите логику индюка ))

не заколебетесь 20 функций раскрывать ???

Там каждая функция возвращает результат понятный с первого взгляда. Не заколебусь ни разу... Там всё ясно как день. Да к тому же - оно ему надо? Ему нужно на истории поглядеть, а не в код.
 
VOLDEMAR:

ну ктож так делает то ???

Зачем тулить кучу { } ?? и замедлять процес ...

как вариант можно и так

Спасибо что поправили.

Имею такую глупую привычку

написав условный оператор

сразу ставить круглые скобки