0
смотрите такой вариант:


//+------------------------------------------------------------------+
//|                                                    BuySell32.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 Lot        = 2;        // сколько оставить
extern double Lots       = 5;        // сколько открыть
extern int StopLoss      = 2000;     // лось
extern int TakeProfit    = 3000;     // язь
extern int Points        = 300;      // пункты для закрытия
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   PutButton("B",100,160,"BUY");
   PutButton("S",100,120,"SELL");
   PutButton("C",100,80,"CLOSE");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectDelete(0,"B");
   ObjectDelete(0,"S");
   ObjectDelete(0,"C");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutButton(string name,int x,int y,string text)
  {
   ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
   ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,9);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(0,name,OBJPROP_HIDDEN,false);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger(0,name,OBJPROP_ZORDER,0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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,Lots,NormalizeDouble(price,_Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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();
               if(OrderLots()>Lot && Bid-OrderOpenPrice()>Points*_Point)
                 {
                  cl=OrderClose(OrderTicket(),OrderLots()-Lot,NormalizeDouble(Bid,_Digits),Slip,White);
                 }
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               if(OrderLots()>Lot && OrderOpenPrice()-Bid>Points*_Point)
                 {
                  cl=OrderClose(OrderTicket(),OrderLots()-Lot,NormalizeDouble(Ask,_Digits),Slip,White);
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(ObjectGetInteger(0,"B",OBJPROP_STATE)==1)
     {
      PutOrder(0,Ask);
      ObjectSetInteger(0,"B",OBJPROP_STATE,false);
     }

   if(ObjectGetInteger(0,"S",OBJPROP_STATE)==1)
     {
      PutOrder(1,Bid);
      ObjectSetInteger(0,"S",OBJPROP_STATE,false);
     }

   if(ObjectGetInteger(0,"C",OBJPROP_STATE)==1)
     {
      CloseAll();
      ObjectSetInteger(0,"C",OBJPROP_BGCOLOR,Aqua);
     }

   if(ObjectGetInteger(0,"C",OBJPROP_STATE)==0)
     {
      ObjectSetInteger(0,"C",OBJPROP_BGCOLOR,White);
     }
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 13 апреля 2021, 21:05
0
потому что рисует


вы хотите чтобы RSI не рисовал?
avatar

AM2

  • 12 апреля 2021, 21:53
0
когда по одному ордеру открыто на каждой паре, нормально работает а когда по несколько уже глюк. советник рассчитан на работу только с одним ордером. если нужно с группой ордеров обращайтесь к другому специалисту
avatar

AM2

  • 12 апреля 2021, 21:49
0
Насколько я понял когда уже выставлена пара на определенной цене и свеча пересекает многократно эту отметку, советник
выставляет на этой цене ещё одни ордера. Получается на одной цене многократное наложение, иногда до 9 ордеров. (скрин закрытия)


не правильно понял. на скрине закрытие по профиту нескольких ордеров.

панель и линии: www.opentraders.ru/downloads/2965/

avatar

AM2

  • 12 апреля 2021, 21:26
0
я смотрю, где понятный код там делаю
avatar

AM2

  • 12 апреля 2021, 19:02
0
сегодня попробую на демке отладить
avatar

AM2

  • 12 апреля 2021, 18:58
0
с чужим кодом не ко мне
avatar

AM2

  • 11 апреля 2021, 14:59
0
тогда дело за поручителем
avatar

AM2

  • 11 апреля 2021, 09:57
0
сделал попеременный вариант, т.е. бай селл бай. устроит?




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

#property indicator_buffers 2

input int RSI=7;
input int Level=20;
input int Count=111;

bool b=1,s=1;
double up[],dn[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexStyle(0,DRAW_ARROW,0,2,Lime);
   SetIndexArrow(0,233);
   SetIndexBuffer(0,up);

   SetIndexStyle(1,DRAW_ARROW,0,2,Red);
   SetIndexArrow(1,234);
   SetIndexBuffer(1,dn);
//---
   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[])
  {
//---
   for(int i=0; i<Count; i++)
     {
      double rsi1=iRSI(NULL,0,RSI,0,i);
      double rsi2=iRSI(NULL,0,RSI,0,i+1);

      if(rsi1>Level && rsi2<Level && b)
        {
         up[i]=low[i];
         b=0;s=1;
        }
      if(rsi1<100-Level && rsi2>100-Level && s)
        {
         dn[i]=high[i];
         s=0;b=1;
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


avatar

AM2

  • 11 апреля 2021, 09:56
0
если писать советник, составляйте тз и ищите поручителя
avatar

AM2

  • 10 апреля 2021, 18:32
0
можно написать с нуля такой индикатор, но с поручителем







avatar

AM2

  • 10 апреля 2021, 10:13
0
если для советника стрелки с буфером, то лучше прописать пересечение линий
avatar

AM2

  • 10 апреля 2021, 09:57