Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 672
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
De hecho, lo hice, pero no me gusta el largo tiempo de respuesta
No es mucho tiempo, es un tic... pero en general, necesitas leer la ayuda. no puedes aprender MQL por "intuición". MQL está basado en c++, pero está ligado a la plataforma MT, así que no puedes aprenderlo sin leer la ayuda.
Tienes manejo de archivos y trabajo con variables globales y gráficos en tu código ... Hay un montón de operaciones innecesarias en cada garrapata
Si quieres una respuesta rápida, utiliza OnChartEvent(), no se genera en el probador, pero primero empieza a estudiar la ayuda de MQL4.
La operación no es larga, es tic-tac... pero en general, empieza a leer la ayuda, no puedes aprender MQL por "intuición", MQL está basado en C++, pero está ligado a la plataforma MT, no puedes hacerlo sin leer la ayuda.
Tienes manejo de archivos y trabajo con variables globales y gráficos en tu código ... Hay un montón de operaciones innecesarias en cada garrapata
Si quieres una respuesta rápida, utiliza OnChartEvent(), no se genera en el probador, pero primero empieza a estudiar la ayuda de MQL4.
Hola a todos.
Encontré un útil indicador Ind-Fractals en la biblioteca de códigos. Sin embargo, dibuja fractales en cada barra, en lugar de calcularlos correctamente. Quiero utilizar este indicador, pero está "roto" (( Ayúdame a encontrar un error, he tratado de contactar con el autor, pero no responde a los mensajes. Para mayor comodidad, el código se duplica aquí.
#property copyright "Copyright © 2005, MetaQuotes Software Corp.
#enlace de propiedad "http://www.metaquotes.net"
//----
#propiedad ventana_del_gráfica_del_indicador
#property indicator_buffers 8
#property indicator_color1 Rojo
#property indicator_color2 Rojo
#property indicator_color3 Azul
#property indicator_color4 Azul
#property indicator_color5 Lime
#property indicator_color6 Lime
#property indicator_color7 Siena
#property indicator_color8 Siena
//---- parámetros de entrada
extern bool Comm=true;
//---- buffers
doble ExtMapBuffer1[];
doble ExtMapBuffer2[];
doble ExtMapBuffer3[];
doble ExtMapBuffer4[];
doble ExtMapBuffer5[];
doble ExtMapBuffer6[];
doble ExtMapBuffer7[];
doble ExtMapBuffer8[];
//+------------------------------------------------------------------+
//| Función de inicialización de indicadores personalizada |
//+------------------------------------------------------------------+
int init()
{
//---- indicadores
SetIndexStyle(0,DRAW_ARROW);//el estilo de línea del indicador
SetIndexArrow(0,217); //prescribe el tipo de flecha
SetIndexBuffer(0,ExtMapBuffer1);//vinculael buffer indicador con un array dinámico unidimensional de tipo doble. Hay dos versiones de la función.
SetIndexEmptyValue(0,0.0);//Establece el valor vacío para la línea del indicador.
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,218);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexEmptyValue(1,0.0);
SetIndexStyle(2,DRAW_ARROW);
SetIndexArrow(2,217);
SetIndexBuffer(2,ExtMapBuffer3);
SetIndexEmptyValue(2,0.0);
SetIndexStyle(3,DRAW_ARROW);
SetIndexArrow(3,218);
SetIndexBuffer(3,ExtMapBuffer4);
SetIndexEmptyValue(3,0.0);
SetIndexStyle(4,DRAW_ARROW);
SetIndexArrow(4,217);
SetIndexBuffer(4,ExtMapBuffer5);
SetIndexEmptyValue(4,0.0);
SetIndexStyle(5,DRAW_ARROW);
SetIndexArrow(5,218);
SetIndexBuffer(5,ExtMapBuffer6);
SetIndexEmptyValue(5,0.0);
SetIndexStyle(6,DRAW_ARROW);
SetIndexArrow(6,217);
SetIndexBuffer(6,ExtMapBuffer7);
SetIndexEmptyValue(6,0.0);
SetIndexStyle(7,DRAW_ARROW);
SetIndexArrow(7,218);
SetIndexBuffer(7,ExtMapBuffer8);
SetIndexEmptyValue(7,0.0);
return(0); }
//+------------------------------------------------------------------+
//| Función de desinicialización del indicador Custor |
//+------------------------------------------------------------------+
int deinit() {return(0); }
//------------------------------------------------------------------
bool Fractal(string F,int Per,int shift) {
if(Period()>Per) return(-1);
Per=Per/Period()*2+MathCeil(Per/Period()/2);
if(shift<Per)return(-1);
if(shift>Bars-Per)return(-1);
for(int i=1;i<=Per;i++) {
if(shift+i>=Bars || shift-i<0) return(-1);
if(F=="U") {
if(Alto[shift+i]>Alto[shift])return(-1);
if(High[shift-i]>=High[shift])return(-1); }
if(F=="L") {
if(Low[shift+i]<Low[shift])return(-1);
if(Low[shift-i]<=Low[shift])return(-1); } }
return(1); }
//------------------------------------------------------------------
int inicio()
{
int D1=1440,H4=240,H1=60,M15=15,B;
doble P;
int counted_bars=IndicatorCounted();// número de barras sin cambios después de la última llamada al indicador
B=Barras contadas;
if(counted_bars==0) B--;
if(Period()==D1)P=150*Punto;// period devuelve el periodo actual del gráfico
if(Periodo()==H4)P=70*Punto;
if(Periodo()==H1)P=40*Punto;
if(Period()==30)P=30*Point;
if(Periodo()==M15)P=20*Punto;
if(Periodo()==5)P=10*Punto;
if(Periodo()==1)P=5*Punto;
for(int shift=B;shift>0;shift--)
{
if(Fractal("U",M15,shift)==1) ExtMapBuffer1[shift]=High[shift]+P;
si no ExtMapBuffer1[shift]=0;
if(Fractal("L",M15,shift)==1) ExtMapBuffer2[shift]=Low[shift]-P;
si no ExtMapBuffer2[shift]=0;
if(Fractal("U",H1,shift)==1) ExtMapBuffer3[shift]=High[shift]+P;
si no ExtMapBuffer3[shift]=0;
if(Fractal("L",H1,shift)==1) ExtMapBuffer4[shift]=Low[shift]-P;
si no ExtMapBuffer4[shift]=0;
if(Fractal("U",H4,shift)==1) ExtMapBuffer5[shift]=High[shift]+P;
si no ExtMapBuffer5[shift]=0;
if(Fractal("L",H4,shift)==1) ExtMapBuffer6[shift]=Low[shift]-P;
si no ExtMapBuffer6[shift]=0;
if(Fractal("U",D1,shift)==1) ExtMapBuffer7[shift]=High[shift]+P;
si no ExtMapBuffer7[shift]=0;
if(Fractal("L",D1,shift)==1) ExtMapBuffer8[shift]=Low[shift]-P;
else ExtMapBuffer8[shift]=0;
}
if(Comm) Comment("D1 - marrón\n H4 - verde\n H1 - azul\nM15 - rojo ");
return(0);
}
Me han regañado aquí por este tipo de código, es la primera vez que me pasa :-)
El código debe insertarse en un formulario que se abra con Alt+S.
Me han regañado aquí por este tipo de código, es la primera vez que me pasa :-)
Tienes que pegar el código en un formulario que se abre con Alt+S.
¿Te regañan? De ninguna manera. Escribe el código como quieras. Pero... si quieres una respuesta a tu pregunta, trata de respetar a quienes les pides ayuda. Es tan sencillo como eso.
Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias
Cualquier pregunta para los novatos en MQL4, ayuda y discusión sobre algoritmos y códigos
Artyom Trishkin, 2018.10.18 08:07
Digámoslo así: cree una plantilla de indicador en el editor, añada el número correcto de variables de entrada y los buffers de dibujo cuando lo cree.
A continuación, analicemos qué hacer a partir de la tarea específica.
Lo hice la última vez, sólo cambié el nombre de la variable y del array.
Cuando se utiliza iMA sólo funciona en semanas y daires, donde la vela contiene más de 100 puntos, no hace nada en los marcos de tiempo inferiores. La razón parece ser el redondeo.
Si se utiliza iMAOnArray, la ventana i-ras está vacía en todos los TFs. No hay errores en el registro.
Si se utiliza iMAOnArray, la ventana i-ra está vacía en todos los TFs. No hay errores en el registro.
Está utilizando iMAOnArray() con el periodo 1, es decir, el valor de iMAOnArray() será esencialmente el valor del array tmp1
Si quieres distinguir lo que estás calculando, haz el bucle más cortofor(i=1; i<10; i++)
aunque puede ser más fácil no calcular alguna fórmula compleja, sino usar iMAOnArray() para construir iMA e iMAOnArray() - ambos iMA e iMAOnArray() son el mismo cálculo.... por desgracia, si puedes obtener una respuesta a una pregunta técnica en este foro, sólo tú deberías aprender a calcular y tratar la información.
La última vez que hice esto, sólo cambié el nombre de la variable y del array.
Cuando se utiliza iMA i-r trabajó sólo en semanas y días, donde hay más de 100 pips en una vela, no dibuja nada en TFs inferiores. La razón parece ser el redondeo.
Si se utiliza iMAOnArray, la ventana i-ras está vacía en todos los TFs. No hay errores en el registro.
El primer ciclo calcula los valores de la primera memoria intermedia;
El segundo ciclo calcula la MA por los valores calculados en el primer ciclo.
Considera lo que significa iMAOnArray(). Escribe MA en Array. ¿Cómo se traduce? Todo el mundo tiene un traductor de Google al alcance de la mano. Poner-traducir-recibir: MA en Array.
Significa que es una media móvil basada en una matriz calculada y rellenada preliminarmente.
Correspondientemente: el primer ciclo - preparación de la matriz necesaria, y el segundo ciclo - construcción de una media móvil basada en la matriz preparada en el primer ciclo.
¿Y qué haces tú? Se introduce un valor en la primera matriz (los otros valores aún no han sido preparados) y se intenta construir la MA sobre este valor.
Te he dado una plantilla:
Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias
Cualquier pregunta para principiantes de MQL4, ayuda y discusión sobre algoritmos y códigos
Artyom Trishkin, 2018.10.18 09:39
Indicador:
Puedes desechar todo lo relacionado con los cincos y obtener una plantilla para los cuatros. Aunque esta plantilla es multiplataforma - puedes usarla para ambos terminales - sólo tienes que establecer tus buffers y su número. En esta plantilla hay dos dibujos y un cálculo, que pueden verse aquí:
=también, se utiliza iMAOnArray() con el periodo 1, es decir, el valor de iMAOnArray() será esencialmente el valor del array tmp1
He probado diferentes valores a utilizar, 1 sigue siendo la última variante de estos experimentos.
Por alguna razón, el ip1Buf[4] = 2147483647.0 escribe el mismo número en el buffer i-r en todos los TFs, por ejemplo, mientras que los valores del array son todos diferentes tmp1[4] = 0.1300000000000097, etc.
Pero incluso en ese caso debería dibujarse una línea recta, y en el gráfico i-r no hay absolutamente nada, la escala está marcada de 0 a 0.
=también, se utiliza iMAOnArray() con el periodo 1, es decir, el valor de iMAOnArray() será esencialmente el valor del array tmp1
He probado diferentes valores a utilizar, 1 sigue siendo la última variante de estos experimentos.
Por alguna razón, el ip1Buf[4] = 2147483647.0 escribe el mismo número en el buffer i-r en todos los TFs, por ejemplo, mientras que los valores del array son todos diferentes tmp1[4] = 0.1300000000000097, etc.
Pero incluso en este caso se debería trazar una línea recta, y no hay absolutamente nada en el gráfico i-r, la escala está marcada de 0 a 0.
2147483647.0 ¡Pues empieza a usar el buscador!https://www.mql5.com/ru/forum/224831
Una vez más, acabo de escribir Artem, tienes que leerlo tú mismo, empieza con una simple... Dibujar un precio de cierre en un gráfico con un indicador, luego tratar de complicarlo, hacer lo mismo en un ciclo y en el segundo ciclo hacer МА cálculo basado en el buffer ya calculado donde se encuentra el cierre