Convertir esta MT3 en MT4 para mí - muy fácil - página 2

 

Convertir esta MT3 en MT4 para mí - muy fácil

Estoy considerando cambiar de MT4 a MT3.

Acabo de terminar de editar mi primer asesor experto.

Me tomó cerca de 4 semanas para aprender lo suficiente sobre MT y MQL4 para finalmente conseguir mi estrategia programada, pero ahora creo que podría convertir el programa a MQL2.

De lo que he leído en este foro, no veo ninguna ventaja a MT4.

Lo que he leído, y aprendido a través del backtesting de mi EA, es que el probador de estrategias de MT4 no funciona. Sólo por esta razón, creo que sólo tiene sentido pasar unos días más haciendo el cambio para que pueda obtener un backtest preciso con MT3.

Ya he descargado e instalado MT3 y he echado un vistazo al diccionario del editor. Puedo ver que hay menos características con MT3 que con MT4, pero no creo que eso sea un problema importante.

Una característica de mi MQL4 EA que estaba confiando en gran medida, fue el OrderMagicNumber para almacenar el precio de la orden pendiente original, que puede cambiar con el deslizamiento cuando la orden se llena.

Las órdenes MQL2 no tienen OrderMagicNumber, pero me di cuenta en el diccionario MQL2 una función llamada OrderValue que, en su descripción, dice que la función puede recuperar el comentario de una orden (VAL_COMMENT).

Si puedo utilizar el comentario para almacenar el precio preferido, creo que puedo hacer el cambio a MT3. Sin embargo, no he podido encontrar en el diccionario, cómo establecer el comentario de la orden. En la descripción de la función SetOrder no aparece "comment" como uno de sus parámetros.

¿Puede alguien familiarizado con esta función de MQL2 decirme cómo se establece el comentario de la orden?

 
BC Brett:

Por lo que he leído en este foro, no le veo ninguna ventaja a MT4.

Lo que he leído, y aprendido a través del backtesting de mi EA, es que el Probador de Estrategias de MT4 no funciona. Sólo por esta razón, creo que sólo tiene sentido pasar unos días más haciendo el cambio para que pueda obtener un backtest preciso con MT3.

Entonces, ¿dónde has leído que el backtester de MT3 es más fiable que el de MT4?

¡Creo que estás muy mal informado sobre esto!

El backtesting de MT4 puede ser muy fiable, pero depende de la calidad de los datos históricos que tengas y de tu % de calidad de modelado.

No podrás añadir "comentarios" o asignar "MagicNumbers" a las órdenes enviadas en MQL2 de la manera que se puede hacer en la programación de MT4. La programación de MT4 es más avanzada que la de MQL2, ¿por qué retroceder?

 

Tal vez quiera leer sobre el backtesting de MT4 aquí: http://www.strategybuilderfx.com/forums/showthread.php?t=15309&page=1&pp=8

(si no puedes acceder a la página tendrás que registrarte como miembro - es gratis)

 

Por lo que he recogido aquí y allá, la gente que se toma un poco en serio el backtesting utiliza softwares como WealthLab, Amibroker o MetaStocks, NO mt3 o mt4.

Quizás, el backtesting de mt4 puede estar bien SI no usas ningún dato intrabarra. Por ejemplo, si trabajas con barras diarias, deberías usar sólo los valores de Apertura y Cierre de las barras diarias (y ni siquiera el Alto y el Bajo si estableces StopLosses o Take Profits). Nada más.

La razón es que, a pesar de lo que pueda decir su "calidad de modelado", el único método de backtesting de mt4 que utiliza datos REALES es"Sólo precios abiertos".

Los métodos "Every tick" y "Control Points" son bonitos cuentos de hadas. Personalmente, no voy a operar dinero basado en backtesting de datos de cuentos de hadas.

Todavía estoy aprendiendo mt4, pero en mi experiencia, no usaría el backtesting de mt4 de ninguna otra manera. Ni siquiera estoy 100% seguro de que la forma que he sugerido sea 100% fiable. Si quiero hacer un buen backtesting, me haré con un software de backtesting.

Sobre mt4 vs mt3 para operar en vivo: por lo que he recogido aquí y allá ;-) mt4 no es de fiar. ¡¡¡A veces, las órdenes que mt4 dice que no fueron ejecutadas, son de hecho ejecutadas!!! Esto fue reportado por los corredores. Si esto es cierto, entonces los brokers que ofrecen mt4 live trading no son serios. O, se aseguraron de que los bugs de mt4 no ocurrieran en su plataforma, también es posible.

Por otra parte, "he reunido aquí y allá" lol que el comercio en vivo con mt3 es posible.

 

Convertir este MT3 en MT4 para mí - muy fácil

Hola chicos, agradecería si alguien pudiera convertir esto en lenguaje MT4 para mí - nuestro corredor acaba de actualizar a MT4.

Aquí está el código:

/*[[

Name := TTM Stoch

Author := Scott Black

Link := http://www.tradethemajors.com

Separate Window := yes

First Color := Cyan

First Draw Type := Line

Use Second Data := yes

second Color := Magenta

second Draw Type := Line

Minimum Chart Limits := 0.000000

Maximum Chart Limits := 100.000000

]]*/

Inputs : Slw(8),Pds(13),Slwsignal(9);

Variables : AA(0),bb(0),aa1(0),cnt1(0);

Variables : shift(0), cnt(0), loopbegin(0),loopbegin2(0),loopbegin3(0), first(True), prevbars(0);

Variables : sum(0), smconst(0),smconst1(0), prev(0),prev1(0),prev2(0),prev3(0), weight(0), linear(0);

Variables : MAValue(0),MAValue2(0),mavalue3(0), MAstring("");

Variables : MyHigh(0),MyLow(0),counter(0),Price(0),Price1(0);

SetLoopCount(0);

smconst = 2 / (1+SLW);

smconst1 = 2 / (1+slwsignal);

loopbegin = loopbegin+1;

For shift = 2000 Downto 0 Begin

prev = GetIndexValue2(shift+1);

AA =100* ((Close[shift] - Low[Lowest(MODE_LOW,shift+pds,Pds)]) / (High - low[Lowest(MODE_LOW,shift+pds,Pds)]));

MAValue2 = smconst * (aa-prev) + prev;

SetIndexValue2(shift,MAValue2);

loopbegin = loopbegin-1;

End;

loopbegin2 = loopbegin2+1;

For shift = 2000-pds downto 0 Begin

MyHigh = -999999;

MyLow = 99999999;

For counter = shift to pds + shift Begin

PRICE= GetIndexValue2(counter);

If Price > MyHigh Then

MyHigh = Price;

If pds <= 0 Then

MyHigh = Price;

If Price < MyLow Then

MyLow = Price;

If pds <= 0 Then

MyLow = Price;

end;

prev1 = GetIndexValue(shift+1);

aa1=GetIndexValue2(shift);

bb=100*(aa1-mylow)/(myhigh-mylow);

MAValue = smconst * (bb-prev1) + prev1;

SetIndexValue(shift,mavalue);

loopbegin2 = loopbegin2-1;

End;

loopbegin3 = loopbegin3+1;

For shift = 2000 downto 0 Begin

prev2=GetIndexValue2(shift+1);

prev3=GetIndexValue(shift);

MAValue3= smconst1 * (prev3-prev2) +Prev2;

SetIndexValue2(shift,mavalue3);

loopbegin3 = loopbegin3-1;

end;

/*[[

¡¡¡Muchas gracias!!!

 
scott TTM:
Hola chicos, agradecería si alguien pudiera convertir esto en lenguaje MT4 para mí - nuestro corredor acaba de actualizar a MT4.

Aquí está el código:

/*[[

Name := TTM Stoch

Author := Scott Black

Link := http://www.tradethemajors.com

Separate Window := yes

First Color := Cyan

First Draw Type := Line

Use Second Data := yes

second Color := Magenta

second Draw Type := Line

Minimum Chart Limits := 0.000000

Maximum Chart Limits := 100.000000

]]*/

Inputs : Slw(8),Pds(13),Slwsignal(9);

Variables : AA(0),bb(0),aa1(0),cnt1(0);

Variables : shift(0), cnt(0), loopbegin(0),loopbegin2(0),loopbegin3(0), first(True), prevbars(0);

Variables : sum(0), smconst(0),smconst1(0), prev(0),prev1(0),prev2(0),prev3(0), weight(0), linear(0);

Variables : MAValue(0),MAValue2(0),mavalue3(0), MAstring("");

Variables : MyHigh(0),MyLow(0),counter(0),Price(0),Price1(0);

SetLoopCount(0);

smconst = 2 / (1+SLW);

smconst1 = 2 / (1+slwsignal);

loopbegin = loopbegin+1;

For shift = 2000 Downto 0 Begin

prev = GetIndexValue2(shift+1);

AA =100* ((Close[shift] - Low[Lowest(MODE_LOW,shift+pds,Pds)]) / (High - low[Lowest(MODE_LOW,shift+pds,Pds)]));

MAValue2 = smconst * (aa-prev) + prev;

SetIndexValue2(shift,MAValue2);

loopbegin = loopbegin-1;

End;

loopbegin2 = loopbegin2+1;

For shift = 2000-pds downto 0 Begin

MyHigh = -999999;

MyLow = 99999999;

For counter = shift to pds + shift Begin

PRICE= GetIndexValue2(counter);

If Price > MyHigh Then

MyHigh = Price;

If pds <= 0 Then

MyHigh = Price;

If Price < MyLow Then

MyLow = Price;

If pds <= 0 Then

MyLow = Price;

end;

prev1 = GetIndexValue(shift+1);

aa1=GetIndexValue2(shift);

bb=100*(aa1-mylow)/(myhigh-mylow);

MAValue = smconst * (bb-prev1) + prev1;

SetIndexValue(shift,mavalue);

loopbegin2 = loopbegin2-1;

End;

loopbegin3 = loopbegin3+1;

For shift = 2000 downto 0 Begin

prev2=GetIndexValue2(shift+1);

prev3=GetIndexValue(shift);

MAValue3= smconst1 * (prev3-prev2) +Prev2;

SetIndexValue2(shift,mavalue3);

loopbegin3 = loopbegin3-1;

end;

/*[[

¡¡¡Muchas gracias!!!

Hola Scott...

Prueba esto....

Archivos adjuntos:
ttm_stoch.mq4  5 kb
 

Hellkas,

me temo que no funcionó del todo. Ve a www.compoundfx.com/mt3stoch.jpg para ver cómo debería verse en el gráfico de MT3 - traté de subir esto pero no funcionó.

Gracias por tus esfuerzos, tal vez esto ayude.

Cuando lo trazo en MT4, sólo veo una línea magenta y no una cian - aunque veo que la entrada está allí.

scott

 

Hola,

¡¡¡En primer lugar hellkas te agradeceré que mantengas la cabecera de mi archivo después de convertir el indicador mql con mi herramienta Mql2Mq4 !!!

Entonces es normal que el convertido no funcione correctamente, si miras en Metatrade 4 en el registro de mensajes del Experto TabSheet (Panel) verás "Zero Devide exception" como en esta imagen. En el script del indicador se utiliza el operador de división, con algunas veces NULL:-( por eso este error, y repito, en Metatrade 3, no se generaban excepciones por eso, sin embargo en Metatrade 4.

Pongo el convertido funcionando como en MT 3, y puedes ver que tipo de cambio he hecho.

Adiós

Archivos adjuntos:
exception.jpg  52 kb
ttmstoch.mq4  5 kb
 

yousky,

Muchas gracias, ¡se ve perfecto! Te lo agradezco.

-SB

 

yousky,

Bueno, después de una revisión más, no es totalmente allí todavía. Todavía me da lecturas falsas en MT4, es decir, las líneas no se cruzan donde deberían. He utilizado el código que has puesto aquí. ¿Alguna idea?

SB

Razón de la queja: