Dukascopy
 
 
Wiki JStore Search Login

Attention! Read the forum rules carefully before posting a topic.

    Try to find an answer in Wiki before asking a question.
    Submit programming questions in this forum only.
    Off topics are strictly forbidden.

Any topics which do not satisfy these rules will be deleted.

JFOREX SDK how to save open position in array
 Post subject: JFOREX SDK how to save open position in array Post rating: 0   New post Posted: Tue 11 Mar, 2014, 10:26 
User avatar

User rating: 6
Joined: Tue 11 Feb, 2014, 11:38
Posts: 60
Location: PolandPoland
Hello all,

I have a question how to save open position in array

package master;

import com.dukascopy.api.system.ISystemListener;
import com.dukascopy.api.system.IClient;
import com.dukascopy.api.system.ClientFactory;
import com.dukascopy.api.*;

import java.awt.Color;
import java.awt.List;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.Writer;
import java.lang.reflect.Array;
import java.nio.file.Files;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.Set;

import javax.swing.JFrame;

import org.slf4j.LoggerFactory;
import org.slf4j.Logger;


public class MainStopFromConsole {
   
    private static final Logger LOGGER = LoggerFactory.getLogger(MainStopFromConsole.class);
    private static String jnlpUrl = "https://www.dukascopy.com/client/demo/jclient/jforex.jnlp";
    private static String userName = "DEMO2PRFwj";
    private static String password = "PRFwj";

   //static String[] columns = {"Open Time", "Id", "Label", "Comment", "Instrument", "Side", "Amount", "Orginal Amount", "Open Price", "Stop Loss", "Take Profit", "Profit (Pips)", "Profit Currency", "Profit in USD", "Commission", "Commission USD"};
    static String[] columns = {"Id", "Instrument", "Side", "Amount", "Open Price", "Stop Loss", "Take Profit"};
   //static String[][] data = {{"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16"},
   
    static String[][] data;
   //static String[][] data = null;
   //static JFrame jf = new JFrame();
   
    public static void main(String[] args) throws Exception {       
       
   
        //get the instance of the IClient interface
        final IClient client = ClientFactory.getDefaultInstance();
        //set the listener that will receive system events
        client.setSystemListener(new ISystemListener() {
            private int lightReconnects = 3;

           public void onStart(long procid) {
              //IConsole console = context.getConsole();
                LOGGER.info("Strategy started: "); 
           }

         public void onStop(long processId) {
                LOGGER.info("Strategy stopped: " + processId);   
                if (client.getStartedStrategies().size() == 0) {
                    System.exit(0);
                }
         }

         @Override
         public void onConnect() {
                LOGGER.info("Connected");
                lightReconnects = 3;
         }

         @Override
         public void onDisconnect() {
                LOGGER.warn("Disconnected");
                if (lightReconnects > 0) {
                   LOGGER.error("TRY TO RECONNECT, reconnects left: " + lightReconnects);
                    client.reconnect();
                    --lightReconnects;
                } else {
                    try {
                        //sleep for 10 seconds before attempting to reconnect
                        Thread.sleep(10000);
                    } catch (InterruptedException e) {
                        //ignore
                    }
                    try {
                        client.connect(jnlpUrl, userName, password);
                    } catch (Exception e) {
                        LOGGER.error(e.getMessage(), e);
                    }
                }
         }
      });

        LOGGER.info("Connecting...");
        //connect to the server using jnlp, user name and password
        client.connect(jnlpUrl, userName, password);

        //wait for it to connect
        int i = 10; //wait max ten seconds
        while (i > 0 && !client.isConnected()) {
            Thread.sleep(1000);
            i--;
        }
        if (!client.isConnected()) {
            LOGGER.error("Failed to connect Dukascopy servers");
            System.exit(1);
        }
       
        //subscribe to the instruments
        Set<Instrument> instruments = new HashSet<Instrument>();
        instruments.add(Instrument.EURUSD);
        LOGGER.info("Subscribing instruments...");
        client.setSubscribedInstruments(instruments);
           
        //start the strategy
        LOGGER.info("Starting strategy");
        final long strategyId = client.startStrategy(new IStrategy(){
            public Instrument instrument = Instrument.EURUSD;
            private IConsole console;
            private IEngine engine;


            public void onStart(IContext context) throws JFException {       
                console = context.getConsole();   
                engine = context.getEngine();

            }
            public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {
                if ( instrument == this.instrument){
                   //console.getOut().println(" bar: " + period  + " " + askBar);
                }
            }

         public void onTick(Instrument instrument, ITick tick) throws JFException {
               
                try {
                   // Create file
                   //Writer fstream = new FileWriter("/home/gin/Pulpit/out.txt");
                   //BufferedWriter out = new BufferedWriter(fstream);
                   //String newLine = System.getProperty("line.separator");
                  
                 int xx = 1;
                 data[0][1] = "1";
              for(IOrder o : engine.getOrders()){
                     if(o.getProfitLossInUSD() != 987654231){
                         console.getOut().println("Order: " + o.getInstrument() + " " + o.getProfitLossInPips() + " " + o.getOrderCommand());
                        
                        
                         // Copy orders to array
                         String userHash = "1";
                         String positionOpenTime = "" + o.getFillTime();
                         String positionId = "" + o.getId();
                         String positionInstrument = "" + o.getInstrument();
                         String positionIsbuy = "" + o.getOrderCommand().isLong();
                         String positionVolume = "" + o.getAmount();
                         String positionOpen = "" + o.getOpenPrice();
                         String positionSl = "" + o.getStopLossPrice();
                         String positionTp = "" + o.getTakeProfitPrice();
                         String positionComment = "" + o.getComment();
                        

                        
                         data[xx][0] = userHash;
                         data[xx][1] = positionOpenTime;
                         data[xx][2] = positionId;
                         data[xx][3] = positionInstrument;
                         data[xx][4] = positionIsbuy;
                         data[xx][5] = positionVolume;
                         data[xx][6] = positionOpen;
                         data[xx][7] = positionSl;
                         data[xx][8] = positionTp;
                         data[xx][9] = positionComment;
                      
                         xx++;
                     }
                      xx=0;               

                 }
              console.getOut().println("=====================================================================================" );
       
              System.out.println(Arrays.deepToString(data));
              } catch (Exception e) {
                  console.getErr().println(e.getMessage());
                  e.printStackTrace(console.getErr());
                 // context.stop();
              }
                              
         console.getOut().println("=====================================================================================" );
                     
               
               
            }
            public void onMessage(IMessage message) throws JFException {    }
            public void onAccount(IAccount account) throws JFException {    }
            public void onStop() throws JFException {    }
        });
        //now it's running
       
        //every second check if "stop" had been typed in the console - if so - then stop the strategy
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {   
               
               Scanner s = new Scanner(System.in);               
               while(true){
                  while(s.hasNext()){
                     String str = s.next();
                     if(str.equalsIgnoreCase("stop")){
                        System.out.println("Strategy stop by console command.");
                        client.stopStrategy(strategyId);
                     }
                  }
                  try {
                  Thread.sleep(1000);
               } catch (InterruptedException e) {
                  e.printStackTrace();
               }
               }
            }
            });
        thread.start();
       
    }
}



but in console

=====================================================================================
null
java.lang.NullPointerException
   at master.MainStopFromConsole$2.onTick(MainStopFromConsole.java:152)
   at com.dukascopy.api.impl.execution.TaskTick.postData(TaskTick.java:67)
   at com.dukascopy.api.impl.execution.AbstractPostDataTask.call(AbstractPostDataTask.java:43)
   at java.util.concurrent.FutureTask.run(FutureTask.java:262)
   at com.dukascopy.api.impl.execution.ScienceThreadPoolExecutor$Worker.runTask(ScienceThreadPoolExecutor.java:904)
   at com.dukascopy.api.impl.execution.ScienceThreadPoolExecutor$Worker.run(ScienceThreadPoolExecutor.java:926)
   at java.lang.Thread.run(Thread.java:744)
