Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 900

 
lufer:
Esto no resuelve el problema, ahora parece que algo está mal enOnTick() - cuando cargo el EA en la ventana de la terminal no pasa nada, y cuando trato de borrarlo, la terminal se detiene por un tiempo muy largo y luego lo borra después de algún tiempo. He intentado asignar manualmente valores a algunos elementos, todo está bien. Algo en el bucle de inicialización del array parece estar mal.

¿Qué quiere decir que "no resuelve"? Estás metiendo datos de un doble por debajo de 1 en el array Int, la salida contendrá naturalmente ceros. Bueno, el bucle también estaba paralizado.

Este código debería funcionar:

#property strict

extern int N=100;                       // Количество баров

double Mas[];                             // Объявление массива
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+

int OnInit()
  { 
    ArrayResize(Mas,N);
     return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
  {

  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void OnTick()
  {                                       
       for(int i=0; i<N; i++)                     // Цикл записи данных
         {                      
    
              Mas[i]=iATR(NULL,0,5,i+1);           // Вычисление значений          
         }
           Print(DoubleToStr(Mas[0],_Digits),"," ,DoubleToStr(Mas[50],_Digits),"," ,DoubleToStr(Mas[99],_Digits));      // Вывод значений
  }
 
evillive:

¿Qué quiere decir con "no funciona"? Estás metiendo datos dobles menores que 1 en la matriz int, por supuesto la salida será ceros. Y el bucle era un lío.

Este es el tipo de código que debería funcionar:

Por supuesto que tienes toda la razón con lodel doble Mas[] (he considerado que ATP cuenta los puntos en valores enteros por alguna razón). La cuestión era que no aparecía ni siquiera después de haber cambiado el tipo de array, pero me he dado cuenta de mi error. Muchas gracias por su ayuda.
 
No quiero crear un tema aparte, así que lo preguntaré aquí. La documentación de la función OrderSelect indica que todos los datos del pedido se copian en el "entorno del programa". ¿El "entorno del programa" se refiere sólo al gráfico actual o a todo el terminal? Hago esta pregunta porque tengo un problema al trabajar simultáneamente con varias órdenes de diferentes gráficos que tienen el mismo EA instalado.
 
.roman.:
No quiero crear un tema aparte, así que lo preguntaré aquí. La documentación de la función OrderSelect indica que todos los datos del pedido se copian en el "entorno del programa" . ¿Se refiere sólo a la carta actual o a todo el terminal? Hago esta pregunta porque tengo un problema al trabajar simultáneamente con varias órdenes de diferentes gráficos que tienen el mismo EA instalado.
Estas órdenes están disponibles para todas las aplicaciones de usuario que se ejecutan en el terminal donde está abierta esta orden.
 
evillive:
Estas órdenes están disponibles para todos los programas de usuario que se ejecutan en el terminal donde está abierta la orden.
¿Cómo podemos evitar entonces que se copien en el entorno del software los datos de otra orden que fue seleccionada al mismo tiempo en un gráfico diferente?
 
.roman.:
¿Cómo podemos evitar entonces que se copien falsamente en el entorno del software los datos de otra orden que se seleccionaron al mismo tiempo en un gráfico diferente?
Los datos de los distintos pedidos no se solapan de ninguna manera, no hay nada que proteger.
 
evillive:
Los datos de los distintos pedidos no se solapan en absoluto y no hay nada que proteger.

Entonces estamos hablando de cosas diferentes. En un principio me refería a la cuestión de cuál es el "entorno de software" que se describe en la documentación. ¿Se refiere a toda la terminal?

En concreto, mi problema era que a pesar de la comparación exclusiva de OrderSymbol y Symbol en la función OrderSelect, había un problema cuando los datos (hora de apertura de la orden, precio de apertura, etc.) podían aparecer desde un gráfico de un par. Es decir, me pregunto, ¿es posible que durante la función OrderSelect del EA en EURUSD, por ejemplo, el EA también comience a trabajar con la función OrderSelect en otro par de divisas y los datos de la orden de la última llamada de esta función se carguen en el "entorno del programa"?

 
.roman.:

Entonces estamos hablando de cosas diferentes. En un principio me refería a la cuestión de cuál es el "entorno de software" que se describe en la documentación. ¿Se refiere a toda la terminal?

Concretamente, mi problema era que a pesar de la comparación exclusiva de OrderSymbol y Symbol en la función OrderSelect, había un problema cuando los datos (hora de apertura de la orden, precio de apertura, etc.) podían aparecer desde un gráfico de un par. Entonces, me pregunto, ¿es posible que mientras la función OrderSelect se esté ejecutando, por ejemplo, en EURUSD, el EA también comience a trabajar con la función OrderSelect en otro par de divisas y los datos de la orden de la última llamada de esta función se carguen en el "entorno del programa"?

Necesito el código. Hay un error en él
 
.roman.:

Entonces estamos hablando de cosas diferentes. En un principio me refería a la cuestión de cuál es el "entorno de software" que se describe en la documentación. ¿Se refiere a toda la terminal?

En concreto, mi problema era que a pesar de la comparación exclusiva de OrderSymbol y Symbol en la función OrderSelect, había un problema cuando los datos (hora de apertura de la orden, precio de apertura, etc.) podían aparecer desde un gráfico de un par. Es decir, me pregunto, ¿es posible que durante la función OrderSelect del EA en EURUSD, por ejemplo, el EA también comience a trabajar con la función OrderSelect en otro par de divisas y los datos de la orden de la última llamada de esta función se carguen en el "entorno del programa"?

Cada orden tiene parámetros únicos que la distinguen claramente de otras órdenes. Son el ticket y la hora de apertura (o de cierre, si se busca en el historial). Son tan únicos dentro de una cuenta de operaciones como el patrón de la retina.

No basta con seleccionar la ordenmediante la función OrderSelect sino que hay que comprobar si es la orden correcta o si hay que seleccionar la siguiente.

 
Vinin:
Necesitas un código. Hay un error en él
for(int i=OrdersTotal()-1;i>=0;i--)
        {
            if(OrderSelect(i,SELECT_BY_POS) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
               {
                  if(OrderType()==OP_BUY)
                     {
                        double openPrice = 0;
                        openPrice = OrderOpenPrice();
                        if(Ask>openPrice)
                           {
                              Print("OrderSymbol ",OrderSymbol()," OrderTicket ",OrderTicket()," OrderOpenPrice ",OrderOpenPrice());
                           }
                     }
                  if(OrderType()==OP_SELL)
                     {
                        double openPrice = 0;
                        openPrice = OrderOpenPrice();
                        if(Bid<openPrice)
                           {
                              Print("OrderSymbol ",OrderSymbol()," OrderTicket ",OrderTicket()," OrderOpenPrice ",OrderOpenPrice());
                           }
                     }
               }
        }

Se han eliminado los cálculos innecesarios (irrelevantes para el problema). Las impresoras se añadieron al código específicamente para mostrar el problema. A pesar de la comparación del símbolo de la orden con el símbolo, en el que el EA está abierto, puede mostrar esto (desde el gráfico osi tomar los datos de la orden en el euro, por ejemplo, como en este caso):