Depth Of Market (DOM) [jForex]
Depth Of Market (DOM) [jForex]
Pisze ktoś pod jForex obecnie?
Trzeba zrobić save do ..csv co ms w wiersz wartości DOM w kontekscie tematu Orderflow i Struktura rynkow
datetime_platformy,local_time;local_ms_time;ask,bid;Ask_Volume1,Ask_Volume2..3...4 ;Bid_Volume1,Bid_Volume2;..3...4
http://www.dukascopy.com/client/javadoc ... ITick.html
Trzeba zrobić save do ..csv co ms w wiersz wartości DOM w kontekscie tematu Orderflow i Struktura rynkow
datetime_platformy,local_time;local_ms_time;ask,bid;Ask_Volume1,Ask_Volume2..3...4 ;Bid_Volume1,Bid_Volume2;..3...4
http://www.dukascopy.com/client/javadoc ... ITick.html
R.E.P.T.I.L.E. - Robotic Electronic Person Trained for Infiltration and Logical Exploration (off-line,only e-mail)
MkubuxK podesłał byś linka do tego miejsca w dokumentacji API?
Ma ktoś pomysł na jakiś innych dostawców? Trochę się obawiam, że u tych poważnych nie można sobie założyć konta bez grubego depo i obrotu. Może jakieś demo?
Ważna sprawa: na tą chwilę nie mam zielonego pojęcia co z takimi danymi zrobić. Jeśli dobrze to widzę, to jest zupełnie inna forma niż szereg czasowy. W życiu nie widziałem, żeby ktoś takie dane obrabiał mechanicznie.
Ma ktoś pomysł na jakiś innych dostawców? Trochę się obawiam, że u tych poważnych nie można sobie założyć konta bez grubego depo i obrotu. Może jakieś demo?
Ważna sprawa: na tą chwilę nie mam zielonego pojęcia co z takimi danymi zrobić. Jeśli dobrze to widzę, to jest zupełnie inna forma niż szereg czasowy. W życiu nie widziałem, żeby ktoś takie dane obrabiał mechanicznie.
Załóż konto Demo w dukasie. Narazie tutaj spróbujemy. Jeśli dobrze by poszło myślę że można spróbować pod API podłączyć się ( powiedzmy FXCM , podobno duży wolumen mają ). Nie zapisuje przy każdym ticku wszystkich wartości ( lecz co parę ticków ) po stronie Ask i Bid. Narazie nie wiem czym to jest spowodowane. Zapisuje natomiast zawsze wolumen po stronie ask i bid. Zawsze dodatkowa informacja.
Jak otworzysz platformę JForex naciśnij utwórz nową strategię. Skopiuj ten kod i skompiluj. Będzie zapisywać dane do pliku na dysku C:/DOMdata.csv
*UPDATE* Zapisuje już ok. Także odpalamy komputery i zapisujemy
Dodano po 14 minutach:
I już znalazłem pierwszy problem. Trzeba będzie zapisywać trochę więcej bo wolumen nie jest rozrzucony równiemiernie. Tzn te wielkości nie są co 0.1pkt powiedzmy lecz w różnych odległościach. Przerobię jeszcze szybko ten plik, żeby zapisywał również ceny Ask i Bid na których leży ten wolumen.
*UPDATE2*
Finalnie poprawiony kod. Zapisuje już wszystkie dane jakie można uzyskać z DOM Dukascopy.
Jak otworzysz platformę JForex naciśnij utwórz nową strategię. Skopiuj ten kod i skompiluj. Będzie zapisywać dane do pliku na dysku C:/DOMdata.csv
*UPDATE* Zapisuje już ok. Także odpalamy komputery i zapisujemy
Kod: Zaznacz cały
package jforex;
import java.util.*;
import com.dukascopy.api.*;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
@RequiresFullAccess
public class DOMwriter implements IStrategy {
private IEngine engine;
private IConsole console;
private IHistory history;
private IContext context;
private IIndicators indicators;
private IUserInterface userInterface;
public double[] bidVolumes;
public double[] askVolumes;
public double bidVolume;
public double askVolume;
public long time;
public BufferedWriter writer;
double[] getAsks;
double[] getBids;
public void onStart(IContext context) throws JFException {
this.engine = context.getEngine();
this.console = context.getConsole();
this.history = context.getHistory();
this.context = context;
this.indicators = context.getIndicators();
this.userInterface = context.getUserInterface();
try{
writer =new BufferedWriter( new FileWriter("c://DOMdata2.csv"));
writer.append("Time");
writer.append(',');
writer.append("Ask");
writer.append(',');
writer.append("Bid");
writer.append(',');
writer.append("Total Ask Volume");
writer.append(',');
writer.append("Total Bid Volume");
writer.append(',');
writer.append("Ask Price1");
writer.append(',');
writer.append("Ask Vol1");
writer.append(',');
writer.append("Ask Price2");
writer.append(',');
writer.append("Ask Vol2");
writer.append(',');
writer.append("Ask Price3");
writer.append(',');
writer.append("Ask Vol3");
writer.append(',');
writer.append("Ask Price4");
writer.append(',');
writer.append("Ask Vol4");
writer.append(',');
writer.append("Ask Price5");
writer.append(',');
writer.append("Ask Vol5");
writer.append(',');
writer.append("Ask Price6");
writer.append(',');
writer.append("Ask Vol6");
writer.append(',');
writer.append("Ask Price7");
writer.append(',');
writer.append("Ask Vol7");
writer.append(',');
writer.append("Ask Price8");
writer.append(',');
writer.append("Ask Vol8");
writer.append(',');
writer.append("Ask Price9");
writer.append(',');
writer.append("Ask Vol9");
writer.append(',');
writer.append("Ask Price10");
writer.append(',');
writer.append("Ask Vol10");
writer.append(',');
writer.append("Bid Price1");
writer.append(',');
writer.append("Bid Vol1");
writer.append(',');
writer.append("Bid Price2");
writer.append(',');
writer.append("Bid Vol2");
writer.append(',');
writer.append("Bid Price3");
writer.append(',');
writer.append("Bid Vol3");
writer.append(',');
writer.append("Bid Price4");
writer.append(',');
writer.append("Bid Vol4");
writer.append(',');
writer.append("Bid Price5");
writer.append(',');
writer.append("Bid Vol5");
writer.append(',');
writer.append("Bid Price6");
writer.append(',');
writer.append("Bid Vol6");
writer.append(',');
writer.append("Bid Price7");
writer.append(',');
writer.append("Bid Vol7");
writer.append(',');
writer.append("Bid Price8");
writer.append(',');
writer.append("Bid Vol8");
writer.append(',');
writer.append("Bid Price9");
writer.append(',');
writer.append("Bid Vol9");
writer.append(',');
writer.append("Bid Price10");
writer.append(',');
writer.append("Bid Vol10");
writer.append('\n');
}catch(IOException e)
{
e.printStackTrace();
}
}
public void onAccount(IAccount account) throws JFException {
}
public void onMessage(IMessage message) throws JFException {
}
public void onStop() throws JFException {
try{ writer.close();}catch(IOException e)
{
e.printStackTrace();
}
}
public void onTick(Instrument instrument, ITick tick) throws JFException {
if ( instrument!= Instrument.EURUSD) return; // odrzuca wszystkie inne pary anizeli eurusd
bidVolumes=tick.getBidVolumes();
askVolumes=tick.getAskVolumes();
askVolume=tick.getTotalAskVolume();
bidVolume=tick.getTotalBidVolume();
time=tick.getTime();
String time2=Long.toString(time);
double askPrice=tick.getAsk();
double bidPrice=tick.getBid();
getAsks=tick.getAsks();
getBids=tick.getBids();
try{
writer.write(time2);
writer.append(",");
writer.write(Double.toString(askPrice));
writer.append(",");
writer.write(Double.toString(bidPrice));
writer.append(",");
writer.write(Double.toString(askVolume));
writer.append(",");
writer.write(Double.toString(bidVolume));
writer.append(",");
for(int a=0;a<askVolumes.length;a++){
writer.write(Double.toString(getAsks[a]));
writer.append(",");
writer.write(Double.toString(askVolumes[a]));
writer.append(",");
}
for(int a=0;a<bidVolumes.length;a++){
writer.write(Double.toString(getBids[a]));
writer.append(",");
writer.write(Double.toString(bidVolumes[a]));
writer.append(",");
}
writer.append("\n");
writer.flush();
}catch(IOException e)
{
e.printStackTrace();
}
}
public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {
}
}
Dodano po 14 minutach:
I już znalazłem pierwszy problem. Trzeba będzie zapisywać trochę więcej bo wolumen nie jest rozrzucony równiemiernie. Tzn te wielkości nie są co 0.1pkt powiedzmy lecz w różnych odległościach. Przerobię jeszcze szybko ten plik, żeby zapisywał również ceny Ask i Bid na których leży ten wolumen.
*UPDATE2*
Finalnie poprawiony kod. Zapisuje już wszystkie dane jakie można uzyskać z DOM Dukascopy.
Ostatnio zmieniony 23 maja 2012, 00:14 przez MkubuxK, łącznie zmieniany 2 razy.
fx-forum
Bo to jest tabela. Tyle że w Dukascopy mamy możliwość odczytania tylko 10 wartości w góre i w dół. Zapisuje tak jakby tabelę w wierszu co tick.
http://www.dukascopy.com/client/javadoc ... ITick.html
http://www.dukascopy.com/client/javadoc ... ITick.html
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
fx-forum
Nie ma sensu..bo ten DOM to lipa.. to samo CNX big sciemas..matka pisze:Ma ktoś pomysł na jakiś innych dostawców? Trochę się obawiam, że u tych poważnych nie można sobie założyć konta bez grubego depo i obrotu. Może jakieś demo?
Już wywiad i doktorat zrobiony.. dlatego zostałem przy futach
MkubuxK dzięki za wyręczenie
Dodano po 22 minutach:
Przejrzyj nanexa itp.. nie takie rzeczy robią ludzie.matka pisze:W życiu nie widziałem, żeby ktoś takie dane obrabiał mechanicznie.
R.E.P.T.I.L.E. - Robotic Electronic Person Trained for Infiltration and Logical Exploration (off-line,only e-mail)
epoch czyli wartość Longmatka pisze:Mam prośbę o podpowiedź, co trzeba zmienić, żeby zapisywał timestamp nie jako epoch tylko zwyczajnie?
EDIT:
@Reptile: skąd wziąć taki pełnowymiarowy DoM o którym pisałeś dla fx?
Kod: Zaznacz cały
String date = new java.text.SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(new java.util.Date (epoch*1000));
Ja tak jak pisałem dopiero w weekend zajmę się analizą danych. Wstępnie pobawiłem się danymi, mam jakieś pierwsze wnioski ale jeszcze długa droga przede mną.
fx-forum