¿Cómo codificar? - página 308

 

Hola Mladen,

Me encontré con un código hecho por usted en estocástico. Sin embargo, cuando lo meto en mis sistemas, no pasa nada. ¿Puedo comprobar con usted lo que hace?

http://www.forexmt4.com/mt_yahoo/Color%20Stochastic%20v1[ 1].04.mq4

Saludos

Terrance

 

...

Pruebe algunos de estos publicados aquí : https://www.mql5.com/en/forum/175297/page3

O aquí : https://www.mql5.com/en/forum/177239/page2

Probado y funcionan

tkuan77:
Hola Mladen,

Me encontré con un código hecho por usted en estocástico. Sin embargo, cuando lo meto en mis sistemas, no pasa nada. ¿Puedo comprobar con usted lo que hace?

http://www.forexmt4.com/mt_yahoo/Color%20Stochastic%20v1[ 1].04.mq4

Saludos

Terrance
 

Esto es extraño.

He mirado el tema del candado con más detalle. Aparentemente tiene que ver con mi configuración de UAC ( Control de Cuentas de Usuario), así que fui a mi panel de control de Windows7 y desactivé completamente el UAC. Una vez reiniciado me di cuenta de que el candado había desaparecido del archivo. Lo abrí y es el mismo que el archivo que publiqué en este foro. Es completamente diferente al código que he estado escribiendo durante las últimas semanas, aunque en realidad es el mismo archivo. Pensé que había perdido todo mi trabajo de codificación. Volví a activar el UAC y reinicié, el candado había vuelto y el código que había escrito volvía a ser normal.

Pero luego traté de compilar el código y recoge un montón de errores. Pero los errores que recoge no son de este código, sino del código completamente diferente cuando desactivo el UAC.

Creo que tendré que abrir un nuevo EA y escribir manualmente todo este código y guardarlo.

 

...

Es un problema habitual de windows 7 (con su protección)

La forma más sencilla de evitarlo en windows 7 es instalar metatrader en una partición diferente a la C y no tendrás problemas de ese tipo

crsnape@btinternet.com:
Esto es extraño.

He mirado el tema del candado con un poco más de detalle. Aparentemente tiene que ver con la configuración de mi UAC (Control de Cuentas de Usuario), así que fui a mi panel de control de Windows 7 y desactivé completamente el UAC. Una vez reiniciado me di cuenta de que el candado había desaparecido del archivo. Lo abrí y es el mismo que el archivo que publiqué en este foro. Es completamente diferente al código que he estado escribiendo durante las últimas semanas, aunque en realidad es el mismo archivo. Pensé que había perdido todo mi trabajo de codificación. Volví a activar el UAC y reinicié, el candado había vuelto y el código que había escrito volvía a ser normal.

Pero entonces traté de compilar el código y recoge un montón de errores. Pero los errores que recoge no son de este código, sino del código completamente diferente cuando desactivo el UAC.

Creo que tendré que abrir un nuevo EA y escribir manualmente todo este código y guardarlo.
 

Finalmente he conseguido un EA que funciona correctamente. Funciona exactamente como debería- Terminé copiando mi código en el bloc de notas, girando de UAC, a continuación, pegar en un nuevo archivo de EA. Y me di cuenta de por qué mis funciones estaban jugando hasta- Había puesto una variable int dentro de un normalizeddouble. No sabía que podía hacer esto, pero ahora lo sé - ¡sólo me llevó una semana descubrirlo! :/

De todos modos, he escrito esto:

if (VariableRisk == true) Risk = GetRiskShort (LastOpenTicket, RiskShort);

if (VariableRisk == false) Risk = StaticRisk;

Y me preguntaba si se puede acortar así

if (VariableRisk == true)

{

Risk = GetRiskShort (LastOpenTicket, RiskShort);

si no, Risk = StaticRisk;

}

Y también he escrito esto:

//--- Función para calcular la posición de take profit cuando se está largo

double GetTPPriceLong (double SLPriceLong, int RiskRewardRatio, int StaticTP, bool AutoCalcTakeProfit)

{

double TPPriceLong = 0;

si (AutoCalcTakeProfit == true)

{

RefreshRates();

TPPriceLong = OrderOpenPrice() + ((OrderOpenPrice() - SLPriceLong) * RiskRewardRatio);

Print("Posición de toma de beneficios calculada con éxito");

return (TPPriceLong);

}

if (AutoCalcTakeProfit == false)

{

RefreshRates();

TPPriceLong = OrderOpenPrice() + (StaticTP * 0.0001);

Print("Posición de toma de beneficios estática calculada con éxito");

return (TPPriceLong);

}

}

Y me preguntaba si se puede acortar así

//--- Función para calcular la posición de take profit cuando se está largo

double GetTPPriceLong (double SLPriceLong, int RiskRewardRatio, int StaticTP, bool AutoCalcTakeProfit)

{

double TPPriceLong = 0;

ActualizarTarifas();

si (AutoCalcTakeProfit == true)

{

TPPriceLong = OrderOpenPrice() + ((OrderOpenPrice() - SLPriceLong) * RiskRewardRatio);

Print("Posición de toma de beneficios calculada con éxito");

si no TPPriceLong = OrderOpenPrice() + (StaticTP * 0.0001);

Print("Posición de toma de beneficios estática calculada con éxito");

return (TPPriceLong);

}

Y una última pregunta, para dar algo más de flexibilidad a mi EA, quiero definir mis timeframes como variables externas. Mi gráfico de señal debe ser D1, por ejemplo, y mi gráfico de activación debe ser H4. Así que en las variables externas podría hacer esto:

extern int SignalChart = PERIOD_D1;

extern int TriggerChart = PERIOD_H4;

Y luego referenciarlo haciendo esto por ejemplo

SlowMACurrent = iMA(Symbol(), SignalChart, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

 

Sobre esta parte :

Y luego referenciarlo haciendo esto por ejemplo: SlowMACurrent = iMA(Symbol(), SignalChart, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

Sí, esa es una forma 100% correcta de utilizarlo (incluso hasta el punto de que estás utilizando una barra cerrada (el desplazamiento en ese ejemplo está puesto a 1) y que, al utilizar una barra cerrada en las pruebas, vas a evitar la trampa habitual de utilizar barra abierta en el encuadre temporal múltiple)

crsnape@btinternet.com:
Finalmente he conseguido un EA que funciona correctamente. Funciona exactamente como debería- Terminé copiando mi código en el bloc de notas, la desactivación de UAC, a continuación, pegar en un nuevo archivo de EA. Y me di cuenta de por qué mis funciones estaban jugando hasta- Había puesto una variable int dentro de un normalizeddouble. No sabía que podía hacer esto, pero ahora lo sé - ¡sólo me tomó una semana descubrirlo! :/

De todos modos, he escrito esto

if (VariableRisk == true) Risk = GetRiskShort (LastOpenTicket, RiskShort);

if (VariableRisk == false) Risk = StaticRisk;

Y me preguntaba si se puede acortar así

if (VariableRisk == true)

{

Risk = GetRiskShort (LastOpenTicket, RiskShort);

si no, Risk = StaticRisk;

}

Y también he escrito esto:

//--- Función para calcular la posición de take profit cuando se está largo

double GetTPPriceLong (double SLPriceLong, int RiskRewardRatio, int StaticTP, bool AutoCalcTakeProfit)

{

double TPPriceLong = 0;

si (AutoCalcTakeProfit == true)

{

RefreshRates();

TPPriceLong = OrderOpenPrice() + ((OrderOpenPrice() - SLPriceLong) * RiskRewardRatio);

Print("Posición de toma de beneficios calculada con éxito");

return (TPPriceLong);

}

if (AutoCalcTakeProfit == false)

{

RefreshRates();

TPPriceLong = OrderOpenPrice() + (StaticTP * 0.0001);

Print("Posición de toma de beneficios estática calculada con éxito");

return (TPPriceLong);

}

}

Y me preguntaba si se puede acortar así

//--- Función para calcular la posición de take profit cuando se está largo

double GetTPPriceLong (double SLPriceLong, int RiskRewardRatio, int StaticTP, bool AutoCalcTakeProfit)

{

double TPPriceLong = 0;

ActualizarTarifas();

si (AutoCalcTakeProfit == true)

{

TPPriceLong = OrderOpenPrice() + ((OrderOpenPrice() - SLPriceLong) * RiskRewardRatio);

Print("Posición de toma de beneficios calculada con éxito");

si no TPPriceLong = OrderOpenPrice() + (StaticTP * 0.0001);

Print("Posición de toma de beneficios estática calculada con éxito");

return (TPPriceLong);

}

Y una última pregunta, para dar algo más de flexibilidad a mi EA, quiero definir mis timeframes como variables externas. Mi gráfico de señal debe ser D1, por ejemplo, y mi gráfico de activación debe ser H4. Así que en las variables externas podría hacer esto:

extern int SignalChart = PERIOD_D1;

extern int TriggerChart = PERIOD_H4;

Y luego referenciarlo haciendo esto por ejemplo:

SlowMACurrent = iMA(Symbol(), SignalChart, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
 

Hola, estoy recibiendo el código de error 4059:

[TD]La función no está permitida en modo de prueba.

ERR_FUNC_NOT_ALLOWED_IN_TESTING[/TD]

4059

He hecho una búsqueda, pero no puedo encontrar más información sobre lo que significa?

 

¿Puedes ayudar a añadir los siguientes códigos a este indicador sar parabólico?

Pip:
Gracias Mladen,

Voy a releer tu post para entenderlo, sinceramente me he perdido un poco al leerlo pero lo más probable es que sea mi ignorancia la que esté jugando. Si tengo alguna pregunta, la publicaré.

Gracias amigo.

Saludos,

Pip

Estimado amigo,

¿podrías ayudarme a añadir los siguientes códigos a esta alerta de SAR parabólico parabolic_alert_mod.mq4INDICATOR?

No estoy buscando un EA. Si es posible al menos añadir la opción SHIFT al indicador.

extern double TakeProfit = 50;

extern double Lots = 0.1;

extern double TrailingStop = 30;

extern double SAR_Step = 0.02;

extern double SAR_Máximo = 0.2;

extern double Shift=1;

Archivos adjuntos:
 

...

joelnelson

TakeProfit, Lots y TrailingStop no tienen nada que ver con la forma en que se calcula el sar parabólico (esos parámetros son obviamente tomados de un EA que utiliza el sar en su trabajo). Por lo tanto, si usted no está buscando un EA, no es posible añadir esos parámetros de una manera significativa

Además, el desplazamiento de los parámetros se refiere a la barra que se prueba (el SAR parabólico no se desplaza, ya que la media móvil se desplaza normalmente) Esos parámetros son probablemente para una llamada a un sar incorporado y el sar incorporado tiene la siguiente forma

double iSAR([/TD] [TD]string symbol, int timeframe, double step, double maximum, int shift)

Shift 1 en ese caso mans para probar el valor de la primera barra cerrada del sar parabólico

joelnelson:
Estimado amigo,

¿podéis ayudarme a añadir los siguientes códigos a esta alerta de SAR parabólico parabolic_alert_mod.mq4INDICATOR?

No estoy buscando un EA. Si es posible al menos añadir la opción SHIFT al indicador.

extern double TakeProfit = 50;

extern double Lots = 0.1;

extern double TrailingStop = 30;

extern double SAR_Step = 0.02;

extern double SAR_Máximo = 0.2;

extern double Shift=1;
 

...

Ese error puede ser devuelto por algunas funciones.

Las funciones que pueden causar ese error en las pruebas son las siguientes :

MarketInfo

MessageBox

SendFTP

SendMail

WindowIsVisible

WindowFind

WindowHandle

Entonces, una llamada a alguna de las funciones anteriores causó ese error

crsnape@btinternet.com:
Hola, estoy recibiendo el código de error 4059:[TD]Función no permitida en modo de prueba.
ERR_FUNC_NOT_ALLOWED_IN_TESTING[/TD]4059
He hecho una búsqueda pero no puedo encontrar más información sobre lo que significa.