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

 
Veterros:

En la última línea, hay muchos paréntesis. Tal vez intente quitar las que están vacías.
Nunca hay demasiados paréntesis, siempre que haya tantos paréntesis de apertura y cierre como paréntesis de cierre.
 
alexeymosc:

Hola! No entiendo por qué sale un error al declarar un array fuera de las funciones.

Error: '[' - valor de índice no válido

¿Cómo declaro un array bidimensional no dinámico con variables como índices?

He probado a poner const en lugar de static. También he probado [][]. Sigue habiendo un error (

Ponga un tutorial donde buscar esta pregunta de una vez por todas, por favor.

Porque a pesar de la secuencia de asignación de valores a las variables, éstas permanecen sin inicializar hasta que se ejecuta el programa. Por lo tanto, hasta que no se ejecuta int Oninit(), la variable que se utiliza no se inicializa. Mueve esta línea a Oninit() y todo debería funcionar...
 

Tengo un código simple que no abre órdenes.

En mi registro dice: '1419717': orden de compra 0.01 EURUSD apertura a mercado sl: 1.13720 tp: 1.13842 falló [S/L o T/P inválidos].

Aquí (en el foro) recibí un consejo: "¡Las paradas y Takei deberían normalizarse!

No entiendo qué significa esta frase.

El compilador no genera ningún error ni advertencia. Durante las pruebas todo funciona. Ya no sé dónde y qué leer.

Si esto es demasiado largo de explicar, por favor envíame el enlace donde puedo leer sobre cómo normalizar stoploss y takeprofit.

Gracias de antemano.

double Lots=0.01;
double TakeProfit=100;
double StopLoss=10;
int tk=0;

void start()
{
   if (OrdersTotal()==0)
      {
         tk=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,0,0,0,Green);
         if(tk<0) 
         {
            Print("OrderSend завершилась с ошибкой #",GetLastError());
         }
         else         
         {
            Print("Функция OrderSend успешно выполнена");
         }
      }
}
 
AlexeyVik:
Porque a pesar de la secuencia de asignación de valores a las variables, éstas permanecen sin inicializar hasta que se inicia el programa. Es decir, hasta que no se ejecuta int Oninit(), la variable que se utiliza como dimensión del array no se inicializa. Mueve esta línea a Oninit() y todo debería funcionar...

AlexeyVik, ¡ gracias!

Eso es lo que haré. No había pensado en Oninit, pero supongo que es cierto.

 

Por favor, dame una pista ))))

Hay una cierta cantidad de objetos gráficos en el gráfico.

Un nuevo bar ha terminado de formarse. ¿Cuál es la forma más fácil de determinar si ha tocado algún objeto?

(No quiero buscar los precios de todos los objetos y comparar si el rango de precios de la última barra ha tocado alguno de ellos).

En otras palabras, el precio y el rango de fechas cómo determinar si hay algún objeto gráfico en estas coordenadas.

 
favidu:

Tengo un código simple que no abre órdenes.

En mi registro dice: '1419717': orden de compra 0.01 EURUSD apertura a mercado sl: 1.13720 tp: 1.13842 falló [S/L o T/P inválidos].

Aquí (en el foro) recibí un consejo: "¡Las paradas y Takei deberían normalizarse!

No entiendo qué significa esta frase.

El compilador no genera ningún error ni advertencia. Durante las pruebas todo funciona. Ya no sé dónde y qué leer.

Si esto es demasiado largo de explicar, por favor envíame el enlace donde puedo leer sobre cómo normalizar stoploss y takeprofit.

Gracias de antemano.

NormalizeDouble() cavar en el libro de referencia. Pero si su broker no le permite exponer los stops en el momento de abrir una orden de mercado, deberá introducirlos en ceros y exponerlos por separado, en el segundo paso. Hay ejemplos en el kodobase.


tk=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,NormalizeDouble(Bid-StopLoss*Point,_Digits),NormalizeDouble(Ask+TakeProfit*Point,_Digits),0,0,0,Green);
 
evillive:

NormalizeDouble() profundiza en la referencia. Pero si el broker no permite colocar stops en el momento de abrir una orden de mercado, deberá introducirlos en ceros y colocarlos por separado, en el segundo paso. Hay ejemplos en el kodobase.


Muchas gracias.
 

Chicos, empujadme en la dirección correcta...

Por ejemplo:

#property strict
#property indicator_chart_window
#property indicator_buffers             0

int init() {

        return(0);
}

int start() {
        if (!GlobalVariableCheck(StringConcatenate("ID_", Symbol()))) {
                long id = ChartID();
                Print (id);
                GlobalVariableSet(StringConcatenate("ID_", Symbol()), id);
        }
        return(0);
}

Nunca guarda lo que imprime...

Algo así:

Resultado

¿CHANDNT?

 
Bueno, tan pronto como publiqué eso, el servidor se fue a 404 =)
 

Temporalmente escribió los bits altos por separado los bits bajos por separado.

Parece que una variable global de tipo double no cabe en largo.

Aunque aquí dice que no debería haber ningún problema salvo en situaciones en las que"si un entero es mayor que 9223372036836854774784 o menor que -9223372036854774784".

Pero estoy de acuerdo, el ID del gráfico = 130659893770676840 es menor que 9223372036854774784 por un dígito completo al menos.


P.D. Si alguien puede explicar mi error o es un fallo, gracias de antemano. Seguiré revisando aquí.