Советники: Сетка ордеров (версия 3-я) - страница 3

 
//Шутка от автора на тему: "Покажите мне дилинговый центр, который это выдержит?" На тестере и то не успевает. 

//+------------------------------------------------------------------+
//|                               Proffessor_v3_ma_agressor_2011.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double lot=0.01;
extern int MAX_Lines       = 10;     //максимальное колличество отложенных ордеров каждого направления  
extern double klot           = 1;      //коэффициент умножения лотов при удалении от цены  
extern double pluslot      =0.01;      //коэффициент доливки лота при удалении от цены
extern int plusDelta     =0;        //коэффициент увеличения расстояния между отложенными ордерами
                                    //если значение отрицательное, то расстояние уменьшается на данное кол-во пунктов
extern double Delta1       =700;     //первая дельта от цены для стопового ордера (для пятизнака)
extern int Delta           = 600;        //расстояние между отложенными ордерами  (для пятизнака)
extern double ProfitClose     = 0.8;        //закрывать все ордера при получении профита(в долларах)  
extern double f            =40;  //параметр границы флета по ADX
extern double bar        = 2;   //сдвиг по барам ADX
extern int dadx         =0 ;  //параметр для разницы флета
extern double timeframe  = 1;  //таймфрейм для индикатора ADX 0-текущий,1-1минута, 2-5минут, 3-15минут, 4-30минут, 5-1час
                             //6-4часа, 7-день, 8-неделя, 9-месяц
                             
extern int ma1 =14;
extern int ma2=21;
extern int ma3=60;
extern int magic           = 12345; 
extern int StartHour=0;       //час начала работы советника
extern int EndHour=24;     //час окончания работы советника
//extern int Friday=true;   //запретить торговлю в пятницу
extern int pop=3;//количество попыток закрыть ордер
int init() {
      Comment("ProfessorSoft_v3_2011");
      return (0);
  
}
int deinit() {
      Comment("");
      return (0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
bool ticket,mabuy=false,masell=false;
double Lots,price;
int x,q;
bool trade=false;
trade=true;
double iflet,ibuy,isell;
double ima0,ima1,ima2,ima3;
int _timeframe;
if(timeframe==1)_timeframe=1;
else if(timeframe==0)_timeframe=0;
else if(timeframe==2)_timeframe=5;
else if(timeframe==3)_timeframe=15;
else if(timeframe==4)_timeframe=30;
else if(timeframe==5)_timeframe=60;
else if(timeframe==6)_timeframe=240;
else if(timeframe==7)_timeframe=1440;
else if(timeframe==8)_timeframe=10080;
else _timeframe=43200;
int spred=MarketInfo(Symbol(),MODE_SPREAD);
    iflet=iADX( Symbol(), _timeframe, 14, PRICE_CLOSE,MODE_MAIN, bar); 
    ibuy=iADX( Symbol(), _timeframe, 14, PRICE_CLOSE,MODE_PLUSDI, bar); 
    isell=iADX(  Symbol(), _timeframe, 14, PRICE_CLOSE,MODE_MINUSDI, bar); 
    
    ima0=iMA(Symbol(),_timeframe,ma1,1,MODE_EMA,PRICE_CLOSE,0);
    ima1=iMA(Symbol(),_timeframe,ma1,1,MODE_EMA,PRICE_CLOSE,1);
    ima2=iMA(Symbol(),_timeframe,ma2,1,MODE_EMA,PRICE_CLOSE,1);
    ima3=iMA(Symbol(),_timeframe,ma3,1,MODE_EMA,PRICE_CLOSE,1);
   if(OrdersTotal()==0 && trade==true && time()==true && DayOfWeek()!=5)
   {
   ticket=-1;
   
    if(ima0>ima1 && ima1>ima2 && ima2>ima3) mabuy=true;
    if(ima0<ima1 && ima1<ima2 && ima2<ima3) masell=true;
      
      if(iflet<f && ibuy>isell && mabuy==true)//условие для покупки и определение флета
      {
               Lots=lot;
               ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",magic,0,Blue);
               price=Ask;
                if(ticket==-1)return(0);
                OrderSend(Symbol(),OP_BUYLIMIT,NormalizeDouble(Lots*klot,2)+pluslot,price-Delta1*Point,3,0,0,"",magic,0,Blue);
       
                for(x=1;x<=MAX_Lines;x++)
               {
                Lots=NormalizeDouble(Lots*klot,2)+pluslot;
                  if(x==1 || x%2>0)
                  {
                  OrderSend(Symbol(),OP_BUYLIMIT,Lots,price-(Delta1+x*NormalizeDouble(Delta+plusDelta*x/2,0))*Point,3,0,0,"",magic,0,Blue);
                  OrderSend(Symbol(),OP_SELLLIMIT,Lots,price-spred*Point+x*NormalizeDouble(Delta+plusDelta*x/2,0)*Point,3,0,0,"",magic,0,Red);
                  }
                  else
                  {
                   OrderSend(Symbol(),OP_SELLSTOP,Lots,price-spred*Point-(Delta1+x*NormalizeDouble(Delta+plusDelta*x/2,0))*Point,3,0,0,"",magic,0,Blue);
                   OrderSend(Symbol(),OP_BUYSTOP,Lots,price+x*NormalizeDouble(Delta+plusDelta*x/2,0)*Point,3,0,0,"",magic,0,Red);
                  }     
               }
      
      
      }
      else if(iflet<f && ibuy<isell && masell==true)//условие для продажи и определение флета
      {
                  Lots=lot;
                  ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",magic,0,Red); 
                  price=Bid;
                   if(ticket==-1)return(0);
                 OrderSend(Symbol(),OP_SELLLIMIT,NormalizeDouble(Lots*klot,2)+pluslot,price+Delta1*Point,3,0,0,"",magic,0,Red);
                    for(x=1;x<=MAX_Lines;x++)
                  {
                     Lots=NormalizeDouble(Lots*klot,2)+pluslot;
                      if(x==1 || x%2>0)
                     {
                     OrderSend(Symbol(),OP_BUYLIMIT,Lots,price-spred*Point-x*NormalizeDouble(Delta+plusDelta*x/2,0)*Point,3,0,0,"",magic,0,Blue);
                     OrderSend(Symbol(),OP_SELLLIMIT,Lots,price+(Delta1+x*NormalizeDouble(Delta+plusDelta*x/2,0))*Point,3,0,0,"",magic,0,Red);
                     }
                     else
                     {
                     OrderSend(Symbol(),OP_SELLSTOP,Lots,price-x*NormalizeDouble(Delta+plusDelta*x/2,0)*Point,3,0,0,"",magic,0,Blue);
                     OrderSend(Symbol(),OP_BUYSTOP,Lots,price-spred*Point+(Delta1+x*NormalizeDouble(Delta+plusDelta*x/2,0))*Point,3,0,0,"",magic,0,Red);  
                     }     
                  }
      }
       else if(iflet>f && ibuy>isell && mabuy==true)//условие для покупки и определение тренда
      {
                   Lots=lot;
                   ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",magic,0,Blue);
                   price=Ask;
                    if(ticket==-1)return(0);
                    OrderSend(Symbol(),OP_BUYLIMIT,NormalizeDouble(Lots*klot,2)+pluslot,price-Delta1*Point,3,0,0,"",magic,0,Blue);
       
                    for(x=1;x<=MAX_Lines;x++)
                   {
                    Lots=NormalizeDouble(Lots*klot,2)+pluslot;
                    if(x==1 || x%2>0)
                     {
                      OrderSend(Symbol(),OP_SELLSTOP,Lots,price-spred*Point-(Delta1+x*NormalizeDouble(Delta+plusDelta*x/2,0))*Point,3,0,0,"",magic,0,Blue);
                      OrderSend(Symbol(),OP_BUYSTOP,Lots,price+x*NormalizeDouble(Delta+plusDelta*x/2,0)*Point,3,0,0,"",magic,0,Red); 
                     }
                     else
                     {
                     OrderSend(Symbol(),OP_BUYLIMIT,Lots,price-x*NormalizeDouble(Delta+plusDelta*x/2,0)*Point,3,0,0,"",magic,0,Blue);
                     OrderSend(Symbol(),OP_SELLLIMIT,Lots,price-spred*Point+(Delta1+x*NormalizeDouble(Delta+plusDelta*x/2,0))*Point,3,0,0,"",magic,0,Red);
                     }    
                   }
      }
       else if(iflet>f && ibuy<isell && masell==true)//условие для продажи и определение тренда
      {
                  Lots=lot;
                  ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",magic,0,Red); 
                  price=Bid;
                   if(ticket==-1)return(0);
                 OrderSend(Symbol(),OP_SELLLIMIT,NormalizeDouble(Lots*klot,2)+pluslot,price+Delta1*Point,3,0,0,"",magic,0,Red);
                    for(x=1;x<=MAX_Lines;x++)
                  {
                     Lots=NormalizeDouble(Lots*klot,2)+pluslot;
                     if(x==1 || x%2>0)
                     {
                     OrderSend(Symbol(),OP_SELLSTOP,Lots,price-x*NormalizeDouble(Delta+plusDelta*x/2,0)*Point,3,0,0,"",magic,0,Blue);
                     OrderSend(Symbol(),OP_BUYSTOP,Lots,price+spred*Point+(Delta1+x*NormalizeDouble(Delta+plusDelta*x/2,0))*Point,3,0,0,"",magic,0,Red); 
                     }
                     else
                     {
                     OrderSend(Symbol(),OP_BUYLIMIT,Lots,price+spred*Point-(Delta1+x*NormalizeDouble(Delta+plusDelta*x/2,0))*Point,3,0,0,"",magic,0,Blue);
                     OrderSend(Symbol(),OP_SELLLIMIT,Lots,price+x*NormalizeDouble(Delta+plusDelta*x/2,0)*Point,3,0,0,"",magic,0,Red);
                     }    
                  }
      }
      else return(0);
     
   }
  
  
      
      if(OrdersTotal()>0)
    {
     Comment("          Balance  ",AccountBalance(),"\n          Equity  ",AccountEquity(),"\n          Profit  ",OrdersProfit());
      if(OrdersProfit()>=ProfitClose)
      {
         for (int i=OrdersTotal()-1;i>=0;i--)
         {
            bool closed;
            OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
           
            if(OrderType()==OP_BUY) 
            {
                  for(q=0;q<pop;q++)
                  {
                  closed=false;
                  closed=OrderClose(OrderTicket(),OrderLots(),Bid,3,Blue);
                  if(closed==true)q=pop;
                  }
            }
           
            if(OrderType()==OP_SELL) 
            {
                  for(q=0;q<pop;q++)
                  {
                  closed=false;
                  closed=OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
                  if(closed==true)q=pop;
                  }
            }
            Sleep(1000);
            if(OrderType()>1 ) OrderDelete(OrderTicket());
         }
      }
// именно здесь и начинается самое интересное - меняем лимит на стоп и наоборот в зависимости от ADX
      if(OrdersProfit()<ProfitClose)
     {
            for (i=OrdersTotal()-1;i>=0;i--)
         {
            OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
            if(OrderType()==OP_BUYLIMIT && iflet>f+dadx) 
            {
                OrderSend(Symbol(),OP_SELLSTOP,OrderLots(),OrderOpenPrice()-spred*Point,3,0,0,"",magic,0,Red);
                OrderDelete(OrderTicket());
            }
            else if(OrderType()==OP_BUYSTOP && iflet<=f-dadx) 
            {
                OrderSend(Symbol(),OP_SELLLIMIT,OrderLots(),OrderOpenPrice()-spred*Point,3,0,0,"",magic,0,Red);
                OrderDelete(OrderTicket());
            }
            else if(OrderType()==OP_SELLLIMIT && iflet>f+dadx) 
            {
                OrderSend(Symbol(),OP_BUYSTOP,OrderLots(),OrderOpenPrice()+spred*Point,3,0,0,"",magic,0,Blue);
                OrderDelete(OrderTicket());
            }
            else if(OrderType()==OP_SELLSTOP && iflet<=f-dadx) 
            {
                OrderSend(Symbol(),OP_BUYLIMIT,OrderLots(),OrderOpenPrice()+spred*Point,3,0,0,"",magic,0,Blue);
                OrderDelete(OrderTicket());
            }
            else continue;
           
         }
     }
    }
   
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
   bool time()
 {
   if (StartHour<EndHour) 
      {if (Hour()>=StartHour && Hour()<EndHour) return(true); else return(false);}
   if (StartHour>EndHour) 
      {if (Hour()>=EndHour && Hour()<StartHour) return(false); else return(true);}
 }
 
 
double OrdersProfit()
{
   
  double rezultSymb=0;
  string SMB=Symbol();
  int i;
  for (i=OrdersTotal()-1;i>=0;i--)
   {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
     {
      if(OrderSymbol()!= SMB) continue;
      if(OrderType()==OP_BUY || OrderType()==OP_SELL)
       {
        rezultSymb+=OrderProfit();
       } 
     }
   }
  return(rezultSymb);
}

Прикол, на тему сетка ордеров (красиво идет в тестере - прямо "шахматка") :-)))

Прогон на минутках EURUSD по октябрю (Алпари) показал: прибыль 25,7%, максимальная просадка 30,0% (одна), количество сделок - 240.

 
proffessor:


Днем на быстроменяющемся рынке применяю обычно такой прием: после установки советником сетки, я руками ставлю тейк-профит для открытого ордера примерно на 1-2 пункта выше, запланированной прибыли. Главное нужно быть внимательным, и если зацепили стоповый ордер, то быстренько убираем тейк-профит.


//при работе реально не успевает обработать позиции. Надо прописать тейк-профит при выставлении ордеров.

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

 
IYG:
reks:

Рroffessor, спасибо за вашу работу.

Идея интересная надо, дорабатывать. Как я торгую и получается неплохой результат(торгую на реальном центовом счёте)

1. В советнике убрал индикаторы, вхожу в рынок когда я хочу,когда мне удобно. То есть ночью я торгую лимитными ордерами,днем переключаю параметр на стоповые ордера и торгую.

2. Поменял параметр "pluslot". Думаю почему так прибыли мало, оказывается этот параметр не правильно удваивает 1,2,3,4, поменял стало так 1,2,4,8, и т.д. стал покрывать первые убыточные ордера.

3. Сейчас думаю как ещё лучше сделать советника.

Как закончу, код выложу сюда.


3. поменять порядок действий : закрытие ордера потом закрытие отложенников

ЗЫ. А для МТ5 такого же не сваяете?

proffessor грац! очень помогает(после оптимизации на евре стал показывать просто чудеса-чудные).


К сожалению,у меня нету опыта,сварганить для МТ 5

 
IYG:
reks:

Рroffessor, спасибо за вашу работу.

Идея интересная надо, дорабатывать. Как я торгую и получается неплохой результат(торгую на реальном центовом счёте)

1. В советнике убрал индикаторы, вхожу в рынок когда я хочу,когда мне удобно. То есть ночью я торгую лимитными ордерами,днем переключаю параметр на стоповые ордера и торгую.

2. Поменял параметр "pluslot". Думаю почему так прибыли мало, оказывается этот параметр не правильно удваивает 1,2,3,4, поменял стало так 1,2,4,8, и т.д. стал покрывать первые убыточные ордера.

3. Сейчас думаю как ещё лучше сделать советника.

Как закончу, код выложу сюда.


3. поменять порядок действий : закрытие ордера потом закрытие отложенников

ЗЫ. А для МТ5 такого же не сваяете?

proffessor грац! очень помогает(после оптимизации на евре стал показывать просто чудеса-чудные).


К сожалению,у меня нету опыта,сварганить для МТ 5

 
Всем привет! Идея неплохая, но надо подправить. После выполнения условий "ProfitClose", начинает закрывать все сделки, удалять ордера, но закрывает не ВСЕ сделки. Одна или две остаются висеть, и не дают начала новому циклу
 
Axlamon:
proffessor:


Днем на быстроменяющемся рынке применяю обычно такой прием: после установки советником сетки, я руками ставлю тейк-профит для открытого ордера примерно на 1-2 пункта выше, запланированной прибыли. Главное нужно быть внимательным, и если зацепили стоповый ордер, то быстренько убираем тейк-профит.


//при работе реально не успевает обработать позиции. Надо прописать тейк-профит при выставлении ордеров.

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



Здравствуйте. А можно написать, или как то в настройках изменить, чтоб ниже sell сделки открывались sell ордера, и наооборот выше buy открывались buy ордера. Полезно на трендовом рынке

 
proffessor:
/

Прикол, на тему сетка ордеров (красиво идет в тестере - прямо "шахматка") :-)))

Прогон на минутках EURUSD по октябрю (Алпари) показал: прибыль 25,7%, максимальная просадка 30,0% (одна), количество сделок - 240.


Уменя почему то код не компилируется? Что это?

' ' - too long variable name C:\Program Files\MetaTrader Admiral Markets AS\experts\Proffessor_v3_2011.mq4 (12, 1)


 
ответе пожалуйста если delta1 70 delta 60 как лучше выставить ProfitClose СПАСИБО
 
Скажите пожалуйста какие надо выставить настройки вне зависимости от баров что бы выставлялись ордера на Х пунктов от цены( и от друг друга) с Y пунктов стоплоса на ордер. К примеру если сработал ордер на бай автоматически подтянулись ордера на селл на Х пунктов от цены открытия действующего ордера?
 
Поставте параметр f=0 будут открываться только STOP-ордеры, если f=100, то только LIMIT