[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 27

 
Code:


Bien, probemos otra forma de verlo.

vteor12 puede escribirse como (dVolumen+vback1)/k1 (factor 1)

vrealUP12 puede escribirse como (dVolumen+vback1)/k2 (coeficiente 2)

Como he intentado describir la ideología del indicador, consiste en la comparación de algunos niveles teóricos y reales. Para obtener estos niveles comparo (es decir, divido) el mismo valor (dVolumen+vback1) con algún valor teórico (k1) y real (k2). Está claro que k1 me lo estoy inventando, para poner las cosas por su nombre. O, si se quiere, hacer una suposición. Ahora esto tiene que ser comparado con algo. Nada es más objetivo y verdadero que el propio gráfico en este caso. Así que tomo las diferencias de apertura y cierre, tomándolas como la línea de fondo de un periodo de tiempo determinado. Y la única tarea aquí es llevarla al mismo dígito, por lo que se multiplica por 1000.

Intente calcular varias variantes de velas vecinas en una calculadora y se sorprenderá de la variedad de resultados según esta fórmula tan sencilla.

Y en cuanto a la lógica escolar tienes razón. Yo añado Volumen + Volumen/Precio, eso no se puede hacer en la escuela. :))

Yo paso... :)))

¿No tuviste inicialmente un problema con la pantalla? ¿Lo has resuelto?

 
MaxZ:

Paso... :)))

¿No tuviste inicialmente algún problema con la pantalla? ¿Lo has resuelto?


Sí, lo hice, por cierto. No tuve en cuenta que era una línea, no un histograma. La línea debe tener 2 puntos. Como el código no describe todas las variantes, sino sólo 2 velas alcistas seguidas, en el caso de que después de la segunda vela alcista hubiera una vela bajista, el indicador no dibujaba nada. Y era correcto. Cuando lo descubrí, lo modifiqué por un histograma.

Por cierto, no te tomes a pecho mi razonamiento sobre las reglas de la suma y la resta. :)))

Y les agradecería mucho que me ayudaran a continuar con el código. Era el principio. Después de dos velas seguidas me gustaría contar 3, 4 etc. velas seguidas por el mismo principio. Al parecer, el código debe ser en bucle, con la búsqueda de velas, ¿verdad? Todavía no puedo hacerlo. Pero no te obsesiones con lo que está dividido por lo que. :)))

 

Portado de

VladimirR 29.07.2011 23:02 am Corrección | borrar

Hola. ¡Por fin he escrito mi primer EA! No entiendo muy bien cómo funciona. El EA establece 2 órdenes pendientes cuando se cumplen ciertas condiciones. El stop loss para ambas órdenes es igual al High[1] (Low[1]) para la orden pendiente de venta (compra) y el take profit es siempre igual a los pips para el stop loss. He notado en el probador de la estrategia que el beneficio no siempre es igual al stop loss en pips. Por favor, aconsejen cómo puede ocurrir esto. Este es el código donde se calculan las órdenes de stop (no hay ningún otro lugar en el programa donde se modifiquen los stops)

//-2-анализ на установку buystop---------------------------------------------------------------------------------+
  if(Close[1]>=MA_17 && MA_3<=MA_17)
   {
    deposit_order=true;
    type_order =4;
    open_price =High[1];
    stop_loss  =Low[1];
    take_profit=NormalizeDouble(MathAbs(2*open_price-stop_loss),Digits);
    if(Lot==0) Lot=MarketInfo(symb,MODE_MINLOT);
   }
 //-3-анализ на установку sellstop-------------------------------------------------------------------------------+  
  if(Close[1]<=MA_17 && MA_3>=MA_17)
    {
     deposit_order=true;
     type_order   =5;
     open_price   =Low[1];
     stop_loss    =High[1];
     take_profit  =NormalizeDouble(MathAbs(2*open_price-stop_loss),Digits);
     if(Lot==0)Lot=MarketInfo(symb,MODE_MINLOT);
    }

 
nadya:
Hola, ¿podríais decirme si es posible asignar valores a múltiples variables globales dentro de una función, y dónde deben declararse estas variables en ese caso?

Puedes hacerlo.

Declare las variables globalmente - antes de la función start(). Dentro de las funciones de EA, cambia sus valores como quieras - después de regresar de la función, estas variables tendrán los valores que les asignaste dentro de tus funciones hasta que los cambies de nuevo en algún lugar.

 
nadya:
¿podría decirme si es posible asignar un valor a múltiples variables globales dentro de una función, y dónde deben declararse estas variables en ese caso?

Ejemplo. Dentro de la función myfunction, asignamos un valor a dos variables globales. También puede asignar un valor a tres, cuatro o n variables de esta manera.

int global1 = 1;
int global2 = 2;

void myfunction(int g1, int g2)
{
   global1 = g1;
   global2 = g2;
}

int start()
{
   // До выполнения функции:     global1=1, global2=2   <---  то что объявили в начале кода
   
   myfunction(3, 4);
   
   // После выполнения функции:  global1=3, global2=4   <---  то что присвоили в функции
}

Pero creo que hay una trampa en tu pregunta...

 
Code:


Sí, por cierto, lo he solucionado yo mismo. No tuve en cuenta que es una línea, no un histograma. Y la línea requiere 2 puntos. Como el código no describe todas las variantes, sino sólo 2 velas alcistas seguidas, en el caso de que después de la segunda vela alcista hubiera una vela bajista, el indicador no dibujaba nada. Y era correcto. Cuando lo descubrí, lo convertí en un histograma.

Tú, por cierto, no te tomes a pecho mi razonamiento sobre las reglas de la suma y la resta, piensa que es un experimento. :)))

Y les agradecería mucho que me ayudaran a continuar con el código. Era el principio. Después de dos velas seguidas me gustaría contar 3, 4 etc. velas seguidas por el mismo principio. Al parecer, el código debe ser en bucle, con la búsqueda de velas, ¿verdad? Todavía no puedo hacerlo. Pero no te obsesiones con lo que está dividido por lo que. :)))

Sí. Pero la mejor manera de resolver este problema es utilizar un bucle con postcondición "while" en lugar de un bucle con contador "for". Porque no sabes cuántas velas alcistas o bajistas te vas a encontrar seguidas.

Empieza con un problema más sencillo, si te resulta tan difícil. Por ejemplo, mostrar los números de a a b en incrementos de s. O encontrar el factorial de n con un bucle.

Y para practicar, resuelve estos problemas utilizando ambos tipos de bucles ("for" y "while"). Entonces podrá empezar a mejorar su indicador.

 

No hay bucles postwhile en el lenguaje, MaxZ.

Tu deseo de ayudar a los demás es encomiable, pero aún necesitas conocer mejor el idioma.

 
Mathemat:
No hay bucles postwhile en el lenguaje.

Si organizas el bucle de la siguiente manera, obtendrás la postcondición adecuada:

int i = 0;
while (True)
{
   i++;
   if (i == 10) break;
}

Pero acepto su corrección. Gracias. Dado que hay efectivamente dos tipos de bucles en MQL4: "for" (con un contador) y "while" (con una precondición). El tercer tipo (con una postcondición) sólo puede organizarse intencionadamente.


Matemáticas:

Tu deseo de ayudar a los demás es encomiable, pero aún necesitas conocer mejor el idioma.

Lo que no sé, no voy allí.

Y todos los demás errores se cometieron sin querer. He estado distraído últimamente... Sólo quiero ayudar a la gente.

 

MaxZ: Единственная проблема состоит в том, что если советник с данным кодом запустить в тестере, а переменной PERIOD присвоить значение PERIOD_M1, то обе функции iBarShift возвращают -1, т.е. функции не удалось найти в истории бар на ТФ M1 с таким временем... Почему так происходит, не знаю.

Esta función probablemente no está modelada en el probador (no lo he comprobado). Sobre todo porque exact (el cuarto parámetro de la función) está fijado en falso por defecto.
 
Mathemat:
Esta función probablemente no está modelada en el probador (no lo he comprobado). Sobre todo porque exact (el cuarto parámetro de la función) está fijado en falso por defecto.
Ya me lo he imaginado... El problema estaba en la historia. No había antecedentes de barras M1 para el periodo analizado.
Razón de la queja: