0
вот только что сам все это проделал:




//+------------------------------------------------------------------+
//|                                                   RoundCross.mq4 |
//|                                              Copyright 2021, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property indicator_chart_window

#property indicator_buffers 2
#property indicator_plots 2

#property indicator_label1  "Signal UP"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrLime
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

#property indicator_label2  "Signal DN"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2

input int step=500;

double up[],dn[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,up,INDICATOR_DATA);
   PlotIndexSetInteger(0,PLOT_ARROW,233);

   SetIndexBuffer(1,dn,INDICATOR_DATA);
   PlotIndexSetInteger(1,PLOT_ARROW,234);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
   ObjectsDeleteAll(0,0,OBJ_HLINE);
  }
//+------------------------------------------------------------------+
//| Горизонтальная линия                                             |
//+------------------------------------------------------------------+
void PutHLine(string name,double p,color clr=Red)
  {
   ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_HLINE,0,0,p);
//--- установим цвет линии
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим толщину линии
   ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(0,name,OBJPROP_HIDDEN,0);
//--- включим (true) или отключим (false) режим перемещения линии мышью
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,1);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   double a=MathMod(iClose(NULL,0,0)/_Point,step);
   double b=iClose(NULL,0,0)-a*_Point;
   double c=b+step*_Point;

   PutHLine("Round Level 1",b,Lime);
   PutHLine("Round Level 2",c,Tomato);

   for(int i=0; i<=rates_total-1; i++)
     {
      if(close[i]>b && open[i]<b)
        {
         up[i]=low[i];
        }
      if(close[i]<c && open[i]>c)
        {
         dn[i]=high[i];
        }
     }

   Comment("\n Round Level 1: ",b,
           "\n Round Level 2: ",c);


//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 26 июля 2021, 08:28
0
создайте новый индикатор в МТ4, скопируйте туда код и скомпилировать
avatar

AM2

  • 26 июля 2021, 07:51
0
как-то много сделок, должно быть 2(1 на продажу 1 на покупку) а там 8?


есть сигнал от индикатора, есть сделка. чтобы уменьшить число сделок можно поставить уровень
avatar

AM2

  • 26 июля 2021, 07:45
0
советник только совсем немного отличается от других на индикаторах серии FL:



www.opentraders.ru/downloads/3066/
avatar

AM2

  • 25 июля 2021, 19:47
0
он и для МТ4 также подходит, только сохранить надо в другом формате
avatar

AM2

  • 24 июля 2021, 16:03
+1
я просил описать логику индикатора. посмотрел код и увидел что 88 сигнал основан на пересечении ценой круглых уровней и написал свой вариант.

перед этим нанес уровни на график и увидел стрелки после пересечения их ценой.



переписывать один в один не ко мне, тем более там используется еще один индикатор. если вам известна логика индикатора и она легко формализуется, я могу доработать свой вариант.
avatar

AM2

  • 24 июля 2021, 12:28
0
если в задании ничего не указывается, значит свобода творчества приветствуется :D 



www.opentraders.ru/downloads/3065/
avatar

AM2

  • 24 июля 2021, 09:27
0
тз рассмотрю
avatar

AM2

  • 23 июля 2021, 18:25
+1
на удивление быстро удалось переписать все функции советника:



www.opentraders.ru/downloads/3064/
avatar

AM2

  • 21 июля 2021, 21:41
0
дайте ссылку на топик советника
avatar

AM2

  • 21 июля 2021, 20:33
+1
читаю задание и сразу вижу мудохаться надо будет. посмотрю завтра если получится что то быстро сделать
avatar

AM2

  • 21 июля 2021, 00:26
0
выбор
pr = OrderType()==0 ? Bid : Ask;
можно заменить незадокументированной функцией OrderClosePrice(), которая возвращает при закрытии Bid для BUY и Ask для SELL.

тогда код будет выглядеть так:


void CloseAll()
  {
   bool cl=1;

   while(OrdersTotal()>0)
     {
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()==Magic && OrderType()<2)
        {
         cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(OrderClosePrice(),Digits),Slip,White);
         Sleep(111);
        }
     }
  }
avatar

AM2

  • 20 июля 2021, 19:48
0
захотелось написать закрытие с циклом while и условным оператором ? :


void CloseAll()
  {
   bool cl=1;
   double pr=0;

   while(OrdersTotal()>0)
     {
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()==Magic && OrderType()<2)
        {
         pr = OrderType()==0 ? Bid : Ask;
         cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(pr,Digits),Slip,White);
         Sleep(111);
        }
     }
  }
avatar

AM2

  • 20 июля 2021, 09:25
0
подправил индикатор. сигнал вывел в буферы индикатора. советник только по индикатору «Candlestick alerts»



www.opentraders.ru/downloads/3062/

дальше не ко мне
avatar

AM2

  • 18 июля 2021, 09:56
0
исходник ничего не решает, все равно нужно работать с объектами. посмотрю еще сегодня
avatar

AM2

  • 17 июля 2021, 09:05
0
в наброске все почти есть. пишите что добавить поправить
avatar

AM2

  • 14 июля 2021, 17:19