Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1308

 
Alexandr Sokolov:
¿Dónde puedo encontrar el tiempo de expiración de la orden en el probador de estrategias? La pestaña de columnas no la tiene
¿Cómo se establece el tiempo de caducidad?
 
MakarFX:
¿Cómo se establece el tiempo de caducidad?
void Open_Order(ENUM_ORDER_TYPE  Type,
                double           price,
                double           sl_price,
                double           tp_price,
                datetime         close)
  {
   
   MqlTradeRequest  request;
   MqlTradeResult   result;
   
   ZeroMemory(request);
   ZeroMemory(result);
   
   request.action        = TRADE_ACTION_PENDING;
   request.magic         = id_number;
   request.symbol        = _Symbol;
   request.volume        = volume;
   request.price         = price;
   request.sl            = sl_price;
   request.tp            = tp_price;
   request.deviation     = slippage;
   request.type          = Type;
   request.type_filling  = ORDER_FILLING_FOK;
   request.type_time     = ORDER_TIME_SPECIFIED;
   request.expiration    = close;
   
   if(!OrderSend(request,result)) Print("Error - ",result.retcode);
   
  }


 
Alexandr Sokolov:


Añade un comentario en la orden, no veo ninguna otra opción(
 
MakarFX:
Añadir al comentario del pedido, no veo ninguna otra opción(

Gracias

 
Este es mi primer comentario en el foro y no estoy especialmente familiarizado con la comunidad, así que no me lancéis demasiados tomates. Al grano. Cuando estaba escribiendo mi EA me enfrenté con el problema de que OrdersTotal() funciona (lo cual tiene sentido) para todas las órdenes abiertas y en caso de establecer condiciones para "una orden cerrada, la siguiente abierta" me sorprendió descubrir que incluso si establezco maestros en condiciones y código duplicado, dos o más EAs en gráficos abiertos en mi cuenta no se dejan trabajar simultáneamente (hasta que una orden se cierra, otra no se abre). He buscado en muchos sitios sobre el tema - tengo muchas soluciones y según entiendo es elemental, pero en todos los casos, nada funcionó. ¿Qué condición debo establecer al abrir y/o cerrar "si... (...) " para singularizar OrdersTotal sólo para un EA específico que se adjunta y el otro (su OrdersTotal) no estaría relacionado de ninguna manera y mantendría su propio recuento de todos los pedidos. Gracias.
 
Порт-моне тв:
Este es mi primer comentario en el foro, no estoy especialmente familiarizado con la comunidad, así que no me tiréis tomates. Al grano. Cuando estaba escribiendo mi EA me encontré con el problema de que OrdersTotal() funciona (lo que tiene sentido) para todas las órdenes abiertas y me sorprendió descubrir que incluso si establezco un maestro en las condiciones y copio el código, dos o más EAs en gráficos abiertos al mismo tiempo no se dejan trabajar (hasta que una orden se cierra, la siguiente no se abre). He buscado en muchos sitios sobre el tema - tengo muchas soluciones y según entiendo es elemental, pero en todos los casos, nada funcionó. ¿Qué condición debo establecer al abrir y/o cerrar "si... (...) " para singularizar OrdersTotal sólo para un EA específico que se adjunta y el otro (su OrdersTotal) no estaría relacionado de ninguna manera y mantendría su propio recuento de todos los pedidos. Gracias.

Adjunte su código y se le indicarán los errores

 
//+------------------------------------------------------------------+
//| sova_2bars.mq4 ||
//| Copyright 2020, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp.
#enlace de propiedad "https://www.mql5.com"
#versión de la propiedad "1.00"
#propiedad estricta

extern int Magia = 6477;
extern double Lote = 0,01;
extern int Deslizamiento = 3;
extern int TomaDeBeneficio = 1600;
extern int StopLoss = 800;
extern int Experimentación = 0;

double Openone, //precio de apertura de la primera vela
Opentwo, //precio de apertura de la segunda vela
Closeone, //precio de cierre de la primera vela
Closetwo, //la escena de la segunda vela
Lowone, //precio mínimo de la primera vela
Lowtwo, //el precio de la primera vela
Lowthree, //la escena del mínimo de la tercera vela
Openthree, //precio de apertura de una tercera vela
Closethree, //precio de cierre de la tercera vela
CloseOrder, //cerrar orden
Highone, //precio máximo de la primera vela
Hightwo, //el precio máximo de la segunda vela
Highhree, //el precio máximo de la segunda vela
Highfour, //el precio es el máximo de la segunda vela
Highfive, //precio de un máximo de una segunda vela
Highsix, //precio de la segunda vela máxima.
Highseven, //precio de la segunda vela máxima
Alto, //precio de un máximo de una segunda vela
Lowfour, //el precio del mínimo de la cuarta vela
Lowfive, //primer precio de una quinta vela
Lowsix, //la escena de una sexta vela mínima
Lowseven, //la escena de un mínimo de una séptima vela
Loweight, //la escena del mínimo de la octava vela
Closefour, //el precio de cierre de la cuarta vela
Openfour,
Bajo15,
Bajo25,
SLbuy, TPbuy, SLsell, TPsell, //precio de apertura de la cuarta vela
OrderOpenPrice;
int ticket, ticketclose;

//+------------------------------------------------------------------+
//| Función de inicialización de expertos |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEED);
}
//+------------------------------------------------------------------+
//| Función de desinicialización experta |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| función de tic experto |
//+------------------------------------------------------------------+
void OnTick()
{
//--- determinar los precios de las barras necesarias
Openone = NormalizeDouble(iOpen(Symbol(), Period(), 0), Digits);
Highone = NormalizeDouble(iHigh(Symbol(), Period(), 0), Digits);
Hightwo = NormalizeDouble(iHigh(Symbol(), Period(), 1), Digits);
Highthree = NormalizeDouble(iHigh(Symbol(), Period(), 2), Digits);
Highfour = NormalizeDouble(iHigh(Symbol(), Period(), 3), Digits);
Highfive = NormalizeDouble(iHigh(Symbol(), Period(), 4), Digits);
Highsix = NormalizeDouble(iHigh(Symbol(), Period(), 5), Digits);
Highseven = NormalizeDouble(iHigh(Symbol(), Period(), 6), Digits);
Higheight = NormalizeDouble(iHigh(Symbol(), Period(), 7), Digits);
Opentwo = NormalizeDouble(iOpen(Symbol(), Period(), 1), Digits);
Openthree = NormalizeDouble(iOpen(Symbol(), Period(), 2), Digits);
Openfour = NormalizeDouble(iOpen(Symbol(), Period(), 3), Digits);
Closeone = NormalizeDouble(iClose(Symbol(), Period(), 0), Digits);
Closetwo = NormalizeDouble(iClose(Symbol(), Period(), 1), Digits);
Closethree = NormalizeDouble(iClose(Symbol(), Period(), 2), Digits);
Closefour = NormalizeDouble(iClose(Symbol(), Period(), 3), Digits);
Lowone = NormalizeDouble(iLow(Symbol(), Period(), 0), Digits);
Lowtwo = NormalizeDouble(iLow(Symbol(), Period(), 1), Digits);
Lowthree = NormalizeDouble(iLow(Symbol(), Period(), 2), Digits);
Lowfour = NormalizeDouble(iLow(Symbol(), Period(), 3), Digits);
Lowfive = NormalizeDouble(iLow(Symbol(), Period(), 4), Digits);
Lowsix = NormalizeDouble(iLow(Symbol(), Period(), 5), Digits);
Lowseven = NormalizeDouble(iLow(Symbol(), Period(), 6), Digits);
Low15 = NormalizeDouble(iLow(Symbol(), Period(), 14), Digits);
Low25 = NormalizeDouble(iLow(Symbol(), Period(), 24), Digits);

//----индикатор - условия--------------------------------------


double BigTrand = iMA(NULL, 0,50,0,MODE_SMA, PRICE_CLOSE, 1);
double SmallTrand = iMA(NULL, 0,5,0,MODE_SMA, PRICE_CLOSE, 1);
double LowerBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_LOWER,1);
double UpperBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_UPPER,1);
double MiddleBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_MAIN,1);
double Bears = iBearsPower(_Símbolo,_Periodo, 5, PRICE_CLOSE,0);
double Toros = iBullsPower(_Símbolo,_Periodo, 5, PRECIO_CIERRE,0);
double Parab = iSAR(_Símbolo,_Periodo,0.002, 1, 0);

SLbuy = NormalizeDouble(Ask - StopLoss*Point, 5);
TPbuy = NormalizeDouble(Ask + TakeProfit*Point, 5);
SLsell = NormalizeDouble(Bid + StopLoss*Point, 5);
TPsell = NormalizeDouble(Bid - TakeProfit*Point, 5);

//-------------функции---------------------------------------

if ( Ask>0 && Bid >0)
{

if (OrdersTotal()<1)
si (Cierre[1]>Apertura[1])
if(Bears < -0.00035 && MiddleBB > Ask)
{
ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "open buy order", Magic, 0, Blue)
}
if(PedidosTotal()==1)
if(Bulls > 0.00035 && MiddleBB < Ask && Bears > 0 && Opentwo < Closetwo && Openthree < Closethree && BigTrand < Ask)
CerrarCompraPosiciones1();
}





//---- fin de la función
}
//---------------------------------------------------------------------
void CerrarCompras1()
{
for(int i=TotalPedidos()-1; i>=0; i--)
{
OrderSelect(i, SELECT_BY_POS,MODE_TRADES);
string CurrencyPair=Símbolo de orden();
if(_Símbolo==Divisa)
if(OrderType()==OP_BUY)
{
OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL);
}
}
}




 
 int OrderOfSymbol=CounterOrderTradeType(-1);
 
