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

 
Ivan Butko:

Si sabes qué condición añadir o cómo implementarla (si es fácil), por favor comparte.

Puedo, pero no es interesante comprobar cómo funciona, así que aquí hay un esquema

void OnTick()
{  static int ticket = -1;
   while(!IsStopped() &&ticket<0)
   {  if(TerminalInfoInteger(TERMINAL_CONNECTED) && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && !IsTradeContextBusy())
      {  
         RefreshRates();
         ticket = OrderSend("EURUSD", OP_SELL, 0.01, Bid, 3, 0, 0, "", 0, 0, clrRed);
         if(ticket > 0) break; 
      }
   Sleep(123); 
   }
}
 
Igor Makanu:

Puedo, pero no es interesante comprobar cómo funciona, así que sólo lo he esbozado.

Igor, gracias. Y no hace falta que lo compruebe, lo haré yo mismo, por supuesto.

¿Hay alguna forma de hacerlo sin esperar a que haya una garrapata?

Para que la solicitud de apertura vaya inmediatamente cuando se pulse el "push".

Es como un botón estándar de "compra/venta" de apertura rápida de operaciones en el terminal (en la parte superior izquierda del gráfico). Lo pulsas y la venta se abre al instante. Todo lo que necesita es abrir una cesta de órdenes en lugar de una sola operación, sin esperar al tick.

Hay dos implementaciones (como yo lo veo):
1) o bien un botón (similar) en el gráfico que abre la cesta,
2) o un Asesor Experto. El asesor me parece más conveniente, ya que puede repetir la solicitud de apertura (si hay problemas) más rápido que yo.



UPD

Su código funciona, se abre en una nueva garrapata, genial, gracias)


UPD

También recordé: los copiadores tienen el parámetro "ms", donde se puede establecer el tiempo de comprobación. Y si el maestro tiene un trato abierto, puede enviar una solicitud de apertura de un trato desde 1 ms esclavo. Es decir, la apertura instantánea es factible

 
Igor Makanu:

Puedo, pero no es interesante comprobar cómo funciona, así que aquí hay un boceto

Igor, por favor, comprueba a ojo, ¿esta apertura es instantánea, sin esperar a un nuevo tick?

int OnInit()

{

//---

static int ticket = -1;

while(!IsStopped() &&ticket<0)

{ if(TerminalInfoInteger(TERMINAL_CONNECTED) && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && !IsTradeContextBusy())

{

RefreshRates();

ticket = OrderSend("EURUSD", OP_SELL, 0.01, Bid, 3, 0, 0, "", 0, 0, clrRed);

if(ticket > 0) break;

}

Dormir(1);

}

//---

return(INIT_SUCCEED);

}

------------------

Y parece que funciona como se pretende...
 
Ivan Butko:



Por lo demás, parece que funciona como está previsto...

no es la mejor opción.... entonces al menos escríbalo así

#property strict
int ticket = -1;
int OnInit()
{  if(ticket < 0) SendMyOrder();
   return(INIT_SUCCEEDED); 
}
//+------------------------------------------------------------------+
void OnTick()
{
   if(ticket < 0) SendMyOrder();
}
//+------------------------------------------------------------------+
void SendMyOrder()
{  while(!IsStopped() && ticket < 0)
   {  if(TerminalInfoInteger(TERMINAL_CONNECTED) && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && !IsTradeContextBusy())
      {  RefreshRates();
         ticket = OrderSend("EURUSD", OP_SELL, 0.01, Bid, 3, 0, 0, "", 0, 0, clrRed);
         if(ticket > 0) break; 
      }
      Sleep(123); 
   } 
}
//+------------------------------------------------------------------+

pero la primera opción debería funcionar claramente si has tirado en un gráfico y has pulsado el botón de autotrade cuando consideres necesario "estar en espera".

Si quieres hacer un intercambio, entonces debes escribirlo así:

void OnTick()
{
   if(ticket < 0) SendMyOrder();
   if(ticket > 0) ExpertRemove();
}
 
Igor Makanu:

no es la mejor opción.... entonces al menos escríbalo así

pero la primera opción debería funcionar claramente si has tirado en un gráfico y has pulsado el botón de autotrade cuando consideres necesario "estar en espera".

Si quieres hacer un intercambio, entonces debes escribirlo así:

muchas gracias
 

¡Genial! Las pruebas de las variantes continúan. La variante de Vladimir e Igor resultó ser bastante rápida. En la práctica, resultó que las operaciones se abrían más rápido al hacer clic en el botón de compra rápida que al utilizar el Asesor Experto. Ambas variantes tienen ventajas y desventajas. Otra cosa curiosa es que si prescribimos en el Asesor Experto qué pares abrir de uno en uno, se abren de uno en uno y muy lentamente... y si establecemos 7 Asesores Expertos para cada gráfico (más bien sin carga), entonces al contrario - todas las operaciones se abren instantáneamente, NO en secuencia, sin retrasos entre las órdenes (pero todavía hay algún hueco de medio segundo o un segundo al principio).

Quiero probar el botón de la carta, encontré el manual, pero sólo describe las coordenadas y esas cosas. Por favor, aconséjeme, ¿en qué parte del script del "botón" debo escribir el código para abrir el trato? Para hacer clic en él en el gráfico y el acuerdo abierto. Como en el botón estándar de compra/venta rápida de MT.

¿O cómo actualizar el panel de comercio para abrir una cesta de órdenes?

 
Por favor, ayuda con esto
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2019.10.14
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
Ivan Butko:

Quiero probar el botón del gráfico, encontré el manual,

No busqué el manual, sino que dibujé el botón )))

#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
input string   sym1 = "EURUSD";
input string   sym2 = "GBPUSD";
input string   sym3 = "USDCAD";
input string   sym4 = "USDJPY";
input string   sym5 = "AUDUSD";
#include <Controls\Button.mqh>
CButton ButtonSend;

string sym[5];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   sym[0] = sym1;
   sym[1] = sym2;
   sym[2] = sym3;
   sym[3] = sym4;
   sym[4] = sym5;
   ButtonSend.Create(0, "ButtonSend" + _Symbol, 0, 10, 50, 100, 90);
   ButtonSend.Color(clrRed);
   ButtonSend.Text("Kill Forex!");
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   static int ticket[5] = {-1, -1, -1, -1, -1 };
   if(ticket[0] > 0 && ticket[1] > 0 && ticket[2] > 0 && ticket[3] > 0 && ticket[4] > 0) return;
   if(ButtonSend.Pressed())
     {
      ButtonSend.Pressed(false);
      Print("Start OrderSend()");
      while(!IsStopped())
        {
         if(TerminalInfoInteger(TERMINAL_CONNECTED) && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && !IsTradeContextBusy())
           {
            RefreshRates();
            for(int i = 0; i < 5; i++)
              {
               if(sym[i] == "") ticket[i] = INT_MAX;
               if(ticket[i] > 0) continue;
               ticket[i] = OrderSend(sym[i], OP_SELL, 0.01, SymbolInfoDouble(sym[i],SYMBOL_BID), 3, 0, 0, "", 0, 0, clrRed);
              }
           }
         if(ticket[0] > 0 && ticket[1] > 0 && ticket[2] > 0 && ticket[3] > 0 && ticket[4] > 0)  break;
         Sleep(123);
        }
     }
  }
//+------------------------------------------------------------------+

Si la configuración del símbolo será "", entonces no abra 0,01 lote en este símbolo, la configuración del lote no ha hecho, para como el tema acerca de cómo aprender, no mirar que va a hacer, tratar de adjuntar a ti mismo si es necesario ;)

 
Igor Makanu:

No busqué un manual, pero dibujé el botón ))))

si el símbolo se establece en "", entonces no abra 0,01 lote para este símbolo, el ajuste de lote no ha hecho, para como el tema acerca de cómo aprender, no mirar que va a hacer, tratar de adjuntar a ti mismo si es necesario ;)

¡Muchas gracias, Igor! ¡Rápido y al grano!

intentará

 
Igor Makanu:

Es extraño, si en un EA, abre operaciones una tras otra en cada par de divisas especificado... con un intervalo de tiempo. Y cuando lo pones en 5 gráficos diferentes con distintos pares de divisas (símbolo(0)), las 5 operaciones se abren simultáneamente y al instante cuando pulsas autotrade.

¿Puede sugerir qué puede ser y cómo solucionarlo? Tener todo en un solo EA y en un solo gráfico (para que el botón del gráfico abra todos los pares tan rápido como cuando se activa el "autotrade" con varios EAs, como en la versión original)