0
Сейчас в советнике все есть. Строит уровни, входит на уровне, считает фракталы на потолке и в подвале. Условие на вход у меня простейшее: цена на отбой от уровня — т.е. цена подошла к уровню сверху — бай, снизу селл.
Вам остается только добавить свои условия.




//+------------------------------------------------------------------+
//|                                                   DayFractal.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots      = 0.1;      // лот
extern int StopLoss     = 500;      // лось
extern int TakeProfit   = 500;      // язь
extern int Slip         = 100;      // реквот
extern int Step         = 1000;     // высота этажа
extern int BarsCount    = 100;      // баров для расчета
extern int LevelsCount  = 3;        // число этажей
extern int Magic        = 123;      // магик

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int FractalsOnLevel(int type,double p1,double p2)
  {
   int k=0;
   double fup=0,fdn=0;
   for(int i=2; i<BarsCount; i++)
     {
      fup=iFractals(NULL,0,MODE_UPPER,i);
      if(fup!=0 && fup>p1 && fup<p2)
        {
         if(type==0 || type==1)
           {
            k++;
           }
        }
      fdn=iFractals(NULL,0,MODE_LOWER,i);
      if(fdn!=0 && fdn<p1 && fdn>p2)
        {
         if(type==0 || type==2)
           {
            k++;
           }
        }
     }
   return(k);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double UpLevels(int count,int step)
  {
   double level=0;
   level=NormalizeDouble(Close[0],2)+count*step*Point;
   return(level);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double DnLevels(int count,int step)
  {
   double level=0;
   level=NormalizeDouble(Close[0],2)-count*step*Point;
   return(level);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutTrendLine(string name,datetime time1,datetime time2,double price)
  {
   ObjectDelete(name);
   ObjectCreate(0,name,OBJ_TREND,0,time1,price,time2,price);
//--- установим цвет линии
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим стиль отображения линии
   ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);
//--- установим толщину линии
   ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
   ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   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 || OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int    r=0;
   double sl=0,tp=0,pr=0;
   int up=FractalsOnLevel(1,DnLevels(1,Step),UpLevels(0,Step));
   int dn=FractalsOnLevel(2,DnLevels(1,Step),UpLevels(0,Step));
   pr=NormalizeDouble(Close[0],2);
   
   for(int i=0; i<=LevelsCount; i++)
     {
      PutTrendLine("LineUP"+IntegerToString(i),Time[BarsCount],Time[0],UpLevels(i,Step));
      PutTrendLine("LineDN"+IntegerToString(i),Time[BarsCount],Time[0],DnLevels(i,Step));
     }

   if(CountTrades()<1)
     {
      //--- sell conditions
      if(Bid>=pr-Slip*Point && Bid<=pr+Slip*Point && Low[1]<pr)//цена на уровне
        {
         if(StopLoss>0) sl=NormalizeDouble(Bid+StopLoss*Point,Digits);
         if(TakeProfit>0) tp=NormalizeDouble(Bid-TakeProfit*Point,Digits);
         r=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sl,tp,"",Magic,0,Red);
         t=Time[0];
         return;
        }

      //--- buy conditions
      if(Ask>=pr-Slip*Point && Ask<=pr+Slip*Point && High[1]>pr)//цена на уровне
        {
         if(StopLoss>0) sl=NormalizeDouble(Ask-StopLoss*Point,Digits);
         if(TakeProfit>0) tp=NormalizeDouble(Ask+TakeProfit*Point,Digits);
         r=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,sl,tp,"",Magic,0,Blue);
         t=Time[0];
         return;
        }
     }
//---
   Comment("\n Верхних фракталов на потолке: ",FractalsOnLevel(1,pr,pr+Step*Point),
           "\n Нижних фракталов в подвале: ",FractalsOnLevel(2,pr,pr-Step*Point),
           "\n Потолок: ",pr+Step*Point,
           "\n Пол: ",pr,
           "\n Подвал: ",pr-Step*Point);
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 2 декабря 2015, 08:24
0
Бывает возвращаюсь, если мне это интересно.
avatar

AM2

  • 1 декабря 2015, 19:26
0
яж деньгами на тел. рублей 700 скину!

Я сейчас не делаю платно.

а зачем не употребляете

Я трезвый себя намного лучше чувствую и постепенно совсем отказался.
avatar

AM2

  • 1 декабря 2015, 17:03
0
Закрыл при смене цвета индикатора и снова открыл при совпадении цветов.

avatar

AM2

  • 1 декабря 2015, 15:45
0
Есть выбор бай селл и оба: www.opentraders.ru/downloads/948/
avatar

AM2

  • 1 декабря 2015, 15:00
0
Сейчас в вход по соответствии 2-х индикаторов а выход при смене цвета верхнего.



На демо тест поставил обновленную вервию: www.opentraders.ru/downloads/940/

Сразу же открыл позу.


avatar

AM2

  • 1 декабря 2015, 14:40
0
Свойство есть в любом советнике: Общие->Общие->Only Short

avatar

AM2

  • 1 декабря 2015, 14:03
0
Я не употребляю вообще с 2003 года :) 
То что можно быстро сделать делаю.
avatar

AM2

  • 1 декабря 2015, 13:56
0
Это в свойствах советника можно указать, только бай или селл.
avatar

AM2

  • 1 декабря 2015, 13:54
0
Сейчас добавлю.
avatar

AM2

  • 1 декабря 2015, 13:15
0
Здравствуйте, к сожалению столько Ваших трудов, и времени пропали зря, то что получилось совершенно не соответствует задумке.


Действительно времени и сил потрачено немерено, а конца так и не видно. Обратитесь к платному.
avatar

AM2

  • 1 декабря 2015, 09:48
0
И вас поздравляю! :)  www.opentraders.ru/downloads/948/

avatar

AM2

  • 1 декабря 2015, 08:50
0
Завтра буду делать алгоритм ближе к ТЗ. сегодня просто добавил торговую функцию.
avatar

AM2

  • 30 ноября 2015, 18:13
0
Вот советник, который проверяет количество баров на этаже сравнивает их и открывает позицию.


//+------------------------------------------------------------------+
//|                                                   DayFractal.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots      = 0.1;      // лот
extern int StopLoss     = 500;      // лось
extern int TakeProfit   = 500;      // язь
extern int Slip         = 30;       // реквот
extern int Step         = 1000;     // высота этажа
extern int BarsCount    = 100;      // баров для расчета
extern int LevelsCount  = 5;        // число этажей
extern int Magic        = 123;      // магик

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int FractalsOnLevel(int type,double p1,double p2)
  {
   int k=0;
   double fup=0,fdn=0;
   for(int i=2; i<BarsCount; i++)
     {
      fup=iFractals(NULL,0,MODE_UPPER,i);
      if(fup!=0 && fup>p1 && fup<p2)
        {
         if(type==0 || type==1)
           {
            k++;
           }
        }
      fdn=iFractals(NULL,0,MODE_LOWER,i);
      if(fdn!=0 && fdn>p1 && fdn<p2)
        {
         if(type==0 || type==2)
           {
            k++;
           }
        }
     }
   return(k);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double UpLevels(int count,int step)
  {
   double level=0;
   level=NormalizeDouble(Close[0],2)+count*step*Point;
   return(level);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double DnLevels(int count,int step)
  {
   double level=0;
   level=NormalizeDouble(Close[0],2)-count*step*Point;
   return(level);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutTrendLine(string name,datetime time1,datetime time2,double price)
  {
   ObjectCreate(0,name,OBJ_TREND,0,time1,price,time2,price);
//--- установим цвет линии
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим стиль отображения линии
   ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);
//--- установим толщину линии
   ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
   ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   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 || OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int    r=0;
   double sl=0,tp=0;
   int up=FractalsOnLevel(1,DnLevels(1,Step),UpLevels(0,Step));
   int dn=FractalsOnLevel(2,DnLevels(1,Step),UpLevels(0,Step));

   for(int i=0; i<=LevelsCount; i++)
     {
      PutTrendLine("LineUP"+IntegerToString(i),Time[BarsCount],Time[0],UpLevels(i,1000));
      PutTrendLine("LineDN"+IntegerToString(i),Time[BarsCount],Time[0],DnLevels(i,1000));
     }
   if(t!=Time[0])
     {
      if(CountTrades()<1)
        {
         //--- sell conditions
         if(up>dn)
           {
            if(StopLoss>0) sl=NormalizeDouble(Bid+StopLoss*Point,Digits);
            if(TakeProfit>0) tp=NormalizeDouble(Bid-TakeProfit*Point,Digits);
            r=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sl,tp,"",Magic,0,Red);
            t=Time[0];
            return;
           }

         //--- buy conditions
         if(dn>up)
           {
            if(StopLoss>0) sl=NormalizeDouble(Ask-StopLoss*Point,Digits);
            if(TakeProfit>0) tp=NormalizeDouble(Ask+TakeProfit*Point,Digits);
            r=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,sl,tp,"",Magic,0,Blue);
            t=Time[0];
            return;
           }
        }
     }
//---
   Comment("\n Верхних фракталов: ",FractalsOnLevel(1,DnLevels(1,Step),UpLevels(0,Step)),
           "\n Нижних фракталов: ",FractalsOnLevel(2,DnLevels(1,Step),UpLevels(0,Step)),
           "\n Всего фракталов: ",FractalsOnLevel(0,DnLevels(1,Step),UpLevels(0,Step)),
           "\n Верхний уровень этажа: ",UpLevels(0,Step),
           "\n Нижний уровень этажа: ",DnLevels(1,Step));
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 30 ноября 2015, 13:31
0
Нет это всё не то что нужно, у меня и так там уровней всяких полно так ещё и этот своих десяток нарисует.


Отключил в кимовском индикаторе отрисовку уровней.




//+----------------------------------------------------------------------------+
//|                                                            i-Sessions.mq4  |
//|                                                                            |
//|                                                    Ким Игорь В. aka KimIV  |
//|                                                       http://www.kimiv.ru  |
//|                                                                            |
//+----------------------------------------------------------------------------+
#property copyright "Ким Игорь В. aka KimIV"
#property link      "http://www.kimiv.ru"

#property indicator_chart_window

//------- Внешние параметры индикатора ----------------------------------------+
extern int    NumberOfDays = 5;             // Количество дней
extern string AsiaBegin    = "01:00";       // Открытие азиатской сессии
extern string AsiaEnd      = "10:00";       // Закрытие азиатской сессии
extern color  AsiaColor    = Goldenrod;     // Цвет азиатской сессии
extern string EurBegin     = "07:00";       // Открытие европейской сессии
extern string EurEnd       = "16:00";       // Закрытие европейской сессии
extern color  EurColor     = Tan;           // Цвет европейской сессии
extern string USABegin     = "14:00";       // Открытие американской сессии
extern string USAEnd       = "23:00";       // Закрытие американской сессии
extern color  USAColor     = Pink;          // Цвет американской сессии
extern int    Style        = 2;             // Стиль линий объектов
extern bool   FillBack     = True;          // Заливать объекты
extern bool   ShowPrice    = True;          // Показывать ценовые уровни
extern bool   ShowRect     = False;         // Показывать  объекты
extern color  clFont       = Blue;          // Цвет шрифта
extern int    SizeFont     = 8;             // Размер шрифта
extern int    OffSet       = 10;            // Смещение
//+----------------------------------------------------------------------------+
//|  Custom indicator initialization function                                  |
//+----------------------------------------------------------------------------+
void init()
  {
   DeleteObjects();
   if(ShowRect)
     {
      for(int i=0; i<NumberOfDays; i++)
        {
         CreateObjects("AS"+i,AsiaColor);
         CreateObjects("EU"+i,EurColor);
         CreateObjects("US"+i,USAColor);       
        }
     }
   Comment("");
  }
//+----------------------------------------------------------------------------+
//|  Custor indicator deinitialization function                                |
//+----------------------------------------------------------------------------+
void deinit()
  {
   DeleteObjects();
   Comment("");
  }
//+----------------------------------------------------------------------------+
//|  Создание объектов индикатора                                              |
//|  Параметры:                                                                |
//|    no - наименование объекта                                               |
//|    cl - цвет объекта                                                       |
//+----------------------------------------------------------------------------+
void CreateObjects(string no,color cl)
  {
   ObjectCreate(no,OBJ_RECTANGLE,0,0,0,0,0);
   ObjectSet(no,OBJPROP_STYLE,Style);
   ObjectSet(no,OBJPROP_COLOR,cl);
   ObjectSet(no,OBJPROP_BACK,FillBack);
  }
//+----------------------------------------------------------------------------+
//|  Удаление объектов индикатора                                              |
//+----------------------------------------------------------------------------+
void DeleteObjects()
  {
   for(int i=0; i<NumberOfDays; i++)
     {
      ObjectDelete("AS"+i);
      ObjectDelete("EU"+i);
      ObjectDelete("US"+i);
     }
   ObjectDelete("ASup");
   ObjectDelete("ASdn");
   ObjectDelete("EUup");
   ObjectDelete("EUdn");
   ObjectDelete("USup");
   ObjectDelete("USdn");
  }
//+----------------------------------------------------------------------------+
//|  Custom indicator iteration function                                       |
//+----------------------------------------------------------------------------+
void start()
  {
   datetime dt=CurTime();

   for(int i=0; i<NumberOfDays; i++)
     {
      if(ShowPrice && i==0)
        {
         DrawPrices(dt,"AS",AsiaBegin,AsiaEnd);
         DrawPrices(dt,"EU",EurBegin,EurEnd);
         DrawPrices(dt,"US",USABegin,USAEnd);
        }
      DrawObjects(dt,"AS"+i,AsiaBegin,AsiaEnd);
      DrawObjects(dt,"EU"+i,EurBegin,EurEnd);
      DrawObjects(dt,"US"+i,USABegin,USAEnd);
      dt-=24*60*60;
      while(TimeDayOfWeek(dt)<1 || TimeDayOfWeek(dt)>5) dt-=24*60*60;
     }
  }
//+----------------------------------------------------------------------------+
//|  Прорисовка объектов на графике                                            |
//|  Параметры:                                                                |
//|    dt - дата торгового дня                                                 |
//|    no - наименование объекта                                               |
//|    tb - время начала сессии                                                |
//|    te - время окончания сессии                                             |
//+----------------------------------------------------------------------------+
void DrawObjects(datetime dt,string no,string tb,string te)
  {
   datetime t1,t2;
   double   p1,p2;
   int      b1,b2;

   t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb);
   t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te);
   b1=iBarShift(NULL, 0, t1);
   b2=iBarShift(NULL, 0, t2);
   p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2+1, b2)];
   p2=Low [Lowest (NULL, 0, MODE_LOW , b1-b2+1, b2)];
   ObjectSet(no,OBJPROP_TIME1,t1);
   ObjectSet(no,OBJPROP_PRICE1,p1);
   ObjectSet(no,OBJPROP_TIME2,t2);
   ObjectSet(no,OBJPROP_PRICE2,p2);
  }
//+----------------------------------------------------------------------------+
//|  Прорисовка ценовых меток на графике                                       |
//|  Параметры:                                                                |
//|    dt - дата торгового дня                                                 |
//|    no - наименование объекта                                               |
//|    tb - время начала сессии                                                |
//|    te - время окончания сессии                                             |
//+----------------------------------------------------------------------------+
void DrawPrices(datetime dt,string no,string tb,string te)
  {
   datetime t1,t2;
   double   p1,p2;
   int      b1,b2;

   t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb);
   t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te);
   b1=iBarShift(NULL, 0, t1);
   b2=iBarShift(NULL, 0, t2);
   p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2, b2)];
   p2=Low [Lowest (NULL, 0, MODE_LOW , b1-b2, b2)];

   if(ObjectFind(no+"up")<0) ObjectCreate(no+"up",OBJ_TEXT,0,0,0);
   ObjectSet(no+"up",OBJPROP_TIME1,t2);
   ObjectSet(no+"up",OBJPROP_PRICE1,p1+(OffSet+SizeFont)*Point);
   ObjectSet(no+"up",OBJPROP_COLOR,clFont);
   ObjectSet(no+"up",OBJPROP_FONTSIZE,SizeFont);
   ObjectSetText(no+"up",DoubleToStr(p1+Ask-Bid,Digits));

   if(ObjectFind(no+"dn")<0) ObjectCreate(no+"dn",OBJ_TEXT,0,0,0);
   ObjectSet(no+"dn",OBJPROP_TIME1,t2);
   ObjectSet(no+"dn",OBJPROP_PRICE1,p2-OffSet*Point);
   ObjectSet(no+"dn",OBJPROP_COLOR,clFont);
   ObjectSet(no+"dn",OBJPROP_FONTSIZE,SizeFont);
   ObjectSetText(no+"dn",DoubleToStr(p2,Digits));
  }
//+----------------------------------------------------------------------------+

avatar

AM2

  • 30 ноября 2015, 10:27
0
Где вы берете эти штуки? Там только функции и нет многих вещей характерных для индикаторов.
avatar

AM2

  • 30 ноября 2015, 10:04
0
Где можно посмотреть исходник индикатора на картинке? Нужны образцы кода, а иначе это очень долго.
avatar

AM2

  • 30 ноября 2015, 09:30
0
Вот посидел над своей стратегией и решил что мне не хватает ещё одного индикатора


Вы представляете объем работы для создания этого индикатора?
avatar

AM2

  • 30 ноября 2015, 08:19
0
Это не индикатор это библиотека.

Быстрое преобразование Фурье

Алгоритм проводит быстрое преобразование Фурье комплексной
функции, заданной nn отсчетами на действительной оси.
avatar

AM2

  • 30 ноября 2015, 07:59