//-------------функции---------------------------------------

if ( Ask>0 && Bid >0)
   {

 if (OrderOfSymbol<1)
    if (Close[1]>Open[1])
    if(Bears < -0.00035 && MiddleBB > Ask)
         {
    ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "открыт ордер на покупку", Magic, 0, Blue);
         }
         
   
if (OrderOfSymbol==1)
   if(Bulls > 0.00035 && MiddleBB < Ask && Bears > 0 && Opentwo < Closetwo && Openthree < Closethree && BigTrand < Ask)
    CloseBuyPositions1();
   } 
//+------------------------------------------------------------------+
//| Подсчет ордеров потекущему символу                               |
//+------------------------------------------------------------------+
int CounterOrderTradeType(ENUM_ORDER_TYPE order_type)
   {
   int cnt=0;
   //----
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
      {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) continue;
      if(OrderSymbol()!=_Symbol) continue;
      if(order_type == OrderType() || order_type == -1) cnt++;
      }
   //----
   return(cnt);
   }
 
Порт-моне тв:
//+------------------------------------------------------------------+
//| sova_2bars.mq4 ||
//| Copyright 2020, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+

OrdersTotal() devuelve el importe total de todas las posiciones y órdenes en Metatrader 4

   for(int i = OrdersTotal() - 1; i >= 0; i--)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if(OrderMagicNumber() == iMagicNumber)
            if(OrderSymbol() == Symbol())
              {

               }

De este modo, puede separar las órdenes de un MedgX y de un símbolo...

 

@MakarFX, gracias.... Obtengo estos errores al compilar

'CounterOrderTradeType' - función no definida test for many expt trade.mq4 48 19

'CounterOrderTradeType' - las declaraciones de funciones sólo se permiten en el ámbito global, de espacio de nombres o de clase prueba para muchos expt trade.mq4 141 5


MakarFX
MakarFX
  • www.mql5.com
Добавил тему Окно модификации Доброго времени суток. В терминале, если я дважды щелкаю мышью на линию ордера, то открывается окно модификации. Но если на линии находится цена открытия одного ордера и тейк профит другого, то открывается последний измененный ордер. Уважаемые Профи Добавил тему Нужен индикатор. Кто может написать такое? Я уже...
Razón de la queja: