Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 905

 
bij:

if(iTime(NULL,PERIOD_D1,i+1)!=iTime(NULL,PERIOD_D1,i)&& ¿cómo escribo esto? )

Hay que extraer la fecha de la hora[i] y compararla con la hora[i+1]. Si no son iguales, se extrae el tiempo de time[i] y se compara con el tiempo dado. Si son iguales, pon una línea.

Cómo se extrae todo esto - he mostrado en el guión. Sólo queda pensar en ello.

 
Artyom Trishkin:

Hay que extraer la fecha de time[i] y compararla con time[i+1]. Si no es igual, extrae la hora de time[i] y la compara con la hora dada. Si son iguales, traza una línea.

Cómo se extrae todo, lo he mostrado en el guión. Sólo queda pensar en ello.

Viernes por la noche, pensando mal) No se construye nada. ¿Por qué?

   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:

entonces extrae el tiempo de time[i ] y lo compara con el tiempo establecido.

Probablemente tiempo[i+1], necesito poner la línea al día anterior después del cierre del día.

 

Hola.

Pregunta estúpida pero aún así, por favor, ayuda)

Entré en un comercio en algún precio, yo siempre largo) Y comparo el precio del comercio con la oferta actual, si se aumentó en un 0,5% me close.Cursed en la 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:

Entré en una operación a algún precio, siempre estoy anhelando)Y comparo el precio de la operación con la oferta actual, si subimos un 0,5% cierro.Jura a la oferta(((

Probablemente porque esto es MQL5. Aquí no hay "oferta" sinoSymbolInfoDouble(_Symbol, SYMBOL_BID)


 
ISL:

Hola.

Pregunta estúpida pero aún así, por favor, ayuda)

Entré en una operación a algún precio, siempre largo) Y comparo el precio de la operación con la oferta actual, si subimos un 0,5% cierro.Jura a la oferta(((

Tienes razón en jurar. En MQL5 no existe este tipo de matriz con precios de oferta.

Sustitúyalo por

m_symbol.Bid()

y antes del ciclo no te olvides de actualizar los precios:

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

Y tiene razón al jurar. En MQL5 no existe este tipo de matriz con precios de oferta.

Sustitúyalo por

y antes del bucle no te olvides de actualizar los precios:

Lo he hecho de dos maneras diferentes:

1) El Asesor Experto funciona, pero lamentablemente no me da la idea. Es simple, compro cuando la vela anterior cerró por debajo y la siguiente cerró por encima. Y cierro sólo si el precio sube un 0,5%.

Hace tratos extraños(((

   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) Mi método es el siguiente:

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

Creo que lo he estropeado(((.

Genera un error:


 
ISL:

Lo hizo de dos maneras diferentes:

1) El Asesor Experto funciona, pero desafortunadamente no implementa la idea. Es simple, compro cuando la vela anterior cerró más bajo y la siguiente cerró más alto. Y cierro sólo si el precio sube un 0,5%.

Hace tratos extraños(((

2) Mi método es el siguiente:

Creo que lo he estropeado(((.

Da un error:


Abre cualquiera de mis códigos y ahí verás tanto m_symbol como RefreshRates.

 
Vladimir Karputov:

Abre cualquiera de mis códigos y verás allí tanto m_symbol como RefreshRates.

Gracias. Lo he leído y lo he hecho.

Ahora no puedo entender por qué el algoritmo no 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, то закрываем ее
      }


Lo que ocurre es lo siguiente: la compra se realiza bajo la condición

1) Si se cumple la condición;

2) Compruebo si ya hay una posición abierta, si la hay, paso al punto 3), si no, abro una 2*)

3) Si la posición es de compra, y se cumple la condición de que el precio haya subido un 10% desde el precio de entrada, entonces la cierro.

En la prueba, sucede lo siguiente, la posición se abre y se cierra, no en condiciones (( De nuevo, ¡por favor, ayuda!

 
ISL:

Gracias. He hecho la lectura.

Ahora no puedo entender por qué el algoritmo no funciona.


Lo que ocurre es lo siguiente: la compra se realiza bajo la condición

1) Si se cumple la condición;

2) Compruebo si ya hay una posición abierta, si la hay, paso al punto 3), si no, abro una 2*)

3) Si la posición es de compra, y se cumple la condición de que el precio haya subido un 10% desde el precio de entrada, entonces la cierro.

Al hacer la prueba sucede lo siguiente, la posición se abre y se cierra, no en condiciones (( De nuevo, ¡por favor, ayuda!

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

Presta atención a m_Position.PriceOpen()

Razón de la queja: