Necesito ayuda

 

El problema es
Prácticamente no conozco el idioma, necesito automatizar la apertura de órdenes de unos pocos vp, puse este sencillo código (archivo adjunto), pero resultó ser torpe,
Según el plan debería abrir 6 vp, pero abre sólo 3 vp, pero a veces abre los 6, pero luego de nuevo deja de funcionar como debería (creo que esto puede ser debido al número de decimales en el precio, como en un bloque sin JPY, todo funciona bien.
Por favor, ayude a resolver este problema.
Si no es difícil necesito más información sobre cómo escribirlo, puedo cambiar los intercambios a la compra o la venta solamente.

archivo: DANGER FILE DELETED

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Информация об инструменте - Состояние окружения - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Sergey Korsunov:

El problema es
Prácticamente no conozco el idioma, necesito automatizar la apertura de órdenes de unos pocos vp, puse este sencillo código (archivo adjunto), pero resultó ser torpe,
Según el plan debería abrir 6 vp, pero abre sólo 3 vp, pero a veces abre los 6, pero luego de nuevo deja de funcionar como debería (creo que esto puede ser debido al número de decimales en el precio, como en un bloque sin JPY, todo funciona bien.
Por favor, ayude a resolver este problema.
Si no es difícil necesito ayuda para escribirlo y así poder cambiar las operaciones a Compra o Venta solamente.

archivo: DANGER FILE REMOVED

El archivo debe adjuntarse mediante el botón Adjuntar archivo.

 
ok
Archivos adjuntos:
Test_3.mq4  7 kb
 
Sergey Korsunov:

El problema es
Prácticamente no conozco el idioma, necesito automatizar la apertura de órdenes para unos pocos vp, puse este sencillo código (archivo adjunto), pero resultó ser torpe,
Según el plan debería abrir 6 vp, pero abre sólo 3 vp, pero a veces abre los 6, pero luego ya no funciona como debería (creo que esto puede ser debido al número de dígitos después del punto decimal, como en el bloque, donde no hay JPY, todo funciona bien.
Por favor, ayude a resolver este problema.
Y también, si no es difícil pronunciar cómo prescribir, que era posible cambiar la apertura de las operaciones sólo Comprar o Vender.

Hay una serie de razones que le impiden abrir una orden. Supongamos que, en el primer tick, se abren 3 órdenes

En elsiguiente tick, al principio del programa, if(OrdersTotal() >= OrderCount) return; esto se devolverá ya que el número de pedidos es mayor que OrderCount, que = 1.

El resto del programa será ignorado.

A juzgar por estas líneas:

//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"

El programa fue desarrollado por MetaQuotes Software Corp. ¡Pídeles consejo!

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
a007 #:

Hay una serie de razones que impiden la apertura de una orden. Supongamos que en el primer tick se abren 3 órdenes

En elsiguiente tick, al principio del programa, if(OrdersTotal() >= OrderCount) return; esto se devolverá ya que el número de pedidos es mayor que OrderCount, que = 1.

El resto del programa será ignorado.

A juzgar por estas líneas:

El programa ha sido desarrollado por MetaQuotes Software Corp. ¡Consúltelo!

¿Quiere decir que se abren pedidos adicionales?

 
Fast235 #:

¿quiere decir que se abren pedidos adicionales?

No, al contrario, necesitas 6 pares de divisas diferentes y sólo se abren 3

Y por cierto, donde no hay lingotes de yenes, todos los 6 pares abiertos, tanto principales como cruzados, donde hay lingotes de yenes, sólo 3 abiertos

 
Sergey Korsunov #:

No, al contrario, necesitas 6 pares de divisas diferentes y sólo se abren 3

La forma más fácil es poner Sleep() después de cada apertura de la orden, el terminal no tiene tiempo de actualizar la cantidad (por razones de rendimiento aparentemente)

 
Fast235 #:

la forma más fácil es poner Sleep() después de que se abra cada orden, el terminal no tiene tiempo para actualizar la cantidad

Prácticamente no entiendo el lenguaje (
He escrito mi código puramente en los ejemplos en la web
Ayúdame a poner Sleep() en mi código

 
Sergey Korsunov #:

No tengo casi ningún conocimiento del lenguaje (
escribió el código puramente de ejemplos en la web
Ayuda a insertar Sleep() en mi código

Después de OrderSend y poner Sleep(50);

si no ayuda 50 aumentar a 100-200

 
Fast235 #:

después de OrderSend y poner Sleep(50);

Si no funciona 50 aumentar a 100-200

no ayudó ((

 
Sergey Korsunov #:

no ayudó ((

Inténtelo de esta manera: más corto y más preciso. Si lo descubres por ti mismo, serás un corifeo de la programación. Coloque el cursor sobre la palabra y pulse F1

//+------------------------------------------------------------------+
//|                                                       Test 3.mq4 |
//+------------------------------------------------------------------+
#property strict

extern double Lot   = 0.01;
extern int    Slip  = 3;
extern int    Magic = 777;

string name[10]={"AUDJPY","CHFJPY","CADJPY","AUDCAD","AUDCHF","CADCHF"};
int    cnt[6];

void OnTick()
{
   ArrayInitialize(cnt, 0); // Обнуление счетчиков

   // Подсчет ордеров по каждому торговому инструменту
   for(int n=OrdersTotal()-1; n>=0; n--)
   {
     if(!OrderSelect(n,SELECT_BY_POS))continue;
     for(int k=0; k<6; k++) if(OrderSymbol()==name[k]) cnt[k]++;
   }

   // Открытие ордеров по каждому торговому инструменту
   for(int k=0; k<6; k++) if(!cnt[k]) int ticket = OrderSend(name[k],OP_BUY, Lot, MarketInfo(name[k],MODE_ASK), Slip, 0, 0, "", Magic);
}
Razón de la queja: