FXpleyer pisze:Pytanie chyba głownie do -rookie- no ale każda pomoc się przyda , da się do tego testera dodać opcje Buy Stop oraz Sell Stop znacząco uprościło by mi to testy strategi , ps czy w DukaScopy za otwarcie zlecenia przeciwnego (hedge SL) pobierają dodatkowe zabezpieczenie ?
W Dukascopy pobierają opłaty oddzielnie za otwarcie i zamknięcie gdzie w MT4 chyba większość pobiera od razu całą prowizje przy otwarciu pozycji tzn jak otworzysz L potem S to masz na razie prowizje za otwarcie, potem jak zamkniesz doliczy za zamknięcie pozycji. Jest jeszcze opcja MERGE i chyba tutaj można zaoszczędzić na prowizji ale nie mam pewności.
Poprawiony tester masz w załączniku WidgetTest_Beta_ZleceniaOczekujace.java
Dodałem też możliwość zmiany wielkości pozycji w trakcie testu. Opis jest na obrazkach.
Jak masz jakieś sugestie to pisz, ja będę miał chwile albo ochote w tym się grzebać to może to zrobie.
Ta linia która pojawia się do ustawienia zleceń oczekujących... można ją usunąć jak nie chcesz stawiać zlecenia po prostu klikasz DELETE na klawiaturze albo w na kreske i remove z paska podręcznego, usuwasz obiekt z wykresu i potem klikniesz jeszcze raz na add price marker... i pojawia sie znowu. Przesuwasz ją na wykresie w góre i w dół. I potem na danym poziomie cenowym klikasz BUYSTOP lub SELLSTOP.
Jeśli domyślne wielkości dla dodawania i redukowania amount CI nie odpowiadają, to spróbuj sam to zmienić w kodzie na mniejsze. Jest 0.01 domyślnie czyli 10.000 jednostek. Jak dasz 0.001 to będzie 1000 jednostek w tych liniach Math.round(amount += 0.01); gdzieś w 328 i 342 linii.
Pewnie trzeba będzie dodać funkcje zamykania pojedynczych zleceń bo obecnie jest tylko opcja która zamyka wszystko... To trzeba by zmienić wygląd tego widgetu na JFrame chyba i dodać DefaultTableModel czyli to zaczęło by być podobne do myOfflineTrades. Wtedy zlecenia byłyby widoczne w tabelce pod guzikami panelu i można być je tam usuwać i edytować. Ale to jest roboty sporo... Ewentualnie mogę dodać kolejne guziki które będą usuwały oczekujące i te już otwarte, może jakoś da się to rozwiązać inaczej.
-- Dodano: 01 sty 2018, 14:03 --
Chyba z tym zabezpieczaniem chodziło pewnie o wykorzystanie marginu. Można to sprawdzać w funkcji onAccount. To jest główna funkcja programu po onTick, onMessage, onBar, ona tam już jest i wystarczy wyświetlać funkcje z account (
https://www.dukascopy.com/client/javado ... count.html ) np. w ten sposób można zobaczyć użycie dźwigni i equity
Kod: Zaznacz cały
public void onAccount(IAccount account) throws JFException {
console.getOut().println( account.getUseOfLeverage() + " " + account.getEquity() );
}
-- Dodano: 01 sty 2018, 17:43 --
Jakbyś sam chciał sie z tymi guzikami grzebać, to musisz skopiować kod innego button i sprawdzić warunek czy pozycje są np krótkie albo długie, albo czy typ zlecenia jest po cenie rynkowej czy oczekujące, albo czy zostało wypełnione czy nie. I możesz sam zrobić takie guziki w tym kodzie, sobie rozwijać to jak chcesz.
Kod: Zaznacz cały
JButton _testowyguzik = new JButton();
_testowyguzik.setText( "testowy guzik" );
_testowyguzik.setAlignmentX(Component.CENTER_ALIGNMENT);
_testowyguzik.addActionListener( new ActionListener() {
@Override
public void actionPerformed( ActionEvent e ) {
context.executeTask( new Callable<IOrder>() {
@Override
public IOrder call() throws Exception {
for(IOrder order : engine.getOrders()){
console.getOut().println( order.getId() + " " + order.getState() );
}
return order;
}
});
}
});
Na dole trzeba dodać w kodzie żeby ten guzik był widoczny w panelu
Kod: Zaznacz cały
...
panel.add(Box.createRigidArea(new Dimension(0,10)));
panel.add(button_sub001);
panel.add(Box.createRigidArea(new Dimension(0,10)));
panel.add(_testowyguzik); // <<<<<< TUTAJ MOŻESZ WSTAWIĆ
panel.add(Box.createRigidArea(new Dimension(0,10)));
panel.add(button_close);
...
I z tego kodu console.getOut().println( order.getId() + " " + order.getState() ); zobaczysz że niektóre zlecenia są już wypełnione FILLED a niektóre dopiero otwarte ale jeszcze nie zrealizowane czyli OPENED. Potem możesz sprawdzić warunkami "if" które zlecenia są np OPENED a które już FILLED i w ten sposób zamykać funkcją order.close() tylko te z tego warunku. Warunek IOrder.State.FILLED == order.getState() sprawdza które zlecenia są już zrealizone
Kod: Zaznacz cały
JButton _testowyguzik = new JButton();
_testowyguzik.setText( "testowy guzik" );
_testowyguzik.setAlignmentX(Component.CENTER_ALIGNMENT);
_testowyguzik.addActionListener( new ActionListener() {
@Override
public void actionPerformed( ActionEvent e ) {
context.executeTask( new Callable<IOrder>() {
@Override
public IOrder call() throws Exception {
for(IOrder order : engine.getOrders()){
if ( IOrder.State.OPENED == order.getState() ) {
console.getOut().println( order.getId() + " " + order.getState() + " tylko zlecenia otwarte ale niezrealizowane" );
//order,close();
}
if ( IOrder.State.FILLED == order.getState() ) {
console.getOut().println( order.getId() + " " + order.getState() + " tylko zlecenia wypełnione" );
//order,close();
}
}
return order;
}
});
}
});
Tutaj masz o tym jak kodować zlecenia
https://www.dukascopy.com/wiki/en/devel ... onal-order
Tutaj o rodzajach zleceń
https://www.dukascopy.com/client/javado ... mmand.html
Tutaj co można zrobić z tym "order" jeszcze, jakie informacje pobrać
https://www.dukascopy.com/client/javado ... Order.html np właśnie order.close() albo order.getId()
I ostatnie to właśnie status zlecenia czy jest FILLED czy dopiero OPENED
https://www.dukascopy.com/client/javado ... State.html
Możesz spróbować sam się z tym pobawić...
-- Dodano: 01 sty 2018, 18:04 --
Do sprawdzania czy pozycja jest długa czy krótka służy funkcja isLong(), czyli order.isLong(). Jest tutaj
https://www.dukascopy.com/client/javado ... tml#isLong() w dokumentacji. I robisz tak samo warunek
Kod: Zaznacz cały
if ( order.isLong() ) {
// zwraca wartosc true
console.getWarn().println( order.isLong() );
} else {
// zwaraca wartość false czyli nie jest long a short
console.getWarn().println( order.isLong() );
}
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.