M-mason
Михаил

 
Уровень 16

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


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

Рейтинг 2151



РЕКОМЕНДУЮ




Лучшее от M-mason



Индикатор Наипростейший. Комментариев 9
2015-03-04 18:34:57Рейтинг 0

Коробок Комментариев 15
2021-11-07 22:13:07Рейтинг 0

Коробок

Всем привет!
Андрей, напиши пожалуйста советник на пробой ряда свечей.

Выставляются два отложенных ордера Buy и Sell на high и low коробки из предыдущих 20 свечей. StopLoss на high и low коробки из предыдущих 10 свечей.
При покупке SL передвигается вслед за ценой по нижнему low из 10 свечей. Ордер Sell Stop продолжает своё движение по low коробки из предыдущих 20 свечей.
При продаже всё зеркально.
Параметры:

— только Buy или только Sell (или оба ордера)
— Lot
— Delta от high, low (коробки) в пп
— TP если *0*, то нет
— magic

Спасибо!
  • +1
  • Просмотров: 1994
  • 7 ноября 2021, 22:13
  • M-mason
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
Уточнение:
в работе только один открытый ордер, отложенные ордера — Stop-овые.
avatar

  16  M-mason Автор Сообщений: 99 - Михаил

  • 8 ноября 2021, 11:08
+
0
делал подобные смотрите в базе. если не найдете дайте ссылку на самый близкий вариант
avatar

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

  • 8 ноября 2021, 17:28
+
0
ок
avatar

  16  M-mason Автор Сообщений: 99 - Михаил

  • 8 ноября 2021, 17:32
+
0
Вот похожий: zakaz.opentraders.ru/27242.html
только вместо одной предыдущей свечи нужна *толпа* из 20-ти и 10-ти предыдущих свечей. Можно количество свечей вынести в настройки, было бы супер!

avatar

  16  M-mason Автор Сообщений: 99 - Михаил

  • 8 ноября 2021, 19:22
+
0
на 12-е
avatar

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

  • 8 ноября 2021, 20:12
+
0
Добрейшей души человек!
avatar

  16  M-mason Автор Сообщений: 99 - Михаил

  • 8 ноября 2021, 20:40
+
0
avatar

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

  • 9 ноября 2021, 20:47
+
0
Благодарю. Будем тестить.
avatar

  16  M-mason Автор Сообщений: 99 - Михаил

  • 10 ноября 2021, 10:30
+
0
Андрей, как исправить сов., что бы он не учитывал текущую свечу?
avatar

  16  M-mason Автор Сообщений: 99 - Михаил

  • 10 ноября 2021, 12:07
+
0
avatar

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

  • 10 ноября 2021, 20:09
+
0
Проблемка, сов. не учитывает свечи для трала, и при установке в настройках SL *0* устанавливает его на цену установки отложенного ордера. Получается при открытии ордера он сразу закрывается.
avatar

  16  M-mason Автор Сообщений: 99 - Михаил

  • 11 ноября 2021, 13:16
+
0
сов. не учитывает свечи для трала


учитывает. только что проверил:



и при установке в настройках SL *0* устанавливает его на цену установки отложенного ордера. Получается при открытии ордера он сразу закрывается.


если стоп не нужен, что вам мешает поставить стоп 5555555?
avatar

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

  • 11 ноября 2021, 21:43
+
0
Буду пробывать ещё, стоп нужен. Ставил для трала 4 свечи и Стоп Лосс *0*, не получается. H1 Eur/usd
avatar

  16  M-mason Автор Сообщений: 99 - Михаил

  • 11 ноября 2021, 22:31
+
0

//+------------------------------------------------------------------+
//|                                                       ProBoy.mq4 |
//|                                              Copyright 2021, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, 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 MaxLot     = 5;        // лот для вирта

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

extern int Candles       = 20;       // свечей в коробке
extern int CandleTrail   = 10;       // свечей для трала

extern int Delta         = 100;      // расстояние от цены
extern int Slip          = 30;        // реквот
extern int Magic         = 123;        // магик

extern bool BuyStop      = true;        // BuyStop
extern bool SellStop     = true;        // SellStop

datetime t=0;
double hi=0,lo=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)
  {
   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;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderProfit()>0)
            break;
         if(OrderProfit()<0)
           {
            lot=OrderLots()*KLot;
            break;
           }
        }
     }
   if(lot>MaxLot)
      lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
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 ModeOOP()
  {
   bool m=1;
   double sl=0,tp=0;
   lo=Low[iLowest(NULL,0,1,Candles,0)];
   hi=High[iHighest(NULL,0,2,Candles,0)];
   double opb=NormalizeDouble(hi+Delta*_Point,_Digits);
   double slb=NormalizeDouble(Low[iLowest(NULL,0,1,CandleTrail,1)],Digits);
   double ops=NormalizeDouble(lo-Delta*_Point,_Digits);
   double sls=NormalizeDouble(High[iHighest(NULL,0,2,CandleTrail,1)],_Digits);
   

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUYSTOP)//4
              {
               if(OrderOpenPrice()!=opb)
                 {
                  if(TakeProfit>0)
                   {
                    tp=NormalizeDouble(OrderOpenPrice()+TakeProfit*_Point,_Digits);
                   }
                 if(StopLoss>0)
                   {
                    slb=NormalizeDouble(OrderOpenPrice()-TakeProfit*_Point,_Digits);
                   }
                  m=OrderModify(OrderTicket(),opb,slb,tp,0,Blue);
                  return;
                 }
              }

            if(OrderType()==OP_SELLSTOP)//5
              {
               if(OrderOpenPrice()!=ops)
                 {
                  if(TakeProfit>0)
                   {
                    tp=NormalizeDouble(OrderOpenPrice()-TakeProfit*_Point,_Digits);
                   }
                 if(StopLoss>0)
                   {
                    sls=NormalizeDouble(OrderOpenPrice()+TakeProfit*_Point,_Digits);
                   }
                  m=OrderModify(OrderTicket(),ops,sls,tp,0,Blue);
                  return;
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CandleTrailing()
  {
   bool mod=1;
   double sl=0;

   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)
              {
               sl=NormalizeDouble(Low[iLowest(NULL,0,1,CandleTrail,1)],Digits);

               if(Bid>sl)
                 {
                  if(OrderStopLoss()<sl || OrderStopLoss()==0)
                    {
                     if(OrderStopLoss()!=sl)
                        mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               sl=NormalizeDouble(High[iHighest(NULL,0,2,CandleTrail,1)],Digits);

               if(Ask<sl)
                 {
                  if(OrderStopLoss()>sl || OrderStopLoss()==0)
                    {
                     if(OrderStopLoss()!=sl)
                        mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(t!=Time[0])
     {
      lo=Low[iLowest(NULL,0,1,Candles,0)];
      hi=High[iHighest(NULL,0,2,Candles,0)];

      ModeOOP();

      if(CandleTrail>0)
         CandleTrailing();

      if(CountTrades()<1)
        {
         if(BuyStop && CountOrders(4)<1)
           {
            PutOrder(4,hi+Delta*_Point);
           }
         if(SellStop && CountOrders(5)<1)
           {
            PutOrder(5,lo-Delta*_Point);
           }
        }
      t=Time[0];
     }

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

avatar

  14  verta81 Сообщений: 441

  • 12 ноября 2021, 02:49
+
0
Спасибо, буду испытывать.
avatar

  16  M-mason Автор Сообщений: 99 - Михаил

  • 12 ноября 2021, 17:53

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