Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 196
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Bueno, intentaré aportar mi granito de arena para educaros.
Me dirigiré a ti como "tú" cuando lo envíe. Tengo una instantánea del puntero...
Por favor, dime, ¿no te parece mal llamar a la misma función 5 veces en el mismo tick? Pero eso es la mitad del problema. Esta función recorre todos los pedidos. Y todo esto 5 veces en un tic... Y cuento con 4 funciones de este tipo. No podemos pensar lo suficiente en cómo encajar 3 funciones más con el bucle para buscar todos los pedidos en un ciclo.
Aquí hay dos de ellos.
Esto es
Ni siquiera se acerca a la cola.Para entender esto, tenemos que comprender claramente la definición de arrastre. No recuerdo textualmente, pero es aproximadamente "Nivel de StopLoss móvil siguiendo el precio para disminuir las posibles pérdidas o aumentar el beneficio "garantizado".
Y esto
¿Qué aspecto tiene cuando se ejecuta el Asesor Experto? Probablemente cuatro líneas... ¿son necesarios?
Y lo último por hoy: no hace falta tener una biblioteca en la cabeza. Basta con tener la documentación y saber utilizarla. Todavía no recuerdo todos los parámetros de iMA(_Symbol, _Period, ,,,,,) y no puedo ir más allá sin estudiar la documentación. Y así casi todas las funciones. Afortunadamente, no hace mucho tiempo hicieron tooltips que no ayudan mucho. No estoy tratando de memorizar cómo escribir estos o aquellos enums. Así que tengo que mirar la documentación cada vez.
Alexey, gracias por la información. Sí, admito que el código no es óptimo, simplemente no soy programador y no conozco las sutilezas que has descrito. Simplemente no entiendo esos matices, no entiendo cómo optimizar todo, quizás lo haga más adelante, si es que avanzo. Ahora sé exactamente que si empiezo a optimizar, sólo romperé todo. He visto códigos de otros EAs en mi sitio web - ¡hay tantas cosas allí! - Seguro que si eres un codificador profesional, quizás su código sea menos exigente para el terminal que el mío, pero por ahora no puedo tener en cuenta tus comentarios ya que realmente no entiendo estos matices de optimización de la programación. Y si se eliminan algunas llamadas a funciones en el código - seguro que el Asesor Experto empezaría el caos allí y abriría órdenes cuando no fuera necesario. Allí codifiqué, probé - nada salió mal o se equivocó, corregí y como resultado el código final quedó así, no tuve tiempo de optimizar, como comprenderás con mi bagaje de conocimientos.
En cuanto al arrastre, lo más importante es que arrastre el beneficio, en esta fase de desarrollo estoy satisfecho con él)))) Seguro que el código antiguo y el nuevo trailing trailing es igual y la cantidad de tratos es la misma - por supuesto he llegado a la conclusión de que el trailing ha funcionado, pero cómo hacerlo correctamente en este entorno donde el trailing funciona nadie me lo ha dicho, y no tengo ninguna idea al respecto - todo mi código es constructor Lego - es decir, lo he montado a partir de materiales de tutoriales de vídeo. Por supuesto, hay un poco de mi propia - es en realidad el algoritmo del Asesor de Expertos en sí, mientras que todo el código y las funciones no son mi invención, pero vino de tutoriales en vídeo de TradeLikeaPro y "editado" el código exactamente por analogía y para mis necesidades - para mi algoritmo. Al final, conseguí lo que tenía.
Al ver el gráfico del depósito, me interesé y descargué la primera versión. Lo he copiado en MetaEdit. Tengo dos advertencias. La primera, la he eliminado sustituyendo int timeprev=0; por datetime timeprev=0; Porque esta variable contiene fecha. El segundo indica en
He eliminado las tres últimas cuerdas. Se traduce limpiamente. Vamos a ir más allá...
ha cambiado (para aclararlo, he adjuntado el script - ejecútalo, lo explicará) así que
Este es el resultadoEsta función se elimina - no hay llamadas de ella y su cuerpo está vacío.
Intenté ejecutarlo y vi:
Fue
Lo cambié sólo al ejecutar el EA en dos gráficos con la misma herramienta y el deslizamiento - ¿por qué cambiar este parámetro? Luego lo pensé y aumenté los parámetros 10 veces. Y he eliminado la función OnInit. Al fin y al cabo, sólo uso el código de cinco dígitos. ¿Por qué? Porque la diferencia de cuatro dígitos es de 3 puntos, así que es de 30. Y la diferencia de cinco dígitos es de sólo 12.
se hizo más claro.
He recortado la parte superior de la cabecera. Eso es lo que dejé:
esta línea de aquí.
lo trasladó a la reclamación. Es así.
op=CalculateProfit(); if (op>=tp) { CloseAll(); }
Entonces tiré la descripción de la variable op al principio y la sustituí por esto
if (CalculateProfit()>=tp) CloseAll();
Al principio de la función OnTick hay un par de líneas. Esto es para asegurar que el procesamiento se realiza sólo una vez por barra en lugar de cada tick
A continuación se calcula la MA. Esto debe ser estudiado en detalle. Para ello hice un script y mostré el resultado
Podemos ver que el cuarto parámetro MaShift y el último se suman, es decir, número de barra = su suma. Toma MA a partir del compás 2, tercero desde el final.
Lo estudiaré más a fondo. ¿Interesado?
...
Seguiré buscando. ¿Interesado?
¿Sigues sacando el tema?
Ya está bien, la gente sigue el tema para los que están interesados y se desperdicia.
Si quieres que una persona te responda, llámala al hilo. Así: @STARIJ. Pero no hace falta que sigas sacando el tema editando tu último post.
Significa que alguien no tiene suerte. Una vez más. Esto es un script, no un Asesor Experto o indicador
Lo resolví - aparentemente el terminal no tenía suficiente memoria - cerré un par de gráficos y funcionó.
Gracias - efectivamente, los cálculos tienen lugar.
Y si las variables no son de tipo int, sino bool, ¿qué hacer?
Hola, podría decirme por favor:
1 - ¿El registro es sólo como persona física o puede ser también como persona jurídica y existen restricciones y condiciones?
2 - ¿Hay alguna sincronización con las redes sociales, para tener una sola cuenta (nombre de usuario y contraseña)
3 - También vi una función "poner un widget en su página, compartir la señal" - estamos hablando del sitio o algo más
Al ver el gráfico del depósito, me interesé y descargué la primera versión. Lo he copiado en MetaEdit. Tengo dos advertencias. La primera, la he eliminado sustituyendo int timeprev=0; por datetime timeprev=0; Porque esta variable contiene fecha. El segundo apunta a
*
Respuesta
Tal vez, tiene que ver con el hecho de que el TP era de tipo int en la lección de vídeo, pero lo he convertido a doble y por lo tanto int timeprev sigue siendo como es. Vale, lo arreglaré, pero ¿cómo afecta al funcionamiento del EA? De hecho, estas barras y el tiempo eran relevantes para la función TrailingStop del video tutorial, pero desde que reemplacé esta función con la mía propia, simplemente permanece como una reliquia del código fuente y de hecho mi trailing stop no se basa en el tiempo de la barra.
He eliminado las tres últimas líneas. Se traduce limpiamente. Fui más allá...
Lo he cambiado (para aclararlo he adjuntado un script - ejecútalo, lo explicará) así
Este es el resultado
*Respuesta.
¿Dónde ha ido a parar este trozo de código?
return(INIT_SUCCEEDED); }
¿Tal vez debería ser así?
void OnInit()
{
if(Dígitos == 3 || Dígitos = 5)
{
Paso *= 10;
TrailingStep *= 10;
TrailingStop *= 10;
Deslizamiento *= 10;
}
return(INIT_SUCCEED);
}
Pero, ¿por qué has hecho TakeProfit de tipo int? Significa que será el beneficio en puntos, mientras que la función CalculateProfit() es de tipo double, así que he hecho TakeProfit del mismo tipo para que sean coherentes.
He borrado esta función - no hay llamadas a ella y su cuerpo está vacío
*
Respuesta
En el código, está la función void CloseAll(). Pensé que estaba relacionado de alguna manera con esta función
*
Respuesta
Ok, vamos a quitarlo.
Intenté ejecutarlo y lo vi:
Fue
haciendo cambios - bueno, sólo añadí comentarios y eliminé extern de Magic
*
Respuesta
Sí, tal vez extern es redundante porque nunca lo he cambiado y tampoco Slippage - es todo desde el código fuente del video tutorial
- lo cambiamos sólo cuando se ejecuta el EA en dos gráficos con la misma herramienta y el deslizamiento - ¿por qué cambiar este parámetro? Luego lo pensé y aumenté los parámetros 10 veces. Y he eliminado la función OnInit. Al fin y al cabo, sólo uso el código de cinco dígitos. ¿Por qué? Porque la diferencia de cuatro dígitos es de 3 puntos, así que es de 30. En un diferencial de cinco dígitos, sólo son 12.
*
La respuesta es .
Esta es la configuración por defecto para que el EA funcione en todas las divisas. Me quedaré con Oninit ().
se hizo más claro.
He recortado la cabecera en la parte superior. Esto es lo que he dejado:
*
Respuesta
Esta cabecera está hecha por el editor por defecto. Lo dejaré como estaba, por si algo no pasa en el broker o en el terminal por la ausencia de estas líneas.
He movido esta línea
se trasladó a la reclamación. Fue así
Entonces eliminé la descripción de la variable op al principio y la sustituí por
*
Respuesta
Es bastante lógico.
Al principio de la función OnTick, hay un par de líneas. Esto es para asegurar que el procesamiento se realiza sólo una vez por barra en lugar de cada tick
A continuación se calcula la MA. Esto debe ser estudiado en detalle. Para ello he hecho un script y he sacado el resultado.
Puedes ver que el cuarto parámetro MaShift y el último parámetro se suman, es decir, número de barra = su suma. Tomamos el MA del compás 2, el tercero desde el final.
*
Respuesta
Debido al hecho de que he cambiado trailing - fecha-tiempo Media móvil no es relevante creo. Es una reliquia del código fuente, solía intentar rastrear por la última de las 3 (tres) órdenes abiertas. La cosa es que si el mercado va en una dirección equivocada por el valor de STep, el EA abre una contraorden y luego si el mercado sigue yendo en dirección contraria, se añade una tercera orden del tipo de la segunda posición, O viceversa, si el precio volvió a la dirección, entonces la tercera orden se abrirá con el primer tipo de orden (compra o venta). Allí, el trailing se realiza en tres órdenes utilizando la función CalculateProfit(); sin embargo, si la primera orden se abre con éxito y el precio se mueve como debería, en esta situación, el trailing en la barra se haría utilizando datetime como en el video tutorial - repito, incluso en 1 orden trailing utilizando la función calculateprofit()
Lo estudiaré más a fondo. ¿Interesado?
*
Respuesta
Sí, tengo algunos problemas con la pesca de arrastre. Parece que sigue la pista pero no quiero que nadie entienda lo que he hecho con ella. Las funciones Trailing() sin barras y datetime - funciona con Trailing().
El periodo MA es de unos 200, pero la cuestión es que es un valor ajustable. Y parece que falta el parámetro clave Valor - he explicado su significado en la descripción del archivo README.
Gracias por tomarse la molestia de todo esto. De hecho, el Asesor Experto no es realmente tan bueno, mecánico diría yo. Pero, básicamente, si lo configuras y supervisas de vez en cuando su trabajo, puede ser bastante bueno. El tiempo lo dirá. Probablemente, pueden ganar algo, pero se irán a la quiebra sin ni siquiera pestañear y no enviarán un mensaje de texto. Ni siquiera me he molestado con él, aunque mi idea era enviar un SMS si el drawdown es más del 30% del depósito ha sucedido - esto significa que 3 órdenes ya se han abierto y el mercado comenzó contra-movimiento, en esta situación, huele a parafina. Todos los demás casos son resueltos por el Asesor Experto, si se ajusta al historial de comportamiento del gráfico del instrumento comercial.
He hecho los cambios recomendados (pero no todos) en el código en el Bloc de notas por ahora. Por favor, compruebe si he corregido el código.
Estoy a favor de la optimización, sólo que no he considerado los momentos en que se ha eliminado oninit - lo necesito para poder probar y trabajar en todas las monedas)))
Hola, hace poco que he empezado a aprender Mql4. Si le he hecho una pregunta en el lugar equivocado, por favor diríjame al tema correcto. Mi pregunta es la siguiente: cómo trabajar con indicadores que construyen varias zonas, rectángulos, etc. Puedo programar un cruce de líneas o el precio más alto o más bajo, por ejemplo, MA.) Adjunté un indicador en la parte inferior, el buffer es cuatro y hay ocho tipos de zonas. Así que no puedo averiguar cómo codificar una ruptura o ruptura de estas zonas.
Si quieres saber cómo hacerlo, deberías mirar los ejemplos de programación, pero no sabes cómo hacerlo. Se puede preguntar: ¿Cómo se pasa mucho tiempo con el programador mql4, pero no se sabe cómo hacerlo). Tal vez progreses.
geratdc:
...
Sí, tengo algunas preguntas sobre la red de arrastre. Parece que se arrastra, pero nadie quiere saber lo que he hecho con él.
...
Es posible que tengas que descargar los videotutoriales de programación de mql4 de TradeLikeApro en RuTracker. Creo que el principio básico de mql4 es que no hay que hacer nada complicado y no hay que hacer nada en absoluto). Tal vez progreses.
He visto el vídeo sobre el trabajo con el indicador externo, escribí un poco de código para ver los valores de los buffers en el probador:
void OnTick()
{
double Buf1=iCustom(NULL,0, "Shved-Supply-and-Demand-e600",0,1);
double Buf2=iCustom(NULL,0, "Shved-Supply-and-Demand-e600",1,1);
double Buf3=iCustom(NULL,0, "Shved-Supply-and-Demand-e600",2,1);
double Buf4=iCustom(NULL,0, "Shved-Supply-and-Demand-e600",3,1);
Comment("Buf1=",Buf1,"\n", "Buf2=",Buf2,"\n","Buf3=",Buf3,"\n","Buf4=",Buf4);
}
Las zonas aparecen y desaparecen en el modo de visualización. Pero el valor de los búferes es siempre cero de todos modos. ¿No hay forma de formalizar estas zonas en el código?
¿Tal vez haya una función, distinta de iCustom, que sea adecuada para estos indicadores? ¿Tal vez alguien ha escrito búhos con tales indicadores?