Editor de código
Este manual explica cómo crear, abrir y editar el código fuente de una estrategia, un indicador o un plugin utilizando el Editor de código integrado en JForex4, y cómo compilar y guardar los cambios.
Cambio de nombre: esta herramienta se llamaba anteriormente "Strategy Editor". Ahora se llama Editor de código, ya que se utiliza no solo para editar estrategias, sino también indicadores y plugins.
1. Abrir el editor
Puede acceder al Editor de código de dos formas:
- Crear código nuevo: en el panel Navigator (abajo a la izquierda), haga clic con el botón derecho en el nodo correspondiente — Strategies, Indicators, Plugins (o sus respectivos subnodos Custom) — y seleccione New Strategy, New Indicator o New Plugin, según corresponda. La plataforma genera un nuevo archivo
.javacon el esqueleto adecuado y lo abre directamente en el editor. - Editar código existente: haga clic con el botón derecho en una estrategia, un indicador o un plugin en el Navigator o en su panel correspondiente y seleccione Edit. Esto abre su archivo fuente (
.java) en el editor. Si solo hay disponible un archivo.jfxcompilado (sin código fuente), no será posible editarlo — se necesitaría el archivo.javaoriginal.
Nota: los archivos nuevos se guardan por defecto en JCloud. Si guarda el archivo con un nombre personalizado, recuerde renombrar también el nombre de la clase (class name) de Java dentro del archivo para que coincida — el nombre de la clase y el nombre del archivo deben coincidir para que la compilación tenga éxito.
2. Entender el esqueleto del código
El esqueleto generado depende de lo que se haya elegido crear:
- New Strategy genera una clase que implementa
IStrategy. - New Indicator genera una clase que implementa
IIndicator. - New Plugin genera una clase que implementa
IPlugin.
El resto de este manual se centra en la edición de estrategias como ejemplo principal, pero el mismo flujo de trabajo del editor (abrir, editar, compilar, guardar) se aplica también a indicadores y plugins — solo difiere la forma de ejecutarlos posteriormente (ver la Sección 6).
Cada estrategia es una clase Java que implementa IStrategy, con un conjunto mínimo de métodos necesarios para compilar:
package jforex;
import com.dukascopy.api.*;
public class Strategy1 implements IStrategy {
public void onStart(IContext context) throws JFException {}
public void onAccount(IAccount account) throws JFException {}
public void onMessage(IMessage message) throws JFException {}
public void onStop() throws JFException {}
public void onTick(Instrument instr, ITick tick) throws JFException {}
public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {}
}
| Método | Propósito |
|---|---|
onStart |
Se ejecuta una vez al iniciar la estrategia — inicialización, suscripción a instrumentos, almacenamiento de IContext/IConsole. |
onTick |
Se ejecuta con cada tick entrante para los instrumentos suscritos. |
onBar |
Se ejecuta cada vez que se cierra una nueva barra para los instrumentos/periodos suscritos. |
onAccount |
Se ejecuta ante cambios en el estado de la cuenta (saldo, equity, margen). |
onMessage |
Se ejecuta ante eventos del ciclo de vida de órdenes/posiciones (ejecuciones, rechazos, etc.). |
onStop |
Se ejecuta una vez al detener la estrategia — lógica de limpieza. |
Los indicadores y plugins tienen sus propios métodos de interfaz requeridos (por ejemplo,
calculate()paraIIndicator). El Editor de código genera automáticamente los esqueletos de métodos correctos según la opción "New ..." seleccionada en el paso 1.
3. Editar el código
Trabaje directamente en el panel del editor, añadiendo su lógica dentro de los métodos del ciclo de vida correspondientes. Por ejemplo, para imprimir los ticks entrantes en el registro dentro de una estrategia:
package jforex;
import com.dukascopy.api.*;
public class Strategy1 implements IStrategy {
private IConsole con = null;
public void onStart(IContext context) throws JFException {
// store the console for printing to the Messages tab
this.con = context.getConsole();
}
public void onAccount(IAccount account) throws JFException {}
public void onMessage(IMessage message) throws JFException {}
public void onStop() throws JFException {}
public void onTick(Instrument instr, ITick tick) throws JFException {
con.getOut().println(instr + " " + tick.getAsk() + "/" + tick.getBid());
}
public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {}
}
Las modificaciones habituales en esta etapa incluyen:
- Añadir campos públicos con la anotación
@Configurablepara que los parámetros se muestren en el cuadro de diálogo Define Parameters al ejecutar la estrategia, el indicador o el plugin. - Añadir lógica de órdenes (órdenes de mercado/condicionales, stop loss/take profit) dentro de
onTick,onBaroonStart(para estrategias). - Añadir cálculos de indicadores personalizados o referencias a indicadores integrados.
Consejo: las clases de indicadores personalizados utilizadas por una estrategia deben definirse en el mismo archivo si se pretende ejecutar la estrategia de forma remota (remote) — el entorno remoto no puede cargar archivos de clase locales independientes. Esto también se aplica a las clases auxiliares utilizadas por indicadores o plugins.
4. Compilar los cambios
Después de editar, compile el archivo utilizando cualquiera de estas opciones:
- el botón Compile en la barra de herramientas del Editor de código, o
- el atajo de teclado F5, o
- haciendo clic con el botón derecho en la estrategia, el indicador o el plugin en la lista correspondiente del Navigator y seleccionando Compile.
El resultado de la compilación aparece en la pestaña Messages:
Compiling... OK— el código se compiló correctamente y se guarda un archivo.jfxcorrespondiente junto al archivo fuente.java.- Detalles de errores — si la compilación falla, la pestaña Messages muestra los errores específicos (números de línea, problemas de sintaxis, etc.) para que pueda localizarlos y corregirlos en el editor.
5. Guardar su trabajo
- El guardado estándar (Ctrl+S o el botón Save de la barra de herramientas) escribe los cambios en el archivo fuente
.java. - Si utiliza Save As para guardar con un nuevo nombre de archivo, abra después el archivo y renombre la declaración
public classpara que coincida con el nuevo nombre — Java exige que el nombre de la clase pública y el nombre del archivo sean idénticos.
6. Ejecutar el código editado
La forma de iniciar el código editado una vez compilado depende del tipo de elemento que haya editado — Estrategia, Indicador o Plugin tienen cada uno un mecanismo de ejecución distinto en JForex4:
-
Las estrategias se inician mediante Local run o Remote run:
- Haga clic con el botón izquierdo en la estrategia dentro del Navigator, o selecciónela en el panel Strategies.
- Elija Local run o Remote run (vea las diferencias entre modos a continuación).
- Configure los parámetros en el cuadro de diálogo Define Parameters si se le solicita, y luego haga clic en Run.
Modo Notas para el código editado Local run Acceso completo a archivos locales, otras clases Java y gráficos — cómodo durante la depuración activa. Remote run Se ejecuta en el servidor de Dukascopy. Sin acceso al sistema de archivos, sin acceso a gráficos ( IContext.getChart()devuelvenull); todos los instrumentos deben suscribirse explícitamente enonStart, y los indicadores personalizados deben ser autónomos dentro del archivo de la estrategia.Solo las estrategias admiten Remote run en el servidor de Dukascopy. Los indicadores y plugins no cuentan con un modo de ejecución remota.
-
Los indicadores no se "ejecutan" de la misma forma que las estrategias — en su lugar, se añaden a un gráfico. Seleccione el indicador compilado en el Navigator o en el panel Indicators y añádalo a un gráfico abierto (por ejemplo, arrastrándolo y soltándolo, con doble clic, o mediante el menú de indicadores del gráfico) para verlo calcularse y representarse gráficamente con datos de precios en vivo o históricos. Configure sus parámetros
@Configurableen el cuadro de diálogo de ajustes del indicador en el gráfico. -
Los plugins se inician dentro de la propia plataforma, en lugar de adjuntarse a un gráfico o ejecutarse de forma remota. Seleccione el plugin compilado en el Navigator o en el panel Plugins y ejecútelo directamente; se ejecutará dentro de la aplicación JForex4, integrándose con la interfaz de la plataforma o el espacio de trabajo según su diseño.
Buenas prácticas para la edición
- Utilice un IDE externo para un desarrollo serio. El Editor de código integrado de JForex4 es útil para ajustes rápidos, pero un IDE (Eclipse, IntelliJ IDEA, NetBeans) ofrece comprobación de errores en tiempo real, autocompletado y herramientas de refactorización que detectan errores antes incluso de intentar compilar.
- Vuelva a compilar después de cada cambio importante y revise la pestaña Messages — no asuma que un guardado se realizó correctamente sin pasar por una compilación.
- Pruebe primero en una cuenta demo. Después de editar la lógica de una estrategia que afecte a la colocación de órdenes o a los parámetros de riesgo, realice siempre una prueba retrospectiva (mediante el Historical Tester) y una prueba en demo antes de ejecutarla en real.
- Conserve una copia de seguridad de las versiones funcionales antes de realizar cambios importantes, ya que el editor sobrescribe directamente el archivo
.javaal guardar. - Haga coincidir el nombre del archivo y el nombre de la clase cada vez que renombre o duplique un archivo de estrategia, indicador o plugin, para evitar errores de compilación.