Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 905

 
bij:

if(iTime(NULL,PERÍODO_D1,i+1)!=iTime(NULL,PERÍODO_D1,i)&& como é que escrevo isto? )

É necessário extrair a data do tempo[i] e compará-la com o tempo[i+1]. Se não forem iguais, então extrair tempo do tempo[i] e comparar com o tempo dado. Se forem os mesmos, ponha em fila.

Já mostrei como extrair tudo isto no guião. Tudo o que resta é pensar no assunto.

 
Artyom Trishkin:

É necessário extrair a data do tempo[i] e compará-la com o tempo[i+1]. Se não for igual, extrair o tempo do tempo[i] e compará-lo com o tempo dado. Se forem as mesmas, traçar uma linha.

Como tudo é extraído - mostrei no guião. Tudo o que falta fazer é pensar nisso.

Sexta-feira à noite, a pensar mal) Nada se constrói. Porquê?

   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:

depois extrair o tempo do tempo[i] e compará-lo com o tempo definido.

Provavelmente, tempo[i+1], preciso de colocar a linha para o dia anterior após o encerramento do dia.

 

Olá.

Pergunta estúpida mas, mesmo assim, por favor, ajude)

Eu entrei numa troca a algum preço, eu sempre desejei) E eu comparo o preço da troca com a oferta actual, se aumentarmos 0,5% eu fecho.Maldito a oferta(((

   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:

Entrei numa troca a algum preço, estou sempre ansioso)E comparo o preço da troca com a oferta actual, se subíssemos 0,5% eu fecho.Juro a oferta(((

Provavelmente porque se trata da MQL5. Não há aqui "oferta", masSymbolInfoDouble(_Symbol, SYMBOL_BID)


 
ISL:

Olá.

Pergunta estúpida mas, mesmo assim, por favor, ajude)

Eu entrei numa troca a algum preço, eu sempre desejei) E eu comparo o preço da troca com a oferta actual, se subirmos 0,5% eu fecho. Juro por oferta(((

Tem razão em jurar. Não existe tal matriz com preços de licitação na MQL5.

Substitui-la por

m_symbol.Bid()

e antes do ciclo, não se esqueça de actualizar os preços:

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

E ele tem razão em jurar. Não existe tal matriz com preços de licitação na MQL5.

Substitui-la por

e antes do laço não se esqueça de actualizar os preços:

Fi-lo de duas maneiras diferentes:

1) O Expert Advisor trabalha, mas infelizmente não me dá essa ideia. É simples, eu compro quando a vela anterior se fechava por baixo e a seguinte por cima. E eu fecho apenas se o preço subir 0,5%.

Faz negócios estranhos(((

   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) O meu método é o seguinte:

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);                                 //если дошли сюда, значит позиции нет, открываем ее
     }

Acho que fiz asneira(((.

Gera um erro:


 
ISL:

Fê-lo de duas maneiras diferentes:

1) O Expert Advisor trabalha, mas infelizmente não implementa a ideia. É simples, eu compro quando a vela anterior se fechava mais abaixo e a seguinte mais alta. E só fecho se o preço subir 0,5%.

Faz negócios estranhos(((

2) O meu método é o seguinte:

Acho que fiz asneira(((.

Dá um erro:


Abra qualquer um dos meus códigos e aí verá tanto m_symbol como RefreshRates.

 
Vladimir Karputov:

Abra qualquer um dos meus códigos e verá aí tanto m_symbol como RefreshRates.

Obrigado. Já o li e fiz.

Agora não consigo perceber porque é que o algoritmo não funciona.

      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, то закрываем ее
      }


O que acontece é o seguinte: a compra é feita sob a condição

1) Se a condição for preenchida;

2) Verifico se já existe uma posição aberta, se existe, vou ao ponto 3), se não existe, abro um 2*)

3) Se a posição for comprada, e se for cumprida a condição de que o preço tenha aumentado 10% em relação ao preço de entrada, então eu fecho-a.

No teste, acontece o seguinte, a posição abre e fecha, não em condições (( Mais uma vez, por favor, ajude!

 
ISL:

Obrigado. Já fiz a leitura.

Agora não consigo perceber porque é que o algoritmo não funciona.


O que acontece é o seguinte: a compra é feita sob a condição

1) Se a condição for preenchida;

2) Verifico se já existe uma posição aberta, se existe, vou ao ponto 3), se não existe, abro um 2*)

3) Se a posição for comprada, e se for cumprida a condição de que o preço tenha aumentado 10% em relação ao preço de entrada, então eu fecho-a.

Ao testar o seguinte acontece, a posição abre e fecha, não em condições (( Mais uma vez, por favor, ajude!

Proponho o seguinte algoritmo:

   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()); //если дошли сюда, значит позиции нет, открываем ее
     }

Preste atenção à m_Posição.PriceOpen()