AM2
Андрей

 
Уровень 35

  Торгую в компаниях:


Группа "Торговые системы"

Рейтинг 660



Гридеры.

Гридер — советник, торгующий сеткой отложенных ордеров.

Идея позаимствована с сайта mql4.com.

Стратегия торговли проста как мир. Ставится ордер на покупку, либо на продажу и лочится стоп-ордером на расстоянии Delta1.

Далее набрасывается сетка из лимитных, либо стоповых ордеров на расстоянии delta один от другого. При достижении ценой профита — Profit, всё закрывается и продолжаем заново. Работаем на минутках.

Основная идея:

Если уровень ADX ниже 40, то считаем, что флет и выставляются лимитные ордеры, если выше, то стоповые;
Если DI+ выше чем DI-, то покупаем, если наоборот, то продаем.
Все линии по индикатору — ADX.

Дополнительные настройки — это klot — коэффициент на который умножается каждый следующий отложенный ордер, и pluslot — количество лотов, которое прибавляется при каждом следующем отложенном ордере.


Рис.1. Результат работы эксперта.

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


//+------------------------------------------------------------------+
//|                                           Proffessor_v1_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.1;  //лот
extern int    MAX_Lines    = 5;    //максимальное колличество отложенных ордеров каждого направления  
extern double klot         = 1;    //коэффициент умножения лотов при удалении от цены  
extern double pluslot      = 0.1;  //коэффициент доливки лота при удалении от цены
extern int    plusDelta    = -5;   //коэффициент увеличения расстояния между отложенными ордерами
                                   //если значение отрицательное, то расстояние уменьшается на данное кол-во пунктов
extern double Delta1       = 70;   //первая дельта от цены для стопового ордера
extern int    Delta        = 60;   //расстояние между отложенными ордерами  
extern double ProfitClose  = 0.8;  //закрывать все ордера при получении профита(в долларах)  
extern double f            = 40;   //параметр границы флета по ADX
extern double bar          = 2;    //сдвиг по барам ADX
extern double timeframe    = 1;    //таймфрейм для индикатора ADX 0-текущий,1-1минута, 2-5минут, 3-15минут, 4-30минут, 5-1час
                                   //6-4часа, 7-день, 8-неделя, 9-месяц
extern int    magic        = 123;  //магик
extern int    StartHour    = 0;    //час начала работы советника
extern int    EndHour      = 24;   //час окончания работы советника
extern int    pop          = 3;    //количество попыток закрыть ордер
int init() {
      Comment("ProfessorSoft_v3_2011");
      return (0);
  
}

int deinit() {
      Comment("");
      return (0);
}

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
bool ticket;
double Lots;
int x,q;
bool trade=false;
trade=true;
double iflet,ibuy,isell;
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;

   if(OrdersTotal()==0 && trade==true && time()==true)
   {
   ticket=-1;
    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); 
      
      if(iflet<f && ibuy>isell)//условие для покупки и определение флета
      {
               Lots=lot;
               ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",magic,0,Blue);
                if(ticket==-1)return(0);
               OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Delta1*Point,3,0,0,"",magic,0,Red);
       
                for(x=1;x<=MAX_Lines;x++)
               {
                Lots=NormalizeDouble(Lots*klot,2)+pluslot;
                  OrderSend(Symbol(),OP_BUYLIMIT,Lots,Ask-(Delta1+x*NormalizeDouble(Delta+plusDelta*x/2,0))*Point,3,0,0,"",magic,0,Blue);
                  OrderSend(Symbol(),OP_SELLLIMIT,Lots,Bid+x*NormalizeDouble(Delta+plusDelta*x/2,0)*Point,3,0,0,"",magic,0,Red);     
               }
      
      
      }
      else if(iflet<f && ibuy<isell)//условие для продажи и определение флета
      {
                  Lots=lot;
                  ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",magic,0,Red); 
                   if(ticket==-1)return(0);
                  OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Delta1*Point,3,0,0,"",magic,0,Blue);
                    for(x=1;x<=MAX_Lines;x++)
                  {
                     Lots=NormalizeDouble(Lots*klot,2)+pluslot;
                     OrderSend(Symbol(),OP_BUYLIMIT,Lots,Ask-x*NormalizeDouble(Delta+plusDelta*x/2,0)*Point,3,0,0,"",magic,0,Blue);
                     OrderSend(Symbol(),OP_SELLLIMIT,Lots,Bid+(Delta1+x*NormalizeDouble(Delta+plusDelta*x/2,0))*Point,3,0,0,"",magic,0,Red);     
                  }
      }
       else if(iflet>f && ibuy>isell)//условие для покупки и определение тренда
      {
                   Lots=lot;
                   ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",magic,0,Blue);
                    if(ticket==-1)return(0);
                   OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Delta1*Point,3,0,0,"",magic,0,Red);
       
                    for(x=1;x<=MAX_Lines;x++)
                   {
                    Lots=NormalizeDouble(Lots*klot,2)+pluslot;
                      OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-(Delta1+x*NormalizeDouble(Delta+plusDelta*x/2,0))*Point,3,0,0,"",magic,0,Blue);
                      OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+x*NormalizeDouble(Delta+plusDelta*x/2,0)*Point,3,0,0,"",magic,0,Red);     
                   }
      }
       else if(iflet>f && ibuy<isell)//условие для продажи и определение тренда
      {
                  Lots=lot;
                  ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",magic,0,Red); 
                   if(ticket==-1)return(0);
                  OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Delta1*Point,3,0,0,"",magic,0,Blue);
                    for(x=1;x<=MAX_Lines;x++)
                  {
                     Lots=NormalizeDouble(Lots*klot,2)+pluslot;
                     OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-x*NormalizeDouble(Delta+plusDelta*x/2,0)*Point,3,0,0,"",magic,0,Blue);
                     OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+(Delta1+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());
         }
      }
    }
   
   
