0
сделал набросок который выставляет отложки по краям канала и стоповые вместо лося:


//+------------------------------------------------------------------+
//|                                                     HighLow3.mq4 |
//|                                              Copyright 2020, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lot1       = 0.1;      // лот 1
extern double Lot2       = 0.5;      // лот 2
extern double Profit     = 10;       //
extern int StopLoss      = 300;      // лось
extern int TakeProfit    = 100;      // язь
extern int Expiration    = 20;       // истечение
extern int Count         = 10;       // баров для расчета
extern int Slip          = 0;        // реквот
extern int Magic         = 123;      // магик

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(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 || type==-1)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Удаление отложенных ордеров                                      |
//+------------------------------------------------------------------+
void DelOrder(int type)
  {
   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()==type)
               del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Профит всех ордеров по типу ордера                               |
//+------------------------------------------------------------------+
double AllProfit(int ot=-1)
  {
   double pr=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))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }

            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll(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);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int r=0;
   double lo=Low[iLowest(NULL,0,MODE_LOW,Count,1)];
   double hi=High[iHighest(NULL,0,MODE_HIGH,Count,1)];

   if(CountTrades()>1 && AllProfit()>Profit)
      CloseAll();

   if(Bid<hi && Bid>lo && CountOrders()<1)
     {
      r=OrderSend(NULL,4,Lot1,hi,0,0,hi+TakeProfit*_Point,"",Magic,TimeCurrent()+Expiration*3600,Blue);
      r=OrderSend(NULL,5,Lot2,hi-StopLoss*_Point,0,0,0,"",Magic,TimeCurrent()+Expiration*3600,Red);

      r=OrderSend(NULL,5,Lot1,lo,0,0,lo-TakeProfit*_Point,"",Magic,TimeCurrent()+Expiration*3600,Red);
      r=OrderSend(NULL,4,Lot2,lo+StopLoss*_Point,0,0,0,"",Magic,TimeCurrent()+Expiration*3600,Blue);
     }
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 30 декабря 2020, 21:00
0
Мне хотелось бы, чтобы ордер #4 выставлялся по цене отложенного ордера #2, а не по Ask
Как сделать, чтобы советник видел цену этого ордера и выставлял ордера по этой цене, даже после закрытия по профиту #4


можно выставлять отложжку по заданной в настройках цене или искать в истории самый крайний ордер.
avatar

AM2

  • 30 декабря 2020, 20:23
0
только если так вот прописать работает:


         if(EAS.SignalOpen() == OP_BUY)
           {
            if(OrderSend(_Symbol, OP_BUY, Lot, Ask, 1, 0, 0,IntegerToString(Expiration), Magic, 0, Blue) > 0)
              {
               Print("Order buy opened");
              }
            else
               Print("Order Open Error");
           }
         if(EAS.SignalOpen() == OP_SELL)
           {
            if(OrderSend(_Symbol, OP_SELL, Lot, Bid, 1, 0, 0,IntegerToString(Expiration), Magic, 0, Red) > 0)
              {
               Print("Order sell opened");
              }
avatar

AM2

  • 29 декабря 2020, 21:23
0
п 2 и 3 под вопросом
avatar

AM2

  • 29 декабря 2020, 21:05
0
у вас какое то время будет так:



а потом вот так:



www.opentraders.ru/downloads/2891/
avatar

AM2

  • 29 декабря 2020, 21:04
0
поставил на демо, посмотрим в чем причина.
avatar

AM2

  • 28 декабря 2020, 19:40
0
вы смотрели в базе варианты виртуальных тралов? если нет посмотрите:

zakaz.opentraders.ru/30240.html
zakaz.opentraders.ru/28646.html
avatar

AM2

  • 27 декабря 2020, 11:50
0
У вас ручное выставление, я вижу.
Мне собственно, идея нужна… или логическая мысль.
Я через магический номер пытаюсь, но запутался и зашел в тупик…
Поэтому и обратился сюда.


на скринах все покажите полный цикл. открыли закрыли поставили отложку и т.д.
или на примере готового что поправить напишите
avatar

AM2

  • 27 декабря 2020, 09:57
0
делал недавно подобный: www.opentraders.ru/downloads/2879/
avatar

AM2

  • 25 декабря 2020, 22:34
0
не берусь
avatar

AM2

  • 24 декабря 2020, 20:34
0
у индикатора зон нет индикаторных буферов, а без этого получить значения индикатора достаточно проблематично
avatar

AM2

  • 24 декабря 2020, 20:31
0
на 3-е
avatar

AM2

  • 24 декабря 2020, 19:59
0
А какие варианты вообще можно реализовать?

подготовьте четкое тз. сейчас крайне низкая степень проработки
avatar

AM2

  • 23 декабря 2020, 22:52
0
Если слишком сложно такое сделать, то может кто подскажет индюка с оповещением о дивергенции по Macd на указанном в настройках ТФ?


не сложно. просто нужно четкое тз, без разночтений, чтобы любой на картинку глянул и сразу все понял
avatar

AM2

  • 23 декабря 2020, 21:08