[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 64

 
HoBu4ek >> :
¿Pueden aconsejar cómo hacer que un EA abra una orden para varios símbolos a la vez? >> ¡Gracias de antemano!

Esto no es posible porque el EA puede abrir una orden para un solo símbolo, y luego hay que esperar a que la operación (y no siempre tiene éxito y no siempre es rápida) libere el flujo de operaciones para otras órdenes.

 
Drugoy писал(а) >>

Señores, por favor, aconsejen a un recién llegado. He descargado el tutorial MQl4BookRussian.chm (autor Sergey Kovalev), el problema es que la impresión desde este formato es muy desordenada. Probyby ha copiado este texto en formato doc, las imágenes desaparecen. ¿Sabe si el libro de texto está disponible en un formato adecuado para imprimir (para leer en un monitor, los ojos se cansan)?

Pruebe la versión en línea del libro de texto directamente desde el sitio web - https://book.mql4.com/ru/. Y puedes transferirlo a doc sin problemas.

 
Reshetov >> :

Esto no es posible porque un EA sólo puede abrir una orden en un símbolo, después de lo cual hay que esperar a que la operación comercial se realice (y no siempre tiene éxito y no siempre es rápida) y el flujo comercial quedará libre para otras órdenes.

Con el flujo de operaciones lo entiendo todo, pero ¿cómo hacer sucesivamente en 3 instrumentos con un intervalo mínimo de apertura de las operaciones (según el algoritmo del asesor la apertura debe comenzar en un determinado segundo en tres divisas a la vez)? Si no le importa, ¿podría publicar un fragmento de código como ejemplo? Se lo agradecería mucho.

 
Dimoncheg >> :

int start()
{
if (OrdersTotal() == 0
&& TimeDayOfWeek(TimeCurrent()) == 5
&& TimeHour(TimeCurrent()) == 12
&& TimeMinute(TimeCurrent()) == 30
&& TimeSeconds(TimeCurrent()) >= 00)
{
Alert("Тра ляля");
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"sell",999999,0,Red);
}


¿Alguien puede decirme por qué no se abre ninguna orden aquí? ¿Qué estoy haciendo mal?

Si este es todo el código, ni siquiera compila. Si se sustituye el lote por un número, el EA funciona bien.


 
HoBu4ek >> :

Entiendo todo lo relacionado con el flujo de operaciones, pero ¿cómo hacer que las operaciones se abran consecutivamente en 3 símbolos con intervalos mínimos (según el algoritmo del EA, la apertura debe comenzar en un determinado segundo en tres divisas a la vez)? Si no le importa, ¿podría publicar un fragmento de código como ejemplo? Estaré muy agradecido.

¿Supongo que sólo se necesitan 3 órdenes para abrir diferentes instrumentos? Por qué no hacer una variable de bandera, por ejemplo

Crear en variables globales

int flag=0;
string Symb;

///////////////

más

int start()
{
if (условие открытия)
{flag=1;}

if (flag==1)
{
Symb="EURUSD";
OrderSend(Symb,...)///Открываем, переносим флаг во 2 состояние для открытия след ордера и
flag=2; ///выходим тк больше мы ни чего не можем сделать
return(0);
}

if (flag==2)
{
Symb="AUDUSD";
OrderSend(Symb,...)
flag=3;
return(0);
}

if (flag==3)
{
Symb="USDJPY";
OrderSend(Symb,...)
flag=0;//Возвращаем флаг в начальное состояние..
return(0);
}
return(0);}


También estaría bien añadir una comprobación abierta y sólo mover la bandera después de que la comprobación tenga éxito.

 
Inzer >> :

Si este es todo el código, ni siquiera compila. Si sustituye el Lote por un número, el Asesor Experto funciona bien.


Compruebe el tipo de datos del lote. Debería ser doble.

 
TheXpert >> :

Así que, a simple vista. No entendí las condiciones, pero no hay cruce en la segunda variante.

Una cosa más -- la función OrderSend devuelve un ticket int, por lo que es correcto comprobar el éxito así:

En su caso, debe comprobar si es incorrecto:

______

Sí, no sé cómo otros, pero para mí la palabra "expertos" suena a burla. Tal vez por eso no te han contestado durante tanto tiempo. ;)

¡¡¡¡¡¡¡¡¡¡¡¡¡¡Hola!!!!!!!!!!!!!!

Sí, digas lo que digas........ no lo llames así..... Aunque expertos es la abreviatura de especialistas (personas con conocimientos, profesores, por así decirlo).

No me importa...... Me refería sólo a lo positivo y amable ........

No importa........

Al principio de este hilo pregunté por el MA. Las respuestas fueron muy inteligentes. Ahora vuelvo a hacerlo.

Una idea surgió.....

int start()
  {
//----
    double MA_0=iMA(NULL, 0, pMA, pSh, mode, price,0);
    double MA_1=iMA(NULL, 0, pMA, pSh, mode, price,1);
        
    if( MA_1< Open[1] && MA_0>Open[0])
     if( CheckOrders(OP_SELL))//продажа
      {
       if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, NULL, MagicNumber))
         Print("Не открыт ордер Buy. Ошибка №", GetLastError()); 
       }
       
    if( MA_1>Open[1] && MA_0<Open[0])
     if( CheckOrders(OP_BUY))//покупка
      {
       if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, NULL, MagicNumber))
         Print("Не открыт ордер Sell. Ошибка №", GetLastError()); 
       }
//----
   return(0);
  }

He decidido modificar un poco las condiciones de negociación. Pero no funcionó(((((((( Quería poner open_1 y open_0 (precio de apertura en la primera barra y

Precio abierto en una barra cero) Cuando lo comprobé daba errores, tuve que volver a la versión original (que he dado más arriba).

Según me explicaron open[1] es una llamada de celda del array con nombre open e índice [1]. Todo esto es bueno...... pero sólo necesita un precio de apertura en 1(2,0) barra

Consejos para el maniquí.....)))))))).....

 
¿Cómo puedo saber si una orden pendiente se ha activado (por ejemplo, una orden de compra)? ¿Es mejor buscarla por el identificador en el historial o hay una opción más corta?
 
fima_ >> :
¿Cómo se puede saber que la orden pendiente se ha activado (por ejemplo, en la compra)? ¿Es mejor buscarla por su id en el historial o hay una opción más corta?

Puedes probar esto

OrderSelect(1, SELECT_BY_POS)

if(OrderOpenTime()!=0)

{

///необходимая операция

}

Pero esto sólo es una opción si sólo tiene un pedido.

 
¿Qué función se utiliza para determinar el valor pip de un instrumento financiero? Por ejemplo, para el EURUSD, el valor de 0,0001 es de 10 dólares (cuando se opera con 1 lote)