//----
   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);
}


Чем вам не грааль?
  • +2
  • Просмотров: 21436
  • 6 ноября 2011, 23:04
  • AM2
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Торговые системы", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Тестирование эксперта MoneyPrinter
Следующая запись в группе  
Торговля без индикаторов - Price Action
02 ноября 2011
14 января 2012

Брокер для ваших роботов, 15 лет на рынке

Комментарии (17)

+
0
Смеетесь?)
avatar

  0  OnGoing Сообщений: 3

  • 6 ноября 2011, 23:21
+
0
Почти *улыбается*
avatar

  35  AM2 Автор Сообщений: 16412 - Андрей

  • 6 ноября 2011, 23:28
+
0
Так и понял) Две недели от силы держится и рисует кочергу до полного слива даже с 10К. Плюс на псевдотиках в тестере такие вещи обычно тестировать не показательно, уверен, знаете.
avatar

  0  OnGoing Сообщений: 3

  • 6 ноября 2011, 23:35
+
0
У людей на ПАММах подобные штуки стоят.
avatar

  35  AM2 Автор Сообщений: 16412 - Андрей

  • 6 ноября 2011, 23:33
+
0
Ну-ну) Так ставьте. Мартышка вас в миг озолотит)
avatar

  0  OnGoing Сообщений: 3

  • 6 ноября 2011, 23:36
+
0
На ПАММЕ только стоповые.
avatar

  35  AM2 Автор Сообщений: 16412 - Андрей

  • 6 ноября 2011, 23:49
+
0
На ПАММЕ только стоповые.
Хотя вот пример наглядный.
avatar

  35  AM2 Автор Сообщений: 16412 - Андрей

  • 6 ноября 2011, 23:57
+
0
Если грааль, то сразу на ТЕСТ с реал депо
avatar

  9  amyrgan145 Сообщений: 428 - Амыр

  • 7 ноября 2011, 09:22
+
0
На 200 рубликов можно и поставить *улыбается*
avatar

  35  AM2 Автор Сообщений: 16412 - Андрей

  • 7 ноября 2011, 11:34
+
0
Ну так что решил та, запускать та будешь на реале? *улыбается*
avatar

  9  amyrgan145 Сообщений: 428 - Амыр

  • 9 ноября 2011, 19:11
+
0
Нужно еще изучить как следует эту систему. Возможно доработать.
Манипринтер мой не совсем корректно торгует. Не смотрел код?
avatar

  35  AM2 Автор Сообщений: 16412 - Андрей

  • 9 ноября 2011, 21:47
+
0
только что гридера компельнул и запустил от балды, вроде работает, тестится *улыбается*Гридер ЖЖЕТ!но в конечном счете он слил…
На мани принтере вот такая ошибка порой вылазит:

Что это может быть?
avatar

  9  amyrgan145 Сообщений: 428 - Амыр

  • 10 ноября 2011, 08:12
+
0
Индюки просит илановские. У меня они отключены, но из кода не убрал.
avatar

  35  AM2 Автор Сообщений: 16412 - Андрей

  • 10 ноября 2011, 17:25
+
0
Тогда надо бы убрать их, чтобы не запрашивал… а то так забивается журнал и тестится с проблемами…
avatar

  9  amyrgan145 Сообщений: 428 - Амыр

  • 10 ноября 2011, 17:33
+
0
Индюки еще для постановки лока нужны.
avatar

  35  AM2 Автор Сообщений: 16412 - Андрей

  • 10 ноября 2011, 17:45
+
0
Гридинг это, конечно, интересно, но его часто постигает судьба усреднения. Несколько лет назад наблюдал за тестом, окончился провалом. Однако, гридинг гридингу рознь. Возможно, данная реализация может оказаться более успешной… Надеюсь на это *улыбается*
avatar

  12  BetMaster Сообщений: 433

  • 7 ноября 2011, 11:43
+
0
Подробнее о гридерах:
Гридеры на сайте mql4

avatar

  35  AM2 Автор Сообщений: 16412 - Андрей

  • 13 ноября 2011, 10:22

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий