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

 
LSM:
He editado mi pregunta y he añadido el código. Hay un bucle en marcha. No está claro lo que obtendré cuando pase en el bucle.
Allí todo está claro,
por ejemplo, en el ciclo, el indicador ha contado 15. Vela de 5 minutos
y tomó el valor del 15+1. La 16ª vela de 15 minutos.


 
LSM:

Voy a responder a mi propia pregunta por si alguien lo necesita).

Así es.
 

Buenas tardes.

Por favor, aconséjenme, tengo una idea, pero desde qué lado enfocar, aún "no entiendo".

Tengo un indicador, he abierto el acceso a él para una determinada lista de números de cuenta de un archivo CSV en el servidor.

¿Es técnicamente posible escribir un mensaje para una cuenta específica de la lista y mostrarlo en el gráfico para este usuario específico?

Por ejemplo, especificar el número de cuenta en CSV y escribir el texto como "Hola..." y el usuario lo verá en el gráfico? Si es posible, ¿en qué dirección "cavar"? Gracias...

 

Buenas tardes, ¿podrían ayudarme a entender algo de la sintaxis de mql4? Tengo la idea de escribir un EA de seguimiento de tendencia que por ejemplo entrara en una posición larga con un stop de 150 pips de la orden abierta y take profit de 50 y luego si el precio llegara a tp se abriría una nueva compra con stop 150 y take profit 50 y si fallara en el stop loss se realizaría una venta con la misma relación riesgo/ganancia que para las posiciones largas. Intenté escribir un código con dicha lógica pero falló porque el Asesor Experto no hace ninguna operación durante las pruebas.

double b, difference;
int ticket;

int OnInit()
{
   b=Bid;
   return(b);
}

void OnTick()
{
   difference = Bid-b;
   if(OrdersTotal()==0)
   {
      if(difference==150*Point)
      {
         ticket=OrderSend(Symbol(),OP_BUY,1,Ask,0,Ask-150*Point,Ask+50*Point,0);
         if(difference==0){b=Bid+150*Point;}
            if(ticket<0)
            {
               Print("lose");
            }
      }
      if(difference==200*Point){b=Bid-150*Point;}

      if(difference==-150*Point)
      {
         ticket=OrderSend(Symbol(),OP_SELL,1,Bid,0,Bid+150*Point,Ask-50*Point,0);
         if(difference==0){b=Bid-150*Point;}
            if(ticket<0)
            {
               Print("lose");
            }
      }
      if(difference==-200*Point){b=Bid+150*Point;}
   }
}
Как самому создать советника или индикатор - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Как самому создать советника или индикатор - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Для разработки торговых систем в платформу встроен собственный язык программирования MetaQuotes Language 5 ( MQL5 ), среда разработки MetaEditor и...
 
MosheDayan:

Buenas tardes.

Por favor, aconséjenme, tengo una idea, pero desde qué lado enfocar, aún "no entiendo".

Tengo un indicador, abrí el acceso a él para una determinada lista de números de cuenta de un archivo CSV en el servidor.

¿Es técnicamente posible escribir un mensaje para una cuenta específica de la lista y mostrarlo en el gráfico para este usuario específico?

Por ejemplo, especifico el número de cuenta en CSV y escribo el texto como "Hola..." y el usuario lo ve en el gráfico? Si es posible, ¿en qué dirección "cavar"? Gracias...

Enviar al servidor una post-solicitud con el número de cuenta

IntegerToString(AccountInfoInteger(ACCOUNT_LOGIN)

En el servidor se comprueba el número entrante con todas las líneas del archivo CSV, y si hay una coincidencia, entonces desde esta línea del archivo se envía una respuesta al terminal. Sólo queda leer la respuesta del servidor en el terminal y mostrarla en el gráfico.

En general, este tipo de cosas son más fáciles de implementar en MySQL que en File.

 
Maxim235v34:
Y sí, si no es difícil, sugiere una forma de reducir el espacio entre líneas en este foro.

Escriba primero en un archivo de texto (bloc de notas) y luego copie a través del portapapeles. Lo tendrás así

double b, difference;
int ticket;

int OnInit()
{
   b=Bid;
   return(b);
}

void OnTick()
{
   difference = Bid-b;
   if(OrdersTotal()==0)
   {
      if(difference==150*Point)
      {
         ticket=OrderSend(Symbol(),OP_BUY,1,Ask,0,Ask-150*Point,Ask+50*Point,0);
         if(difference==0){b=Bid+150*Point;}
            if(ticket<0)
            {
               Print("lose");
            }
      }
      if(difference==200*Point){b=Bid-150*Point;}

      if(difference==-150*Point)
      {
         ticket=OrderSend(Symbol(),OP_SELL,1,Bid,0,Bid+150*Point,Ask-50*Point,0);
         if(difference==0){b=Bid-150*Point;}
            if(ticket<0)
            {
               Print("lose");
            }
      }
      if(difference==-200*Point){b=Bid+150*Point;}
   }
}
lea sobre la función OnInit() - ponga el cursor sobre ella y pulse F1. La palabra int está delante - por lo que la función devuelve un valor entero. Usted está intentando devolver un valor de tipo double. El resultado de la función OnInit() es analizado por el subsistema de tiempo de ejecución del terminal y apenas necesita este valor.
 
LRA:

Escriba primero en un archivo de texto (bloc de notas) y luego copie a través del portapapeles. Dice así

Gracias. Es bueno saberlo.

Lea sobre la función OnInit() - ponga el cursor sobre ella y pulse F1. La palabra int está delante - por lo que esta función devuelve un valor entero. Usted está intentando devolver un valor del tipo double. El resultado de OnInit() es analizado por el subsistema de tiempo de ejecución del terminal y apenas necesita este valor.
Entonces, ¿qué manejador de eventos de qué tipo se debe utilizar para implementar esto - a
¿fijar el valor del precio al comienzo de la operación del programa, en relación con el cual se realizarán los futuros cálculos?
He intentado eliminar todo lo que había en int OnInit y poner el siguiente código en el void OnTick al principio añadiendo la variable varStart
if(varStart==0)
{
b=Oferta;
varStart=1;
}
El resultado no cambia.
 

Hay una función con un puntero:


  TickReturn *returntick(int period, int timeposition)
   {
      TickReturn *returntick = new TickReturn();
      MqlRates rates[];
      MqlTick last_tick;
      
      if(SymbolInfoTick(symbol,last_tick)){}
      else Print("SymbolInfoTick() failed, error = ",GetLastError());
      
      //int timeposition=0;
      ArraySetAsSeries(rates,true);
      ArrayResize(rates,1);
      int copied=CopyRates(symbol,period,timeposition,1,rates);
      
      returntick.curtime = rates[0].time;
      returntick.open = rates[0].open;
      returntick.close = rates[0].close;
      returntick.high = rates[0].high;
      returntick.low = rates[0].low;
      returntick.priceask = last_tick.ask;
      returntick.pricebid = last_tick.bid;
      
      return(returntick);

   } 

Lo sigo llamando en otra función:


string timeis = returntick(period, 1).curtime;

¿Cómo puedo borrar la memoria que hay detrás?

En delete(TickReturn); obtengo un error operand excepted.

 
hamsteruser:

Hay una función con un puntero:


Todavía lo llamo en otra función:


¿Cómo puedo borrar la memoria que hay detrás?

En delete(TickReturn); obtengo un error operand excepted.


Si leo bien tu código, TickReturn es una clase. Has creado un puntero a una variable del tipo de esta clase. Y borras... ¿la propia clase? Tienes que destruir el puntero y asegurarte de que existe y es dinámico.

 
Алексей Барбашин:

Si leo bien tu código, TickReturn es una clase. Has creado un puntero a una variable del tipo de esa clase, pero estás destruyendo... ...la propia clase? Debes destruir el puntero y asegurarte de que existe y es dinámico.


El *returntick tampoco es destructible. Estoy confundido por la salida de la terminal de comercio. Me dice que no está limpiando la memoria.

Razón de la queja: