0
Странно, галочка «получать уведомления» стоит, а уведомлений нет.
Честно сказать, я даже не знаю, что такое линии Энвилоупс.
Да и времени, что то писать тоже нет.
avatar

s22aa

  • 12 февраля 2023, 18:08
0
Советник не соответствует ТЗ.
Топикстартер просил, чтобы вместо тейк профита, выставлялся лимитный ордер, а советник выставляет тейк профит, а затем вдобавок лимитник.

Чем отличается тейк профит от лимитного ордера? И зачем заменять тейк профит лимитником?
Тейк профит такой же лимитный ордер как и обычный, разница только в том, что тейк хранится на серверах брокера и отправляется на биржу только при касании ценой, а обычный лимитник, отправляется на биржу сразу.
В итоге при сильных движениях тейк может иметь проскальзывания как положительные, так и отрицательные, а лимитник проскальзываний иметь не может.
avatar

s22aa

  • 24 января 2023, 19:20
+1
Да ладно. Это серьёзно ссылка на файл?


То есть, что бы тебе сделали алерт в индикаторе, кто то должен зарегистрироваться где то.
Это не правильно.
avatar

s22aa

  • 28 июня 2021, 12:08
0
Чтоб добавить алерт в индикатор, нужен индикатор. А индикатора нетути)
avatar

s22aa

  • 26 июня 2021, 20:55
0
Всё намного проще. Здесь проверяются идеи, поэтому достаточно тестерного советника. Если идея стоящяя, то тогда можно заказать платно, грамотно и хорошо написаного робота. Который будет проходить любые проверки.
avatar

s22aa

  • 21 ноября 2020, 21:13
0
Вай, вай, ну точно, советник же для МТ4, как же я лоханулся*fool* 
avatar

s22aa

  • 23 августа 2020, 21:11
0
double spead = SymbolInfoInteger(_Symbol, SYMBOL_SPREAD) * _Point;
  if(spead > max_Spread)
    return;

Обычно достаточно добавить это в начале функции OnTick()
max_Spread вынести в настройки
avatar

s22aa

  • 22 августа 2020, 16:47
0
Нечто похожее сделал для МТ5 http://s22aa.opentraders.ru/54889.html
avatar

s22aa

  • 16 июня 2020, 10:00
+1
Немного изменил код, чтобы не рисовать трендовые руками, теперь их рисует советник при запуске.
<code>//+------------------------------------------------------------------+
//|                                           Break_out_trend_EA.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com/ru/users/s22aa"
#property version   "1.0"
#property description  "Открывает сделки при пробое трендовой линии"
#property description  "рисуются четыре трендовые каждой присваиваем имя"

#define _ask  SymbolInfoDouble(_Symbol, SYMBOL_ASK)
#define _bid  SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define _time SymbolInfoInteger(_Symbol, SYMBOL_TIME)

#include <Trade\Trade.mqh>
#include <Trade\symbolInfo.mqh>

CTrade        atrade;
CSymbolInfo   asymbol;
input string PPB = "PPB"; //имя трендовой позиции Byu
input string TPB = "TPB"; //имя трендовой тейкпрофит Byu
input string PPS = "PPS"; //имя трендовой позиции Sell
input string TPS = "TPS"; //имя трендовой тейкпрофит Sell
color color_Byu  = clrBlue;  //цвет трендовой Byu 
color color_Sell = clrRed;  //цвет трендовой Sell
sinput  ulong    MagicNumber = 12345;
ulong            Slippage = 30;

input double Lots = 1;

double price_Sell, price_SL_Sell, price_TP_Sell, price_Buy, price_SL_Buy, price_TP_Buy;
//+------------------------------------------------------------------+
int OnInit()
  {
   if(!asymbol.Name(Symbol()))
      return(INIT_FAILED);
   RefreshRates();
   atrade.SetExpertMagicNumber(MagicNumber);
   if(IsFillingTypeAllowed(SYMBOL_FILLING_FOK))
      atrade.SetTypeFilling(ORDER_FILLING_FOK);
   else
      if(IsFillingTypeAllowed(SYMBOL_FILLING_IOC))
         atrade.SetTypeFilling(ORDER_FILLING_IOC);
      else
         atrade.SetTypeFilling(ORDER_FILLING_RETURN);
   atrade.SetDeviationInPoints(Slippage);
   Trend_line("PPB",_ask+20*_Point,_time-6000,_time+600,color_Byu);
   Trend_line("TPB",_ask+40*_Point,_time-6000,_time+600,color_Byu);
   Trend_line("PPS",_bid-20*_Point,_time-6000,_time+600,color_Sell);
   Trend_line("TPS",_bid-40*_Point,_time-6000,_time+600,color_Sell);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {}
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!RefreshRates())
      return;

   int x = 0;
   static int tempBuy = 0, tempSell = 0;
   static double price = 0;
   static string Name, Text;
   static datetime last_time = 0;
   datetime cur_time = iTime(_Symbol, PERIOD_CURRENT, 0);

   int Total = ObjectsTotal(0, 0, OBJ_TREND);
   MqlTick Prise;
   if(SymbolInfoTick(Symbol(), Prise))
     {
      for(int i = 0; i <= Total; i++)
        {
         Name = ObjectName(0, i, 0, OBJ_TREND);                 //находит имя
         price = ObjectGetValueByTime(0, Name, cur_time);       // цена обьекта во время  открытия нового бара

         if(Name == PPS)
            price_Sell = price;
         if(Name == TPS)
            price_TP_Sell = price;

         if(Name == PPB)
            price_Buy = price;
         if(Name == TPB)
            price_TP_Buy = price;


         if(PositionsTotal() == 0 && Prise.bid >= price_Sell)
            tempSell = 1;
         if(Prise.bid <= price_Sell && Name == PPS && tempSell != 0 && price_Sell != 0)
           {
            OpenSell(price_Buy, price_TP_Sell);
            tempSell = 0;
            return;
           }

         if(PositionsTotal() == 0 && Prise.ask <= price_Buy)
            tempBuy = 1;
         if(Prise.ask >= price_Buy && Name == PPB && tempBuy != 0)
           {
            OpenBuy(price_Sell, price_TP_Buy);
            tempBuy = 0;
            return;
           }
        }
     }

   if(PositionsTotal() > 0 && cur_time != last_time)
     {
      if(PositionSelect(Symbol())) // выбираем позицию
        {
         if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
           {
            Request(price_Buy, price_TP_Sell);
           }
         else
           {
            Request(price_Sell, price_TP_Buy);
           }
        }
      last_time = cur_time;
     }
  }
//+------------------------------------------------------------------+
void Request(double sl, double tp)
  {
   ResetLastError();
   MqlTradeRequest request;  // параметры торгового запроса
   MqlTradeResult result;    // результат торгового запроса
   ZeroMemory(request);
   if(PositionSelect(Symbol())) // выбираем позицию
     {
      double PositionSL = PositionGetDouble(POSITION_SL);                          // записываем в переменную уровень стоплосса
      double PositionTP = PositionGetDouble(POSITION_TP);                          // записываем в переменную уровень тейкпрофита
      sl = NormalizeDouble(sl, Digits());
      tp = NormalizeDouble(tp, Digits());

      if(PositionSL != sl || PositionTP != tp)
        {
         request.action    = TRADE_ACTION_SLTP;
         request.position  = PositionGetInteger(POSITION_TICKET);
         request.symbol    = Symbol();
         request.sl        = sl;
         request.tp        = tp;
         if(!OrderSend(request, result))
            Print("error ", GetLastError());
        }
     }
  }
//+------------------------------------------------------------------+
//| Открываем Buy позицию                                            |
//+------------------------------------------------------------------+
void OpenBuy(double  sl, double tp)
  {
   ResetLastError();
   sl = NormalizeDouble(sl, Digits());
   tp = NormalizeDouble(tp, Digits());

   if(atrade.Buy(Lots, asymbol.Name(), asymbol.Ask(), sl, tp))
     {
      if(atrade.ResultDeal() == 0)
        {
         Print("error ", GetLastError());
        }
     }
   else
     {
      Print("error ", GetLastError());
     }
  }
//+------------------------------------------------------------------+
//| Открываем Sell позицию                                           |
//+------------------------------------------------------------------+
void OpenSell(double  sl, double tp)
  {
   ResetLastError();
   sl = NormalizeDouble(sl, Digits());
   tp = NormalizeDouble(tp, Digits());

   if(atrade.Sell(Lots, asymbol.Name(), asymbol.Bid(), sl, tp))
     {
      if(atrade.ResultDeal() == 0)
        {
         Print("error ", GetLastError());
        }
     }
   else
     {
      Print("error ", GetLastError());
     }
  }
//+------------------------------------------------------------------+
//| Обновление котировок                                             |
//+------------------------------------------------------------------+
bool RefreshRates()
  {
   if(!asymbol.RefreshRates())
     {
      Print("не удалось обновить котировки!");
      return(false);
     }

   if(asymbol.Ask() == 0 || asymbol.Bid() == 0)
      return(false);
   return(true);
  }
//+------------------------------------------------------------------+
bool IsFillingTypeAllowed(int fill_type)
  {
//--- Obtain the value of the property that describes allowed filling modes
   int filling = asymbol.TradeFillFlags();

//--- Return true, if mode fill_type is allowed
   return((filling & fill_type) == fill_type);
  }
//+------------------------------------------------------------------+
void Trend_line(string name, double price, datetime Time1, datetime Time2, color col)
  {
   NormalizeDouble(price,_Digits);
   if(ObjectFind(0,name))
     {
      ObjectDelete(0,name);
     }
   if(!ObjectCreate(0,name,OBJ_TREND,0,Time2,price,Time1,price)) //--- создадим линию по заданной цене
     {
      Print(__FUNCTION__,
            ": не удалось создать прямоугольник! Код ошибки = ",GetLastError());
     }
   ObjectSetInteger(0,name,OBJPROP_COLOR,col); //--- установим цвет линии
   ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID); //--- установим стиль линии
   ObjectSetInteger(0,name,OBJPROP_WIDTH,1); //--- установим толщину линии
   ObjectSetInteger(0,name,OBJPROP_BACK,false); //--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,true); //--- включим (true) или отключим (false) режим выделения для перемещений (доступность выделения)
   ObjectSetInteger(0,name,OBJPROP_SELECTED,false); //---  true, что позволяет выделять и перемещать этот объект
   ObjectSetInteger(0,name,OBJPROP_HIDDEN,false); //--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(0,name,OBJPROP_RAY_LEFT,true); //--- луч вправо
   return;
  }</code>
avatar

s22aa

  • 16 июня 2020, 09:59
+1
Ни фига ты сильный. Я так завис после первого раза :-).
avatar

s22aa

  • 27 июня 2019, 11:12
0
Сейчас проверил PZ_InsideBars своим индюком и оказалось, что PZ_InsideBars показывает далеко не все внутренние бары на графике( 
avatar

s22aa

  • 28 января 2019, 10:29
0
Вот такой есть, только с закрытым кодом PZ_InsideBars
avatar

s22aa

  • 28 января 2019, 07:30
0
Не знаю, но попробую. Только в будни у меня времени нет, а выходные кончились( .
avatar

s22aa

  • 27 января 2019, 21:18
+1
Поспешил выложить, а в тестере прогнать не догадался, пришлось переписывать, а изменить, что то в блоге не получается, поэтому просто вставлю здесь новый код.

//+------------------------------------------------------------------+
//|                                                    Insid_Bar.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                              https://www.mql5.com/ru/users/s22aa |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window

#property indicator_buffers 2  
#property indicator_plots 2   

#property indicator_type1 DRAW_ARROW  
#property indicator_type2 DRAW_ARROW  

#property indicator_color1 clrRed  
#property indicator_color2 clrBlue   

#property indicator_width1  2     
#property indicator_width2  2

double BuffUp[];    
double BuffDn[];    

input int  ArrowShift = 0;  //   оступ точек от свечи, по высоте
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
      SetIndexBuffer(0,BuffUp, INDICATOR_DATA); 
      SetIndexBuffer(1,BuffDn, INDICATOR_DATA);
    
      IndicatorSetString (INDICATOR_SHORTNAME,"Insid_Bar"); 
      IndicatorSetInteger(INDICATOR_DIGITS, _Digits); 
	  
      PlotIndexSetInteger(0, PLOT_ARROW, 159);        
      PlotIndexSetInteger(1, PLOT_ARROW, 159);
      
      PlotIndexSetInteger(0, PLOT_ARROW_SHIFT, ArrowShift); 
      PlotIndexSetInteger(1, PLOT_ARROW_SHIFT, -ArrowShift);
   
      PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, EMPTY_VALUE);
      PlotIndexSetDouble(1, PLOT_EMPTY_VALUE, EMPTY_VALUE);  
    
    return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
 int i, limit;
   
   if (rates_total < 2)
      return(0);
     
   if (prev_calculated < 3)
   {
      limit = 2;
      
      ArrayInitialize(BuffDn, EMPTY_VALUE); 
      ArrayInitialize(BuffUp, EMPTY_VALUE);
      
   } else limit = rates_total - 2;
   
   for(i = limit; i<rates_total-1; i++)
   {
      if (high[i] <= high[i-1] && low[i] >= low[i-1])
      {
         BuffUp[i-1] = low[i-1]; BuffDn[i-1] = high[i-1];
      }
      else
      {
         BuffUp[i] = EMPTY_VALUE;
         BuffDn[i] = EMPTY_VALUE;
      }
      
   }

   return(rates_total);
}

 
avatar

s22aa

  • 27 января 2019, 10:01
0
Визуальная проверка на мосбирже фьючерс рубля, показывает очень даже интересные результаты, но мне такой советник мог бы помочь во внутредневной торговле определять приоритеты торговли, а то сигналы идут разные и в конце концов начинаешь входить против движения, а это не айс, а так бы сова нарисовала мне стрелочку в бай и я просто тупо перестал бы рассматривать все сигналы на продажу.
avatar

s22aa

  • 2 апреля 2018, 17:02
0
Я тоже хочу такого советника*girlcry* , только для мт5, но с моим рейтингом мне его не напишут*wall* 
avatar

s22aa

  • 2 апреля 2018, 16:54
0
Я конечно извиняюсь может опять невпопад, но если нажать кнопушку «интер», и ввести дату в формате дд.мм.гггг то мы вроде как автоматически перемещаемся куды надо. У меня так.
avatar

s22aa

  • 16 марта 2018, 12:17
0
Зачем делать то, что уже сделано? www.mql5.com/ru/code/14916

Упс, не до конца прочитал просьбу. Извиняюсь.
avatar

s22aa

  • 6 марта 2018, 14:01
0
«За увеличение лота будет отвечать следующий код:if(Lots(symb)>=BigLot) lot=lot*Mnogitel; ...»
Никак не могу понять, почему «больше или равно», если по логике должно быть «меньше или равно». Lots(symb)-это количество открытых позиций по конкретному символу?
Если меняю знак >= на <=, компилирую, на графике советник торгует, вроде бы нормально, а вот в тестере не появляется ни одной сделки. В чём может быть причина?
avatar

s22aa

  • 5 марта 2018, 21:26
Начать торговлю с Альпари