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

 
Valerius:


Intenta refrescar las citas. Servicio - Archivo de cotizaciones - seleccione su par de divisas - descargue.

Si eso no ayuda, vuelve a instalar el metatrader.


He intentado reinstalar varias veces e incluso abrir una nueva cuenta.... No funcionó. ¿Con qué podría estar relacionado?

Gracias.

 
sidovi:


He intentado reinstalar varias veces e incluso abrir una nueva cuenta.... No funcionó. ¿Con qué podría estar relacionado?

Gracias.


¿Has borrado todos los archivos de la carpeta de instalación de MetaTrader antes de la instalación?

¿Y has probado con el archivo de citas?

 
a196012a:

Todas las órdenes mayores sólo se abrirán con un volumen de 0,3 lotes. Todas las órdenes de menor volumen que se abren en respuesta a un cierre en el SL en el volumen de 0,3 lotes se abrirán en el volumen de 0,1 lotes. Sólo 0,1 y 0,3. No hay más volúmenes.

Al cerrar una orden de 0,3 lotes a través del SL, recuerde la hora en que se abrió la orden en respuesta al cierre de la que se abrió (es decir, la orden de 0,1 lotes).

Gracias por su ayuda.

Podrían decirme por favor dónde configurar la opción de enviar un mensaje a mi correo electrónico cuando haya una respuesta a mi post.

Muchas gracias de nuevo.


¿Y realmente qué necesitas, un algoritmo o la propia función escrita?
 
a196012a:

Gracias por sus comentarios.

Necesito el algoritmo o la función.

Lo principal es que el código recuerde el valor de la hora después de cerrar una orden de 0.3 SL

No sé cómo codificar exactamente esta acción.

Si una orden con un volumen de 0,3 se cierra en el SL

{
A2= valor de la hora en que se abre la orden de un volumen menor en respuesta al cierre de la que se abrió
}

===================================================================================================

Si varias órdenes con un volumen de 0,1 cerraron a SL en SINGLE TICK

{

abrir una orden independiente de 0,3 de volumen al precio de cierre de TODA orden cerrada

}

===================================================================================================

Si varias órdenes con un volumen de 0,3 se cierran en un SL en UN TIEMPO

{

recordar el valor de la hora de apertura de CADA orden pertinente por volumen 0,1

}

Escribí un código que funciona para abrir y cerrar órdenes (ver el primer post)

No estoy seguro de qué código incluir en él para ahorrar 0,1 de tiempo de apertura de la orden.

No sé cómo codificar la apertura de órdenes y recordar el valor de la hora de apertura en caso de que se cierren varias órdenes en un mismo tick.

Si en relación con la realización de mi idea de cambiar el código que he escrito - No me importa si lo cambia.

EL OBJETIVO FINAL DE MI PROGRAMA ES MEMORIZAR EL VALOR DE LA HORA DE APERTURA. Todas las demás operaciones (incluidas las órdenes de apertura) están subordinadas a este objetivo final y tienen carácter auxiliar.

Si supiera cómo prescindir de ellos, no los habría incluido en el código.

Gracias de nuevo.


Este es un ejemplo de programa. Por favor, échale un vistazo. Hay algunos comentarios ahí.

extern int MagicNumber=123;

datetime time;
//=================================================================
void start()
{
int er,se;

if(prov_open_orders()) //Проверяем, есть ли открытые ордера
 {
  se=sear();//Ищем последний ордер, который закрылся по стопу. Если последний ордер закрылся по профиту
            //то просто возвращается нулевое значение
            //Если Последний ордер закрылся по по стопу, то ищем ордер с лотом 0.1 и возвращаем
           //его время открытия. В переменной time будет время открытия ордера с лотом 0.1
  if(se==1)
   {
    if(OrderType()==OP_BUY && OrderProfit()<0)
     {//Если закрылся по стопу, то открываем противоположный ордер с увеличенным лотом
      er=OrderSend(Symbol(),OP_SELL,0.3,Bid ,3,Bid+400*Point,Bid-200*Point,"jfh",MagicNumber);
      time=SearTim(se);//Теперь находим время ордера с лотом 0.1
     }
   }
  if(se==2)
   {
    if(OrderType()==OP_SELL && OrderProfit()<0)
     {//Если закрылся по стопу, то открываем противоположный ордер с увеличенным лотом
      er=OrderSend(Symbol(),OP_BUY,0.3,Ask ,3,Ask-400*Point,Ask+200*Point,"jfh",MagicNumber);
      time=SearTim(se);//Теперь находим время ордера с лотом 0.1
     }
   }
 }

return;
}

//========================
bool prov_open_orders()
{
for(int is=OrdersTotal()-1; is >= 0; is--)
   {
    if(OrderSelect(is, SELECT_BY_POS, MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
         {
          if(OrderType()==OP_BUY || OrderType()==OP_SELL)
           {
            return(false); // есть открытые ордера (любые)
           }
         }
      }
   }
return(true);
}

//=================================================================
datetime SearTim(int s)
{
for(int is=OrdersHistoryTotal(); is>=0; is--)
   {
    if(OrderSelect(is, SELECT_BY_POS, MODE_HISTORY))
      {
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType()==OP_SELL && OrderProfit()<0 && OrderLots()==0.1)
           {//Если закрылся по стопу, то открываем противоположный ордер с увеличенным лотом
            return(OrderOpenTime());
           }
          if(OrderType()==OP_BUY && OrderProfit()<0 && OrderLots()==0.1)
           {//Если закрылся по стопу, то открываем противоположный ордер с увеличенным лотом
            return(OrderOpenTime());
           }
         }
      }
   }
return(NULL);
}

//=================================================================
int sear()
{
for(int is=OrdersHistoryTotal(); is>=0; is--)
   {
    if(OrderSelect(is, SELECT_BY_POS, MODE_HISTORY))
      {
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderProfit()>0)
           {//Если  закрылся по профиту то просто ухоим из цикла.
              return(0);
           }
          if(OrderType()==OP_SELL && OrderProfit()<0)
           {//Если закрылся по стопу, то открываем противоположный ордер с увеличенным лотом
            return(2);
           }
          if(OrderType()==OP_BUY && OrderProfit()<0)
           {//Если закрылся по стопу, то открываем противоположный ордер с увеличенным лотом
            return(1);
           }
         }
      }
   }
return(0);
}
 
Valerius:


¿Borraste todos los archivos de la carpeta donde está instalado Metatrader antes de la instalación?

¿Y has probado con el archivo de citas?


Sí, 0 resultado :((
 
sidovi:

Sí, 0 resultado :((


Entonces tienes que ponerte en contacto con tu DC para pedir ayuda...

Es la primera vez que lo veo.

 
Valerius:


Entonces, sólo contacta con tu DC para que te ayude...

Es la primera vez que veo esto.


¿Crees que hay algún servicio en windows 10 que afecte a esto?
 
sidovi:

¿Crees que hay algún servicio en windows 10 que afecte a esto?

No. No lo hay.
 
Victor Nikolaev:

No. No hay ninguno.

Gracias
 
a196012a:

Muchas gracias por su ayuda

Sólo estoy aprendiendo los fundamentos de la programación a partir del tutorial de Kovalev y las funciones descritas en él.

He encontrado algunas funciones en su código, que no he visto en mis libros o en Code Base

Estas son las funciones que no conozco

sear();

SearTim(se);

prov_open_orders()

Te agradecería mucho que me dijeras dónde puedo leer sobre ellos.

Justo en ese mismo código.
Razón de la queja: