Kashtan
Игорь

 
Уровень 19

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


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

Рейтинг 2146



РЕКОМЕНДУЮ



Советник на индикаторе

Прошу написать советник на индикаторе
Trix.mq4 (21 Kb)

Последний сегмент линий индикатора при формировании текущей свечи перерисовывается (меняет цвет и угол наклона) находится под последней закрывшейся свечёй. А предпоследний сегмент остаётся неизменным, находится под предпоследней закрывшейся свечёй. На открытии каждой свечи советник должен смотреть на цвет и расположение предпоследнего сегмента быстрой линии индикатора. Если он красный и находится выше красного пунктира, мы продаём. Если он зелёный и находится ниже зелёного пунктира — покупаем.


Т.З.

При сигнале на покупку:
1. Открывается ордер Бай по рынку с заданным лотом, Т.П. и С.Л.
2. Ставится отложка БайЛимит на заданном расстоянии от текущей цены со своим лотом, Т.П. и С.Л.
3. Если цена достигла Т.П. или С.Л. до того как сработала отложка, отложка удаляется.
4. Если оба ордера в рынке, то при достижении у одного из них С.Л. или Т.П. оставшийся ордер должен быть закрыт принудительно.

При сигнале на продажу:
1. Открывается ордер Сел по рынку с заданным лотом, Т.П. и С.Л.
2. Ставится отложка СелЛимит на заданном расстоянии от текущей цены со своим лотом, Т.П. и С.Л.
3. Если цена достигла Т.П. или С.Л. до того как сработала отложка, отложка удаляется.
4. Если оба ордера в рынке, то при достижении у одного из них С.Л. или Т.П. оставшийся ордер должен быть закрыт принудительно.

Ордер(ордера) по текущему сигналу НЕ должен быть закрыт, если до закрытия по вышеописаным условиям появился новый противоположный сигнал (то есть новый сигнал не является условием для закрытия ордеров по старому сигналу). Одновременно с этим по новому сигналу также должен быть открыт рыночный ордер и установлена отложка.

В настройках нужны:

Лот для рыночгого ордера
Т.П. для рыночного ордера
С.Л. для рыночного ордера
Лот для отложенного ордера
Т.П. для отложенного ордера
С.Л. для отложенного ордера
Дельта — на коком расстоянии от рыночного ордера будет ставиться отложка
  • +4
  • Просмотров: 5368
  • 6 июня 2016, 20:59
  • Kashtan
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
Завтра буду смотреть что можно сделать.
avatar

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

  • 6 июня 2016, 21:08
+
0
Спасибо, да хоть к выходным:) 
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 6 июня 2016, 21:22
+
0
Здесь не совсем правильно написал
Если цена достигла Т.П. или С.Л. до того как сработала отложка, отложка удаляется.


И так ясно что до лося расстояние должно быть больше чем до отлоги. По этому надо так «Если цена достигла Т.П. до того как сработала отложка, она удаляется»

avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 6 июня 2016, 21:59
+
0
4. Если оба ордера в рынке, то при достижении у одного из них С.Л. или Т.П. оставшийся ордер должен быть закрыт принудительно.

Вы сможете это объяснить машине? Я пока затрудняюсь.
avatar

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

  • 7 июня 2016, 08:34
+
0
Вот то что сделано:


//+------------------------------------------------------------------+
//|                                                         Tree.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 Lot        = 0.1;      // лот рыночного
extern double Lots       = 0.1;      // лот отложенного
extern int Loss          = 333;      // лось рыночного
extern int Profit        = 333;      // язь  рыночного
extern int StopLoss      = 333;      // лось отложенного
extern int TakeProfit    = 333;      // язь  отложенного
extern int Slip          = 30;       // реквот
extern int Shift         = 1;        // на каком баре сигнал индикатора
extern int Delta         = 300;      // расстояние от цены
extern int Magic         = 123;      // магик
extern string IndName    = "Trix";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price,double lot,int stop,int take)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

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

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

   r=OrderSend(NULL,type,lot,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 OpenPos()
  {
   double lime = iCustom(NULL,0,IndName,2,Shift);
   double red  = iCustom(NULL,0,IndName,3,Shift);
   double lime1 = iCustom(NULL,0,IndName,2,Shift+1);
   double red1  = iCustom(NULL,0,IndName,3,Shift+1);

   if(lime<1000)
     {
      PutOrder(0,Ask,Lot,Loss,Profit);
      if(CountOrders(2)<1) PutOrder(2,Ask-Delta*Point,Lots,StopLoss,TakeProfit);
     }

   if(red<1000)
     {
      PutOrder(1,Bid,Lot,Loss,Profit);
      if(CountOrders(3)<1) PutOrder(3,Bid+Delta*Point,Lots,StopLoss,TakeProfit);
     }
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//| Результат последней сделки                                       |
//+------------------------------------------------------------------+
int Last()
  {
   int result=0;
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderProfit()>0)
           {
            result=1;//tp  
           }
         if(OrderProfit()<0)
           {
            result=2;//sl  
           }
        }
     }
   return(result);
  }
//+------------------------------------------------------------------+
//| Удаление отложенных ордеров                                      |
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()>1) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==OP_SELL)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double lime= iCustom(NULL,0,IndName,2,Shift);
   double red = iCustom(NULL,0,IndName,3,Shift);

   if(CountTrades()<1)
     {
      DelOrder();
      OpenPos();
     }
     
   if((Last()==1 || Last()==2) && CountTrades()>0)
     {
      DelOrder();
      CloseAll();
     }
     
   Comment("\n lime: ",lime,
           "\n red: ",red);
  }
//+------------------------------------------------------------------+

avatar

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

  • 7 июня 2016, 08:41
+
+1
По ТЗ все есть: www.opentraders.ru/downloads/1199/

avatar

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

  • 7 июня 2016, 09:38
+
0
Спасибо Андрей, только сейчас прочитал:)  Будем проверять
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 7 июня 2016, 17:38
+
0
Как всегда не знаешь что сам пишешь:D 
avatar

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

  • 7 июня 2016, 17:55
+
0
*stesnitelno* 
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 7 июня 2016, 22:28
+
0
Андрей сейчас советник при запуске ставит четыре ордера, на покупку и на продажу. Хотя не было сигнала не на покупку не на продажу. При запуске не может ордеров быть. По Т.З советник на открытии свечи проверяет условия: последние два сегмента быстрой линии выше красного пунктира и поменяли цвет с зелёного на красный — для продаж, последние два сегмента быстрой линии ниже зелёного пунктира и поменяли цвет с красного на зелёный — для покупок.

На открытии каждой свечи советник должен смотреть на цвет и расположение предпоследнего сегмента быстрой линии индикатора.

Просто когда предпоследний сегмент «закрепил» цвет, последний перерисовывающийся как правило в этот момент того же цвета. На моём скрине это же всё видно
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 7 июня 2016, 23:02
+
0
Вы в личке просили основу, пожалуйста, дорабатывайте.
avatar

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

  • 7 июня 2016, 23:06
+
0
Основу для последующего добавления фильтрующих индикаторов. Но на этом основном хотелось бы чтоб всё по системе работало*stesnitelno* 
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 7 июня 2016, 23:07
+
0
Я даже отказался от идеи сетки, чтоб меньше гемора для вас было:) 
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 7 июня 2016, 23:11
+
0
Я очень хорошо помню что первые ваши заказы были просты в исполнении, но затем у вас разыгралась фантазия :)  То что не получается быстро сделать сразу к платному.
avatar

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

  • 8 июня 2016, 06:01
+
0
На скрине видно что советник удаляет отложку при СЛ или ТП ордера, закрывает позу при тех же условиях. Играйте с сигналом индикатора, выводите в настройки необходимые параметры. В варианте который в базе стоит открытие только по цвету быстрой линии индикатора. Я всегда с очень большим подозрением отношусь к тем заказам, когда человек может программировать и не хочет реализовывать свои идеи самостоятельно. Если вы что то делаете, приведите варианты ваших действий, укажите что конкретно не получается, вот тогда в совместной работе и может что то нарисоваться.


Редактирован: 8 июня 2016, 06:40
avatar

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

  • 8 июня 2016, 06:35
+
0
Это как раз та версия которая работала на скрине:

//+------------------------------------------------------------------+
//|                                                         Tree.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 Lot        = 0.1;      // лот рыночного
extern double Lots       = 0.1;      // лот отложенного
extern int Loss          = 333;      // лось рыночного
extern int Profit        = 333;      // язь  рыночного
extern int StopLoss      = 333;      // лось отложенного
extern int TakeProfit    = 333;      // язь  отложенного
extern int Slip          = 30;       // реквот
extern int Shift         = 1;        // на каком баре сигнал индикатора
extern int Delta         = 300;      // расстояние от цены
extern int Magic         = 123;      // магик
extern string IndName    = "Trix";

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

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

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

   r=OrderSend(NULL,type,lot,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 OpenPos()
  {
   double lime = iCustom(NULL,0,IndName,2,Shift);
   double red  = iCustom(NULL,0,IndName,3,Shift);
   double lime1 = iCustom(NULL,0,IndName,2,Shift+1);
   double red1  = iCustom(NULL,0,IndName,3,Shift+1);

   if(lime<1000 && red1<1000)
     {
      PutOrder(0,Ask,Lot,Loss,Profit);
      if(CountOrders(2)<1 && CountOrders(3)<1) PutOrder(2,Ask-Delta*Point,Lots,StopLoss,TakeProfit);
     }

   if(red<1000 && lime1<1000)
     {
      PutOrder(1,Bid,Lot,Loss,Profit);
      if(CountOrders(3)<1 && CountOrders(3)<1) PutOrder(3,Bid+Delta*Point,Lots,StopLoss,TakeProfit);
     }
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//| Удаление отложенных ордеров                                      |
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()>1) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==OP_SELL)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double lime= iCustom(NULL,0,IndName,2,Shift);
   double red = iCustom(NULL,0,IndName,3,Shift);
   
   if(CountTrades()==0) counts = 0;  
   if(CountTrades()==2) counts = 2;
   
   if(CountTrades()<1 && t!=Time[0])
     {
      DelOrder();
      OpenPos();
      t=Time[0];
     }
     

    
   if(CountTrades()==1 && counts==2)
     {
      CloseAll();
     }
     
   Comment("\n lime: ",lime,
           "\n red: ",red);
  }
//+------------------------------------------------------------------+
avatar

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

  • 8 июня 2016, 09:11

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