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

Рейтинг 2081



РЕКОМЕНДУЮ



Два лиммит ордера

Здравствуйте Андрей!
Сделайте пожалуйста в этом советнике www.opentraders.ru/downloads/1219/ завершение торговли при срабатывании стоплосса так, чтобы новые противоположные ордера уже не открывались больше. А вот если срабатывают бу и трал, то чтоб не останавливалась торговля, а также открывались новые ордера. Т.е все функции оставить как есть (в точности и срабатывание закрытия ордеров по противоположному профиту, если открыты оба ордера тоже.) Вообшем ТОЛЬКО СТОП ЛОСС (значения которого вводятся в «extern int StopLoss») и всё.
  • 0
  • Просмотров: 2323
  • 28 июня 2016, 01:31
  • Vic654321
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
0
Кто писал советник?
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 28 июня 2016, 07:41
+
0
Это Вы писали, только я в него добавил бу и трал из другого Вашего советника.
avatar

  4  Vic654321 Автор Сообщений: 42 - Виктор

  • 28 июня 2016, 11:53
+
0
Завтра буду смотреть, на сегодня 2 индикатора.
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 28 июня 2016, 12:15
+
0
Ок, спасибо.
avatar

  4  Vic654321 Автор Сообщений: 42 - Виктор

  • 28 июня 2016, 12:58
+
0
Сделайте пожалуйста в этом советнике завершение торговли при срабатывании стоплосса так, чтобы новые противоположные ордера уже не открывались больше.

Поясните этот момент поподробнее пожалуйста.
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 28 июня 2016, 18:12
+
0
Андрей, дело вот в чём… Этот советник выдаёт вот такой график на тестере за год без стоплосса , но у него приличные просадки из-за этого. Если ограничить его стоплоссом то будет примерно так , т.е после срабатывания стоп лосса советник продолжает выставлять ордера. Мне нужен, как бы такой рубильник(стоп кран, ручник????(Стоп лосс), после срабатывания которого советник не будет выставлять ордера, но остальные функции работали .
По правде сказать, я даже не знаю как это сделать, ведь бу и трал перемещают его(стоплосс), а надо чтобы после этих перемещений и срабатывания бу и трала советник продолжал выставлять ордера. Ну и функция «Закрывания позиции когда получен тейк» в этом советнике (Кстати это и есть изюминка советника), тоже может по тралу или бу сработать, а значит и стоп лосс будет перемещён. Может добавить второй стоп лосс, как бы главный который бу и трал не будут перемещать и после которого торговля останавливается, или ещё что-нибудь.
avatar

  4  Vic654321 Автор Сообщений: 42 - Виктор

  • 29 июня 2016, 18:30
+
0
avatar

  4  Vic654321 Автор Сообщений: 42 - Виктор

  • 29 июня 2016, 23:01
+
0
Вот в этом варианте после стопа тишина :) 


//+------------------------------------------------------------------+
//|                                                   OpenOrders.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.2;      // лот
extern int StopLoss     = 500;      // лось
extern int TakeProfit   = 400;      // язь
extern int BULevel      = 200;      // уровень БУ
extern int BUPoint      = 150;      // пункты БУ
extern int TrailingStop = 0;        // трал
extern int Delta        = 75;       // расстояние от цены
extern int Expiration   = 10000;    // истечение ордера
extern int StopLimit    = 1;        // 0-Stop 1-Limit
extern int Slip         = 30;       // реквот
extern int Magic        = 123;      // магик

bool trade=true;
datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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,TimeCurrent()+Expiration*3600,clr);
   return;
  }
//+------------------------------------------------------------------+
//| 
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   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(Bid-OrderOpenPrice()>TrailingStop*Point)
                 {
                  if(OrderStopLoss()<Bid-TrailingStop*Point)
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if((OrderOpenPrice()-Ask)>TrailingStop*Point)
                 {
                  if((OrderStopLoss()>(Ask+TrailingStop*Point)) || (OrderStopLoss()==0))
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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;
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+ 
//|                                                                   |
//+------------------------------------------------------------------+
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 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 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());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 ClosePos(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);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(BULevel>0) BU();
   if(TrailingStop>0) Trailing();
   
   if(CountTrades()<1 && trade)
     {
      if(StopLimit==0)
        {
         if(CountOrders(4)<1)PutOrder(4,Bid+Delta*Point);
         if(CountOrders(5)<1)PutOrder(5,Bid-Delta*Point);
        }

      if(StopLimit==1)
        {
         if(CountOrders(2)<1)PutOrder(2,Bid-Delta*Point);
         if(CountOrders(3)<1)PutOrder(3,Bid+Delta*Point);
        }
     }

   if(Last()==2) trade=false;
   if(Last()==1) ClosePos(-1);
   if(Last()==1 || Last()==2) DelOrder();
  }
//+------------------------------------------------------------------+

avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 29 июня 2016, 19:14
+
0
Спасибо Андрей, щас буду тестить.<img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '>&nbsp; 
Редактирован: 29 июня 2016, 22:34
avatar

  4  Vic654321 Автор Сообщений: 42 - Виктор

  • 29 июня 2016, 22:21
+
0
Не, не то, Ну ладно, я обмазгую как это всё обставить, а то правда там сложно всё (немного сложно передать мысль ) и тогда отпишусь, а то чёт сам устал ( мозг кипит ). Но всё равно спасибо. Этот вариант натолкнул меня на мысль, что и бу, которым я пользовался, в принципе можно и не использовать здесь.
avatar

  4  Vic654321 Автор Сообщений: 42 - Виктор

  • 29 июня 2016, 23:03
+
0
А, всё Андрей, я понял, что не так. Советник переделан правильно, единственное, это то, что при срабатывании тейк профита тоже наступает «тишина», а надо чтоб не наступала :) .
avatar

  4  Vic654321 Автор Сообщений: 42 - Виктор

  • 30 июня 2016, 08:39
+
0
После тейка все нормально, только после стопа замолкает.

avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 30 июня 2016, 08:49
+
0
О, переделали, здорово, а Вы можете его выложить? :) 
avatar

  4  Vic654321 Автор Сообщений: 42 - Виктор

  • 30 июня 2016, 13:14
+
0
А то, чё-то код который выше даёт тишину по тейку youtu.be/njdvFFd912U
avatar

  4  Vic654321 Автор Сообщений: 42 - Виктор

  • 30 июня 2016, 13:35
+
0
Код выше как раз переделанный. Вот скинул в базу: www.opentraders.ru/downloads/1223/

avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 30 июня 2016, 13:36
+
0
Свежий тест:

avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 30 июня 2016, 13:38
+
0
Блин, это мистика какая-то, опять тоже самое youtu.be/DTQBxERpu58 Не знаю что и делать…
avatar

  4  Vic654321 Автор Сообщений: 42 - Виктор

  • 30 июня 2016, 14:09
+
0
Андрей, ну всю голову сломал, ничего не понимаю, почему так выходит. Вот видео записал как я всё делаю от начала и до конца, youtu.be/_swIP_Vzb5A, Проверьте пожалуйста.
avatar

  4  Vic654321 Автор Сообщений: 42 - Виктор

  • 30 июня 2016, 16:17
+
0
2 раза проверял.
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 30 июня 2016, 17:42
+
0
Андрей, я щас сравнил вчерашний код советника с сегодняшим переделаным, -они идэнтичны. Может когда Вы выкладывали на сайт, туда из кэша старый код попал?
avatar

  4  Vic654321 Автор Сообщений: 42 - Виктор

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

  34  AM2 Сообщений: 15869 - Андрей

  • 30 июня 2016, 19:32
+
0
Еще у разных брокеров эта функция может не работать, я тестирую на альпах.


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
  }
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 30 июня 2016, 19:35
+
0
Щас попробую, я тоже в альпах, но я там доп функции подключал, щас отключу, может из-за этого.
avatar

  4  Vic654321 Автор Сообщений: 42 - Виктор

  • 30 июня 2016, 19:51
+
0
Не Андрей, я всё порепробовал, даже убрал стоп лосс и бу и трал, оставил только тейк и запустил не в тестере, а в демо счёте альпари.И все равно после тейка — тишина.
avatar

  4  Vic654321 Автор Сообщений: 42 - Виктор

  • 30 июня 2016, 23:08
+
0
Дайте кому то еще потестить, если нормально то что то у вас.
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 30 июня 2016, 23:49
+
0
Хотя щас вторую волну относительно резкого скачка смотрел, там после тейка вроде советник попытался выставить ордера, но потом исчез. Вообщем надо ещё смотреть.
avatar

  4  Vic654321 Автор Сообщений: 42 - Виктор

  • 30 июня 2016, 23:52

Комментарии в данном топике запрещены
Начать торговлю с Альпари