=====================================================================================


:roll: what I'm doing wrong

Have a nice day
zix


 
 Post subject: Re: JFOREX SDK how to save open position in array Post rating: 0   New post Posted: Tue 11 Mar, 2014, 11:23 
User avatar

User rating:
Joined: Fri 31 Aug, 2007, 09:17
Posts: 6139
you need to initialize the array, e.g.
static String[][] data = new String[10][10];

see more on arrays:
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html


 
 Post subject: Re: JFOREX SDK how to save open position in array Post rating: 0   New post Posted: Tue 11 Mar, 2014, 12:38 
User avatar

User rating: 6
Joined: Tue 11 Feb, 2014, 11:38
Posts: 60
Location: PolandPoland
Thank you works perfectly
zix


 
 Post subject: Re: JFOREX SDK how to save open position in array Post rating: 0   New post Posted: Tue 11 Mar, 2014, 12:50 
User avatar

User rating: 6
Joined: Tue 11 Feb, 2014, 11:38
Posts: 60
Location: PolandPoland
display open position in console and write to array

package master;

import com.dukascopy.api.system.ISystemListener;
import com.dukascopy.api.system.IClient;
import com.dukascopy.api.system.ClientFactory;
import com.dukascopy.api.*;

import java.awt.Color;
import java.awt.List;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.Writer;
import java.lang.reflect.Array;
import java.nio.file.Files;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.Set;

import javax.swing.JFrame;

import org.slf4j.LoggerFactory;
import org.slf4j.Logger;


public class MainStopFromConsole {
   
    private static final Logger LOGGER = LoggerFactory.getLogger(MainStopFromConsole.class);
    private static String jnlpUrl = "https://www.dukascopy.com/client/demo/jclient/jforex.jnlp";
    private static String userName = "DEMO2PRFwj";
    private static String password = "PRFwj";

   //static String[] columns = {"Open Time", "Id", "Label", "Comment", "Instrument", "Side", "Amount", "Orginal Amount", "Open Price", "Stop Loss", "Take Profit", "Profit (Pips)", "Profit Currency", "Profit in USD", "Commission", "Commission USD"};
    static String[] columns = {"Id", "Instrument", "Side", "Amount", "Open Price", "Stop Loss", "Take Profit"};
   //static String[][] data = {{"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16"},
   
    static String[][] data = new String[50][11];
   //static String[][] data = null;
   //static JFrame jf = new JFrame();
   
    public static void main(String[] args) throws Exception {       
       
   
        //get the instance of the IClient interface
        final IClient client = ClientFactory.getDefaultInstance();
        //set the listener that will receive system events
        client.setSystemListener(new ISystemListener() {
            private int lightReconnects = 3;

           public void onStart(long procid) {
              //IConsole console = context.getConsole();
                LOGGER.info("Strategy started: "); 
           }

         public void onStop(long processId) {
                LOGGER.info("Strategy stopped: " + processId);   
                if (client.getStartedStrategies().size() == 0) {
                    System.exit(0);
                }
         }

         @Override
         public void onConnect() {
                LOGGER.info("Connected");
                lightReconnects = 3;
         }

         @Override
         public void onDisconnect() {
                LOGGER.warn("Disconnected");
                if (lightReconnects > 0) {
                   LOGGER.error("TRY TO RECONNECT, reconnects left: " + lightReconnects);
                    client.reconnect();
                    --lightReconnects;
                } else {
                    try {
                        //sleep for 10 seconds before attempting to reconnect
                        Thread.sleep(10000);
                    } catch (InterruptedException e) {
                        //ignore
                    }
                    try {
                        client.connect(jnlpUrl, userName, password);
                    } catch (Exception e) {
                        LOGGER.error(e.getMessage(), e);
                    }
                }
         }
      });

        LOGGER.info("Connecting...");
        //connect to the server using jnlp, user name and password
        client.connect(jnlpUrl, userName, password);

        //wait for it to connect
        int i = 10; //wait max ten seconds
        while (i > 0 && !client.isConnected()) {
            Thread.sleep(1000);
            i--;
        }
        if (!client.isConnected()) {
            LOGGER.error("Failed to connect Dukascopy servers");
            System.exit(1);
        }
       
        //subscribe to the instruments
        Set<Instrument> instruments = new HashSet<Instrument>();
        instruments.add(Instrument.EURUSD);
        LOGGER.info("Subscribing instruments...");
        client.setSubscribedInstruments(instruments);
           
        //start the strategy
        LOGGER.info("Starting strategy");
        final long strategyId = client.startStrategy(new IStrategy(){
            public Instrument instrument = Instrument.EURUSD;
            private IConsole console;
            private IEngine engine;


            public void onStart(IContext context) throws JFException {       
                console = context.getConsole();   
                engine = context.getEngine();

            }
            public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {
                if ( instrument == this.instrument){
                   //console.getOut().println(" bar: " + period  + " " + askBar);
                }
            }

         public void onTick(Instrument instrument, ITick tick) throws JFException {
               
                try {
                   // Create file
                   //Writer fstream = new FileWriter("/home/gin/Pulpit/out.txt");
                   //BufferedWriter out = new BufferedWriter(fstream);
                   //String newLine = System.getProperty("line.separator");
                  
                 int xx = 0;
                 //data[0][1] = "1";
              for(IOrder o : engine.getOrders()){
                     if(o.getProfitLossInUSD() != 987654231){
                         console.getOut().println("Order: " + o.getInstrument() + " " + o.getProfitLossInPips() + " " + o.getOrderCommand());
                        
                        
                         // Copy orders to array
                         String userHash = "1";
                         String positionOpenTime = "" + o.getFillTime();
                         String positionId = "" + o.getId();
                         String positionInstrument = "" + o.getInstrument();
                         String positionIsbuy = "" + o.getOrderCommand().isLong();
                         String positionVolume = "" + o.getAmount();
                         String positionOpen = "" + o.getOpenPrice();
                         String positionSl = "" + o.getStopLossPrice();
                         String positionTp = "" + o.getTakeProfitPrice();
                         String positionComment = "" + o.getComment();
                        

                        
                         data[xx][0] = userHash;
                         data[xx][1] = positionOpenTime;
                         data[xx][2] = positionId;
                         data[xx][3] = positionInstrument;
                         data[xx][4] = positionIsbuy;
                         data[xx][5] = positionVolume;
                         data[xx][6] = positionOpen;
                         data[xx][7] = positionSl;
                         data[xx][8] = positionTp;
                         data[xx][9] = positionComment;
                      
                         xx++;
                     }
                           

                 }
              xx=0;
              console.getOut().println("=====================================================================================" );
       
              System.out.println(Arrays.deepToString(data));
              } catch (Exception e) {
                  console.getErr().println(e.getMessage());
                  e.printStackTrace(console.getErr());
                 // context.stop();
              }
                              
         console.getOut().println("=====================================================================================" );
                     
               
               
            }
            public void onMessage(IMessage message) throws JFException {    }
            public void onAccount(IAccount account) throws JFException {    }
            public void onStop() throws JFException {    }
        });
        //now it's running
       
        //every second check if "stop" had been typed in the console - if so - then stop the strategy
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {   
               
               Scanner s = new Scanner(System.in);               
               while(true){
                  while(s.hasNext()){
                     String str = s.next();
                     if(str.equalsIgnoreCase("stop")){
                        System.out.println("Strategy stop by console command.");
                        client.stopStrategy(strategyId);
                     }
                  }
                  try {
                  Thread.sleep(1000);
               } catch (InterruptedException e) {
                  e.printStackTrace();
               }
               }
            }
            });
        thread.start();
       
    }
}



 

Jump to:  

  © 1998-2025 Dukascopy® Bank SA
On-line Currency forex trading with Swiss Forex Broker - ECN Forex Brokerage,
Managed Forex Accounts, introducing forex brokers, Currency Forex Data Feed and News
Currency Forex Trading Platform provided on-line by Dukascopy.com