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

 

Todavía lo estoy perfeccionando:

si la condición es verdadera

orden abierta 1

si el precio se ha movido donde debería o no

orden abierta 2

LastLot= orden 2 (o número mayor)

LastPrice= order2 (o un número mayor)

Si el precio se ha movido o no donde debería...

LastLot= orden 3 (o número mayor)

LastPrice= orden 3 (o número mayor)

El problema es que la última orden (o no) siempre estará entre un StopLoss y un TakeOut, lo que significa que no se restablecerá cuando las otras se cierren porque la propia orden seguirá ahí. ¿Cómo lo vinculamos a los demás si no conocemos el número de pedidos?

El mecanismo de ligar el último primero o penúltimo a los demás ha demostrado ser ineficaz ya que su número cambia junto con los números.

El resultado debería ser algo así como "si alguna orden de la serie dada ha cerrado, cierra todas las demás".

Comprobación de la serie - la primera orden de la dirección actual (otra orden no se abrirá) - aquí debería utilizarse un identificador adicional o algún otro método de vinculación. La clave - la primera orden se abre según las condiciones, el resto de las órdenes son auxiliares.

¿Alguna idea?

 
trader781:

Todavía lo estoy perfeccionando:

si la condición es verdadera

orden abierta 1

si el precio se ha movido donde debería o no

orden abierta 2

LastLot= orden 2 (o número mayor)

LastPrice= order2 (o un número mayor)

Si el precio se ha movido o no donde debería...

LastLot= orden 3 (o número mayor)

LastPrice= orden 3 (o número mayor)

El problema es que la última orden (o no) siempre estará entre un StopLoss y un TakeOut, lo que significa que no se restablecerá cuando las otras se cierren porque la propia orden seguirá ahí. ¿Cómo lo vinculamos a los demás si no conocemos el número de pedidos?

El mecanismo de ligar el último primero o penúltimo a los demás ha demostrado ser ineficaz ya que su número cambia junto con los números.

El resultado debería ser algo así como "si alguna orden de la serie dada ha cerrado, cierra todas las demás".

Comprobación de la serie - la primera orden de la dirección actual (otra orden no se abrirá) - aquí debería utilizarse un identificador adicional o algún otro método de vinculación. La clave - la primera orden se abre según las condiciones, el resto de las órdenes son auxiliares.

¿Alguna idea?

No está claro. Intenta expresar tus pensamientos con mayor claridad.

Esto es lo siguiente:"Si el precio va por el camino correcto o no, debemos abrir la orden 2" - ¿cómo debemos entender quedebemos abrir la orden 2 en cualquier caso?

Y cada vez tendremos más "o si no".

Y si no queremos tener preguntas como"Cómo conectarlo con el resto de órdenes cuando se desconoce el importe del precio", deberíamos averiguar primero el importe.

 
Vitalie Postolache:

Es confuso, incomprensible. Intenta que tus pensamientos sean más claros.

Este"si el precio se movió en la dirección correcta o no - para abrir la orden 2" - ¿cómo debemos entender que en cualquier caso"para abrir la orden2"?

Y cada vez tendremos más "o...

Y si no queremos entrar en cuestiones como"cómo relacionarlo con las órdenes de descanso si no sabemos el importe", primero deberíamos averiguar el importe.

Bien, con números

EURUSD=1,10000

un comando para abrir una orden de compra según el TP (ya escrito)

si EURUSD=1.10200 damos una orden de compra (ya escrita)

si EURUSD=1.09800 a "comprar" (ya está escrito)

y así sucesivamente con un paso de 200

si se cierra alguna de las órdenes (se fijan stops y tomas de posesión, pero no en todas ellas)

Cerrar toda la red

buscando una forma de identificar la red
 
trader781:

Bien, con números

EURUSD=1,10000

comando para abrir una orden de compra según la orden actual (ya escrita)

si EURUSD=1.10200 para añadir a la orden de compra (ya escrita)

si EURUSD=1.09800 a "comprar" (ya está escrito)

y así sucesivamente con un paso de 200

si alguna de las órdenes se cierra (los stops y las tomas de posesión ya están fijados)

cerrar toda la red

buscando una forma de identificar la red
Puede añadir comentarios con el número de pedido. Y, si la serie de órdenes es de un tipo, podemos simplemente recalcularlas y fijar el importe.
 
Vitalie Postolache:
Se pueden añadir comentarios con el número de pedido. Y si toda la serie de pedidos de un tipo - entonces deberían simplemente volver a calcularlos y fijar la cantidad.

Estaba pensando en los comentarios, pero a juzgar por los comentarios el chef piensa que no son comestibles y los borra o los cambia por los suyos

Y en cuanto al recuento, ¿tengo que contar y registrar el número al añadir otro?

 
trader781:

y sobre el recuento, ¿tengo que contar y registrar la cantidad cuando añada otro?

Sí. Y si el número ha disminuido desde la última vez, cierra todas las que quedan.

También puede controlar las órdenes cerradas en el historial. Y cerrar la serie cuando aparezca un nuevo pedido que cumpla con las características especificadas.

También puede no establecer el TP/SL en la orden, sino calcular el TP/SL total en el Asesor Experto para toda la serie. Utilízalos para cerrar la serie. Las ventajas - la empresa de corretaje no ve los niveles de punto de ruptura, y el problema de encontrar la serie sigue siendo si un TP o un SL ha disparado en una orden.
 
Saludos ...Feliz Año Nuevo ...Le deseo todo lo mejor y la prosperidad ...En este código por favor cambiar el cálculo del lote se llevó a cabo en la cuenta de apalancamiento máximo posible
//+------------------------------------------------------------------+
double volume(string symbol,double risk,double sl)
  {
   double lot=0.0;
   double procent=0.0;
   double balans=0.0;
   double tc = SymbolInfoDouble(symbol,SYMBOL_TRADE_CONTRACT_SIZE);
   double tv = SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE);
   double ts=SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE);
   double point=SymbolInfoDouble(symbol,SYMBOL_POINT);

   if(Type_Balanse==Balance) balans=AccountInfoDouble(ACCOUNT_BALANCE);
   if(Type_Balanse==Equity) balans=AccountInfoDouble(ACCOUNT_EQUITY);
   if(Type_Balanse==FreeMargin) balans=AccountInfoDouble(ACCOUNT_FREEMARGIN);

   procent=(balans/100.0)*risk;

   switch((int)MarketInfo(symbol,MODE_PROFITCALCMODE))
     {
      case 0: if(sl!=0 && tv!=0) lot=procent/(sl*tv);break;
      case 1: if(sl!=0 && point!=0 && tc!=0) lot=procent/(sl*point*tc);break;
      case 2: if(sl!=0 && point!=0 && tv!=0 && ts!=0) lot=procent/(sl*point*(tv/ts));break;
     }
   return(NormalizeVolume(symbol,lot));
  }
 
Cómo prescribir en el Asesor Experto el cálculo automático del lote, en función del apalancamiento ...Digamos que el apalancamiento 1:50 depósito 3000.
 
Movlat Baghiyev:
OK, déjame hacerte una simple pregunta. ¿Cómo configuro el EA para que calcule automáticamente el lote dependiendo del apalancamiento. Digamos que el apalancamiento es de 1:50, el depósito es de 3000...

Pruébalo así:

void OnTick()
{
  Comment( cLot(100) );
}
//===============================================================================================
//------------------------------------ Расчет лота по риску ------------------------------------+
//===============================================================================================
double cLot(double Percent=0) {
double Free=AccountFreeMargin(),
        One_Lot=MarketInfo(_Symbol,MODE_MARGINREQUIRED),
        Min_Lot=MarketInfo(_Symbol,MODE_MINLOT),
        cStep=MarketInfo(_Symbol,MODE_LOTSTEP),
        Lots_New=0;
if(Percent > 100) {
    Percent = 100;
  }
  if(Percent == 0) {
    Lots_New = 0;
     return(0);
   } else {
    Lots_New = MathFloor(Free*Percent/100/One_Lot/cStep)*cStep;
   }
  if(Lots_New < Min_Lot) {
    Lots_New = Min_Lot;
  }
  if(Lots_New*One_Lot > Free) {
    return(0);
  }
   return(NormalizeDouble(Lots_New,LotDigit()));
}
//===============================================================================================
//-------------------- Кол-во знаков после точки в значении торгового лота ---------------------+
//===============================================================================================
int LotDigit(){
  double lotStep = MarketInfo(_Symbol,MODE_LOTSTEP);
return((int)MathCeil(MathAbs(MathLog(lotStep)/MathLog(10))));
}
 
Lo siento, necesito elegir el % de riesgo. Sólo necesito abrir el mayor lote posible de una vez en incrementos de hasta 0,01
Razón de la queja: