0
Может еще раньше даже займусь :) 
avatar

AM2

  • 28 ноября 2015, 07:22
0
Этот заказ уже в следующем месяце буду смотреть.
avatar

AM2

  • 28 ноября 2015, 05:10
0
Добавил возможность выбирать начальную и конечную точки для построения фибо.
www.opentraders.ru/downloads/927/


input color LevelColor=clrAquamarine;
input int NullDay  = 3; //во сколько часов сбрасываем переменную для одного сигнала в день
input int StartBar = 1; //начальная точка фибо
input int EndBar   = 5; //конечная точка фибо
avatar

AM2

  • 28 ноября 2015, 05:07
0
Опишите подробнее торговые условия.
avatar

AM2

  • 28 ноября 2015, 04:53
0
напишите коментарии логики, потому что я не вьезжаю… моя головушка совсем диградировала.


чужой код потемки! :D 
avatar

AM2

  • 27 ноября 2015, 17:38
0
andrew.am2 в понедельник теперь.
avatar

AM2

  • 27 ноября 2015, 17:03
0
Нужно в кодинге немного разбираться.
avatar

AM2

  • 27 ноября 2015, 17:00
0
По скайпу надо смотреть.
avatar

AM2

  • 27 ноября 2015, 15:25
0
Внешне все в порядке.
avatar

AM2

  • 27 ноября 2015, 15:22
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

extern int Step=1000;
extern int BarsCount=100;
extern int LevelsCount=5;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

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

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int FractalsOnLevel(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) k++;
      fdn=iFractals(NULL,0,MODE_LOWER,i);
      if(fdn!=0 && fdn>p1 && fdn<p2) 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);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int kup=0,kdn=0;
   double fup=0,fdn=0;
   for(int i=2; i<BarsCount; i++)
     {
      fup=iFractals(NULL,0,MODE_UPPER,i);
      if(fup!=0) kup++;
      fdn=iFractals(NULL,0,MODE_LOWER,i);
      if(fdn!=0) kdn++;
     }

   for(int i=1; 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));
     }

   Comment("\n Верхних фракталов: ",kup,
           "\n Нижних фракталов: ",kdn,
           "\n Всего фракталов: ",kdn+kup,
           "\n На первом этаже: ",FractalsOnLevel(1.06,1.1));
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 27 ноября 2015, 15:12
0
Мне еще интересно сделать функцию, которая круглые уровни считает :) 
avatar

AM2

  • 27 ноября 2015, 14:02
0
Добавил:


//+------------------------------------------------------------------+
//|                                                 BetonFractal.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property description "Simple expert advisor"

//--- Inputs
extern double Lots          = 0.1; // лот
extern int    StopLoss      = 500; // лось 
extern int    TakeProfit    = 500; // язь
extern int    Profit        = 500; // язь в рублях
extern int    Delta         = 100; // расстояние от фрактала
extern int    MAPeriod      = 12;  // период МА
extern int    Slip          = 30;  // проскальзывание
extern int    Shift         = 2;   // сдвиг баров назад
extern int    Expiration    = 44;  // время истечения в часах
extern int    Count         = 100; // количество открываемых ордеров
extern int    Magic         = 123; // магик

int t=0;
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double AllProfit()
  {
   double profit=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) profit+=OrderProfit();
           }
        }
     }
   return (profit);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll()
  {
   bool cl;
   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)       cl=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Blue);
            if(OrderType()==OP_SELL)      cl=OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);
            if(OrderType()==OP_BUYLIMIT)  cl=OrderDelete(OrderTicket());
            if(OrderType()==OP_SELLLIMIT) cl=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ClosePos()
  {
   double up=iFractals(NULL,0,MODE_UPPER,Shift);
   double dn=iFractals(NULL,0,MODE_LOWER,Shift);
   double ma=iMA(NULL,0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1);
   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(up>0 && Bid>ma)
                 {
                  CloseAll();
                 }
              }
            if(OrderType()==OP_SELL)
              {
               if(dn>0 && Ask<ma)
                 {
                  CloseAll();
                 }
              }
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   double up=0,dn=0,ma=0,pr=0,sl=0,tp=0;
   int    res;
//--- get ind
   up=iFractals(NULL,0,MODE_UPPER,Shift);
   dn=iFractals(NULL,0,MODE_LOWER,Shift);
   ma=iMA(NULL,0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1);
//--- sell conditions
   if(up>0 && Bid>ma)
     {
      pr=NormalizeDouble(up+Delta*Point,Digits);
      if(StopLoss>0) sl=NormalizeDouble(pr+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(pr-TakeProfit*Point,Digits);
      res=OrderSend(Symbol(),3,Lots,pr,Slip,sl,tp,"",Magic,TimeCurrent()+Expiration*3600,Red);
      return;
     }
//--- buy conditions
   if(dn>0 && Ask<ma)
     {
      pr=NormalizeDouble(dn-Delta*Point,Digits);
      if(StopLoss>0) sl=NormalizeDouble(pr-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(pr+TakeProfit*Point,Digits);
      res=OrderSend(Symbol(),2,Lots,pr,Slip,sl,tp,"",Magic,TimeCurrent()+Expiration*3600,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   double up=0,dn=0,ma=0;
//--- get ind
   up=iFractals(NULL,0,MODE_UPPER,Shift);
   dn=iFractals(NULL,0,MODE_LOWER,Shift);
   ma=iMA(NULL,0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1);

   if(CountTrades()<Count && t!=Time[0])
     {
      OpenPos();
      t=Time[0];
     }
     
   if(CountTrades()<1 && ((Close[1]>ma && Close[2]<ma)||(Close[1]<ma && Close[2]>ma))) CloseAll();
   if(CountTrades()>0) ClosePos();
   if(AllProfit()>Profit) CloseAll();

   Comment("\n  UP Fractal ",up,
           "\n  DN Fractal ",dn,
           "\n  Profit: ",AllProfit());
//---
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 27 ноября 2015, 13:50
0
он тянет сетку по уровням верно, но сетка ложится неверно и получается невозможность работать

Это функция неправильно считает, я смотрел уже это. Первые бары нормально выводит, а потом глюк.
avatar

AM2

  • 27 ноября 2015, 13:24
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

extern int Step=1000;
extern int BarsCount=100;
extern int LevelsCount=5;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

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

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int FractalsOnLevel(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) k++;
      fdn=iFractals(NULL,0,MODE_LOWER,i);
      if(fdn!=0 && fdn>p1 && fdn<p2) k++;
     }
   return(k);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int kup=0,kdn=0;
   double fup=0,fdn=0;
   for(int i=2; i<BarsCount; i++)
     {
      fup=iFractals(NULL,0,MODE_UPPER,i);
      if(fup!=0) kup++;
      fdn=iFractals(NULL,0,MODE_LOWER,i);
      if(fdn!=0) kdn++;
     }

   Comment("\n Верхних фракталов: ",kup,
           "\n Нижних фракталов: ",kdn,
           "\n Всего фракталов: ",kdn+kup,
           "\n На первом этаже: ",FractalsOnLevel(1.06,1.1));
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 27 ноября 2015, 12:32
0
Какое условие написать для удаления отложек, цена пересекает МА? Или просто сделать время истечения для них?
avatar

AM2

  • 27 ноября 2015, 11:14
0
У вас сколько времени ушло чтобы сделать тот вариант который есть?
avatar

AM2

  • 27 ноября 2015, 11:01
0
считать фракталы просто,


Пальцем на экране посчитать конечно просто! :D 
avatar

AM2

  • 27 ноября 2015, 10:56
0
Скажем сейчас цена 1.0629.
Провести на 100 баров 5 линий вверх и 5 вниз с шагом 1000 это можно.
Как посчитать количество фракталов на каждом этаже, это еще думать нужно?
Сделку на пробой круглого уровня тоже можно сделать.
А фракталы для чего считать?
avatar

AM2

  • 27 ноября 2015, 10:46
0
Условия для покупок: Цвет индикатора зелёный, параметр Trend Power выше 65%

Условия для продаж: Цвет индикатора красный, параметр Trend Power выше 65%


Эти значения зашиты внутри кода, в советник их не получить.
avatar

AM2

  • 27 ноября 2015, 09:07