[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 56

 
Sergstuddek:


(La clase es buena, pero todavía hay un problema))

Lo entiendo teóricamente, pero en la práctica no funciona, puedes mirar mi código y decirme qué es lo que falla

Entiendo que se trata de un EA muy sencillo, pero estoy empezando mi viaje)))) y ya tengo un problema

// La esencia del Asesor Experto es que primero abre la primera orden de compra
// entonces pone topes en dos direcciones
// en un lado como continuación de una orden abierta
// en el otro lado dos veces más en caso de inversión del gráfico
// las paradas se colocan en relación con la última orden abierta por el asesor
// con cada apertura de una nueva orden pendiente, se borran todas las anteriores
// y las nuevas paradas pendientes ya están abiertas en relación con una nueva orden abierta.


Por "Stops" se entienden dos cosas: órdenes de stop (Take Profit y Stop Loss) y órdenes de stop (Bystop y Sell Stop). Lo que se entiende aquí por "paradas" probablemente sólo lo entiendas tú. Por favor, sea preciso con los términos. Hay que dar instrucciones precisas al ordenador. La descripción también debe ser lo más precisa posible
 
drknn:
Por "Stops" se entienden dos cosas: órdenes de stop (Take Profit y Stop Loss) y órdenes de stop (Bystop y Sell Stop). Lo que se entiende aquí por "paradas" probablemente sólo lo entiendas tú. Por favor, sea preciso con los términos. Hay que dar instrucciones precisas al ordenador. La descripción también debe ser lo más precisa posible

Siento la inexactitud, pero las órdenes de stop son órdenes de stop (Buy Stop y Sell Stop)
 
Sergstuddek:

Pido disculpas por la inexactitud: me refiero a las órdenes stop (Buy Stop y Sell Stop).
void DeleteStopOrders()
{
  int res;
  for(int i=0;i<OrdersTotal();i++)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
    if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
    {
      if(OrderType()==OP_SELLSTOP)
        res=OrderDelete(OrderTicket());
      if(OrderType()==OP_BUYSTOP)
        res=OrderDelete(OrderTicket());
     }
  }
}


Esta función está escrita incorrectamente. Los pedidos deben buscarse del último al primero en la lista de pedidos. Su método hará que se salte 1 orden porque después de que se borre la lista de órdenes se moverá por sus posiciones. El bucle debe organizarse de la siguiente manera:

for (int i=OrdersTotal()-1;i>=0;i--){

Además, si la orden no está seleccionada, no hay que hacer una brecha - no hay que salir del ciclo - hay que averiguar la razón por la que la orden no está seleccionada. Esto es lo siguiente:

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {
  Print("При выборе ордера № ",i," произошла ошибка № ",GetLastError());

res=OrderDelete(OrderTicket()); - esto tampoco es lo suficientemente correcto. La función OrderDelete() es de tipo booleano. Y además de dar la orden de eliminar la orden, también tenemos que manejar la situación si la orden no puede ser eliminada. En otras palabras, es así:

res=OrderDelete(OrderTicket());
if(!res){
  Print("Ордер № ",OrderTicket()," удалить не получилось - ошибка № ",GetLastError());
}

Miraré el resto más tarde.

 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
  if (CalculateCurrentOrders1(Symbol())==0)
   OpenBuy();
  if (CalculateCurrentOrders2(Symbol())<=1)
  DeleteStopOrders();
  if (CalculateCurrentOrders2(Symbol())<=1)
   OpenStops();
//----
   return(0);
}

El código de la función de inicio no está escrito correctamente.

Con la primera función se suman las órdenes de compra y venta. Hay que contar las órdenes de compra por separado y las de venta por separado. Esta es la cuestión. Si hay una orden de compra en el mercado, entonces el stop de compra debe establecerse con un lote mayor. ¿Verdad? Y si hay una orden de venta en el mercado, entonces el buystop debe establecerse con un lote normal y el sell stop con uno mayor. ¿Cómo se detecta qué orden está abierta en el mercado si se suman las órdenes de compra y de venta en una función? Intenta rehacer el código a la luz de estos hechos.

 

¿Pueden decirme cómo descargar automáticamente el historial del corredor? Es un poco incómodo presionar a casa durante una hora.

 
_dude_:

¿Pueden decirme cómo descargar automáticamente el historial del corredor? Es un poco incómodo presionar en casa durante una hora.

Vadim Junko se ha encargado de ello. Script para cargar el historial. Hay algunos más en la base (sección Scripts).
 
gince:

Pregunta sobre el indicador.

El indicador es un indicador cruzado. Atrae muchas flechas hacia un lado, y luego muchas hacia el otro. Cómo hacer que sólo los primeros sean sorteados. Lo he intentado de la forma descrita en el código, pero las flechas cambian cuando cambio de Frames.

Por favor, aconséjeme cómo hacerlo correctamente.


Tendría que mirar el indicador. Tal vez haya una solución
 
nemo811:
Por favor, ayúdenme a corregir mi Asesor Experto. Hay que hacer que funcione con órdenes (propias y abiertas por el usuario) del par de divisas en el gráfico del que está instalado. Nos referimos al momento de fijar las ganancias o pérdidas. En la versión actual, cuando se produce una condición (captura de un depósito %), intenta cerrar todas las posiciones (con MAGIC=0) para todos los pares de divisas y no lo necesito. Es necesario delimitar completamente todos los pares de divisas. Mi agradecimiento de antemano.

Lo mismo que tienes que hacer en los distintos tablones de anuncios: esto es spam, y puedes recibir un baneo.
 
Vinin:

Y escribir lo mismo en diferentes hilos - es spam y puede recibir un baneo

Me disculpo - como siempre quiero hacer todo a la vez))
 

Gracias por su atención y comprensión ))

Pude resolver el problema yo mismo:

Se ha insertado una línea complicada if(OrderSymbol()!=SMB || OrderMagicNumber()!=MAGIC) continue;

a un lugar igualmente complicado. Después de eso, todo funcionó como estaba previsto.

Gracias por el consejo con el mago. No soy programador, así que a veces y no se me ocurre algo por falta de conocimientos.