droba
Droba

 
Уровень 7

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


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

Рейтинг 2089



РЕКОМЕНДУЮ



советник для МТ4.

Доброго времени суток.
Прошу написать советник для МТ4.
1. После двух бычьих свечей появляется медвежья свеча, на Low[1] выставляем sell, а на High[1] BUYSTOP с удвоенным лотом,
далее после активации отложенных ордеров последующие отложенные ордера выставляются с этим же лотом.
на противоположных границах данной свечи(High[1], Low[1]). Для buy ситуация противоположная (после двух медвежьих свечей появляется бычья.. .).
2. ТР в валюте депозита, после закрытия по ТР все ордера удаляются.
3. Время работы советника.
  • 0
  • Просмотров: 1591
  • 9 апреля 2024, 16:50
  • droba
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
0
avatar

  8  Maxix Сообщений: 59

  • 9 апреля 2024, 19:05
+
0
на 11-е
avatar

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

  • 10 апреля 2024, 10:08
+
0
ОК!
avatar

  7  droba Автор Сообщений: 217 - Droba

  • 10 апреля 2024, 10:13
+
0
сделал большую часть. советник просто набирает кучу ордеров и все. дальше не имеет смысла делать




//+------------------------------------------------------------------+
//|                                                       ProBoy.mq4 |
//|                                              Copyright 2024, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 2;        // умножение лота
extern double Profit     = 11;       // профит

extern int StopLoss      = 0;        // лось
extern int TakeProfit    = 0;        // язь

extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

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 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;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl=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))
              {
               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 CountTrades(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 AllProfit()
  {
   double profit=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)
               profit+=OrderProfit()+OrderSwap()+OrderCommission();
           }
        }
     }
   return(profit);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del=1;

   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());
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(AllProfit()>Profit && Profit>0)
     {
      CloseAll();
      DelOrder();
     }

   if(t!=Time[0])
     {
      if(Close[1]>Open[1] && Close[2]<Open[2] && Close[3]<Open[3])
        {
         PutOrder(0,Ask,Lots);
         PutOrder(5,Low[1],Lots*2);
        }

      if(Close[1]<Open[1] && Close[2]>Open[2] && Close[3]>Open[3])
        {
         PutOrder(1,Bid,Lots);
         PutOrder(4,High[1],Lots*2);
        }

      t=Time[0];
     }

   Comment("\n Profit: ",AllProfit());
  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+

avatar

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

  • 11 апреля 2024, 11:20
+
0
1. Отложенный ордер открывает тем же объёмом, что и рыночный, а должен в два раза большим.

2. И пока первую серию не отработает по следующему сигналу сделки не должны открываться.
avatar

  7  droba Автор Сообщений: 217 - Droba

  • 11 апреля 2024, 11:49
+
0
И вообще все открывает одним лотом.
avatar

  7  droba Автор Сообщений: 217 - Droba

  • 11 апреля 2024, 12:01
+
0
avatar

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

  • 11 апреля 2024, 17:37
+
0
Андрей, благодарен за Вашу работу. Осталось сделать последнее по ТЗ «после активации отложенных ордеров последующие отложенные ордера выставляются с этим же лотом на противоположных границах данной свечи»

avatar

  7  droba Автор Сообщений: 217 - Droba

  • 12 апреля 2024, 05:14
+
0
avatar

  7  droba Автор Сообщений: 217 - Droba

  • 12 апреля 2024, 05:51
+
0
Андрей, давай доделаем советника, люди скачивают, потенциал у него не плохой.
avatar

  7  droba Автор Сообщений: 217 - Droba

  • 15 апреля 2024, 17:47
+
0
найдите человека который сможет все это объяснить машине
avatar

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

  • 15 апреля 2024, 19:34
+
0
Я конечно не программист, а запомнить цены iLow, iHigh нельзя и брать их потом из буфера, а по окончанию цикла буфер очищать. Или как предыдущий делали с горизонтальными линиями и цены прописывать в переменных данных
avatar

  7  droba Автор Сообщений: 217 - Droba

  • 15 апреля 2024, 19:57
+
+2

//+------------------------------------------------------------------+
//|                                                       ProBoy.mq4 |
//|                                              Copyright 2024, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 2;        // умножение лота
extern double Profit     = 11;       // профит

extern int StopLoss      = 0;        // лось
extern int TakeProfit    = 0;        // язь

extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

datetime t=0;
double high_price,low_price;
//+------------------------------------------------------------------+
//| 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 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,lot,NormalizeDouble(price,_Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl=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))
              {
               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 CountTrades(int type=-1)
  {
   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 || (OrderType()<2 && type==-1))
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 AllProfit()
  {
   double profit=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)
               profit+=OrderProfit()+OrderSwap()+OrderCommission();
           }
        }
     }
   return(profit);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del=1;

   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());
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(AllProfit()>Profit && Profit>0)
     {
      CloseAll();
      DelOrder();
     }
   //------------------------------------------------
   if(CountTrades()>0 && CountTrades(5)<1 && CountTrades(4)<1)
     {
      if(FindOrderType()==1)
        PutOrder(4,high_price,Lots*2);
      if(FindOrderType()==0)
        PutOrder(5,low_price,Lots*2);
     }
   //------------------------------------------------
   if(t!=Time[0])
     {
      if(CountTrades()<1 && Close[1]>Open[1] && Close[2]<Open[2] && Close[3]<Open[3])
        {
         high_price=Ask;
         low_price=Low[1];
         PutOrder(0,Ask,Lots);
         PutOrder(5,Low[1],Lots*2);
        }

      if(CountTrades()<1 && Close[1]<Open[1] && Close[2]>Open[2] && Close[3]>Open[3])
        {
         high_price=High[1];
         low_price=Bid;
         PutOrder(1,Bid,Lots);
         PutOrder(4,High[1],Lots*2);
        }

      t=Time[0];
     }

   Comment("\n Profit: ",AllProfit(),
           "\n CountTrades: ",CountTrades());
  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+

avatar

  13  verta81 Сообщений: 355

  • 15 апреля 2024, 23:23
+
+1
verta81, спасибо огромное за понимание и проделанную работу и не только от меня, а многих чатцев.
avatar

  7  droba Автор Сообщений: 217 - Droba

  • 16 апреля 2024, 05:21

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