Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 905

 
bij:

if(iTime(NULL,PERIOD_D1,i+1)!=iTime(NULL,PERIOD_D1,i)&& здесь как написать? )

Вам нужно из времени time[i] извлечь дату и сравнить её с датой time[i+1]. Если не равны, то извлечь из time[i] время и сравнить с заданным временем. Если совпадают - ставить линию.

Как всё это извлекается - я показал в скрипте. Осталось только подумать.

 
Artyom Trishkin:

Вам нужно из времени time[i] извлечь дату и сравнить её с датой time[i+1]. Если не равны, то извлечь из time[i] время и сравнить с заданным временем. Если совпадают - ставить линию.

Как всё это извлекается - я показал в скрипте. Осталось только подумать.

Вечер пятницы, думается плохо) Ничего не строит. Почему?

   datetime date1=time[i]; 
   datetime date2=time[i+1];
 
   MqlDateTime str1,str2; 
   TimeToStruct(date1,str1); 
   TimeToStruct(date2,str2); 
  if(str1.day!=str2.day&&str1.mon!=str2.mon&&str1.year!=str2.year&&str2.hour==17&&str2.min==30){
  
   if(!TrendCreate(0,"closek"+time[i],0,iTime(NULL,PERIOD_D1,i+1),iClose(i+1,NULL,PERIOD_M30),iTime(NULL,PERIOD_D1,i),0,clrLime,STYLE_SOLID,2,false,false,false,false,0))
        {
         continue;
        }
        }
 
Artyom Trishkin:

 то извлечь из time[i] время и сравнить с заданным временем. 

Наверное time[i+1], мне то нужно после закрытия дня поставить линию на прошлый день.

 

Здравствуйте.

Вопрос глупый но все же, прошу помочь)

Я вошел в сделку по какой-то цене,я всегда лонгую)И я сравниваю цену сделки с текущим bid, если мы выросли на 0.5% я закрываюсь.Ругается на bid(((  

   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0])          //если значение индикатора были выше цены закрытия и стали ниже
     {
      if(m_Position.Select(my_symbol))                             //если уже существует позиция по этому символу
        {
         if((m_Position.PositionType()==POSITION_TYPE_BUY) && (fabs(DEAL_PRICE-Bid[0])/DEAL_PRICE)>= 0.005) m_Trade.PositionClose(my_symbol);   //и тип этой позиции Buy, то закрываем ее
          return;                            
        }
      m_Trade.Buy(0.1,my_symbol);                                 //если дошли сюда, значит позиции нет, открываем ее
     }
 
ISL:

Я вошел в сделку по какой-то цене,я всегда лонгую)И я сравниваю цену сделки с текущим bid, если мы выросли на 0.5% я закрываюсь.Ругается на bid(((  

Видимо, потому что это MQL5. И "bid" тут нет, а есть SymbolInfoDouble(_Symbol,SYMBOL_BID)


 
ISL:

Здравствуйте.

Вопрос глупый но все же, прошу помочь)

Я вошел в сделку по какой-то цене,я всегда лонгую)И я сравниваю цену сделки с текущим bid, если мы выросли на 0.5% я закрываюсь.Ругается на bid(((  

И правильно делает, что ругается. Нет такого массива с ценами Bid в MQL5. 

Замените на

m_symbol.Bid()

, а перед циклом не забудьте обновить цены:

   if(!RefreshRates())
      return;
 
Vladimir Karputov:

И правильно делает, что ругается. Нет такого массива с ценами Bid в MQL5. 

Замените на

, а перед циклом не забудьте обновить цены:

Сделал двумя разными способами:

1) Эксперт работает, но к сожалению идею не реализует. Она проста, я покупаю когда предыдущая свеча закрылась ниже, а след. закрылась выше. И я закрываюсь только если цена выросла на 0,5%.

Он производит странные сделки(((

   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0])          //если значение индикатора были выше цены закрытия и стали ниже
     {
      if(m_Position.Select(my_symbol))                             //если уже существует позиция по этому символу
        {
         if((m_Position.PositionType()==POSITION_TYPE_BUY) && (SymbolInfoDouble(_Symbol,SYMBOL_BID)-DEAL_PRICE)/DEAL_PRICE>= 0.005) m_Trade.PositionClose(my_symbol);   //и тип этой позиции Buy, то закрываем ее
          return;                            
        }
      m_Trade.Buy(0.1,my_symbol);                                 //если дошли сюда, значит позиции нет, открываем ее
     }

2) Способ следующий:

if(!RefreshRates())
      return; 
   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0])          //если значение индикатора были выше цены закрытия и стали ниже
     {
      if(m_Position.Select(my_symbol))                             //если уже существует позиция по этому символу
        {
         if((m_Position.PositionType()==POSITION_TYPE_BUY) && (m_symbol.Bid())-DEAL_PRICE)/DEAL_PRICE>= 0.005) m_Trade.PositionClose(my_symbol);   //и тип этой позиции Buy, то закрываем ее
          return;                            
        }
      m_Trade.Buy(0.1,my_symbol);                                 //если дошли сюда, значит позиции нет, открываем ее
     }

Походу напутал все(((

Выдаёт ошибку:


 
ISL:

Сделал двумя разными способами:

1) Эксперт работает, но к сожалению идею не реализует. Она проста, я покупаю когда предыдущая свеча закрылась ниже, а след. закрылась выше. И я закрываюсь только если цена выросла на 0,5%.

Он производит странные сделки(((

2) Способ следующий:

Походу напутал все(((

Выдаёт ошибку:


Откройте любой мой код и там увидите и m_symbol и RefreshRates.

 
Vladimir Karputov:

Откройте любой мой код и там увидите и m_symbol и RefreshRates.

Спасибо. Почитал сделал.

Теперь не могу выяснить почему не выполняется заложенный алгоритм.

      if(!RefreshRates())
         return;
1)   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0])          //если значение индикатора были выше цены закрытия и стали ниже
     {
2)      if(m_Position.Select(Symbol()))                             //если уже существует позиция по этому символу
        {
         
          return;                            
        }
2*)    m_Trade.Buy(0.1,Symbol());                                 //если дошли сюда, значит позиции нет, открываем ее
     }
3)  if 
   ((m_Position.PositionType()==POSITION_TYPE_BUY) && (((m_symbol.Bid()-DEAL_PRICE)/DEAL_PRICE)>= 0.1))
       {
         m_Trade.PositionClose(Symbol());   //и тип этой позиции Buy, то закрываем ее
      }


Происходит следующее: производится покупка при условии

1) Если условие выполнено;

2) Проверяю есть ли уже там открытая позиция, если есть иду в пункт 3), если нет то открываю 2*)

3)Если позиция buy, и выполнено условие что, цена выросла на 10% от цены входа, то я её закрываю

При тесте происходит следующее, позиция просто открывается и закрывается, не по условиям((( Снова прошу помощи!

 
ISL:

Спасибо. Почитал сделал.

Теперь не могу выяснить почему не выполняется заложенный алгоритм.


Происходит следующее: производится покупка при условии

1) Если условие выполнено;

2) Проверяю есть ли уже там открытая позиция, если есть иду в пункт 3), если нет то открываю 2*)

3)Если позиция buy, и выполнено условие что, цена выросла на 10% от цены входа, то я её закрываю

При тесте происходит следующее, позиция просто открывается и закрывается, не по условиям((( Снова прошу помощи!

Предлагаю такой алгоритм:

   if(!RefreshRates())
      return;
   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0]) //если значение индикатора были выше цены закрытия и стали ниже
     {
      if(m_Position.Select(Symbol())) //если уже существует позиция по этому символу
        {
         if(m_Position.PositionType()==POSITION_TYPE_BUY && (m_symbol.Bid()-m_Position.PriceOpen())/m_Position.PriceOpen()>=0.1)
           {
            m_Trade.PositionClose(Symbol());   //и тип этой позиции Buy, то закрываем ее
            return;
           }
        }
      else
         m_Trade.Buy(0.1,Symbol()); //если дошли сюда, значит позиции нет, открываем ее
     }

Обратите внимание на m_Position.PriceOpen() 

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