Edytor kodu
Ten podręcznik wyjaśnia, jak tworzyć, otwierać i edytować kod źródłowy strategii, wskaźnika lub wtyczki za pomocą wbudowanego w JForex4 Edytora kodu (Code Editor), a także jak kompilować i zapisywać wprowadzone zmiany.
Zmiana nazwy: to narzędzie nazywało się wcześniej „Strategy Editor". Obecnie nosi nazwę Edytor kodu, ponieważ służy do edytowania nie tylko strategii, ale również wskaźników i wtyczek.
1. Otwieranie edytora
Do Edytora kodu można przejść na dwa sposoby:
- Tworzenie nowego kodu: w panelu Navigator (w lewym dolnym rogu) kliknij prawym przyciskiem myszy odpowiedni węzeł — Strategies, Indicators, Plugins (lub ich podwęzły Custom) — i wybierz odpowiednio New Strategy, New Indicator lub New Plugin. Platforma wygeneruje nowy plik
.javaz odpowiednim szkieletem kodu i otworzy go bezpośrednio w edytorze. - Edytowanie istniejącego kodu: kliknij prawym przyciskiem myszy strategię, wskaźnik lub wtyczkę w panelu Navigator lub w odpowiadającym mu panelu i wybierz Edit. Spowoduje to otwarcie pliku źródłowego (
.java) w edytorze. Jeśli dostępny jest wyłącznie skompilowany plik.jfx(bez kodu źródłowego), edycja nie jest możliwa — konieczny byłby oryginalny plik.java.
Uwaga: nowe pliki są domyślnie zapisywane w JCloud. Jeśli zapiszesz plik pod niestandardową nazwą, pamiętaj, aby również zmienić nazwę klasy (class name) w Javie wewnątrz pliku, tak aby była z nią zgodna — nazwa klasy i nazwa pliku muszą się zgadzać, aby kompilacja się powiodła.
2. Zrozumienie szkieletu kodu
Wygenerowany szkielet zależy od tego, co zdecydowano się utworzyć:
- New Strategy generuje klasę implementującą
IStrategy. - New Indicator generuje klasę implementującą
IIndicator. - New Plugin generuje klasę implementującą
IPlugin.
Pozostała część tego podręcznika skupia się na edycji strategii jako głównym przykładzie, jednak ten sam sposób pracy w edytorze (otwieranie, edycja, kompilacja, zapis) dotyczy również wskaźników i wtyczek — różni się jedynie sposób ich uruchamiania po skompilowaniu (patrz sekcja 6).
Każda strategia jest klasą Java implementującą IStrategy, z minimalnym zestawem metod wymaganych do kompilacji:
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 {}
}
| Metoda | Przeznaczenie |
|---|---|
onStart |
Uruchamiana jednorazowo w momencie startu strategii — inicjalizacja, subskrybowanie instrumentów, zapisywanie IContext/IConsole. |
onTick |
Uruchamiana przy każdym nadchodzącym tiku dla subskrybowanych instrumentów. |
onBar |
Uruchamiana za każdym razem, gdy zamyka się nowa świeca (bar) dla subskrybowanych instrumentów/interwałów. |
onAccount |
Uruchamiana przy zmianach stanu konta (saldo, kapitał, depozyt zabezpieczający). |
onMessage |
Uruchamiana przy zdarzeniach cyklu życia zleceń/pozycji (realizacje, odrzucenia itd.). |
onStop |
Uruchamiana jednorazowo przy zatrzymaniu strategii — logika porządkująca (cleanup). |
Wskaźniki i wtyczki mają własne wymagane metody interfejsu (np.
calculate()dlaIIndicator). Edytor kodu automatycznie generuje odpowiednie szkielety metod na podstawie opcji „New ...” wybranej w kroku 1.
3. Edycja kodu
Pracuj bezpośrednio w oknie edytora, dodając własną logikę wewnątrz odpowiednich metod cyklu życia. Na przykład, aby wypisywać nadchodzące tiki w logu w ramach strategii:
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 {}
}
Typowe modyfikacje na tym etapie obejmują:
- Dodawanie publicznych pól z adnotacją
@Configurable, dzięki czemu parametry są dostępne w oknie dialogowym Define Parameters podczas uruchamiania strategii, wskaźnika lub wtyczki. - Dodawanie logiki zleceń (zlecenia rynkowe/warunkowe, stop loss/take profit) wewnątrz
onTick,onBarlubonStart(dla strategii). - Dodawanie własnych obliczeń wskaźników lub odwołań do wskaźników wbudowanych.
Wskazówka: klasy niestandardowych wskaźników używane przez strategię muszą być zdefiniowane w tym samym pliku, jeśli zamierzasz uruchamiać strategię zdalnie (remotely) — środowisko zdalne nie może wczytywać osobnych, lokalnych plików klas. Dotyczy to również klas pomocniczych wykorzystywanych przez wskaźniki lub wtyczki.
4. Kompilowanie zmian
Po edycji skompiluj plik, korzystając z jednej z poniższych metod:
- przycisku Compile na pasku narzędzi Edytora kodu, lub
- skrótu klawiszowego F5, lub
- kliknięcia prawym przyciskiem myszy strategii, wskaźnika lub wtyczki na odpowiedniej liście Navigator i wybrania Compile.
Wynik kompilacji pojawia się w zakładce Messages:
Compiling... OK— kod został skompilowany pomyślnie, a odpowiadający mu plik.jfxzostaje zapisany obok pliku źródłowego.java.- Szczegóły błędów — jeśli kompilacja się nie powiedzie, zakładka Messages wyświetla konkretne błędy (numery linii, problemy ze składnią itd.), dzięki czemu można je zlokalizować i naprawić w edytorze.
5. Zapisywanie pracy
- Standardowy zapis (Ctrl+S lub przycisk Save na pasku narzędzi) zapisuje wprowadzone zmiany w pliku źródłowym
.java. - Jeśli użyjesz opcji Save As, aby zapisać plik pod nową nazwą, otwórz plik ponownie i zmień nazwę deklaracji
public class, tak aby odpowiadała nowej nazwie pliku — Java wymaga, aby nazwa klasy publicznej i nazwa pliku były identyczne.
6. Uruchamianie edytowanego kodu
Sposób uruchamiania edytowanego kodu po jego skompilowaniu zależy od rodzaju elementu, który został edytowany — Strategia, Wskaźnik i Wtyczka mają w JForex4 odmienne mechanizmy uruchamiania:
-
Strategie uruchamia się za pomocą Local run lub Remote run:
- Kliknij lewym przyciskiem myszy strategię w Navigator lub wybierz ją w panelu Strategies.
- Wybierz Local run lub Remote run (różnice między trybami opisano poniżej).
- Skonfiguruj parametry w oknie dialogowym Define Parameters, jeśli pojawi się taka prośba, a następnie kliknij Run.
Tryb Uwagi dotyczące edytowanego kodu Local run Pełny dostęp do plików lokalnych, innych klas Java oraz wykresów — wygodne podczas aktywnego debugowania. Remote run Działa na serwerze Dukascopy. Brak dostępu do systemu plików, brak dostępu do wykresów ( IContext.getChart()zwracanull); wszystkie instrumenty muszą zostać jawnie zasubskrybowane wonStart, a niestandardowe wskaźniki muszą być samodzielne w obrębie pliku strategii.Wyłącznie strategie obsługują Remote run na serwerze Dukascopy. Wskaźniki i wtyczki nie posiadają trybu wykonania zdalnego.
-
Wskaźniki nie są „uruchamiane” w taki sposób jak strategie — zamiast tego są dodawane do wykresu. Wybierz skompilowany wskaźnik w panelu Navigator lub Indicators i dodaj go do otwartego wykresu (np. metodą przeciągnij i upuść, dwuklikiem lub za pomocą menu wskaźników na wykresie), aby zobaczyć, jak wykonuje obliczenia i rysuje na podstawie danych cenowych na żywo lub historycznych. Parametry
@Configurablemożna skonfigurować w oknie dialogowym ustawień wskaźnika na wykresie. -
Wtyczki są uruchamiane wewnątrz samej platformy, a nie dołączane do wykresu ani uruchamiane zdalnie. Wybierz skompilowaną wtyczkę w panelu Navigator lub Plugins i uruchom ją bezpośrednio; działa ona wtedy w ramach aplikacji JForex4, integrując się z interfejsem platformy lub przestrzenią roboczą zgodnie z jej przeznaczeniem.
Najlepsze praktyki dotyczące edycji
- Do poważnego programowania używaj zewnętrznego IDE. Wbudowany Edytor kodu JForex4 jest wygodny do szybkich poprawek, ale IDE (Eclipse, IntelliJ IDEA, NetBeans) oferuje sprawdzanie błędów na żywo, autouzupełnianie i narzędzia do refaktoryzacji, które wychwytują błędy jeszcze przed próbą kompilacji.
- Kompiluj ponownie po każdej istotnej zmianie i sprawdzaj zakładkę Messages — nie zakładaj, że zapis się powiódł bez przeprowadzenia kompilacji.
- Najpierw testuj na koncie demo. Po edycji logiki strategii wpływającej na składanie zleceń lub parametry ryzyka zawsze wykonaj test wsteczny (za pomocą Historical Tester) oraz test na koncie demo, zanim uruchomisz strategię na koncie rzeczywistym.
- Zachowuj kopię zapasową działających wersji przed większymi zmianami, ponieważ edytor bezpośrednio nadpisuje plik
.javaprzy zapisie. - Dopasowuj nazwę pliku do nazwy klasy za każdym razem, gdy zmieniasz nazwę lub duplikujesz plik strategii, wskaźnika lub wtyczki, aby uniknąć błędów kompilacji.