[¡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 30

 
AndrewX:

Por favor, indique cómo establecer la comprobación correcta en la condición de apertura de la posición - si hay una posición abierta para este instrumento o no. ¿Y si hay una posición para el símbolo (cualquier venta o compra), entonces la apertura no tiene lugar, de lo contrario se activa la señal para abrir la posición?

Aquí está el código (creo que es responsable de la apertura de posiciones):

Parece ser correcto en la lógica, pero no funciona todavía abre varias poses en una herramienta.

P.D. No soy programador. Si es posible explicar con más detalle al dummie.


Esto no es difícil. Lo mejor es organizar 2 subprogramas que cuenten los pedidos.

// =================================================================================================
// ************************* Счётчики ордеров ******************************************************
// =================================================================================================


//=========== SchBuy()  ===============================
//  Функция возвращает количество Buy-ордеров
//   SchBuy      - счётчик Buy ордеров
//-----------------------------------------------------------
int SchBuy(int MAGIC){
  string SMB=Symbol();
  int SchBuy=0;
  int i;
  for (i=OrdersTotal()-1;i>=0;i--) {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {Print("Ошибка № ",GetLastError()," при выборе ордера № ",i);}
    else {
      if(OrderSymbol()!= SMB || OrderMagicNumber()!= MAGIC){ continue;}
      if(OrderType()==OP_BUY){ 
        SchBuy++;
      }  
    }
  }
  return(SchBuy);
}                  
//==================================================================================================


//=========== SchSell()  ===============================
//  Функция возвращает количество Sell-ордеров
//  SchSell  - счётчик Sell ордеров
//-----------------------------------------------------------
int SchSell(int MAGIC){
  string SMB=Symbol();
  int SchSell=0;
  int i;
  for (i=OrdersTotal()-1;i>=0;i--){
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {Print("Ошибка № ",GetLastError()," при выборе ордера № ",i);}
    else {
      if(OrderSymbol()!=SMB || OrderMagicNumber()!=MAGIC){ continue;} 
      if(OrderType()==OP_SELL){
        SchSell++;
      }
    }
  }
 return(SchSell);     
}                  
//==================================================================================================

Además, en el propio código, prich:

if(SchBuy(MAGIC)+SchSell(MAGIC)<=0){
// ордеров нет - устанавливаем ордер при наличии торгового сигнала
}

La constante MAGIC se declara mejor en las variables de usuario. Así:

extern int      MAGIC=467223; // У ордеров открытых вручную MAGIC=0
 

Probado


if (NumberOfPositions(Symbol_1,-1,Magic)<1

все равно не пашет
 
drknn:


No es complicado. Lo mejor es organizar 2 subprogramas que cuenten los pedidos.

A continuación, en el propio código, prich:

Es mejor declarar la constante MAGIC en variables de usuario. Así:

Gracias, le echaré un vistazo, pero probablemente sea un poco complicado para mí.
 
AndrewX:
Gracias, le echaré un vistazo, pero probablemente sea un poco complicado para mí.

He adjuntado un archivo EA a este post. Échale un vistazo.
Archivos adjuntos:
 
¡Buenos días! ¿Quizás mi pregunta sobre la no optimización es complicada o no tiene interés?
 
volshebnik:
¡Buenos días! ¿Quizás mi pregunta sobre la no optimización es complicada o no tiene interés?

Hay muchas razones posibles para ello. Desde lo trivial -falta de historia- hasta la variante -no hay opciones rentables-. Aunque podría ser más simple - un error en el Asesor Experto
 

Por favor, dígame si el robot crea órdenes pendientes.

Las órdenes pendientes se envían al servidor.

¿Se muestran en el terminal las órdenes pendientes colocadas en la cola?

¿Es lo mismo que si establezco las órdenes pendientes manualmente? ¿Las órdenes abiertas están en la parte superior, por debajo de las órdenes pendientes colocadas en la cola?

 
Jaguar1974:

Por favor, dígame si el robot crea órdenes pendientes.

Las órdenes pendientes se envían al servidor.

¿Se muestran en el terminal las órdenes pendientes colocadas en la cola?

¿Lo mismo que si establezco las órdenes pendientes manualmente?


¿Qué quiere decir con "en cola"? El Asesor Experto envía una orden al servidor para establecer una orden pendiente. Si los parámetros de esta orden son correctos, el servidor establece la orden pendiente y ésta se muestra inmediatamente en el terminal del cliente. Si el Asesor Experto envía una orden para colocar órdenes pendientes en un determinado paso (se hace a través de un bucle), entonces cada nueva orden es procesada por el servidor por separado. Estas órdenes se ponen en cola - el Asesor Experto ha dado una orden - el servidor ha respondido. El Asesor Experto ha vuelto a dar una orden y está esperando la respuesta del servidor.

¿Qué significan los pedidos en cola? ¿Qué quieres decir con eso?

 
Vinin:

Hay muchas razones posibles para ello. Desde la trivial -falta de historia- hasta la variante -sin opciones rentables-. Aunque puede ser más simple - un error en el Asesor de Expertos.
Lo he comprobado y tiene el historial de Asesores Expertos desde 1999. He comprobado todas las variantes (no rentables también). Si establezco un solo parámetro МА, por ejemplo de 100 a 110, la optimización "muere" - no hay resultados, no hay gráfico.... Por no hablar de la inclusión de otros parámetros.
 
volshebnik:
Lo he comprobado: hay un historial de actas desde 1999. He marcado la casilla para mostrar todas las variantes (también las no rentables). Pongo incluso sólo un parámetro MA en la optimización, por ejemplo de 100 a 110 y todo - la optimización "muere" - sin resultados, sin chart.... Por no hablar de la inclusión de otros parámetros.

Tengo que mirar el Asesor Experto. No hay nada que decir en este sentido
Razón de la queja: