Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 807

 

Всем доброго дня! Сижу кручу индикатор. Вроде все правильно сделал. Но получается такая шняга... открывает сделки на каждой свече


Код советника

   // получение сигнала _________________________________________________________________________________________________________

   int signal=-1;

   if (time_bar!=Time[0]) {

      time_bar=Time[0];

      double stop_buy=iCustom(Symb,0,"cm-FiguresCandle",AlertON,colorBulls,colorBears,DrawCandle,0,1);

      double stop_sell=iCustom(Symb,0,"cm-FiguresCandle",AlertON,colorBulls,colorBears,DrawCandle,1,1);

      if(stop_buy!=EMPTY_VALUE || stop_sell!=EMPTY_VALUE) {

         double super_buy=iCustom(Symb,0,"xSuperTrend Tape MTF NRP","","",SuperTrend_Period,SuperTrend_Multiplier,SuperTrend_TimeFrame,SuperTrend_AutoTF,0,1);

         if(stop_buy!=EMPTY_VALUE && super_buy==1) signal=0;

         if(stop_sell!=EMPTY_VALUE && super_buy==EMPTY_VALUE) signal=1;

         }


код индикатора


   return(0);

  }

//+------------------------------------------------------------------+

int start()

{

   string NameFigur;

   int counted_bars=IndicatorCounted();

   if(counted_bars<0) return(-1);

   if(counted_bars>0) counted_bars--;

   int limit=Bars-counted_bars;

   if(counted_bars==0) limit-=1+2;


   for(int i=1; i<limit; i++)

     {

      bool up=false,down=false;

      double MA0 = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,i);

      double MA1 = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,i);

      double MA2 = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,i+1);

      double MA3 = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,i+2);


      if(MA0>MA1 && MA1>MA2 && MA2>MA3) up=true;

      else up=false;

      if(MA0<MA1 && MA1<MA2 && MA2<MA3) down=true;

      else down=false;

      //---

      NameFigur="";

      if(Close[i]>Close[i+1] && Close[i]>Open[i+1])

        {

         if(down && Open[i+1]>Close[i+1] && Open[i]>Close[i+1] && Close[i]<Open[i+1] && Close[i]>Open[i])

           {

            NameFigur="BullHarami";

            Redraw(i,colorBulls,NameFigur); Redraw(i+1,colorBulls,NameFigur);

           }

         if(Open[i+1]>Close[i+1] && Open[i]>Close[i+1] && Open[i]<Open[i+1] && Close[i]>Open[i+1])

           {

            NameFigur="BullCross";

            Redraw(i,colorBulls,NameFigur); Redraw(i+1,colorBulls,NameFigur);

           }

         if(Close[i+1]<Open[i+1] && Open[i]<Close[i+1] && Close[i]>Open[i+1])

           {

            NameFigur="Bullish Engulfing";

            if(Close[i+1]<Open[i+1] && Close[i]>Open[i] && Open[i]<Close[i+1] && Close[i]>Close[i+1]+((Open[i+1]-Close[i+1])/2))

              {

               NameFigur="BullPierce";

              }

            Redraw(i,colorBulls,NameFigur); Redraw(i+1,colorBulls,NameFigur);

           }

         if(Close[i+2]<Open[i+2] && Open[i+1]<Close[i+2] && Close[i+1]<Close[i+2] && Open[i]>Close[i+1] && Open[i]>Open[i+1] && Close[i]>=Close[i+2])

           {

            NameFigur="Morning Star";

            Redraw(i,colorBulls,NameFigur); Redraw(i+1,colorBulls,NameFigur); Redraw(i+2,colorBulls,NameFigur);

           }

        }

      if(Open[i]-Low[i]>MathMax(High[i]-Close[i],Close[i]-Open[i])*3 && Close[i]-Low[i]>MathMax(High[i]-Close[i],Close[i]-Open[i])*3)

        {

         NameFigur="Hammer";

         if(up) {Redraw(i,colorBulls,NameFigur); Redraw(i+1,colorBulls,NameFigur);}

         if(down) {Redraw(i,colorBears,NameFigur); Redraw(i+1,colorBears,NameFigur);}

        }

      ///// медведи ///// медведи ///// медведи ///// медведи ///// медведи ///// медведи ///// медведи ///// медведи ///// медведи

      if(Close[i]<Close[i+1] && Close[i]<Open[i+1])

        {

         if(up && Open[i+1]<Close[i+1] && Open[i]<Close[i+1] && Close[i]>Open[i+1] && Close[i]<Open[i])

           {

            NameFigur="BearHarami";

            Redraw(i,colorBears,NameFigur); Redraw(i+1,colorBears,NameFigur);

           }

         if(Open[i+1]<Close[i+1] && Open[i]<Close[i+1] && Open[i]>Open[i+1] && Close[i]<Open[i+1])

           {

            NameFigur="BearCross";

            Redraw(i,colorBears,NameFigur); Redraw(i+1,colorBears,NameFigur);

           }

         if(Close[i+1]>Open[i+1] && Close[i]<Open[i] && Open[i]>Close[i+1] && Close[i]<Open[i+1])

           {

            NameFigur="BearEngulf";

            if(Close[i+1]>Open[i+1] && Open[i]>Close[i+1] && Close[i]<Close[i+1]-((Close[i+1]-Open[i+1])/2))

              {

               NameFigur="DarkCloud";

              }

            Redraw(i,colorBears,NameFigur); Redraw(i+1,colorBears,NameFigur);

           }


         if(Close[i+2]>Open[i+2] && Open[i+1]>Close[i+2] && Close[i+1]>Close[i+2] && Open[i]<Close[i+1] && Open[i]<Open[i+1] && Close[i]<Close[i+2])

           {

            NameFigur="EveningStar";

            Redraw(i,colorBears,NameFigur); Redraw(i+1,colorBears,NameFigur); Redraw(i+2,colorBears,NameFigur);

           }

         if(up && High[i]-Open[i]>MathMax(Close[i]-Low[i],Open[i]-Close[i])*3 && High[i]-Close[i]>MathMax(Close[i]-Low[i],Open[i]-Close[i])*3)

           {

            NameFigur="Shooter";

            Redraw(i,colorBears,NameFigur); Redraw(i+1,colorBears,NameFigur);

           }

        }

      if(NameFigur!="")

        {

         double DELTA=(MathMax(High[i],High[i+1])-MathMin(Low[i],Low[i+1]))/2;

         if(Color==colorBears) {BufferDN[i]=MathMax(High[i],High[i+1]);P=BufferDN[i]+DELTA;}

         else {BufferUP[i]=MathMin(Low[i],Low[i+1]);P=BufferUP[i]-DELTA;}

         DrawTEXT(StringConcatenate(NameFigur," ",TimeToStr(Time[i],TIME_DATE|TIME_MINUTES)),NameFigur,Color,Time[i+1],P);

        }

     }

   if(Timei!=Time[0] && AlertON && i==0 && NameFigur!="") {Alert(Symbol()+" FiguresCandle = "+NameFigur);Timei=Time[0];}

   return(0);

  }

//-------------------------------------------------------------------

void Redraw(int i,color col,string name)

  {

   Color=col;

   if(!DrawCandle) return;

   name=StringConcatenate(name," ",TimeToStr(Time[i],TIME_DATE|TIME_SECONDS));

   ObjectCreate(name,OBJ_TREND,0,Time[i],High[i],Time[i],Low[i]);

   ObjectSet(name,OBJPROP_COLOR,col);

   ObjectSet(name,OBJPROP_STYLE,STYLE_SOLID);

   ObjectSet(name,OBJPROP_BACK,false);

   ObjectSet(name,OBJPROP_RAY,false);

   ObjectSet(name,OBJPROP_WIDTH,2);

   name=StringConcatenate(name," o");

   ObjectCreate(name,OBJ_TREND,0,Time[i],Open[i],Time[i],Open[i]);

   ObjectSet(name,OBJPROP_COLOR,col);

   ObjectSet(name,OBJPROP_STYLE,STYLE_SOLID);

   ObjectSet(name,OBJPROP_BACK,false);

   ObjectSet(name,OBJPROP_RAY,false);

   ObjectSet(name,OBJPROP_WIDTH,2);

   name=StringConcatenate(name," c");

   ObjectCreate(name,OBJ_TREND,0,Time[i],Close[i],Time[i]+Period()*60,Close[i]);

   ObjectSet(name,OBJPROP_COLOR,col);

   ObjectSet(name,OBJPROP_STYLE,STYLE_SOLID);

   ObjectSet(name,OBJPROP_BACK,false);

   ObjectSet(name,OBJPROP_RAY,false);

   ObjectSet(name,OBJPROP_WIDTH,2);

  }

//-------------------------------------------------------------------

void DrawTEXT(string NT,string Name,color col,datetime t1,double p1)

  {

   ObjectDelete(NT);

   ObjectCreate(NT,OBJ_TEXT,0,t1,p1,0,0,0,0);

   ObjectSet(NT,OBJPROP_COLOR,col);

   ObjectSetText(NT,Name,10,"Arial");

  }

//--------------------------------------------------------------------


 
Kos Mos:

Всем доброго дня! Сижу кручу индикатор. Вроде все правильно сделал. Но получается такая шняга... открывает сделки на каждой свече



"простынка" конечно знатная :-) вставляйте код аккуратнее и не надо копипастить явно излишнее

по теме  - напечатайте себе значения stop_buy и stop_sell. Потому что явно срабатывает условие :

  if(stop_buy!=EMPTY_VALUE || stop_sell!=EMPTY_VALUE) {

возможно stop_buy и stop_sell инициализируются 0 а не EMPTY_VALUE

 
Maxim Kuznetsov:

"простынка" конечно знатная :-) вставляйте код аккуратнее и не надо копипастить явно излишнее

по теме  - напечатайте себе значения stop_buy и stop_sell. Потому что явно срабатывает условие :

  if(stop_buy!=EMPTY_VALUE || stop_sell!=EMPTY_VALUE) {

возможно stop_buy и stop_sell инициализируются 0 а не EMPTY_VALUE

извиняюсь что так получилось )) на всю страницу ейбогу)


Ща буду пробовать)

 
Maxim Kuznetsov:

"простынка" конечно знатная :-) вставляйте код аккуратнее и не надо копипастить явно излишнее

по теме  - напечатайте себе значения stop_buy и stop_sell. Потому что явно срабатывает условие :

  if(stop_buy!=EMPTY_VALUE || stop_sell!=EMPTY_VALUE) {

возможно stop_buy и stop_sell инициализируются 0 а не EMPTY_VALUE

чет все равно не то получается. Заметил кстати что сделки в селл открывает правильно, а вот в бай с ума сходит и открывает миллиард))

 
Kos Mos:

чет все равно не то получается. Заметил кстати что сделки в селл открывает правильно, а вот в бай с ума сходит и открывает миллиард))

Ну хоть поиск можно включить? Вставить код...

Вот-же незадача... даже поиск не надо включать, движок форума сам ставит сцильки...
 
Alexey Viktorov:

Ну хоть поиск можно включить? Вставить код...

Вот-же незадача... даже поиск не надо включать, движок форума сам ставит сцильки...

дико извиняюсь, опыта мало поведения себя на форуме)))



   // получение сигнала _________________________________________________________________________________________________________
   int signal=-1;
   if (time_bar!=Time[0]) {
      time_bar=Time[0];
      double stop_buy=iCustom(Symb,0,"cm-FiguresCandle",AlertON,colorBulls,colorBears,DrawCandle,0,1);
      double stop_sell=iCustom(Symb,0,"cm-FiguresCandle",AlertON,colorBulls,colorBears,DrawCandle,1,1);
      if(stop_buy!=EMPTY_VALUE || stop_sell!=EMPTY_VALUE) {
         double super_buy=iCustom(Symb,0,"xSuperTrend Tape MTF NRP","","",SuperTrend_Period,SuperTrend_Multiplier,SuperTrend_TimeFrame,SuperTrend_AutoTF,0,1);
        if(stop_buy!=EMPTY_VALUE && super_buy==1) signal=0;
         if(stop_sell!=EMPTY_VALUE && super_buy==EMPTY_VALUE) signal=1;
         }


 
чет лыжи не едут, памагити пожалуйсто)
 
Всем здрасти, кто поможет объединить два индикатора в один, исходники есть, ну очень нужно
 
Олег:
Всем здрасти, кто поможет объединить два индикатора в один, исходники есть, ну очень нужно

Вы либо показывайте что у вас самого не получается при объединении, либо сюда обращайтесь, если сами не делали, или не хотите делать:

Торговые приложения для MetaTrader 5 на заказ
Торговые приложения для MetaTrader 5 на заказ
  • www.mql5.com
Имеется готовый год с Амиброкера который можно использовать для "перевода" в МТ4 ( с дополнениями) Советник должен работать на всех тайм фреймах (внутри дня, дневной и выше) и обязательно на Ренко Советник должен торговать на корзине инструментов (портфель) У советника должна быть возможность менять параметры в окне (без необходимости открывать...
 
Artyom Trishkin:

Вы либо показывайте что у вас самого не получается при объединении, либо сюда обращайтесь, если сами не делали, или не хотите делать:

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

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