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

Рейтинг 2153



РЕКОМЕНДУЮ



Поправить индикатор.

Есть индикатор б/у, пользуюсь им, хоть и не нравится в некоторых ситуациях.

www.opentraders.ru/downloads/1159

Компилируется с некритичными ошибками в текущем билде. Иногда треморит, скорее всего из-за изменяемого спреда.

Хотелось бы получить конкретно раздельные учёты и отрисовку уровней б/у для бай и селл. Плюс отключаемую опцию общего б/у третьим цветом. Тремор устранить путём какого-либо допуска, который желательно вынести во внешние переменные.

Заранее благодарен.
  • 0
  • Просмотров: 2388
  • 27 апреля 2016, 11:22
  • Anatoly74
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
Чужой код смотрю но результат не гарантирую :) 
avatar

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

  • 27 апреля 2016, 11:28
+
0
Андрей, я абсолютно не против, если будет индикатор запилен заново...;)  ТЗ же короткое: три линии, две раздельно для б/у открытых бай и селл и третья отключаемая общая.
avatar

  20  Anatoly74 Автор Сообщений: 3710 - Анатолий

  • 27 апреля 2016, 11:42
+
0
ТЗ то короткое но быстро сделать точно не получится. Нужно сидеть репу чесать как все это реализовать.
avatar

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

  • 27 апреля 2016, 12:02
+
0
но быстро сделать точно не получится
Готов подождать, уже давно предпочитаю опоздать, чем поспешить… Тем более, что не жжёт. Если не выйдет каменный цветок — прошу отписать, буду искать альтернативные варианты.
avatar

  20  Anatoly74 Автор Сообщений: 3710 - Анатолий

  • 27 апреля 2016, 12:27
+
0
Анатолий, у меня где то был подобный, только там советник был, поищу и займусь сегодня вечером.
avatar

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

  • 27 апреля 2016, 16:52
+
0
Советника не нужно, хотелось бы индикатор.
avatar

  20  Anatoly74 Автор Сообщений: 3710 - Анатолий

  • 27 апреля 2016, 17:22
+
0
Я хочу сказать что основа какая то есть, а в начале все равно в виде советника придется делать чтобы в тестере гонять и смотреть что и как работает а то в онлайн отлаживать надолго затянется
avatar

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

  • 27 апреля 2016, 17:40
+
0
Буду ждать.
avatar

  20  Anatoly74 Автор Сообщений: 3710 - Анатолий

  • 27 апреля 2016, 18:07
+
0
Нет не возьмусь. Я три часа просидел а толком так ничего не сообразил а старый не нашел.
avatar

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

  • 27 апреля 2016, 19:53
+
0
Ну ладно, будем искать…
avatar

  20  Anatoly74 Автор Сообщений: 3710 - Анатолий

  • 27 апреля 2016, 19:57
+
0
У кого есть наработки подобные, быстро сделают, а с нуля долго. Fargo например в этом разобрался: mql.opentraders.ru/25225.html
avatar

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

  • 27 апреля 2016, 20:28
+
0
А вот и мой советник: zakaz.opentraders.ru/29341.html
Я помню долго тогда над ним пыхтел, и таки сяк и эдак его крутил в результате получилось по другому чем у фарго. А над этим вариантом еще дольше колдовать надо.
avatar

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

  • 27 апреля 2016, 21:30
+
+2
Сейчас набросал первый более менее работоспособный вариант со своими функциями, а то вчера вообще ничего не шло. По скрину видно что БУ рассчитывается правдоподобно.




//+------------------------------------------------------------------+
//|                                                           BU.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

//--- Inputs
extern double Lots       = 0.1;      // лот
extern int StopLoss      = 1000;     // лось
extern int TakeProfit    = 111;      // язь
extern double Profit     = 111;      // язь в рублях
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

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

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double AllProfit()
  {
   double pr=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutLine(string name,double p,color clr)
  {
   ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_HLINE,0,0,p);
//--- установим цвет линии
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим толщину линии
   ObjectSetInteger(0,name,OBJPROP_WIDTH,3);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Price(int type)
  {
   double pr=0,sum=0,lot=0;

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==0 && (type==0 || type==2))
              {
               sum+=OrderOpenPrice()*OrderLots();
               lot+=OrderLots();
              }

            if(OrderType()==1 && (type==1 || type==2))
              {
               sum-=OrderOpenPrice()*OrderLots();
               lot-=OrderLots();
              }
           }
        }
     }
     
   if(lot>0 || lot<0) pr=sum/lot;
   return(pr);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(OrdersTotal()<1)
     {
      for(int i=1;i<=5;i++)
        {
         PutOrder(3,Ask+300*Point*i);//selllimit 5
        }

      for(int i=1;i<=4;i++)
        {
         PutOrder(4,Ask+200*Point*i);//buystop 4
        }
     }
   PutLine("BLine",Price(0),Blue);
   PutLine("SLine",Price(1),Red);
   PutLine("ALine",Price(2),Yellow);

   Comment("\n Profit: ",AllProfit(),
           "\n BuyProfitPrice: ",Price(0),
           "\n SellProfitPrice: ",Price(1),
           "\n AllProfitPrice: ",Price(2));
  }
//+------------------------------------------------------------------+

avatar

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

  • 28 апреля 2016, 08:11
+
0
Вот неугомонный!:)  Спасибо, буду пробовать.
avatar

  20  Anatoly74 Автор Сообщений: 3710 - Анатолий

  • 28 апреля 2016, 08:40
+
0
Посмотрел. Навскидку — то, что нужно. Хотелось бы виде индикатора. Цвета, толщины линий смогу поменять в теле. Хотелось бы видеть опцию отключения линии общего б/у во внешних. Информационные сообщения можно убрать(либо тоже как опцию, вдруг кому пригодится).

P. S. Хотелось бы приоритет линии б/у направления над линией общего б/у, чтобы линия общего б/у не накрывала какую-либо из них при отсутствии встречных позиций.
Редактирован: 28 апреля 2016, 09:32
avatar

  20  Anatoly74 Автор Сообщений: 3710 - Анатолий

  • 28 апреля 2016, 09:03
+
0
Вывел настройки толщину, отключение линий. Комментарии и ордера только в режиме тестирования.


//+------------------------------------------------------------------+
//|                                                           BU.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

//--- Inputs
extern double Lots       = 0.1;      // лот
extern int StopLoss      = 0;        // лось
extern int TakeProfit    = 0;        // язь
extern int Width         = 2;        // толщина линий
extern int Slip          = 30;       // реквот
extern int Magic         = 0;        // магик

extern bool Buy          = true;     // отключение линии БУ бай
extern bool Sell         = true;     // отключение линии БУ селл
extern bool All          = true;     // отключение линии БУ всех

extern color BuyColor    = Blue;     // цвет линии БУ бай
extern color SellColor   = Red;      // цвет линии БУ селл
extern color AllColor    = Yellow;   // цвет линии БУ всех
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

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

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double AllProfit()
  {
   double pr=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutLine(string name,double p,color clr)
  {
   ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_HLINE,0,0,p);
//--- установим цвет линии
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим толщину линии
   ObjectSetInteger(0,name,OBJPROP_WIDTH,Width);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Price(int type)
  {
   double pr=0,sum=0,lot=0;

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==0 && (type==0 || type==2))
              {
               sum+=OrderOpenPrice()*OrderLots();
               lot+=OrderLots();
              }

            if(OrderType()==1 && (type==1 || type==2))
              {
               sum-=OrderOpenPrice()*OrderLots();
               lot-=OrderLots();
              }
           }
        }
     }

   if(lot>0 || lot<0) pr=sum/lot;
   return(pr);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(OrdersTotal()<1 && IsTesting())
     {
      for(int i=1;i<=5;i++)
        {
         PutOrder(3,Ask+300*Point*i);//selllimit 5
        }

      for(int i=1;i<=4;i++)
        {
         PutOrder(4,Ask+200*Point*i);//buystop 4
        }
     }

   if(Buy) PutLine("BLine",Price(0),BuyColor);
   if(Sell) PutLine("SLine",Price(1),SellColor);
   if(All) PutLine("ALine",Price(2),AllColor);

   if(IsTesting()) Comment("\n Profit: ",AllProfit(),
      "\n BuyProfitPrice: ",Price(0),
      "\n SellProfitPrice: ",Price(1),
      "\n AllProfitPrice: ",Price(2));
  }
//+------------------------------------------------------------------+

avatar

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

  • 28 апреля 2016, 10:25
+
0
В виде индикатора вариант: www.opentraders.ru/downloads/1161/


//+------------------------------------------------------------------+
//|                                                  BUIndicator.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
#property indicator_chart_window

extern int  Width        = 2;        // толщина линий

extern bool Buy          = true;     // отключение линии БУ бай
extern bool Sell         = true;     // отключение линии БУ селл
extern bool All          = true;     // отключение линии БУ всех

extern color BuyColor    = Blue;     // цвет линии БУ бай
extern color SellColor   = Red;      // цвет линии БУ селл
extern color AllColor    = Yellow;   // цвет линии БУ всех
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutLine(string name,double p,color clr)
  {
   ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_HLINE,0,0,p);
//--- установим цвет линии
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим толщину линии
   ObjectSetInteger(0,name,OBJPROP_WIDTH,Width);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Price(int type)
  {
   double pr=0,sum=0,lot=0;

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==0 && (type==0 || type==2))
              {
               sum+=OrderOpenPrice()*OrderLots();
               lot+=OrderLots();
              }

            if(OrderType()==1 && (type==1 || type==2))
              {
               sum-=OrderOpenPrice()*OrderLots();
               lot-=OrderLots();
              }
           }
        }
     }

   if(lot>0 || lot<0) pr=sum/lot;
   return(pr);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(Buy)  PutLine("BLine",Price(0),BuyColor);
   if(Sell) PutLine("SLine",Price(1),SellColor);
   if(All)  PutLine("ALine",Price(2),AllColor);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


Редактирован: 29 апреля 2016, 08:37
avatar

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

  • 28 апреля 2016, 10:26
+
0
Доброго время суток.
Подскажите а есть у Вас где-то в архивах, сова. Идея такова. Как только проходит n пунктов переводит нужную сделку в б/у.
Если есть скрипт то будет не плохо, ведь данная функция не всегда нужна. Или индюк, не важно лиж бы работало.
В стол заказов пока ничего не писа, да и не планирую, у Вас и ак дофига хламной работы, как мне кажется. Так что если что-то найдете дайте знать.
Спасибо.
avatar

  6  Carbon13 Сообщений: 84

  • 25 мая 2016, 15:56
+
0
Подскажите а есть у Вас где-то в архивах, сова. Идея такова. Как только проходит n пунктов переводит нужную сделку в б/у.
Если есть скрипт то будет не плохо, ведь данная функция не всегда нужна. Или индюк, не важно лиж бы работало.

В базе есть где то подобный вариант, помню делал такой.
avatar

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

  • 25 мая 2016, 19:44
+
0
по поиску на сайте поискал, не нашел. Просто понять он как скрип или как советник. И как хотя бы называется. Мне наводку, а дальше сам. И еще это может быть скрипт или только сова?..
avatar

  6  Carbon13 Сообщений: 84

  • 25 мая 2016, 21:11
+
+2
Как это не нашел? Только что забил в поиске безубыток и выдало с десяток результатов:
www.opentraders.ru/search/?q=безубыток
Там есть и скрипты и совы.

Вот функция:


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BU()
  {
   bool m;
   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(OrderOpenPrice()<=(Bid-(BULevel+BUPoint)*Point) && OrderOpenPrice()>OrderStopLoss())
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+BUPoint*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderOpenPrice()>=(Ask+(BULevel+BUPoint)*Point) && (OrderOpenPrice()<OrderStopLoss() || OrderStopLoss()==0))
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-BUPoint*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }
           }
        }
     }
  }
avatar

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

  • 26 мая 2016, 07:20
+
0
спасибо. Очень благодарен что отозвались — помогли. спасибо.
avatar

  6  Carbon13 Сообщений: 84

  • 26 мая 2016, 11:53
+
0
Благодарю.
avatar

  20  Anatoly74 Автор Сообщений: 3710 - Анатолий

  • 28 апреля 2016, 10:30
+
0
Андрей, а можно ещё ему объяснить, что нужно удалять его объекты при удалении с графика?
avatar

  20  Anatoly74 Автор Сообщений: 3710 - Анатолий

  • 30 мая 2016, 15:17
+
0
Он там 3 объекта создает и в деините удаляй:
ObjectDelete("BLine");
ObjectDelete("SLine");
ObjectDelete("ALine");
avatar

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

  • 30 мая 2016, 19:10
+
0
Спасибо.
avatar

  20  Anatoly74 Автор Сообщений: 3710 - Анатолий

  • 30 мая 2016, 19:10

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