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
Por CB:
¡Hey high flyer! Hice todo lo que pude con las tareas de Tim y así decidí empezar a mirar tu código con más detalle.
Revisé tu código, tratando de entender y arreglar los errores en él. Conseguí reducir los errores a sólo 'paréntesis desequilibrados' para la cadena fnGenerateSignal(). No sé por qué dice desequilibrio en este caso.
Como siempre, me gustaría saber qué opinas de mis progresos con tu código. Tened en cuenta que todavía hay muchas cosas que no entiendo, incluso las más básicas.
Ver anotaciones.
Me he dado cuenta de lo siguiente:
- declaras que las funciones esperan que se les pasen variables como parámetros, pero luego no las pasas en la llamada a la función - así que te he pedido que muevas las variables al bloque superior para que estén disponibles para todas tus funciones por ahora - vamos a mantenerlo tan simple como sea posible por ahora
- parecías pensar que tenías que declarar el nombre de tu función como una variable también. Así es como se usan las funciones, pasando variables dentro y fuera de ellas:
Declarar:
int abcdef(int x, cadena s) //lo que significa que la función con nombre abcdef acepta como entrada un entero y una cadena y devuelve como salida un entero (en este caso o bien 0 o bien 9)
{
la función hace cosas con x y s
si (alguna condición)
devuelve(9);
si no
return(0);
}
Y para llamar:
...
miRespuesta = abcdef(miInteger, miCadena);
si (miRespuesta == 9)
{
blah
Hola CB,
Gracias. Esta es la parte que no podía entender, me lo has dejado muy claro. Creo que ahora estoy en la línea correcta.
CB, pregunta1:
bool fnOrderDuplicate()
{
iDuplicateOrders=0 // CB ¿no debería declararse iDuplicateOrders como int o double?
iOrders = OrdersTotal()-1 //Ahora lo entiendo con tu ayuda, esto llama a la función OrdersTotal. pero de nuevo, ¿no debería iOrders declararse como una variable?
CB, pregunta2:
int fnTrade() //¿Por qué esto no es "int fnTrade(string sSignal)", ya que estamos usando sSignal en la función. ?
{ if(sSignal=="OP_BUY")
...
CB, pregunta 3:
Me pediste que eliminara return(0) y } al final del código. pero esto significaría que el Start() no se cierra con el típico 'return(0) y los corchetes no se cierran, ya que todos los corchetes prevoius (por lo que he comprobado) son particulares para la apertura y cierre de las funciones específicas que diseñamos. ?
Hola CB,
Gracias. Esta es la parte que no podía entender, me lo has dejado muy claro. Creo que ahora estoy en la línea correcta.
CB, pregunta1:
bool fnOrderDuplicate()
{
iDuplicateOrders=0 // CB ¿no debería declararse iDuplicateOrders como int o double?
iOrders = OrdersTotal()-1 //Ahora lo entiendo con tu ayuda, esto llama a la función OrdersTotal. pero de nuevo, ¿no debería iOrders declararse como una variable?
CB, pregunta2:
int fnTrade() //¿Por qué esto no es "int fnTrade(string sSignal)", ya que estamos usando sSignal en la función. ?
{ if(sSignal=="OP_BUY")
...
CB, pregunta 3:
Me pediste que eliminara return(0) y } al final del código. pero esto significaría que el Start() no se cierra con el típico 'return(0) y los corchetes no se cierran, ya que todos los corchetes prevoius (por lo que he comprobado) son particulares para la apertura y cierre de las funciones específicas que diseñamos. ?
P1: Ambas variables ESTÁN definidas. Mira las variables que te sugerí que movieras a la sección donde definiste tus externos. Esto las hará automáticamente disponibles para todas las funciones.
P2: La variable sSignal, si se declara fuera de todas las funciones, está disponible para todas las funciones sin necesidad de pasarla explícitamente en la llamada a la función.
P3: Ah - ahora veo tu malentendido. Me preguntaba por qué habías puesto esa declaración de retorno y esa llave de paso. Está previsto en mi comentario sobre la declaración fnTrade(). Te darás cuenta de que te pedí que añadieras una llamada de retorno y un corchete de cierre allí. La razón es que estabas declarando (erróneamente) todas tus funciones dentro del bloque de código de la función start().
CB
Hola Tim,
Hice las partes que me pediste para el código. Gracias por dar respuestas detalladas a mis preguntas y por escribir un montón de comentarios a lo largo del código para ayudarme a entenderlo. Empiezo a ver cómo se combinan las cosas, cómo utilizar correctamente las matrices y llamar a funciones específicas (y el papel de las variables globales y locales).
Adjunto la última versión de nuestro código.
Una pregunta, ¿hay alguna razón por la que no hicimos la función EntryRules para contener todo (incluyendo banderas) para darnos una condición de compra/corta, pero en su lugar la llamamos con banderas más tarde para tomar la decisión de entrada?
Hola Nick
He arreglado algunas cosas en el código y espero haber respondido a sus preguntas. La EntryFunction está ahora completa. Sólo tienes que llamarla desde la función de inicio (main) como he indicado en el código y pasarle los parámetros necesarios como se muestra. Espero que sólo sean unos minutos de trabajo y que luego puedas compilar y probar. Espero que tenga algunos pequeños errores que lidiar con pero espero que nada importante.
Una vez compilado, intente ejecutar el EA en el probador y eche un vistazo al archivo de registro para ver si parece estar haciendo lo que se espera en esta etapa. Usted debe ser capaz de ver las señales de compra y venta para cada uno de los pares de divisas.
Yo diría que en este punto su código está completo en un 75%.
El siguiente paso después de esto es escribir otra función para comprobar las órdenes abiertas para un par de divisas determinado y la dirección del comercio.
Sugeriría echar un vistazo a la documentación de MT4 en las funciones de negociación. OrdersTotal(), OrderSelect(), Order Symbol() & OrderType() parecen candidatos probables para esta tarea.
En cuanto a tu pregunta sobre hacer que la función EntryRules contenga todo, incluyendo las banderas, no veo ninguna razón para no hacerlo. ¿Por qué no pruebas a modificar la función EntryRules?
Te sugiero que lo hagas después de haber compilado, ejecutado y probado lo que ya has hecho.
Saludos
Tim
CB: Gracias hombre, esto me ayuda a aclarar más las cosas. Por alguna razón pensé que todo tenía que estar dentro de la función de inicio.
Pregunta: ¿No deberíamos declarar las ema's dentro de la función de inicio ya que queremos que se calculen/actualicen con cada tick?
Hola Tim: Gracias una vez más por tu ayuda. Voy a proceder con las cosas en mi extremo tan pronto como salga del trabajo esta noche. trabajar con usted y CB ahora tengo más ideas sobre cómo poner las cosas juntas, y empezar a pensar más flexible sobre todo.
CB: Gracias hombre, esto me ayuda a aclarar más las cosas. Por alguna razón pensé que todo tenía que estar dentro de la función de inicio.
Pregunta: ¿No deberíamos declarar las ema's dentro de la función de inicio ya que queremos que se calculen/actualicen con cada tick?
No. Si declaras una variable dentro de una función, sólo está disponible dentro de esa función. Si la declaras fuera de todas las funciones, está disponible para todas las funciones. Por lo tanto, usted puede declarar las variables ema en la parte superior y luego hacer matemáticas en ellos dentro de la función de inicio.
CB
No. Si declara una variable dentro de una función, sólo está disponible dentro de esa función. Si la declaras fuera de todas las funciones, está disponible para todas las funciones. Por lo tanto, puedes declarar las variables ema en la parte superior y luego hacer cálculos con ellas dentro de la función de inicio.
CB
Gracias CB, ¡ahora lo entiendo!
Hola Tim,
Ya he vuelto de Turquía. Me lo pasé muy bien en Kusadasi y no quería irme. Los turcos son mucho más amables que los británicos. Me sentí como en casa, a pesar de no haber estado nunca allí.
Pasé las últimas 5 horas más o menos actualizando el código que estamos diseñando. Lo adjunto.
Las modificaciones clave fueron:
1. He creado una función de recuento de pedidos, y la he llamado dentro de la función de inicio. Espero que esto esté lleno de errores ya que hay partes que todavía no entiendo (por ejemplo: cómo asegurar que sigue el bucle [c] para que sólo funcione por par de divisas)
2. Intenté corregir el código con respecto al nombre currencySymbol vs. currencySym, ya que cambiamos el nombre a mitad de camino. Pero esto podría haberse confundido.
3. Llamé a la función EntryRules dentro de la función start
Te agradecería mucho que corrigieras los grandes y pequeños errores si sigues introduciendo //por qué el código antiguo está mal, comentarios, me ayuda a corregir mi pensamiento lógico.
¡Como siempre espero ansiosamente sus enmiendas!
Hola CB,
Creo que Tim está de vacaciones ahora, ya que no he tenido noticias suyas desde hace unos días. Por lo tanto, sigo con su código, ya que me ayudará a operar (ya que estoy operando manualmente la estrategia ahora, y significa despertar horas tempranas, etc). Modifiqué todo el código como me pediste, pero por alguna razón sigue devolviendo un error (que tiene que ver con "==" esta vez, muy extraño).
Otra cosa es que me di cuenta de que la función de inicio no estaba cerrada. Así que añadí "}" después de la primera función dentro del inicio (), si no hacemos eso, el código genera un error con la cadena de función posterior fnGenerateSignal() (diciendo que la definición de la función para eso es inesperada).
Gracias como siempre. ¡Espero sus comentarios/enmiendas!
Nick