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

 
(NormalizeDouble(AccountFreeMargin()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE),2)-Lots*(CountTrades()+1));

Hice una fórmula para calcular el lote, ¿puede decirme dónde puede estar el error? La orden no se abre por alguna incorrección.

La fórmula sigue siendo válida para un depósito de 100$ y superior, con un apalancamiento de 1-100 y superior. Y si el depósito sin apalancamiento 1 000$ resulta que la fórmula no funciona porque tenemos FreeMargin/Contract = 0,01 y no podemos deducir de este valor porque no cumpliremos las condiciones de trading.


Por otro lado, ¿por qué deberíamos deducirlo si el FR&Margin ya tiene en cuenta las posiciones abiertas? Entonces se vería así

lot=NormalizeDouble(AccountFreeMargin()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE),2)

Iré a probarlo.

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением...
 
geratdc: Hice una fórmula para calcular el lote, ¿puede decirme dónde puede haber un error? La orden no se abre por alguna incorrección.
      Лот=NormalizeDouble(0.65*AccountBalance()*AccountLeverage()/          // Использую такую формулу
                             MarketInfo(_Symbol, MODE_LOTSIZE),2);
 
STARIJ:

Saludos)) ¿Qué es el 0,65? ¿De dónde viene?

Estuve pensando en el apalancamiento, pero llegué a la conclusión de que el equilibrio, en teoría, ya está fijado con el apalancamiento. ¿O me equivoco?


¿Es 0,65 una reserva para el 35% de deslizamiento o qué? ¡Por cierto, es una buena idea, ya que si se fija el lote de tal manera, se perderá una posición y eso será el fin de la línea!

Me gusta! La fórmula funcionó después de que eliminé las pérdidas, es genial)) en resumen, el lote era 0,02, entonces cuando tres posiciones entraron en drawdown, el lote de emergencia se calculó como 0,1, es decir, 5 veces! Sin embargo, mi función es sensible al aumento de las pérdidas cuando se abre una orden de emergencia, por lo que no debería haber ningún problema.

Colega, ¡gracias por las valiosas reflexiones! ¡Iré a probarlo!


También he decidido comprobar las condiciones comerciales. ¿Qué le parece este código?


// Проверка Баланса
   if(cn==0 && TradeCheck==true && AccountBalance()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE)<SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN))
     {
      Print("Баланс счёта не обеспечивает торговые требования");
      SendMail("EA BJH","Баланс счёта не обеспечивает торговые требования");
      ExpertRemove();  // Снять советник с графика
     }
// Проверка Lots
   else if(cn==0 && TradeCheck==true && AccountBalance()/Lots<SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE))
     {
      Print("Lots не обеспечивает торговые требования");
      SendMail("EA BJH","Lots не обеспечивает торговые требования");
      ExpertRemove();  // Снять советник с графика
     }
Archivos adjuntos:
1.gif  10 kb
 
geratdc: Colega, ¡gracias por las valiosas reflexiones! ¡Iré a probarlo!

Si le das la vuelta -comprar en lugar de vender y vender en lugar de comprar- será mejor

¡¡Prueba, colega!!

El robot, en lugar de afirmar un hecho, tiene que emitir una recomendación: Jefe, añada dinero. Ya he desperdiciado esos...

 
STARIJ:

Si lo invertimos -comprar en lugar de vender y vender en lugar de comprar- será mejor

¡¡Prueba, colega!!

El robot, en lugar de afirmar un hecho, debería dar recomendaciones: Jefe, añada dinero. Ya los has desperdiciado...


Está bien, había ajustes especialmente dejados para desencadenar una orden de emergencia - tenía que ver qué lote recogería.

lot=NormalizeDouble(AccountFreeMargin()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE),2);

He dejado este por ahora. Lo he probado con saldo, creo que será más preciso en cuanto a margen libre, pero el resultado es el mismo. Veamos los resultados de las pruebas más adelante.

 
geratdc: No pasa nada.

Internet vuelve a funcionar. ¿Puedo escribir a un correo electrónico?

 
STARIJ:

¿Es así como debería ser? Niveles -0,75 y +0,75.

Es más fácil utilizar una variable. Primero 0. Luego +1 -1 +1 -1


Sí, así. ¿Cómo debo escribirlo en el Asesor Experto de forma que cuando se lance, si estamos en un hueco entre niveles, tome el valor del último desde el que hemos rebotado?

 
AlGuru: Pero, ¿cómo lo escribo en el EA para que cuando se inicie, si estamos en el hueco entre niveles, tome el valor del último desde el que rebotamos?

¿Qué quiere decir con "combatido"? ¿Nos ha atacado? ¿Cuándo se ha luchado? ¿Antes del lanzamiento? ¿Cómo podríamos contraatacar si acabáramos de lanzarnos? Lea antes de enviarla: ¿tiene todo sentido?

 
STARIJ:

¿Qué quiere decir con eso de defenderse? ¿Nos ha atacado? ¿Hemos sido derrotados antes del lanzamiento? ¿Cómo podríamos contraatacar si sólo nos lanzamos? Léalo antes de enviarlo: ¿tiene sentido?


Vale, no rebotó, pero produjo un rebote desde la línea. Siempre que el EA se coloque en otra máquina/terminal o en caso de apagado del ordenador, reiniciando el terminal, éste (el EA) comenzará a trabajar inmediatamente calculando a qué nivel estuvo el precio por última vez y estableciendo el valor de la variable correcta, en lugar de esperar a que el precio alcance el nivel deseado. Espero haberlo descrito claramente.

 
AlGuru Vale, no rebotó, pero produjo un rebote desde la línea. Siempre que el EA se coloque en otra máquina/terminal o en caso de apagado del ordenador, reiniciando el terminal, éste (el EA) comenzará a trabajar inmediatamente calculando a qué nivel estuvo el precio por última vez y estableciendo el valor de la variable correcta, en lugar de esperar a que el precio alcance el nivel deseado. Espero haberlo descrito claramente.

¿Qué tiene que ver con otra máquina o terminal? O apagar - reiniciar. ¿Se refiere a encender el ordenador o a reiniciar el Asesor Experto? ¿Por qué tiene que ser un rebote, pero si sale de la línea de nivel y se cruza de nuevo? Y si espera, sólo está saltando una oportunidad al encender. Puedes descartar eso al principio, y volver a ello cuando hayas terminado. Y luego de dónde salen las líneas, cuándo aparecen, quién las pone o cómo las calcula el EA. Si se colocan en otro ordenador o antes de que se apague el ordenador, el precio puede ir muy lejos. Si los niveles son calculados por el propio Asesor Experto, eso es otra cosa. Mira ahora: el precio ha rebotado desde el nivel superior y ha vagado entre los niveles durante una hora. Y luego hemos encendido el ordenador y activado el Asesor Experto. Obviamente, tenemos que atribuir el tiempo de acción a este rebote. Ha pasado una hora y el rebote se ha olvidado. Como ves, ¡hay muchas preguntas! Y tú lo tienes claro. Lo tienes claro, conoces la esencia del asunto. Pero desde fuera es oscuridad. El arte de la programación es la capacidad de hacer muchas preguntas y encontrar respuestas. Echa un vistazo a la escritura - tal vez hay un punto racional aquí

//+-------------------------------------------------------+
//| Проверка                                     PROBA.mq4|
//+-------------------------------------------------------+
#property strict

void OnStart()
{
  bool ДостигнутПервыйУровень=false,
       ДостигнутВторойУровень=false;
  int Переменная1=0, Переменная2=0;
  double Уровень;
  int x;

  Alert("----- Снизу вверх --------");
  for(x=13; x<27; x++)
  {
    Уровень=round(sin(x)*10)/10;

    if(Уровень>0.75)
    {
      Переменная1=1;
      Переменная2=0;
    }

    if(Уровень<-0.75)
    {
      Переменная1=0;
      Переменная2=1;
    }

    Alert("  ", x, "       ", Уровень, "        ", Переменная1, "        ", Переменная2);
  }
  Alert("Номер  Уров  Пер1  Пер2");
}
Razón de la queja: