Depth Of Market (DOM) [jForex]

O jezykach programowania w platformach i nie tylko.

Znasz java?

tak
3
21%
tak - koduje w jForex
1
7%
nie
7
50%
nie - jestem programistą
3
21%
 
Liczba głosów: 14

Awatar użytkownika
reptile
Maniak
Maniak
Posty: 2799
Rejestracja: 13 gru 2008, 13:48

Depth Of Market (DOM) [jForex]

Nieprzeczytany post autor: reptile »

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
R.E.P.T.I.L.E. - Robotic Electronic Person Trained for Infiltration and Logical Exploration (off-line,only e-mail)

MkubuxK
Pasjonat
Pasjonat
Posty: 1051
Rejestracja: 20 maja 2009, 18:27

Nieprzeczytany post autor: MkubuxK »

No nic, przypomnę zaraz sobie to API i spróbuję napisać jeśli nie ma gotowca.

Dodano po 23 minutach:

Czy taki układ również będzie w porządku ?

Time ( Long ), ask price, bid price , total ask volume, total bid volume, ask volumes ( double array ), bid volumes ( double array )
fx-forum

Awatar użytkownika
matka
Pasjonat
Pasjonat
Posty: 642
Rejestracja: 17 lis 2008, 15:53

Nieprzeczytany post autor: matka »

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.
Obrazek
Unfortunately, more to come

MkubuxK
Pasjonat
Pasjonat
Posty: 1051
Rejestracja: 20 maja 2009, 18:27

Nieprzeczytany post autor: MkubuxK »

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 ;)

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

Awatar użytkownika
matka
Pasjonat
Pasjonat
Posty: 642
Rejestracja: 17 lis 2008, 15:53

Nieprzeczytany post autor: matka »

MkubuxK pisze:Time ( Long ), ask price, bid price , total ask volume, total bid volume, ask volumes ( double array ), bid volumes ( double array )
Chciałem poczytać dokumentację, bo DOM jawi mi się bardziej jako tabela niż wiersz ;)
Obrazek
Unfortunately, more to come

MkubuxK
Pasjonat
Pasjonat
Posty: 1051
Rejestracja: 20 maja 2009, 18:27

Nieprzeczytany post autor: MkubuxK »

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
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
fx-forum

Awatar użytkownika
reptile
Maniak
Maniak
Posty: 2799
Rejestracja: 13 gru 2008, 13:48

Nieprzeczytany post autor: reptile »

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?
Nie ma sensu..bo ten DOM to lipa.. to samo CNX :mrgreen: big sciemas..
Już wywiad i doktorat zrobiony.. dlatego zostałem przy futach

MkubuxK dzięki za wyręczenie :D

Dodano po 22 minutach:
matka pisze:W życiu nie widziałem, żeby ktoś takie dane obrabiał mechanicznie.
Przejrzyj nanexa itp.. nie takie rzeczy robią ludzie.
R.E.P.T.I.L.E. - Robotic Electronic Person Trained for Infiltration and Logical Exploration (off-line,only e-mail)

Awatar użytkownika
Esco
Przyjaciel Forum
Przyjaciel Forum
Posty: 2603
Rejestracja: 11 kwie 2010, 20:56

Nieprzeczytany post autor: Esco »

matka pisze: Chciałem poczytać dokumentację, bo DOM jawi mi się bardziej jako tabela niż wiersz Wink
To tylko kwestia prezentacji danych.
matka pisze:W życiu nie widziałem, żeby ktoś takie dane obrabiał mechanicznie.
Jestem sobie w stanie to wyobrazić ale nie łatwo.
:lol:

Awatar użytkownika
matka
Pasjonat
Pasjonat
Posty: 642
Rejestracja: 17 lis 2008, 15:53

Nieprzeczytany post autor: matka »

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?
Obrazek
Unfortunately, more to come

MkubuxK
Pasjonat
Pasjonat
Posty: 1051
Rejestracja: 20 maja 2009, 18:27

Nieprzeczytany post autor: MkubuxK »

matka 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?
epoch czyli wartość Long

Kod: Zaznacz cały

String date = new java.text.SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(new java.util.Date (epoch*1000));
W jakim formacie chciałbyś mieć datę ? Bo teraz trzeba się odwołać do date.

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

ODPOWIEDZ