Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2158

 
Volodymyr Zubov #:

Делаю так, там и отрисовка и расчет риска от рассотяния до макс и мин дня.

Ну да. Мне надо быть повнимательней. Как я смог пропустить слово 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам

Volodymyr Zubov, 2023.03.14 19:45

Скажите пожалуйса, желательно кодом для МТ4. Элементарная штука. Как узнать ХАЙ и ЛОУ сегодняшнего дня ? На любом таймфрейме, обращение к свече D1 маркет не пропускает и выдает ошибку. На демо и реале работает.
А раз возмущается текущим днём, то желательно увидеть снимок ошибок тестирования. Или просто замените iLow на CopyLow если действительно на эту строку ругается…
 
Volodymyr Zubov #:

Делаю так, там и отрисовка и расчет риска от рассотяния до макс и мин дня.

У меня так не ругается

int period;
int OnInit()
  {
   period=PERIOD_D1;
   
  }

далее в коде
Low_2=iLow(_Symbol,period,0);
 
Tretyakov Rostyslav #:

У меня так не ругается

Странно, но это помогло. Спасибо!

 

здравствуйте всем!

делаю сеточник из лимиток с тралом впервые. Трал работает но все ордера сначала в кучу собирает и тралит их все вместе.

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

вот так выставляются:

//+------------------------------------------------------------------+
//|  Установка лимиток по                             |
//+------------------------------------------------------------------+
   if(CountOrdersB()==0)
   {

      
    if(Bid > iHigh(NULL,PERIOD_D1,1)&&Bid>iHigh(NULL,PERIOD_H1,1))                                                //условие для покупки и определение флета
    {
     for(x=1;x<=MAX_Lines;x++)  // считает сколько открыто линий сетки отложенными ордерами, чтобы не превышало указанное в исходных параметрах MAX_Lines
     {                                                                                                                                                                //сек/мин/ч/дн/
      if (OrderSend(Symbol(),OP_BUYLIMIT,lot,Ask-((Delta1-Delta)+Delta*x)*Point,slippage,Ask-((Delta1+Delta*(MAX_Lines-1))+SL)*Point,Ask+TP*Point,"",magic,TimeCurrent()+60*60*24*DN,Blue))
      {Print("Open BuyLimit: ",_Symbol);}
      else {Print("Error Open BuyLimit: ",_Symbol," / ",GetLastError());}
                   
     }
    }
   }
         
   if(CountOrdersS()==0)
   {        
    if(Ask < iLow(NULL,PERIOD_D1,1)&&Ask<iLow(NULL,PERIOD_H1,1))//условие для продажи и определение флета
    {
     for(x=1;x<=MAX_Lines;x++)
     {
                                                                                                                                                                       //сек/мин/ч/дн/    
      if (OrderSend(Symbol(),OP_SELLLIMIT,lot,Bid+((Delta1-Delta)+Delta*x)*Point,slippage,Bid+((Delta1+Delta*(MAX_Lines-1))+SL)*Point,Bid-TP*Point,"",magic,TimeCurrent()+60*60*24*DN,Red))
      {Print("Open SellLimit: ",_Symbol);}
      else {Print("Error Open SellLimit: ",_Symbol," / ",GetLastError());}  
     }
    }
   }
//+------------------------------------------------------------------+

а вот так делаю трал:

//+------------------------------------------------------------------+
  for(int i1=total-1; i1>=0; i1--)
      if(OrderSelect(i1,SELECT_BY_POS))
         if(OrderSymbol()==Symbol())
            if(OrderMagicNumber()==magic)
              {
      if(OrderType()==OP_BUYLIMIT)                                // Если ордер БайЛимит то тралим его
        {
          
          if(Bid-OrderOpenPrice()>(((Delta1-Delta)+Delta*x)*Point) && (Bid-(((Delta1-Delta)+Delta*x)*Point))-OrderOpenPrice()>step_interval)
            { 
             bool mod=OrderModify(OrderTicket(),NormalizeDouble(Ask-(((Delta1-Delta)+Delta*x)*Point+step_interval),Digits),
             NormalizeDouble(Ask-(((Delta1+Delta*(MAX_Lines-1))+SL)*Point+step_interval),Digits),
             NormalizeDouble((Ask+(TP*Point)+step_interval),Digits),0,0);
             if(!mod) Print("Ошибка трала BUYLIMIT=",GetLastError());
            }
        }
//+------------------------------------------------------------------+
      if(OrderType()==OP_SELLLIMIT)                                // Если ордер СеллЛимит то тралим его
        {
          
          if(OrderOpenPrice()-Ask>(((Delta1-Delta)+Delta*x)*Point) && OrderOpenPrice()-(Ask+(((Delta1-Delta)+Delta*x)*Point))>step_interval)
           {
            bool mod1=OrderModify(OrderTicket(),NormalizeDouble(Bid+(((Delta1-Delta)+Delta*x)*Point-step_interval),Digits),
            NormalizeDouble(Bid+(((Delta1+Delta*(MAX_Lines-1))+SL)*Point-step_interval),Digits),
            NormalizeDouble((Bid-(TP*Point)-step_interval),Digits),0,0);
            if(!mod1) Print("Ошибка трала SELLLIMIT=",GetLastError());
           }
        }
    }
//+------------------------------------------------------------------+
 
законопослушный гражданин #:

здравствуйте всем!

делаю сеточник из лимиток с тралом впервые. Трал работает но все ордера сначала в кучу собирает и тралит их все вместе.

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

вот так выставляются:

а вот так делаю трал:

 Я ничего не понял...объясни простыми словами, как должен работать трал.
 
законопослушный гражданин #:

здравствуйте всем!

делаю сеточник из лимиток с тралом впервые. Трал работает но все ордера сначала в кучу собирает и тралит их все вместе.

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

вот так выставляются:

а вот так делаю трал:

насколько понял по коду, подразумевается что x - уровень в сетке. В части трала,он у вас получается для всех ордеров одинаков и поэтому они сбились в кучу. 

 
Tretyakov Rostyslav #:
 Я ничего не понял...объясни простыми словами, как должен работать трал.

есть сигнал - открылась сетка лимиток с шагом "Delta" в количестве "Х"шт, например байлимит

цена пошла вверх на "N" пипсов - все лимитки переместились вверх (дружно) на те же 10 пипсов.

цена пошла вниз на "N" пипсов - все лимитки (дружно) стоят на месте.

В общем как и с тралением одной лимитки за ценой, только здесь я делаю тралящуюся сетку.

Я знаю что в моей функции такое невозможно, так как я выбираю последний открытый ордер, и теоретически, могу сделать несколько дублирующихся функций по числу лимиток, но это не грамотно по моему.

Наверняка есть какой то более изящный способ, типа через магики или через тикеты сортировать лимитки, но я не знаю как это организовать, пока.

причем учет лимиток у меня по коду, раздельный. Т.е. я отдельно считаю,и открываю и закрываю байлимиты и селллимиты.

 
Maxim Kuznetsov #:

насколько понял по коду, подразумевается что x - уровень в сетке. В части трала,он у вас получается для всех ордеров одинаков и поэтому они сбились в кучу. 

да. так и есть. Х - это количество лимиток с шагом delta.

 
законопослушный гражданин #:

да. так и есть. Х - это количество лимиток с шагом delta.

ну так и вычисляйте её (или вспоминайте/берите из каких-то структур). У вас, при трале лимиток, из-за того что X постоянный, для всех ордеров получается одинаковая цена, и они "сбиваются в кучу".

 
Maxim Kuznetsov #:

ну так и вычисляйте её (или вспоминайте/берите из каких-то структур). У вас, при трале лимиток, из-за того что X постоянный, для всех ордеров получается одинаковая цена, и они "сбиваются в кучу".

спасибо

Причина обращения: