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

 
Vitaly Muzichenko #:

No sé por dónde empezar.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
  int H=100;
  double b, a;
  if(prev_calculated==0) {
    ArrayInitialize(Buffer1,EMPTY_VALUE);
    ArrayInitialize(Buffer2,EMPTY_VALUE);
  }

  b=SymbolInfoDouble(Symbol(),SYMBOL_BID);
  a=SymbolInfoDouble(Symbol(),SYMBOL_ASK);

  if(rates_total-prev_calculated==1) {
    Buffer1[H+1]=EMPTY_VALUE;
    Buffer2[H+1]=EMPTY_VALUE;
  }
  else if (rates_total == prev_calculated) { // сдвигаем данные только когда количество баров не поменялось (в случае появления нового бара они сдвигаются системой терминала)
    ArrayCopy(Buffer1, Buffer1, 1, 0, H);
    ArrayCopy(Buffer2, Buffer2, 1, 0, H);
  }
  // записываем новые данные
  Buffer1[0]=b;
  Buffer2[0]=a;
  return(rates_total);
}

Se supone que funciona. Compruébalo.

P.S. Y por favor, escriba la variante de velocidad con los cambios de la función ArrayCopy. Me gustaría saberlo yo mismo.

 
Vitaly Muzichenko #:

No sé por dónde empezar

Aquí hay una variante de mql5. Pero sólo por el precio de Ask. Por el precio de la oferta tienes que hacerla tú mismo.

Lo tiene todo, y el trabajo con el buffer del indicador, y el trabajo con los ticks, y el ejemplo de cómo no es necesario invertir la indexación del buffer del indicador.

A 1000 bares se muestra sin ningún tipo de retraso.

Archivos adjuntos:
 
Alexey Viktorov #:

Aquí hay una variante de mql5. Pero sólo por el precio de Ask. Para el precio de la oferta finalícelo por su cuenta.

Tiene todo, incluyendo el trabajo con el buffer del indicador, y el trabajo con los ticks, y el ejemplo de cómo la indexación del buffer del indicador no necesita ser invertida.

A 1000 bares se muestra sin ningún tipo de retraso.

¡Lo tengo! Gracias.

 

Hola, recientemente he empezado a trabajar con MT4 y me he encontrado con el siguiente problema: no hay una función adecuada para seguir una orden cerrada. Mi algoritmo es simple: cuando aparece una nueva vela, coloco dos órdenes pendientes: una Sell Stop y una Bid Stop y necesito seguir la orden cerrada (Sell Stop o Bid Stop) cuando una de ellas se cierra y colocar una orden en lugar de la cerrada. Las órdenes se colocan - no hay problema con eso, pero no puedo entender cómo hacer un seguimiento de los cerrados, pongo el código, pero el mensaje muestra sólo SellSTOP, y no reacciona a BAYSTOP:


if (OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY))
   {
   Print("OrderType", OrderType());//Тут всегда только только "1"
   }
   if(OrderType()==0)
    {
    Print("Закрылся  BUYSTOP:", OrderTicket());
    }
   if(OrderType()==1)
   {Print("Закрылся   SELLSTOP:",  OrderTicket());} //Тут сообщает корректно - номер ордера

Y también me encontré con el hecho de que OnTrade oOnTradeTransaction no funciona, probado esto:

void OnTradeTransaction()
 {
 Print("status - "); 
 }  
 
MixanM #:

Hola, recientemente he empezado a trabajar con MT4 y me he encontrado con el siguiente problema: no hay una función adecuada para seguir una orden cerrada. Mi algoritmo es simple: cuando aparece una nueva vela, coloco dos órdenes pendientes: una Sell Stop y una Bid Stop y necesito seguir la orden cerrada (Sell Stop o Bid Stop) cuando una de ellas se cierra y colocar una orden en lugar de la cerrada. Los pedidos se colocan - no hay problema, pero no puedo entender cómo hacer un seguimiento de los cerrados, pongo el código, pero el mensaje muestra sólo SellSTOP, BAYSTOP no responde:

//+----------------------------------------------------------------------------+
int LastClose()
  {
   int result=-1;
   datetime t=0;
   int i=OrdersHistoryTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderType()==OP_BUY||OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime())
                 {
                  t=OrderCloseTime(); result=OrderType();
                 }
              }
           }
        }
     }
   return(result);
  }
//+----------------------------------------------------------------------------+

MixanM OnTradeTransaction no funciona, probé esto:

Parece que es para MT5
 
Hola a todos, amigos.
He aquí una pregunta.
La copia de ofertas en este servicio no ha cambiado en tantos años. Hace tiempo que se tiene la impresión de que a los promotores no les interesa en absoluto pensar en la comodidad de sus visitantes.
Se ha necesitado de su propio proyecto.

¿No sé si es posible?

1) Necesito el copiador de tratos, ( asesor ) no se cual es la carga y como se mide, se necesita que sea capaz de copiar de una y distribuir más de cien cuentas.
La pregunta sobre la copia. Mi objetivo es obtener un volumen de operaciones basado en los porcentajes de las operaciones (es decir, tengo 100 en mi cuenta; mi seguidor tiene 1000 en su cuenta; abro una operación con el 3% de mi depósito y el volumen del lote se recalcula por el porcentaje de mi operación; es decir, mi operación con el 3% es de 3 dólares; el seguidor tiene una operación abierta con el 3% = 30 dólares; es decir, no sé si es realmente importante o no).


2) ¿Es posible retirar los datos de su cuenta? Es decir, ¿nombre, apellido, pero sobre todo el importe del saldo? Si no es posible retirar toda la información, ¿qué es posible?

3) Estimados programadores, estimen el costo aproximado de dicho trabajo, no quiero ser engañado y quiero entender el precio adecuado.
Gracias.
 
Roman Voloshchuk La copia de transacciones en este servicio no ha cambiado en muchos años. Hace tiempo que se tiene la impresión de que a los promotores no les interesa en absoluto pensar en la comodidad de sus visitantes.
Se ha necesitado de su propio proyecto.

¿No sé si es posible?

1) Necesito el copiador de tratos, ( asesor ) no se cual es la carga y como se mide, se necesita que sea capaz de copiar de una y distribuir más de cien cuentas.
La pregunta sobre la copia. Mi objetivo es obtener un volumen de operaciones basado en los porcentajes de las operaciones (es decir, tengo 100 en mi cuenta; mi seguidor tiene 1000 en su cuenta; abro una operación con el 3% de mi depósito y el volumen del lote se recalcula por el porcentaje de mi operación; es decir, mi operación con el 3% es de 3 dólares; el seguidor tiene una operación abierta con el 3% = 30 dólares; es decir, no sé si es realmente importante o no).


2) ¿Es posible retirar los datos de su cuenta? Es decir, el nombre, el apellido, pero sobre todo el importe del saldo. Si no es posible retirar toda la información, ¿qué es posible?

3) Estimados programadores, estimen el costo aproximado de dicho trabajo, no quiero ser engañado y quiero entender el precio adecuado.
Gracias.

Los datos de los suscriptores son perjudiciales para la extracción.

De nuevo, usted tiene 50 en su cuenta con un apalancamiento de 500 y un suscriptor tiene 5000 con un apalancamiento de 33.

Hay un pequeño problema de cálculo aquí. Eso si hablamos de este servicio.

Si estamos hablando de auto-copia, entonces:

usted tiene 50 en su cuenta con un apalancamiento de 2000 y un abonado 5000 con un apalancamiento de 33.

Usted podrá abrir 3 posiciones con un pequeño apalancamiento mientras que al suscriptor no le quedará dinero después de la segunda, ya que se expondrá al margen.

---

No es tan sencillo.

 

Tretyakov Rostyslav #:
Это вроде для МТ5С

Gracias por el código, pero el tuyo también devuelve sólo las órdenes pares (SELLSTOP) por alguna razón, no puedo entender por qué, tal vez la clasificación es incorrecta / (estoy ejecutando el código en el probador - tal vez ese es el problema?)

 
MixanM #:

Gracias por el código, pero el tuyo también devuelve sólo las órdenes pares (SELLSTOP) por alguna razón, no puedo entender por qué, tal vez la clasificación es incorrecta / (estoy ejecutando el código en el probador - podría ser este el problema?)

mi código devuelve el tipo de la última orden cerrada - "0-Compra" o "1-Venta"
 
Tretyakov Rostyslav #:
mi código devuelve el tipo de la última orden cerrada - "0-Compra" o "1-Venta"

Pues sí, a eso me refería, a que sólo devuelve los datos de una orden "sellstop". He añadido esto al tuyo sólo para comprobarlo visualmente:

...

if(t<OrderCloseTime())

{

t=OrderCloseTime(); result=OrderType();

Print("Pedido TIP :", OrderTicket());

}

....

Razón de la queja: