EA N7S_AO_772012 - página 30

 
SHOOTER777 >> :

А

desgraciadamente, esta observación es desafortunada... también se nota...

 

SHOOTER ¿podría decirnos brevemente qué es exactamente lo que optimizan los grupos de parámetros

  • x
  • y
  • z
  • X
  • Y
  • Z
Probablemente entienda algo, pero todavía no me entra en la cabeza la imagen completa.
 

Aquí hay otra rareza, o quizás sólo un fallo

double BTS() {
	if (( prcptrnz1() > 0 || F==0) && bu< HM_Up_X) {
		if ( prcptx1 > 0 && Delta_G12>0) {
			sl = slx; 
			tp = tpx * slx; 
			mn = mnx1; 
			return (1);
		}
	} 
	if (( prcptrnz1() < 0 || F==0) && sll< HM_Dn_Y) {
		if ( prcpty1 > 0 && Delta_G12<0) {
			sl = sly; 
			tp = tpy * sly; 
			mn = mny1;
			return (-1);
		}
	}
	return (0);
}

Resulta que si ahora F == 0 y no hay ninguna posición abierta, entonces podemos entrar primero en el primer bloque y luego en el segundo, lo que llevará posteriormente a resultados incorrectos.

¿O me estoy perdiendo algo?

 

Pero probablemente no. No podemos entrar en los dos bloques a la vez porque no nos dejan entrar.

Delta_G12

no nos deja entrar.

 
ShestkoFF писал(а) >>

No me gusta criticar las cosas que funcionan. Sólo voy a criticar el código:

Spsb. No me tomo las críticas como tales, sino como una guía para la acción, es decir, para leer al menos un poco del manual de MQL

  • No quiero escribir todo en líneas, porque es imposible leer el código.

Aceptado, pero probablemente en futuros trabajos. Conseguí esta "escritura" después de otros proyectos más globales y debido a la escasa resolución de mi monitor de 12 pulgadas. Su versión es indudablemente mejor, pero tendría que desplazarme constantemente hacia atrás y hacia delante por el listado. Pero como no estoy aquí por mí, lo diré de nuevo: lo tendré en cuenta.

  • Nombrar las variables con sentido

¡Vean lo anterior! Aunque me gustan los nombres, hay que acostumbrarse a ellos, como nos acostumbramos a las abreviaturas GOELRO, OBHSS, IMHO, etc. Si te fijas, he dado a algunas variables nombres más o menos significativos, pero he abreviado todas las vocales.

  • No conviertas las variables en globales si son locales.

Todavía no he conseguido controlar las variables. Cuando escribes código desde cero no tienes ni idea de dónde estará una variable, así que casi todo es global.

  • No tiene sentido no hacer que las variables globales sean estáticas. Si no es así, explíquelo.

empíricamente no es así, voy a recordar donde lo encontré - creo que fue en la función BuSll ()

  • Utilice las constantes estándar definidas en el lenguaje. Por ejemplo, la especificación de un intervalo de tiempo. double iA_C (int pr){int tmfr=60; return( iAO(Symbol(), tmfr, pr));} Creo que es mejor sustituirlo por double iA_C (int pr){return(iAO(Symbol(), PERIOD_H1, pr));}.

Estoy de acuerdo, corrijámoslo, de nuevo, cuando escribes un bloque desde cero no tienes ni idea aún de los parámetros que vas a pasar a la función, y luego el ojo se "ensucia" y no prestas atención a esas "nimiedades" ))

 
ShestkoFF писал(а) >>

SHOOTER ¿podría decirnos brevemente qué es exactamente lo que optimizan los grupos de parámetros

  • x
  • y
  • z
  • X
  • Y
  • Z
Probablemente lo entienda en parte, pero todavía no me entra en la cabeza la imagen completa.

El principal motor y guía del Asesor Experto es la notoria)) función G12(). En esta función se calculan las direcciones comerciales preferidas en función de los indicadores. Pero una dirección no es suficiente: necesitamos puntos de entrada. En los "clásicos", si en un marco de tiempo se buscan patterrones, o el propio indicador se ajusta si hay parámetros externos, si hay dos o más, se optimizan también. He probado otro método nuevo para mí NN

Aquí esta función

double prcptrnAC(int q1,int q2,int q3,int q4,int pr,int at)

{doble qw = (q1-50)+((q2-50)*iA_C(pr)+(q3-50)*iA_C(2*pr)+(q4-50)*iA_C(3*pr))/iA_C(1);

si (MathAbs(qw)>at) return(qw);si no, return(0);}

una especie de perceptrón y diseñado para conseguir.... algo. Aquí en detalle hay algunas respuestas a muchas preguntas, y mejor de lo que yo hubiera respondido. Cómo encontrar una estrategia de trading rentable' y Recetas de Redes Neuronales. Hay que reconocer que yo mismo lo he leído todo en diagonal y me he puesto más interesante estudiando el trabajo de otros, véase más abajo.

Este EA es "creado sobre la base de" MTS "red neuronal + MACD" por Batohov, MTS "Сombo", "Combo_Right" & AI por Reshetov, PROphet por PraVedNiK,RSI_Test por zerkmax, auto_optimization.mqh por Igor Malcev y algunos otros.

 
ShestkoFF писал(а) >>

Aquí hay otra rareza, o quizás sólo un fallo

Resulta que si ahora F == 0 y no hay ninguna posición abierta, entonces podemos entrar primero en el primer bloque y luego en el segundo, lo que llevará posteriormente a resultados incorrectos.

¿O tal vez no entiendo algo?

F == 0 sólo en las dos primeras etapas de optimización, cuando además de Delta_G12 hay Trd_Up_X y Trd_Dn_Y.

Si los seis pasos se superan correctamente y se utilizan secuencialmente los archivos de configuración de optimización, entonces F debería ser siempre igual a 1.

Y encontré mi otro error al revisar el código. Veo que las últimas versiones funcionan peor. Este error apareció en las versiones 7 y 9.

¿Alguien se ha dado cuenta?

 
SHOOTER777 >> :

Aquí esta función

double prcptrnAC(int q1,int q2,int q3,int q4,int pr,int at)

{doble qw = (q1-50)+((q2-50)*iA_C(pr)+(q3-50)*iA_C(2*pr)+(q4-50)*iA_C(3*pr))/iA_C(1);

si (MathAbs(qw)>at) return(qw);si no, return(0);}

una especie de perceptrón y que pretende conseguir.... algo.

Esto es un poco misterioso para mí en este momento. Por supuesto, entiendo lo que hace y para qué sirve. Pero la fórmula en sí es algo inusual.
El resultado del trabajo de las neuronas debe ser un número que sume las entradas de las neuronas multiplicadas por los pesos de estas entradas.
Es decir, lógicamente debería ser algo como lo siguiente:

double qw = (q1-50) * iA_C(1) + (q2-50) * iA_C(pr) + (q3-50) * iA_C(2 * pr) + (q4-50) * iA_C(3 * pr)

Está claro que ambas son alguna función de 4 variables (¿o son 8?) que interviene en la búsqueda del máximo (equilibrio resultante), pero sigue siendo raro :)

 
ShestkoFF писал(а) >>

Esta función sigue siendo un misterio para mí. Por supuesto, entiendo lo que hace y por qué lo hace. Pero la fórmula en sí es algo inusual.
El resultado del trabajo de las neuronas debe ser un número que sume las entradas de las neuronas multiplicadas por los pesos de estas entradas.
Así que, lógicamente, debería ser algo así:

double qw = (q1-50) * iA_C(1) + (q2-50) * iA_C(pr) + (q3-50) * iA_C(2 * pr) + (q4-50) * iA_C(3 * pr)

Está claro que ambas son alguna función de 4 variables (¿o son 8?) que interviene en la búsqueda del máximo (equilibrio resultante), pero sigue siendo raro :)

Has dado una versión simplificada de la función, al menos así lo entiendo yo

Aquí es donde se discute

'MTS 'Sombo'.

Para ser justos, no es una red neuronal en su forma más pura. En primer lugar, carece de un valor umbral sin el cual la capacidad de división del NS es mucho menor. En segundo lugar, en mi opinión, merece la pena añadir un umbral de activación de la salida. ¿Qué significa? Para que la señal vuelva a operar sólo si se supera el umbral de activación. Por ejemplo:

double res = (w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4 // )/Close[0] - T); // Dividir por Close[0] para unificar
if (MathAbs(res) > ActivityThreshold) return(res); // ActivityThreshold -- umbral de activación

 
gorby777 писал(а) >>

Las versiones anteriores utilizaban Close(0) en la fórmula del perceptrón z1, pero en 7 y 9 Close(1). ¿Es esto de lo que estamos hablando?

No, no creo que se trate de eso, al fin y al cabo hay una norma para trabajar en barras formadas.

Pero el hecho de que la bandera Flq=false; una para la compra y otra para la venta influye mucho en la división de estas direcciones de negociación y, por tanto, en los resultados.

Razón de la queja: