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

 
Alexey Belyakov:


Eso tampoco funcionó.

Lo que a un hobgoblin le gustan los kilómetros de código...

Su problema se puede resolver en SEIS líneas de código, teniendo en cuenta la declaración de variables.

/************************Expert tick function************************/
void OnTick()
 {
  bool signal = true;
  datetime timeBar = iTime(_Symbol, PERIOD_CURRENT, 0);// период можно поставить по своему усмотрению
  datetime static timeOpen = 0;
  if(timeBar > timeOpen)
   {
    if(signal)
     {
      // открыть позицию
      timeOpen = timeBar;
     }
   }
 }/******************************************************************/

Espero que puedas averiguar la variable de la señal.

 

¡О! ¡Funciona! Gracias, compañeros, por las ideas.

Pero tuve que retocarlo un poco. Incluso se hizo más fácil, sin (verdad). Aunque no puedo explicar esta complicada lógica MQL).

Así es como lo implementé:

datetime timeBar = iTime(_Symbol,PERIOD_CURRENT, 0);// период можно поставить по своему усмотрению
datetime static timeOpen = 0;

if((PositionsTotal()==0)&&(c0>h1)&&(rGENUP>0.30)&&(timeBar > timeOpen))    // Условие для открытия позиции.
     {
      MqlTradeRequest request;
      MqlTradeResult  result;
      request.action   =TRADE_ACTION_DEAL;                         // тип торговой операции
      request.symbol   =Symbol();                                 // символ
      request.volume   =1;                                       // объем в 1 лот
      request.type     =ORDER_TYPE_BUY;                         // тип ордера
      request.price    =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // цена для открытия
      request.deviation=3;
      request.sl    = NormalizeDouble(Ask-50*_Point,_Digits);
      request.tp    = NormalizeDouble(Ask+50*_Point,_Digits);    

      if(!OrderSend(request,result))
         PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки
      //--- информация об операции
      PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
      // допустимое отклонение от цены
timeOpen = timeBar;
}
Me pregunto por qué hay un código tan grande en MQL5 para la apertura de posiciones. A diferencia de MQL4. En el 4 es sólo una línea. ¿Podemos reducirlo? Por ejemplo, ¿podemos eliminar el manejador de errores?


Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Alexey Belyakov:

¡О! ¡Funciona! Gracias, compañeros, por las ideas.

Pero tuve que retocarlo un poco. Incluso se hizo más fácil, sin (verdad). Aunque no puedo explicar esta complicada lógica MQL).

Así es como lo implementé:

Me pregunto por qué hay tanto código en MQL5 para abrir una posición. A diferencia de MQL4. En el 4, es sólo una línea. Pero aquí... ¿Puedes hacerlo más corto? Por ejemplo, ¿podemos eliminar el gestor de errores?


Utiliza las clases de comercio. Y el código será muy corto.

Ejemplo:

//+------------------------------------------------------------------+
//|                                            Only_one_purchase.mq5 |
//+------------------------------------------------------------------+
#property version   "1.003"
#property script_show_inputs
#include <Trade\Trade.mqh>
CTrade         m_trade;          // trading object
//--- input parameters
input ENUM_POSITION_TYPE   InpPositionType   = POSITION_TYPE_BUY; // Position Type
input double               InpVolume         = 0.0;               // Volume
input ulong                m_magic           = 15489;             // magic number
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   m_trade.SetExpertMagicNumber(m_magic);
//--- open a position
   if(InpPositionType==POSITION_TYPE_BUY)
      m_trade.Buy(InpVolume);
   else
      m_trade.Sell(InpVolume);
  }
//+------------------------------------------------------------------+
 
Alexey Belyakov:

¡О! ¡Funciona! Gracias, compañeros, por las ideas.

Pero tuve que retocarlo un poco. Incluso se hizo más fácil, sin (verdad). Aunque no puedo explicar esta complicada lógica MQL).

Así es como lo implementé:

Me pregunto por qué hay un código tan grande en MQL5 para la apertura de posiciones. A diferencia de MQL4. En el 4, es sólo una línea. Pero aquí... ¿Se puede acortar? Por ejemplo, ¿podemos eliminar el controlador de errores?


Por lo tanto, si usted tiene en la condición

if((PositionsTotal()==0)&&

¿por qué se necesitan más cheques para un nuevo bar? ¿O existe la opción de que la posición se cierre en la misma barra y se prohíba la segunda apertura?

 
Alexey Belyakov:

¡О! ¡Funciona! Gracias, compañeros, por las ideas.

Pero tuve que retocarlo un poco. Incluso se hizo más fácil, sin (verdad). Aunque no puedo explicar esta complicada lógica MQL).

Así es como lo implementé:

Me pregunto por qué hay un código tan grande en MQL5 para abrir una posición. A diferencia de MQL4. En el 4, es sólo una línea. Pero aquí... ¿Puedes hacerlo más corto? Por ejemplo, ¿podemos eliminar el gestor de errores?


Hace tiempo, cuando existía el MQL4, la gente se indignaba diciendo que no se les había dado acceso de nivel inferior, para que pudieran hacer algo a su manera.

Bueno, lo hicieron - ahora dieron acceso a OrderSend() en MQL4 - por así decirlo, desplegaron su lógica en MQL - así que haz lo que quieras. Pero no, ahora tengo quejas de que es demasiado complicado.

¿Complicado? No hay problema - dame clases de comercio en SB - son casi lo mismo que en las funciones de comercio estándar de MQL4.
En MQL4 estas clases son las funciones comerciales. Y en MQL5 - todo con acceso abierto.

Aprovéchalo.

 
Artyom Trishkin:

Hace tiempo, cuando existía MQL4, la gente se indignaba diciendo que no les daban acceso de nivel inferior, para que pudieran hacer algo a su manera.

Bueno, lo hicieron - ahora dieron acceso a OrderSend() en MQL4 - por así decirlo, desplegaron su lógica en MQL - así que haz lo que quieras. Pero no, ahora tengo quejas de que es demasiado complicado.

¿Complicado? No hay problema - dame clases de comercio en SB - son casi lo mismo que en las funciones de comercio estándar de MQL4.
En MQL4 estas clases son las funciones comerciales. Y en MQL5 - todo con acceso abierto.

Aprovéchalo.

Docente, y Docente. Por qué estás tan enfadado (hoy) ©

 
Alexey Viktorov:

Docente, ah Docente. Por qué estás tan enfadado (hoy) ©

Entra en el agujero de hielo...

 
Alexey Viktorov:

Así que si tienes una condición

¿por qué necesita comprobar si hay una nueva barra? ¿O existe la opción de que la posición se cierre en la misma barra y no se permita una segunda apertura?

Exactamente, hay una opción para cerrar la posición en la misma barra.

 

(Corte en la nueva pared. ) El "muro" se llama punto de equilibrio.

Así es como se implementó en MQL4:

(Lo copié en algún sitio que no recuerdo).

int BULevel=30;

   for(int i=0; i<OrdersTotal(); i++) 
      {
       if(OrderSelect(i, SELECT_BY_POS))
        {      
         if(OrderType()==OP_BUY) 
          {
           if(OrderOpenPrice()<=(Bid-BULevel*Point)&&OrderOpenPrice()>OrderStopLoss())
            {      
             int p=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-50*Point,OrderTakeProfit(),0,Green);
            }
           }       
 
         if(OrderType() == OP_SELL) 
           {
            if(OrderOpenPrice()>=(Ask+BULevel*Point)&&OrderOpenPrice()<OrderStopLoss()) 
             {
              p=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+50*Point,OrderTakeProfit(),0,Red);
             }
           } 
         }
       }

//------------------------------------------------------------------+

Pero así es como se implementa en 5-PC. ¿Cómo lo hago?

He mirado en las clases de comercio y no lo veo ahí. Pero la cosa es necesaria. ¿Qué dicen los profesionales?

 

¿Cómo puedo evitar que las operaciones de otros gráficos aparezcan en el gráfico?

Sólo las operaciones del robot que está en el gráfico dado.

Razón de la queja: