+1
Немного добавил информативности:

//+------------------------------------------------------------------+
//|                                                   Andrey1979.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                          http://www.mункцql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mункцql5.com"
#property version   "1.00"
#property strict

extern string ind_name = "Filter CCI";
extern double CCI=14;
extern double c1= 1;
extern double c2= 1;
extern double c3= 1;
extern ENUM_TIMEFRAMES TF = PERIOD_CURRENT;
extern int Shift         = 0;        // бар индикатора
extern double   Level=100;
//extern string ind_name =  "Filter CCI real alert";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  ObjectsDeleteAll(); 
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double filtr_CCI = iCustom(NULL,TF,ind_name,CCI,c1,c2,c3,0,Shift);
   if(filtr_CCI>Level || filtr_CCI<-Level)
      {
       DrawLABEL("filtr CCI",StringConcatenate("filtr CCI = ",DoubleToString(filtr_CCI,2)),5,35,Color(filtr_CCI<0,clrRed,clrGreen),ANCHOR_RIGHT);
      }
   if(filtr_CCI<Level && filtr_CCI>-Level)
       {     
          DrawLABEL("Takeprofit",StringConcatenate("Индикатор находится в зоне. filtr CCI = ",DoubleToString(filtr_CCI,2)),5,35,clrYellow);
       }
  }
//+-------------------------------------------------------------------+
//|                                                                   |
//+-------------------------------------------------------------------+
color Color(bool P,color a,color b)
{
   if (P) return(a);
   else return(b);
}
//+-------------------------------------------------------------------+
//|                                                                   |
//+-------------------------------------------------------------------+
void DrawLABEL(string name, string Name, int X, int Y, color clr,ENUM_ANCHOR_POINT align=ANCHOR_RIGHT)
{
   if (ObjectFind(name)==-1)
   {
      ObjectCreate(name, OBJ_LABEL, 0, 0, 0);
      ObjectSet(name, OBJPROP_CORNER, 1);
      ObjectSet(name, OBJPROP_XDISTANCE, X);
      ObjectSet(name, OBJPROP_YDISTANCE, Y);
      ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
      ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);
      ObjectSetInteger(0,name,OBJPROP_ANCHOR,align); 
   }
   ObjectSetText(name,Name,12,"Arial",clr);
}
//--------------------------------------------------------------------


avatar

ssg

  • 2 июня 2022, 10:54
0
Как понял и что бы немного освободить Андрея взял на себя смелость:

//+------------------------------------------------------------------+
//|                                                   Andrey1979.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                          http://www.mункцql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mункцql5.com"
#property version   "1.00"
#property strict

extern string ind_name = "Filter CCI";
extern double CCI=14;
extern double c1= 1;
extern double c2= 1;
extern double c3= 1;
extern ENUM_TIMEFRAMES TF = PERIOD_CURRENT;
extern int Shift         = 1;        // бар индикатора
//extern string ind_name =  "Filter CCI real alert";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  ObjectsDeleteAll(); 
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double filtr_CCI = iCustom(NULL,TF,ind_name,CCI,c1,c2,c3,0,Shift);
   DrawLABEL("filtr CCI",StringConcatenate("filtr CCI = ",DoubleToString(filtr_CCI,2)),5,35,Color(filtr_CCI<0,clrRed,clrGreen),ANCHOR_RIGHT);
  }
//+-------------------------------------------------------------------+
//|                                                                   |
//+-------------------------------------------------------------------+
color Color(bool P,color a,color b)
{
   if (P) return(a);
   else return(b);
}
//+-------------------------------------------------------------------+
//|                                                                   |
//+-------------------------------------------------------------------+
void DrawLABEL(string name, string Name, int X, int Y, color clr,ENUM_ANCHOR_POINT align=ANCHOR_RIGHT)
{
   if (ObjectFind(name)==-1)
   {
      ObjectCreate(name, OBJ_LABEL, 0, 0, 0);
      ObjectSet(name, OBJPROP_CORNER, 1);
      ObjectSet(name, OBJPROP_XDISTANCE, X);
      ObjectSet(name, OBJPROP_YDISTANCE, Y);
      ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
      ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);
      ObjectSetInteger(0,name,OBJPROP_ANCHOR,align); 
   }
   ObjectSetText(name,Name,12,"Arial",clr);
}
//--------------------------------------------------------------------



По аналогии можете применить в любом советнике путем копирования соответствующих строк в соответствующие функции.
avatar

ssg

  • 2 июня 2022, 09:59
+1
1.Я Вас прошу, сделайте ФОТОГРАФИЮ Вашего монитора. И если он у Вас горизонтально гиперболический или орисфера — то я сделаю ФОТОГРАФИЮ где я снимаю перед вами шляпу!*hi* 
2.У Лобачевского линии тоже не пересекаются, только их больше двух.;) 
3.Все остальные аксиомы Лобачевский не отрицает.:) 
avatar

ssg

  • 30 мая 2022, 18:45
0
Что значит «мне трал нужен в настройках, а там его нет»? А это что по вашему:
<code>
extern int TrailingStop             = 0;   // трал
</code>

Или у вас какое то особое, сакральное понимание — трал в настройках?
Или даже особое понимание термина и функции — трала?
Ну тогда это не ко мне, телепатией не владею и «тащить клещами» из вас объяснения ваших «хотелок» я не хочу и не буду.*hi* 
P.S. Странно… человек имеет на этом сайте 19 уровень, а…
avatar

ssg

  • 29 мая 2022, 04:14
+1

extern int TrailingStop             = 0;   // трал



//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(Bid-OrderOpenPrice()>TrailingStop*_Point)
                 {
                  if(OrderStopLoss()<Bid-TrailingStop*_Point)
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*_Point,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if((OrderOpenPrice()-Ask)>TrailingStop*_Point)
                 {
                  if((OrderStopLoss()>(Ask+TrailingStop*_Point)) || (OrderStopLoss()==0))
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*_Point,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+



//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double ma11=iMA(NULL,0,MA1Period,MA1Shift,MA1Metod,MA1Price,Shift);
   double ma12=iMA(NULL,0,MA1Period,MA1Shift,MA1Metod,MA1Price,Shift+1);
   double ma21=iMA(NULL,0,MA2Period,MA2Shift,MA2Metod,MA2Price,Shift);
   double ma22=iMA(NULL,0,MA2Period,MA2Shift,MA2Metod,MA2Price,Shift+1);

   bool buy = ma11>ma21 && ma12<ma22 && ma11>ma12 && ma21>ma22;
   bool sell = ma11<ma21 && ma12>ma22 && ma11<ma12 && ma21<ma22;

   if(BULevel>0)
      BU();
   if(TrailingStop>0)
      Trailing();


Может перед тем что что-то утверждать стоит проверить.
avatar

ssg

  • 28 мая 2022, 21:01
+1
В настройках МА 1, МА 2, стоп, профит, трал, мартин, магик, реквот.
При образовании золотого креста советник открывает сделку в сторону золотого креста,
устанавливается стоп и профит.
Если просадки не было, то профит заменяется тралом.
Мартин.



//+------------------------------------------------------------------+
//|                                                        2MA12.mq4 |
//|                                              Copyright 2020, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright 2020, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots                  = 0.1; // торговый объем ордера
extern double KLot                  = 2;   // увеличение лота
extern double MaxLot                = 5;   // максимальный торговый объем

extern int StopLoss                 = 333; // лось
extern int TakeProfit               = 444; // язь
extern int BULevel                  = 0;   // уровень БУ
extern int BUPoint                  = 30;  // пункты БУ
extern int TrailingStop             = 0;   // трал

extern int CloseSig                 = 0;   // 1-закрытие по сигналу
extern int Slip                     = 30;  // реквот
extern int Shift                    = 1;   // на каком баре сигнал индикатора
extern int Magic                    = 123; // магик

extern int MA1Period                = 30;  // период МА1
extern int MA1Shift                 = 0;   // сдвиг МА1
extern ENUM_MA_METHOD MA1Metod      = 0;   // метод МА1
extern ENUM_APPLIED_PRICE MA1Price  = 0;   // цены МА1

extern int MA2Period                = 50;  // период МА2
extern int MA2Shift                 = 0;   // сдвиг МА2
extern ENUM_MA_METHOD MA2Metod      = 0;   // метод МА2
extern ENUM_APPLIED_PRICE MA2Price  = 0;   // цены МА2


Что в этом советнике Вас не устроило?
В этом советнике есть всё из Ваших пожеланий.
avatar

ssg

  • 28 мая 2022, 19:40
+1
Попробуйте это нарисовать:
ну мне нужно чтобы обе скользящие средние были направлены в одну сторону, как до пересечения так после.
<img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '>&nbsp; '>&nbsp; 

Меня учили: параллельные линии не пересекаются.
Как у Вас могут пересекаться линии если они направлены в одну сторону?( 
Опять же чем не устраивают:
это не первый заказ с золотыми крестами у Андрея.

или это сказано для «красного словца».
Дайте мне такой советник и я допишу в нем ваши пожелания.
avatar

ssg

  • 28 мая 2022, 16:59
0
academy.binance.com/ru/articles/golden-cross-and-death-cross-explained

Что такое крест смерти?
Крест смерти — это прямая противоположность золотого креста. Данный чарт предполагает краткосрочную скользящую среднюю которая пересекает долгосрочную скользящую среднюю сверху вниз. Например, 50-дневная МА пересекает 200-дневную МА сверху вниз. Как правило, крест смерти считается медвежьим сигналом.
Существует три основных этапа формирования креста смерти:

Краткосрочная МА выше долгосрочной в период восходящего тренда.
Тренд меняет свое направление, вследствие чего краткосрочная скользящая средняя пересекает долгосрочную сверху вниз
Нисходящий тренд начинается, когда краткосрочная МА становится ниже долгосрочной.
avatar

ssg

  • 28 мая 2022, 14:27
0
academy.binance.com/ru/articles/golden-cross-and-death-cross-explained

Что такое золотой крест?
Золотой крест (от англ. golden cross) — это графический паттерн, который представляет собой пересечение краткосрочной и долгосрочной скользящих средних снизу вверх. Как правило, 50-дневная МА используется в качестве краткосрочной средней, а 200-дневная МА – долгосрочной средней. Но это далеко не вся суть золотого креста. Пересечение может произойти в любой момент, и основная идея заключается в том, что краткосрочная средняя пересекает долгосрочную среднюю тем самым генерируя сигнал на покупку.
Как правило, золотой крест формируется в три этапа:

Краткосрочная скользящая средняя находится ниже долгосрочной скользящей средней в период нисходящего тренда.
Тренд принимает противоположное направление, и краткосрочная скользящая средняя пересекает долгосрочную.
Восходящий тренд начинается там, где краткосрочная МА становится выше долгосрочной МА.
avatar

ssg

  • 28 мая 2022, 14:25
0

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
   ObjectsDeleteAll();
  }
avatar

ssg

  • 27 мая 2022, 17:23
0
Не как обычно, а:

  if(t!=Time[0])
     {
      if(AllProfit()>0)
           CloseAll();

      if(CountTrades()>0)
        {
         if(FindOrderType()==0 && (FindLastBuyPrice()-Ask)/_Point>=Step)
           {
            PutOrder(0,Ask);
           }

         if(FindOrderType()==1 && (Bid-FindLastSellPrice())/_Point>=Step)
           {
            PutOrder(1,Bid);
           }
        }
      t=Time[0];
     }

на каждом новом баре, при условии что между старой ценой и текущей не менее Step пунктов.
avatar

ssg

  • 27 мая 2022, 16:13
0
Параметр который не позволяет открывать позиции очень близко друг от друга.
Минимальная разница между открытыми позициями одного направления.
avatar

ssg

  • 27 мая 2022, 15:19
0
:) 
я имел ввиду, что заказчик должен сам предоставить программисту максимально возможную информацию. Если заказ платный тогда конечно программист сам «пытает» заказчика и гугл.*hi* 
avatar

ssg

  • 26 мая 2022, 17:52
0
«А это ему надо?».:) 
avatar

ssg

  • 26 мая 2022, 17:34
0
Спасибо.
Имелось в виду, что выбирается минимальный лот из двух вариантов:
— лот считается в прежнем варианте, и
— лот считается по фракталам.
Андрей, посмотрел код, больше не надо ничего делать, а то нужно будет переписывать логику основной функции.
Спасибо.
avatar

ssg

  • 24 мая 2022, 20:30
0
Хорошо.Подожду.Просто хочу уточнить — чем вызвана сложность.Может тогда немного изменю пожелания для облегчения задачи.
avatar

ssg

  • 24 мая 2022, 07:07
0
Спасибо за ответ. Погуглил (например academy.binance.com/ru/articles/the-wyckoff-method-explained) и понял, что «очередной гуру прошедших событий». Хорошо объясняет как нужно было поступать «вчера»- здесь накопление, а здесь распределение, а здесь… При этом каждый сам рисует фазы как хочет (понимает).Но если у Вас что-то получается — то рад за Вас.
avatar

ssg

  • 23 мая 2022, 17:32
0
Андрей, добавьте пожалуйста вариант расчета лота используя данные индикатора:

+------------------------------------------------------------------+
//|                                                     Fractals.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
#property indicator_type1   DRAW_ARROW
#property indicator_type2   DRAW_ARROW
#property indicator_color1  Gray
#property indicator_color2  Gray
#property indicator_label1  "Fractal Up"
#property indicator_label2  "Fractal Down"
//---- indicator buffers
double ExtUpperBuffer[];
double ExtLowerBuffer[];
//--- 10 pixels upper from high price
int    ExtArrowShift=-10;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//---- indicator buffers mapping
   SetIndexBuffer(0,ExtUpperBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtLowerBuffer,INDICATOR_DATA);
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_ARROW,217);
   PlotIndexSetInteger(1,PLOT_ARROW,218);
//---- arrow shifts when drawing
   PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,ExtArrowShift);
   PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,-ExtArrowShift);
//---- sets drawing line empty value--
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- initialization done
  }
//+------------------------------------------------------------------+
//|  Accelerator/Decelerator Oscillator                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,const int prev_calculated,
                const datetime &Time[],
                const double &Open[],
                const double &High[],
                const double &Low[],
                const double &Close[],
                const long &TickVolume[],
                const long &Volume[],
                const int &Spread[])
  {
   int i,limit;
//---
   if(rates_total<5)
      return(0);
//---
   if(prev_calculated<7)
     {
      limit=2;
      //--- clean up arrays
      ArrayInitialize(ExtUpperBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtLowerBuffer,EMPTY_VALUE);
     }
   else limit=rates_total-5;

   for(i=limit;i<rates_total-3 && !IsStopped();i++)
     {
      //---- Upper Fractal
      if(High[i]>High[i+1] && High[i]>High[i+2] && High[i]>=High[i-1] && High[i]>=High[i-2])
         ExtUpperBuffer[i]=High[i];
      else ExtUpperBuffer[i]=EMPTY_VALUE;

      //---- Lower Fractal
      if(Low[i]<Low[i+1] && Low[i]<Low[i+2] && Low[i]<=Low[i-1] && Low[i]<=Low[i-2])
         ExtLowerBuffer[i]=Low[i];
      else ExtLowerBuffer[i]=EMPTY_VALUE;
     }
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }

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

Наверное надо сравнить разницу между (бид — нижний фрактал) и (верхний фрактал — бид), а в расчете использовать большую разницу.Тогда величина лота все таки будет меньше чем сейчас, во всяком случае не больше, значит и залог нужен будет меньше.
И ещё, может быть есть смысл перенести код индикатора в код советника.
avatar

ssg

  • 21 мая 2022, 16:44
0
Критерии выбора направления можете озвучить?
avatar

ssg

  • 20 мая 2022, 17:13