0
опишите все подробнее. как рассчитываются линии, что должно быть в настройках и др.
avatar

AM2

  • 9 октября 2021, 13:06
0
как на картинке это как?
avatar

AM2

  • 8 октября 2021, 19:18
0
начал делать
avatar

AM2

  • 8 октября 2021, 18:49
0
такой широкий перечень различных объектов это точно не ко мне
avatar

AM2

  • 7 октября 2021, 17:49
0
1. пробегаем по всем графикам символа
2. запоминаем имя объекта, его свойства
3. затем в следующем цикле ставим все на графики.
4. если объект из памяти уже есть, он не проставится.

вот примерный алгоритм.

еще мне нужно знать какие объекты у вас на графиках?

по работе с объектами мт4 и 5 очень похожи
avatar

AM2

  • 7 октября 2021, 17:02
+1
если есть идеи по алгоритму синхронизации, в выходные еще могу глянуть. там побольше времени будет
avatar

AM2

  • 6 октября 2021, 22:39
0
пример советника со стопами по атр на дневке: www.opentraders.ru/downloads/3147/

avatar

AM2

  • 6 октября 2021, 22:34
+1
посмотрел внимательнее. решение даже не просматривается
avatar

AM2

  • 6 октября 2021, 18:41
0
смотри ка ты, есть 2 равных сара подряд!

avatar

AM2

  • 5 октября 2021, 21:51
0
см. код:


   double hi1=high[iHighest(NULL,0,2,num,0)];
   double hi2=high[iHighest(NULL,0,2,count,0)];

   double lo1=low[iLowest(NULL,0,3,num,0)];
   double lo2=low[iLowest(NULL,0,3,count,count-num)];


первый экстремум выбирает на отрезке 0-30, 2-й 300-270 или 0-300 :) 
avatar

AM2

  • 4 октября 2021, 18:55
0
в чужие дебри я не полезу, но вот так обе сетки нормально ставит:




//+------------------------------------------------------------------+
//|                                                  Usrednitel2.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

//--- Inputs
extern double Lots       = 0.01;     // торговый объем ордера
extern double MaxLot     = 5;        // максимальный торговый объем
extern double KLot       = 1.3;      // увеличение лота
extern int StopLoss      = 0;        // лось
extern int TakeProfit    = 100;      // язь
extern int Step          = 200;      // шаг
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   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(type),NormalizeDouble(price,_Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades(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 ModifyOrders()
  {
   double allb=0,alls=0;
   double countb=0,counts=0,tp=0,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()==0)
              {
               allb+=OrderOpenPrice()*OrderLots();
               countb+=OrderLots();
              }

            if(OrderType()==1)
              {
               alls+=OrderOpenPrice()*OrderLots();
               counts+=OrderLots();
              }
           }
        }
     }
   if(countb>0)
      allb=NormalizeDouble(allb/countb,_Digits);
   if(counts>0)
      alls=NormalizeDouble(alls/counts,_Digits);

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY)
              {
               if(TakeProfit>0)
                  tp=NormalizeDouble(allb+TakeProfit*_Point,_Digits);
               if(StopLoss>0)
                  sl=NormalizeDouble(allb-StopLoss*_Point,_Digits);
               if(OrderTakeProfit()!=tp || OrderStopLoss()!=sl)
                  bool mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Yellow);
              }
            else
               if(OrderType()==OP_SELL)
                 {
                  if(TakeProfit>0)
                     tp=NormalizeDouble(alls-TakeProfit*_Point,_Digits);
                  if(StopLoss>0)
                     sl=NormalizeDouble(alls+StopLoss*_Point,_Digits);
                  if(OrderTakeProfit()!=tp || OrderStopLoss()!=sl)
                     bool mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Yellow);
                 }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot(int type)
  {
   double lot=Lots;
   if(CountTrades(type)>0)
      lot=NormalizeDouble(Lots*MathPow(KLot,CountTrades(type)),2);
   if(lot>MaxLot)
      lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double FindLastPrice(int type)
  {
   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()==type)
              {
               pr=OrderOpenPrice();
               break;
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(t!=Time[0])
     {
      if(Close[1]>Open[1] && CountTrades(0)<1)
        {
         PutOrder(0,Ask);
         ModifyOrders();
        }
      if(Close[1]<Open[1] && CountTrades(1)<1)
        {
         PutOrder(1,Bid);
         ModifyOrders();
        }

      if(CountTrades(0)>0 && (FindLastPrice(0)-Ask)/_Point>=Step)
        {
         PutOrder(0,Ask);
         ModifyOrders();
        }

      if(CountTrades(1)>0 && (Bid-FindLastPrice(1))/_Point>=Step)
        {
         PutOrder(1,Bid);
         ModifyOrders();
        }

      t=Time[0];
     }

   Comment("\n Buy Lot: ",Lot(0),
           "\n Sell Lot: ",Lot(1),
           "\n Trades: ",CountTrades());
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 4 октября 2021, 18:48