Как начать работу с MQL5 - страница 37

 
Kutluhan Yesilkaya сигнальной линией составляет 0,05. Мой робот прилагается. Вы можете проверить его?

Хорошо, я посмотрю сегодня вечером.

 
Kutluhan Yesilkaya сигнальной линией составляет 0,05. Мой робот прилагается. Вы можете проверить его?

Вам необходимо использовать код iMACD Difference Close All. Если у вас есть вопросы по коду - вы можете задать их в специальной теме.

 

Здравствуйте. У меня есть Grid E.A, который принимает позиции на покупку или продажу, например, в диапазоне 10 пипсов с некоторыми условиями. Может быть так, что есть позиции на покупку или продажу и условия исчезают на некоторое время и после перехода он сможет открыть другие позиции.

Мой вопрос: Как он может не открывать больше позиций рядом с другими позициями на расстоянии менее 10 пунктов? Логичное решение, это иметь все PiceOpens и не давать открывать новые позиции на расстоянии 10 пипсов от верхней и нижней из них.Но я не достиг результата. Пожалуйста, помогите.

.
.
.
.
   PositionSelectByTicket(PositionGetTicket(PositionsTotal()-1));
   if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==MAGICMA)
     {
      Price_Open = m_position.PriceOpen();
     }
.
.
.
.
bool IsOutOfRange()
  {
   bool   out_of_range = false;
//---
   for(int i=PositionsTotal()-1; i>=0; i--)
      if(m_position.SelectByIndex(i))
         if(m_position.Symbol()==Symbol() && m_position.Magic()==MAGICMA)
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY)
              {
               double up_B    = Price_Open + Distance;
               double down_B  = Price_Open - Distance;
               if(m_symbol.Ask() > up_B || m_symbol.Ask() < down_B)
                 {
                  out_of_range = 1;
                 }
              }
            if(m_position.PositionType()==POSITION_TYPE_SELL)
              {
               double up_S    = Price_Open + Distance;
               double down_S  = Price_Open - Distance;
               if(m_symbol.Bid() > up_S || m_symbol.Bid() < down_S)
                 {
                  out_of_range = 1;
                 }
              }
           }
   return(out_of_range);
  }
Файлы:
1.jpg  105 kb
2.jpg  98 kb
 
RZAMK # :

Здравствуйте. У меня есть Grid E.A, который принимает позиции на покупку или продажу, например, в диапазоне 10 пипсов с некоторыми условиями. Может быть так, что есть позиции на покупку или продажу, а условия исчезают на некоторое время и после перехода, он сможет открыть другие позиции.

Мой вопрос: Как он может не открывать больше позиций рядом с другими позициями на расстоянии менее 10 пунктов? Логичное решение, это иметь все PiceOpens и не давать открывать новые позиции на расстоянии 10 пипсов от верхней и нижней из них.Но я не достиг результата. Пожалуйста, помогите.

Опишите ваши правила в деталях ( пожалуйста, выберите правильный вариант ):

  • Позиции "BUY" открываются только ( вверх или вниз ),
  • Позиции 'SELL' открываются только ( вверх или вниз )?
 
RZAMK # :


Если я открываю позиции следующим образом: каждая следующая позиция "BUY" должна быть выше и выше, каждая следующая позиция "SELL" должна быть ниже и ниже - тогда я использую эту функцию:

//+------------------------------------------------------------------+
//| Calculate all positions                                          |
//+------------------------------------------------------------------+
void CalculateAllPositions_HighestBuyHighestSell(double &price_highest_buy,double &price_lowest_sell)
  {
//--- auxiliary variables
   double price_highest_buy   = DBL_MIN;
   double price_lowest_sell   = DBL_MAX;
//---
   for(int i=PositionsTotal()-1; i>=0; i--)
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==InpMagic)
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY)
              {
               if(m_position.PriceOpen()>price_highest_buy) // the highest position of "BUY" is found
                  price_highest_buy=m_position.PriceOpen();
               continue;
              }
            else
               if(m_position.PositionType()==POSITION_TYPE_SELL)
                 {
                  if(m_position.PriceOpen()<price_lowest_sell) // the lowest position of "SELL" is found
                     price_lowest_sell=m_position.PriceOpen();
                 }
           }
  }


Если я открываю позиции следующим образом: каждая следующая позиция "BUY" должна быть ниже и ниже, каждая следующая позиция "SELL" должна быть выше и выше - тогда я использую эту функцию:

//+------------------------------------------------------------------+
//| Calculate all positions                                          |
//+------------------------------------------------------------------+
void CalculateAllPositions_LowestBuyLowestSell(double &price_highest_buy,double &price_lowest_sell)
  {
//--- auxiliary variables
   double price_lowest_buy    = DBL_MAX;
   double price_highest_sell  = DBL_MIN;
//---
   for(int i=PositionsTotal()-1; i>=0; i--)
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==InpMagic)
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY)
              {
               if(m_position.PriceOpen()<price_lowest_buy) // the lowest position of "BUY" is found
                  price_lowest_buy=m_position.PriceOpen();
               continue;
              }
            else
               if(m_position.PositionType()==POSITION_TYPE_SELL)
                 {
                  if(m_position.PriceOpen()>price_highest_sell) // the highest position of "SELL" is found
                     price_highest_sell=m_position.PriceOpen();
                 }
           }
  }
 
Vladimir Karputov #:

Если я открываю позиции следующим образом: каждая следующая позиция "BUY" должна быть выше и выше, каждая следующая позиция "SELL" должна быть ниже и ниже - тогда я использую эту функцию:


Если я открываю позиции следующим образом: каждая следующая позиция "BUY" должна быть ниже и ниже, каждая следующая позиция "SELL" должна быть выше и выше - тогда я использую эту функцию:

спасибо. Я многому научился благодаря вашим материалам.

Действительно, никаких " ...каждая следующая позиция "BUY" должна быть все выше и выше..." и никаких " ...каждая следующая позиция "BUY" должна быть все ниже и ниже..." не происходит.

В качестве примера я подготовил 4 последовательности движения цены (разумеется, увеличив количество Tr_SL).
  • На первом изображении позиции на продажу создаются при падении цены.
  • На втором изображении позиция на покупку создается путем изменения условий и повышения цены.
  • На третьем изображении цена снова упала, и появились условия для создания трех позиций на продажу.
  • На четвертом изображении, по мере роста цены, создается позиция на покупку, которая ниже первой позиции "покупка".
Файлы:
sequence_1.jpg  102 kb
sequence_2.jpg  98 kb
sequence_3.jpg  130 kb
sequence_4.jpg  130 kb
 

Вы можете искать ближайшую позицию:

//+------------------------------------------------------------------+
//| Nearest Position                                                 |
//+------------------------------------------------------------------+
double NearestPosition(double const price)
  {
   double nearest=DBL_MAX;
   for(int i=PositionsTotal()-1; i>=0; i--)
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==InpMagic)
           {
            double shift=MathAbs(m_position.PriceOpen()-price);
            if(nearest==DBL_MAX)
               nearest=shift;
            else
               if(shift<nearest)
                  nearest=shift;
           }
//---
   return(nearest);
  }
 
Vladimir Karputov #:

Вы можете искать ближайшую позицию:

Большое спасибо, сэр.
 
Vladimir Karputov # :

iMACD Farkı Tümünü Kapatmanız gerekir . Kodla ilgili olabilecek - özel bir özellikta sorabilirsiniz .

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

 
Kutluhan Yesilkaya # :

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

Приложите свой код, опишите, что именно он должен делать. Опишите, что именно не работает.

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