beton2011

 
Уровень 14

  Моя торговля


График торгового счета beton2011


Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ



Советник змейка

Андрей добрый день.

Можно попросить написать для меня советника.

Открытие ордеров.

Первый ордер открывается в направлении заданном мною в советнике, рыночный ордер. Если цена идет в нужном мне напровлении, тогда через каждые 10п ( настраивается ) открывается новый рыночный ордер в том же направлении. Если цена развернулась, считаем от последнего открытого ордера, тогда через те же 10п открываются ордера в другом направлении, получается такая змейка из ордеров, это если присутствует на рынке флет.

Закрытие ордеров.

Надо чтоб советник закрывал первую серию ордеров, после того как будет открыто какое то количество разнонаправленных ордеров. Скажем в советнике я задал закрытие ордеров после трех разнонаправленных ордеров, не важно сколько в серии будет ордеров, главное направление первых ордеров, ну вот, открыт первый бай, потом идут сэллы, потом идут баии, в этот момент закрываются самые первые баии.

Надо еще закрытие всех ордеров по достижению профита в валюте депозита.

Вроде все, если что, думаю что смогу нарисовать.

Спасибо
  • +3
  • Просмотров: 2357
  • 18 сентября 2016, 13:42
  • beton2011
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Советник по сигналам индикатора FOREX ENTRY POINT
18 сентября 2016
21 сентября 2016

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

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

+
0
Да нарисовать желательно.
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 18 сентября 2016, 19:58
+
0
Андрей, прошу в первой версии советника «убрать» 168 ошибку.
Редактирован: 7 октября 2016, 20:51
avatar

  7  stepmega Сообщений: 88

  • 7 октября 2016, 20:51
+
+1
C открытием и закрытием по профиту вопрос решенный, а с вашим закрытием мудреным на картинке только разберешься :) 




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

extern double Lots         = 0.1;         // начальный лот
extern double Stop         = 4500;        // лось в рублях
extern double Profit       = 50;          // язь  в рублях
extern int    Step         = 200;         // шаг между ордерами
extern int    BuySell      = 0;           // направление серии 0-нет. 1-бай. 2-селл.
extern int    Slip         = 30;          // проскальзывание
extern int    Magic        = 123;         // магик

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,0,0,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//| Профит всех ордеров по типу ордера                               |
//+------------------------------------------------------------------+
double AllProfit(int ot=-1)
  {
   double pr=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }

            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   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()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int FindOrderType()
  {
   int oticket,ticketNumber=0,type=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               type=OrderType();
              }
           }
        }
     }
   return(type);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double FindLastBuyPrice()
  {
   int oticket,ticketNumber=0;
   double oprice=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               oprice=OrderOpenPrice();
              }
           }
        }
     }
   return(oprice);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double FindLastSellPrice()
  {
   int oticket,ticketNumber=0;
   double oprice=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               oprice=OrderOpenPrice();
              }
           }
        }
     }
   return(oprice);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int otype=FindOrderType();

   if(Stop>0 && AllProfit()<-Stop) CloseAll();
   if(Profit>0 && AllProfit()>Profit) CloseAll();

// первая поза

   if(CountTrades()<1)
     {
      if(BuySell==1)
        {
         PutOrder(0,Ask);
        }

      if(BuySell==2)
        {
         PutOrder(1,Bid);
        }
     }

// долив

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

      if((FindLastSellPrice()-Bid)/Point>=Step)
        {
         PutOrder(1,Bid);
        }
     }

   if(CountTrades()>0)
     {
      if((Bid-FindLastSellPrice())/Point>=Step && FindOrderType()==1)
        {
         PutOrder(0,Ask);
        }

      if((FindLastBuyPrice()-Ask)/Point>=Step && FindOrderType()==0)
        {
         PutOrder(1,Bid);
        }
     }
     
   Comment("\n Trades: ",CountTrades(),
           "\n All Profit: ",NormalizeDouble(AllProfit(),2));
  }
//+------------------------------------------------------------------+

avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 18 сентября 2016, 21:01
+
+1
Написал функцию, открыто 6 баев ну и селы там, ЗАКРЫВАЕТ ПЕРВЫЕ 3 БАЯ.

if(CountOrders(0)>5) CloseAllCount(0,3);

Там уже дальше сами разберетесь.


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

extern double Lots         = 0.1;         // начальный лот
extern double Stop         = 4500;        // лось в рублях
extern double Profit       = 50;          // язь  в рублях
extern int    Step         = 200;         // шаг между ордерами
extern int    BuySell      = 0;           // направление серии 0-нет. 1-бай. 2-селл.
extern int    Slip         = 30;          // проскальзывание
extern int    Magic        = 123;         // магик

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,0,0,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//| Профит всех ордеров по типу ордера                               |
//+------------------------------------------------------------------+
double AllProfit(int ot=-1)
  {
   double pr=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }

            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   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()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int FindOrderType()
  {
   int oticket,ticketNumber=0,type=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               type=OrderType();
              }
           }
        }
     }
   return(type);
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(int type)
  {
   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()==type) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double FindLastBuyPrice()
  {
   int oticket,ticketNumber=0;
   double oprice=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               oprice=OrderOpenPrice();
              }
           }
        }
     }
   return(oprice);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double FindLastSellPrice()
  {
   int oticket,ticketNumber=0;
   double oprice=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               oprice=OrderOpenPrice();
              }
           }
        }
     }
   return(oprice);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
void CloseAllCount(int ot=-1,int ord=0)
  {
   bool cl;
   for(int i=0;i<OrdersTotal()-ord-1;i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(Stop>0 && AllProfit()<-Stop) CloseAll();
   if(Profit>0 && AllProfit()>Profit) CloseAll();
   if(CountOrders(0)>5) CloseAllCount(0,3);

// первая поза

   if(CountTrades()<1)
     {
      if(BuySell==1)
        {
         PutOrder(0,Ask);
        }

      if(BuySell==2)
        {
         PutOrder(1,Bid);
        }
     }

// долив

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

      if((FindLastSellPrice()-Bid)/Point>=Step)
        {
         PutOrder(1,Bid);
        }
     }

   if(CountTrades()>0)
     {
      if((Bid-FindLastSellPrice())/Point>=Step && FindOrderType()==1)
        {
         PutOrder(0,Ask);
        }

      if((FindLastBuyPrice()-Ask)/Point>=Step && FindOrderType()==0)
        {
         PutOrder(1,Bid);
        }
     }

   Comment("\n Trades: ",CountTrades(),
           "\n Buy Trades: ",CountOrders(0),
           "\n Sell Trades: ",CountOrders(1),
           "\n All Profit: ",NormalizeDouble(AllProfit(),2));
  }
//+------------------------------------------------------------------+


Редактирован: 18 сентября 2016, 21:34
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 18 сентября 2016, 21:32
+
0
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 18 сентября 2016, 21:34
+
0
Спасибо, я только вечером смогу посмотреть.
avatar

  14  beton2011 Автор Сообщений: 895

  • 19 сентября 2016, 06:09
+
0
Оформил все по ТЗ и скинул в базу: www.opentraders.ru/downloads/1326/
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 19 сентября 2016, 07:16
+
0
Посмотрел, не много не так происходит подсчет и закрытие ордеров. Сейчас идет подсчет всех баев и селов, а надо считать только первые ордера после смены направления. А закрытие первых ордеров происходит после скажем после того как три раза сменится направление, тогда закрываются все первые ордера, и продолжает закрывать первые ордера после каждой смены направления.
avatar

  14  beton2011 Автор Сообщений: 895

  • 19 сентября 2016, 18:58
+
0
а надо считать только первые ордера после смены направления. А закрытие первых ордеров происходит после скажем после того как три раза сменится направление, тогда закрываются все первые ордера, и продолжает закрывать первые ордера после каждой смены направления.


С таким алгоритмом не ко мне.
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 20 сентября 2016, 08:28
+
0
Может можно упростить немного. Все же просто, это как в игре змейка :)  Только мы настраиваем когда у змейки подрезать хвостик :) 
avatar

  14  beton2011 Автор Сообщений: 895

  • 20 сентября 2016, 18:09
+
0
если просто почему не делаете самостоятельно?
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 20 сентября 2016, 18:12
+
0
Просто будет для вас, для меня это сложно. Могу попробовать по другому составить Т3.
avatar

  14  beton2011 Автор Сообщений: 895

  • 20 сентября 2016, 18:37
+
0
Здесь все функции абсолютно уникальные, требуют значительных трудозатрат, большую часть я сделал, дальше к платному.
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 20 сентября 2016, 18:46
+
0
Надо только одну функцию сделать уникальной, это закрытие всех первых ордеров после того как несколько раз сменится направление ордеров.

Не понимаю, я вроде в топике все описал, а вы сделали совсем не то, даже сложнее сделали.
avatar

  14  beton2011 Автор Сообщений: 895

  • 20 сентября 2016, 19:01
+
0
Сложный не берусь :) 
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 20 сентября 2016, 19:13
+
0
Спасибо за то что сделали :) 
avatar

  14  beton2011 Автор Сообщений: 895

  • 20 сентября 2016, 19:18
+
0
подсчет переворотов я сделал а как закрытие первой серии ордеров сделать не знаю. попробовал несколько вариантов никак.
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 20 сентября 2016, 19:28
+
0
А может убрать подсчет баев и селов. Задать в советнике подсчет ордеров в каждом перевороте, и после какого то переворота закрывать всю серию первых ордеров.

Как то у вас получилось что советник закрывает первые ордера баев и сэлов.
Редактирован: 20 сентября 2016, 20:10
avatar

  14  beton2011 Автор Сообщений: 895

  • 20 сентября 2016, 20:06
+
0
Задать в советнике подсчет ордеров в каждом перевороте, и после какого то переворота закрывать всю серию первых ордеров.


Предлагайте как это реализовать программно? <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/003.gif' alt=' <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/003.gif' alt=' :D '>&nbsp; '>&nbsp; 
Я чтобы реализовать закрытие по алгоритму написал кучу вспомогательных функций, а вы что сделали? Все закрываю я этот вопрос.
Редактирован: 20 сентября 2016, 20:15
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 20 сентября 2016, 20:12
+
0
Меня что никто ниже не читает? *girlcry* 
avatar

  7  Vitalik5675 Сообщений: 282

  • 20 сентября 2016, 20:16
+
0
Ты не один, меня тоже никто не читает ( 
avatar

  14  beton2011 Автор Сообщений: 895

  • 21 сентября 2016, 19:01
+
0
Там я не так на писал.

Вот если можно так сделать, если нет так нет.

Надо просто оставить только подсчет переворотов, и после какого то переворота закрывать первые ордера по одному после открытия каждого нового ордера.

Думаю это будет не сложно сделать.
avatar

  14  beton2011 Автор Сообщений: 895

  • 20 сентября 2016, 20:28
+
0
Ну или закрывать не серию ордеров, а просто первые ордера постепенно.
avatar

  14  beton2011 Автор Сообщений: 895

  • 20 сентября 2016, 20:23
+
0
Ну или закрывать не серию ордеров, а просто первые ордера постепенно.

Надо просто оставить только подсчет переворотов, и после какого то переворота закрывать первые ордера по одному после открытия каждого нового ордера.
avatar

  14  beton2011 Автор Сообщений: 895

  • 20 сентября 2016, 20:26
+
0
А можно просто сделать так что бы после кокого то переворота закрывались все ордера, буду очень благодарен за это.
avatar

  14  beton2011 Автор Сообщений: 895

  • 20 сентября 2016, 20:51
+
0
Еще это можно реализовать с помощью советника Risk). Там это называется работа с пирамидами.
avatar

  8  Voland-Z Сообщений: 259 - Ищук Александр

  • 19 сентября 2016, 02:53
+
0
Проще будет сделать чтобы закрывать определенное количество сделок от времени их открытия и указанным профитом.
Например открыл советник кучу сделок, но когда с первых buy, sell или неважно каких 3 открытых сделок получился профит 50 чтобы они закрывались)
avatar

  7  Vitalik5675 Сообщений: 282

  • 20 сентября 2016, 19:32

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