Dukascopy
 
 
Wiki JStore Search Login

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

    Submit JForex API bug reports in this forum only.
    Submit Converter issues in Converter Issues.
    Off topics are strictly forbidden.

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

Failed to load in-progress candle data 2.44.7 (restored)
 Post subject: Failed to load in-progress candle data 2.44.7 (restored) Post rating: 0   New post Posted: Tue 18 Aug, 2015, 15:28 
Visual JForex expert at Dukascopy
User avatar

User rating:
Joined: Mon 22 Apr, 2013, 11:30
Posts: 604
Location: UkraineUkraine
Marston:
I have some problems loading the feed price all currencies with jForex SDK 2.44.7. Please fix it.
com.dukascopy.api.JFException: com.dukascopy.charts.data.datacache.DataCacheException: Failed to load in-progress candle data in timeout period [AUD/CAD, 4 Hours, Bid]

API Support:
This happens because data loading took too long.
That can be solved by loading fewer instruments at once and restarting download with other instruments when the first ones have finished.

Marston:
Intraday is too long??

API Support:
Please run the JClient with open java console and post console output here.
Here is a descriptoin on how to enable the console: https://www.java.com/en/download/help/javaconsole.xml
Please note that if there are charts open, the platform will load all the data for those instruments.
Speed of data loading may also be limited due to the internet connection speeds.

fxbird:
I have the same problem with history.getBar(instrument, period, OfferSide.BID, 1);
com.dukascopy.charts.data.datacache.DataCacheException: Failed to load in-progress candle data in timeout period [EUR/USD, 30 Mins, Bid]
at com.dukascopy.api.impl.History.getBarsSecured(History.java:596)
at com.dukascopy.api.impl.History$10.run(History.java:527)
at com.dukascopy.api.impl.History$10.run(History.java:524)
at java.security.AccessController.doPrivileged(Native Method)
at com.dukascopy.api.impl.History.getBars(History.java:524)
at com.dukascopy.api.impl.History.getHistoryBarBlocking(History.java:227)
at com.dukascopy.api.impl.History.getBar(History.java:196)
If I revert to 2.43.2, the same code works fine all the time in my unit tests! Is there a regression in 2.44.7?
My code is simple and I load only one instrument in my unit testing.
duka.instance.startStrategy(new GetContextForTesting());
IHistory history = GetContextForTesting.getHistory();
Instrument instrument = DukaTools.subscribeToInstrument(GetContextForTesting.getContext(), "EUR", "USD");
IBar prevBar = history.getBar(instrument, period, OfferSide.BID, 1);
I am going back to 2.43.2 for now...
PS: my connection speed is 250Mbit/s, and that would not explain why it works with 2.43.2

Marston:
2015-06-03 11:48:24.343 ERROR DCClientImpl$DefaultStrategyExceptionHandler - Exception thrown while running onTick method: com.dukascopy.charts.data.datacache.DataCacheException: Failed to load in-progress candle data in timeout period [EUR/USD, 1 Min, Bid]
com.dukascopy.api.JFException: com.dukascopy.charts.data.datacache.DataCacheException: Failed to load in-progress candle data in timeout period [EUR/USD, 1 Min, Bid]
at com.dukascopy.api.impl.History.getBar(History.java:198)
at OrdCommand.onTick(OrdCommand.java:475)
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:266)
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)
Caused by: com.dukascopy.charts.data.datacache.DataCacheException: Failed to load in-progress candle data in timeout period [EUR/USD, 1 Min, Bid]
at com.dukascopy.charts.data.datacache.IntraperiodCandlesGenerator.getInProgressCandleBlocking(IntraperiodCandlesGenerator.java:1255)
at com.dukascopy.charts.data.datacache.FeedDataProvider.getInProgressCandleBlocking(FeedDataProvider.java:1502)
at com.dukascopy.api.impl.History.getCurrentBar(History.java:204)
at com.dukascopy.api.impl.History.getBar(History.java:193)
... 7 more
Stopping "OrdCommand" strategy at 2015-06-03 09:48:27.082 GMT on the local computer
2015-06-03 11:48:24.353 INFO DCClientImpl - Strategy stopped: 80
Strategy "OrdCommand" is stopped at 2015-06-03 09:48:27.293 GMT on the local computer with no parameters. Reason: Stopped by Engine

fxbird:
I updated my POM today and I tested with 2.45.2. The same problem is still there and can be reproduced each time I run my unit test.
So the issue is there with 2.45.2 and 2.44.7, but it works fine with 2.43.2. I will stay on 2.43.2 until this problem is fixed.

API Support:
We were unable to reproduce this. Please provide full code example.

fxbird:
Ok. The following basic unit test works fine with 2.43.2, but not with 2.44.7 or 2.45.2:

package forex.tools;

import com.dukascopy.api.IBar;
import com.dukascopy.api.IContext;
import com.dukascopy.api.IHistory;
import com.dukascopy.api.Instrument;
import com.dukascopy.api.OfferSide;
import com.dukascopy.api.Period;
import com.dukascopy.api.system.ClientFactory;
import com.dukascopy.api.system.IClient;
import forex.strategy.GetContext;
import lombok.extern.slf4j.Slf4j;
import org.joda.time.DateTime;
import org.junit.Test;

import java.util.List;
import java.util.Set;

/**
* To reproduce dukascopy bug
* Created by Eric on 15/06/2015.
*/
@Slf4j
public class LoadingBarBug {
private static final String url = "https://www.dukascopy.com/client/demo/jclient/jforex.jnlp";
private static final String u = "";
private static final String pw = "";

@Test
public void mainTest() throws Throwable {
try {
Instrument instrument = Instrument.EURCAD;
Period period = Period.DAILY;

IClient instance = ClientFactory.getDefaultInstance();
instance.connect(url, u, pw);
int sec = 10;
while (sec > 0 && !instance.isConnected()) { //wait for it to connect
Thread.sleep(1000);
sec--;
}

instance.startStrategy(new GetContext());
IHistory history = GetContext.getHistory();
IContext context = GetContext.getContext();

Set<Instrument> subscribedInstruments = context.getSubscribedInstruments();
subscribedInstruments.add(instrument);
context.setSubscribedInstruments(subscribedInstruments, true);
// wait if instrument is not subscribed or we don't have any LastTick yet
int i = 200;
while ((!context.getSubscribedInstruments().contains(instrument)
|| context.getHistory().getLastTick(instrument) == null)
&& i >= 0) {
Thread.sleep(20);
i--;
}

DateTime time = new DateTime("2015-06-09T00:00:06.000Z");
long startTime = history.getBarStart(period, time.getMillis());
IBar prevBar = history.getBar(instrument, period, OfferSide.BID, 1);
List bars = history.getBars(instrument, period, OfferSide.BID, startTime, prevBar.getTime());

log.info(prevBar.toString());
log.info(bars.toString());
} catch (Exception e) {
log.error(e.toString(), e);
throw e
}
}
}


Here is the strategy for this test (only to get context and history, nothing else)
package forex.strategy;

import com.dukascopy.api.*;
import lombok.Getter;

/**
* Only to get history in testing.
* Created by Eric on 14/04/2015.
*/
public class GetContext implements IStrategy {
@Getter
private static IHistory history;
@Getter
private static IContext context;
@Getter
private static IIndicators indicators;
@Getter
private static IDataService dataService;


@Override
public void onStart(final IContext contextParam) throws JFException {
context = contextParam;
history = context.getHistory();
indicators = context.getIndicators();
dataService = contextParam.getDataService();
}

@Override
public void onTick(final Instrument instrument, final ITick tick) throws JFException {

}

@Override
public void onBar(final Instrument instrument, final Period period, final IBar askBar, final IBar bidBar) throws JFException {

}

@Override
public void onMessage(final IMessage message) throws JFException {

}

@Override
public void onAccount(final IAccount account) throws JFException {

}

@Override
public void onStop() throws JFException {

}
}


 
 Post subject: Re: Failed to load in-progress candle data 2.44.7 (restored) Post rating: 0   New post Posted: Tue 18 Aug, 2015, 15:30 
Visual JForex expert at Dukascopy
User avatar

User rating:
Joined: Mon 22 Apr, 2013, 11:30
Posts: 604
Location: UkraineUkraine
API Support:
There are not definition for DukaTools class.

fxbird:
I replaced:
DukaTools.connect(instance, url, u, pw);
by
instance.connect(url, u, pw);
int sec = 10;
while (sec > 0 && !instance.isConnected()) { //wait for it to connect
Thread.sleep(1000);
sec--;
}

in the code posted above.

fxbird:
Still not working with version 2.45.14 :shock:
I have to stay on version 2.43.2 as this bug has been present on all versions since 2.43.2 :cry:
From what I see on the forum, I am not the only one having problems loadings bars in recent versions :!:
I wrote a test case so that you can easily reproduce the problem, but I haven't seen any update since and that was more that one month ago :?

API Support:
Greetings.

All the time starting from your report we were not stopping investigation of the problem.
Because issue was not replicated in many different tests, we can say that it is a floating bug that appears in rare specific conditions.
So please provide extensive information about conditions and environment in which the issue appears.
OS, Java ver, JForex platform or SDK ver, complete code, time of appearance, trading instrument, Java Console log or any other information would be helpful from your side.

Best Regards, Support Team.

fxbird:
Dear Support team, thank you for the update.

For me it happens:
- every single time I run my test program (code at the end of this message) with versions 2.44.7, 2.45.2 and 2.45.14 with my live and demo account.
- never with version 2.43.2.

Here is what you are asking for:
- OS: Windows 8.1 and Windows 10
- Java: jdk1.7.0_71
- API version: I see the exception with versions 2.44.7, 2.45.2 and 2.45.14 for DDS2-jClient-JForex (I am using maven). I don't see the exception with version 2.43.2.
- Time of appearance: each time I run this test code at any time of day or night whether market is opened or closed. However, sometimes I get the exception in history.getBar() (line 58 in my code) and sometimes in history.getBars() (line 64 in my code).
- Trading instrument: apparently any instrument and any period. I just tried with EURCAD daily and 4Hours as well as GBPUSD 4Hours and got an exception in both cases
- Exception I got today when testing with version 2.45.14:
com.dukascopy.api.JFException: Error while loading bars
at com.dukascopy.api.impl.History.getBarsSecured(History.java:582)
at com.dukascopy.api.impl.History$10.run(History.java:532)
at com.dukascopy.api.impl.History$10.run(History.java:529)
at java.security.AccessController.doPrivileged(Native Method)
at com.dukascopy.api.impl.History.getBars(History.java:529)
at com.dukascopy.api.impl.History.getHistoryBarBlocking(History.java:232)
at com.dukascopy.api.impl.History.getBar(History.java:201)
at forex.tools.LoadingBarBug.mainTest(LoadingBarBug.java:58)

It's quite strange that I can reproduce it systematically with the versions I mentioned and that you have trouble to replicate it. I am wondering what's different. Let me know if I can provide any additional information that can help you, or do any further test...

My test code:
package forex.tools;

import com.dukascopy.api.IBar;
import com.dukascopy.api.IContext;
import com.dukascopy.api.IHistory;
import com.dukascopy.api.Instrument;
import com.dukascopy.api.OfferSide;
import com.dukascopy.api.Period;
import com.dukascopy.api.system.ClientFactory;
import com.dukascopy.api.system.IClient;
import forex.strategy.GetContext;
import lombok.extern.slf4j.Slf4j;
import org.joda.time.DateTime;
import org.junit.Test;

import java.util.List;
import java.util.Set;

/**
* To reproduce dukascopy bug
* Created on 15/06/2015.
*/
@Slf4j
public class LoadingBarBug {
private static final String url = "https://www.dukascopy.com/client/demo/jclient/jforex.jnlp";
private static final String u = "";
private static final String pw = "";

@Test
public void mainTest() throws Throwable {
try {

IClient instance = ClientFactory.getDefaultInstance();
instance.connect(url, u, pw);
int sec = 10;
while (sec > 0 && !instance.isConnected()) { //wait for it to connect
Thread.sleep(1000);
sec--;
}
instance.startStrategy(new GetContext());
IHistory history = GetContext.getHistory();
IContext context = GetContext.getContext();
/*************************************************/
Instrument instrument = Instrument.EURCAD;
Period period = Period.FOUR_HOURS;
/*************************************************/
Set<Instrument> subscribedInstruments = context.getSubscribedInstruments();
subscribedInstruments.add(instrument);
context.setSubscribedInstruments(subscribedInstruments, true);
int i = 200;
while ((!context.getSubscribedInstruments().contains(instrument)
|| context.getHistory().getLastTick(instrument) == null)
&& i >= 0) {
Thread.sleep(20);
i--;
}

IBar prevBar = history.getBar(instrument, period, OfferSide.BID, 1);
log.info(prevBar.toString());
DateTime time = new DateTime("2015-07-15T00:10:06.000Z");
long startTime = history.getBarStart(period, time.getMillis());
log.info(new DateTime(startTime).toString());
long endTime = prevBar.getTime();
List bars = history.getBars(instrument, period, OfferSide.BID, startTime, endTime);
log.info(bars.toString());
} catch (Exception e) {
log.error(e.toString(), e);
throw e;
}
}
}

package forex.strategy;
import com.dukascopy.api.*;
import lombok.Getter;
/**
* Only to get history in testing.
* Created on 14/04/2015.
*/
public class GetContext implements IStrategy {
@Getter
private static IHistory history;
@Getter
private static IContext context;
@Getter
private static IIndicators indicators;
@Getter
private static IDataService dataService;


@Override
public void onStart(final IContext contextParam) throws JFException {
context = contextParam;
history = context.getHistory();
indicators = context.getIndicators();
dataService = contextParam.getDataService();
}

@Override
public void onTick(final Instrument instrument, final ITick tick) throws JFException {

}

@Override
public void onBar(final Instrument instrument, final Period period, final IBar askBar, final IBar bidBar) throws JFException {

}

@Override
public void onMessage(final IMessage message) throws JFException {

}

@Override
public void onAccount(final IAccount account) throws JFException {

}

@Override
public void onStop() throws JFException {

}
}


 
 Post subject: Re: Failed to load in-progress candle data 2.44.7 (restored) Post rating: 0   New post Posted: Wed 09 Sep, 2015, 07:59 

User rating: 6
Joined: Tue 02 Jul, 2013, 16:52
Posts: 38
I ran my Unit Test today with 2.45.15. There is no change, the bug is still there and can still be reproduced each time in my environment. So I am still staying with 2.43.2 (the last version without that bug)
java.lang.AssertionError
   at com.dukascopy.charts.data.datacache.LocalCacheManager.readCandlesFromIntraPeriodFile(LocalCacheManager.java:1931)
   at com.dukascopy.charts.data.datacache.LocalCacheManager.isIntraperiodCandleFileFreeFromEmptyCandlesInTheBeginning(LocalCacheManager.java:2742)
   at com.dukascopy.charts.data.datacache.CurvesDataLoader.loadSmallIntervals(CurvesDataLoader.java:577)
   at com.dukascopy.charts.data.datacache.CurvesDataLoader.loadInCache(CurvesDataLoader.java:202)
   at com.dukascopy.charts.data.datacache.CurvesDataLoader.loadInCache(CurvesDataLoader.java:128)
   at com.dukascopy.charts.data.datacache.LoadDataAction.run(LoadDataAction.java:302)
   at com.dukascopy.charts.data.datacache.FeedDataProvider.loadCandlesDataSynched(FeedDataProvider.java:879)
   at com.dukascopy.charts.data.datacache.FeedDataProvider.loadCandlesFromToSynched(FeedDataProvider.java:2591)
   at com.dukascopy.api.impl.History.getBarsSecured(History.java:570)
   at com.dukascopy.api.impl.History$10.run(History.java:532)
   at com.dukascopy.api.impl.History$10.run(History.java:529)
   at java.security.AccessController.doPrivileged(Native Method)
   at com.dukascopy.api.impl.History.getBars(History.java:529)
   at forex.tools.LoadingBarBug.mainTest(LoadingBarBug.java:66)


 
 Post subject: Re: Failed to load in-progress candle data 2.44.7 (restored) Post rating: 0   New post Posted: Fri 11 Sep, 2015, 22:41 

User rating: 6
Joined: Tue 02 Jul, 2013, 16:52
Posts: 38
I also now having the same error in a different context :cry:

Running the following now (when market is closed)
indicators.supportResistance(USD/CAD, Hourly, Bid, NO_FILTER, 60, 1436511600000, 0)
1436511600000 = 2015-07-10T07:00:00.000Z

Gives me:
com.dukascopy.charts.data.datacache.DataCacheException: Failed to load in-progress candle data in timeout period [USD/CAD, Hourly, Bid]
   at com.dukascopy.api.impl.History.getBarsSecured(History.java:763)
   at com.dukascopy.api.impl.History$13.run(History.java:646)
   at com.dukascopy.api.impl.History$13.run(History.java:643)
   at java.security.AccessController.doPrivileged(Native Method)
   at com.dukascopy.api.impl.History.getBars(History.java:643)
   at com.dukascopy.api.impl.Indicators.getInputBars(Indicators.java:5182)
   at com.dukascopy.api.impl.Indicators.access$900(Indicators.java:66)
   at com.dukascopy.api.impl.Indicators$IndicatorCalcBeforeAfter.setupInputData(Indicators.java:7101)
   at com.dukascopy.api.impl.Indicators$IndicatorCalc.performIndicatorCalculation(Indicators.java:6452)
   at com.dukascopy.api.impl.Indicators$IndicatorCalc.calculate(Indicators.java:6413)
   at com.dukascopy.api.impl.Indicators.calculateIndicator(Indicators.java:4731)
   at com.dukascopy.api.impl.Indicators.supportResistance(Indicators.java:3802)
java.lang.AssertionError
   at com.dukascopy.charts.data.datacache.LocalCacheManager.readCandlesFromIntraPeriodFile(LocalCacheManager.java:1931)
   at com.dukascopy.charts.data.datacache.LocalCacheManager.isIntraperiodCandleFileFreeFromEmptyCandlesInTheBeginning(LocalCacheManager.java:2742)
   at com.dukascopy.charts.data.datacache.CurvesDataLoader.loadSmallIntervals(CurvesDataLoader.java:577)
   at com.dukascopy.charts.data.datacache.CurvesDataLoader.loadInCache(CurvesDataLoader.java:177)
   at com.dukascopy.charts.data.datacache.CurvesDataLoader.loadInCache(CurvesDataLoader.java:128)
   at com.dukascopy.charts.data.datacache.LoadDataAction.run(LoadDataAction.java:302)
   at com.dukascopy.charts.data.datacache.FeedDataProvider.loadCandlesDataSynched(FeedDataProvider.java:879)
   at com.dukascopy.charts.data.datacache.IntraperiodCandlesGenerator$4.run(IntraperiodCandlesGenerator.java:1019)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
   at java.lang.Thread.run(Thread.java:745)
In that specific example, I also have the exception with the older API (2.43.2) when market is closed right now, but never got it earlier with market open. I haven't changed that code in a very long time and run it every day several times. The only difference I see is that market is now closed and I usually run it when market is open.

I hope it helps. I am desperate to see these issues solved or with a workaround or at least some regular information about its status


 
 Post subject: Re: Failed to load in-progress candle data 2.44.7 (restored) Post rating: 0   New post Posted: Fri 09 Oct, 2015, 14:06 
User avatar

User rating:
Joined: Fri 31 Aug, 2007, 09:17
Posts: 6139
We were unable to reproduce these bugs


 
 Post subject: Re: Failed to load in-progress candle data 2.44.7 (restored) Post rating: 0   New post Posted: Tue 13 Oct, 2015, 18:11 

User rating: 6
Joined: Tue 02 Jul, 2013, 16:52
Posts: 38
Version 2.45.21. No change, the bug is still there:
Quote:
2015-10-13 17:06:22,874| ERROR | cache.LoadDataAction | (main)
java.lang.AssertionError
at com.dukascopy.charts.data.datacache.LocalCacheManager.readCandlesFromIntraPeriodFile(LocalCacheManager.java:1931)
at com.dukascopy.charts.data.datacache.LocalCacheManager.isIntraperiodCandleFileFreeFromEmptyCandlesInTheBeginning(LocalCacheManager.java:2742)
at com.dukascopy.charts.data.datacache.CurvesDataLoader.loadSmallIntervals(CurvesDataLoader.java:577)
at com.dukascopy.charts.data.datacache.CurvesDataLoader.loadInCache(CurvesDataLoader.java:202)
at com.dukascopy.charts.data.datacache.CurvesDataLoader.loadInCache(CurvesDataLoader.java:128)
at com.dukascopy.charts.data.datacache.LoadDataAction.run(LoadDataAction.java:303)
at com.dukascopy.charts.data.datacache.FeedDataProvider.loadCandlesDataSynched(FeedDataProvider.java:872)
at com.dukascopy.charts.data.datacache.FeedDataProvider.loadCandlesFromToSynched(FeedDataProvider.java:2620)
at com.dukascopy.api.impl.History.getBarsSecured(History.java:570)
at com.dukascopy.api.impl.History$10.run(History.java:532)
at com.dukascopy.api.impl.History$10.run(History.java:529)
at java.security.AccessController.doPrivileged(Native Method)
at com.dukascopy.api.impl.History.getBars(History.java:529)
at forex.tools.LoadingBarBug.mainTest(LoadingBarBug.java:66)
As usual since May, I will stay with 2.43.2 which is the latest version without that bug...

My test class, in case you are interested:
Quote:
package forex.tools;

import com.dukascopy.api.IContext;
import com.dukascopy.api.IHistory;
import com.dukascopy.api.Instrument;
import com.dukascopy.api.OfferSide;
import com.dukascopy.api.Period;
import com.dukascopy.api.system.ClientFactory;
import com.dukascopy.api.system.IClient;
import forex.strategy.GetContext;
import lombok.extern.slf4j.Slf4j;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Set;

import org.junit.Test;


/**
* To reproduce dukascopy bug
* Created on 15/06/2015.
*/
@Slf4j
public class LoadingBarBug {
private static final String url = "https://www.dukascopy.com/client/demo/jclient/jforex.jnlp";
private static final String u = "";
private static final String pw = "";

@Test
public void mainTest() throws Throwable {
try {
Instrument instrument = Instrument.USDCAD;
Period period = Period.DAILY;

IClient instance = ClientFactory.getDefaultInstance();
instance.connect(url, u, pw);
int sec = 10;
while (sec > 0 && !instance.isConnected()) { //wait for it to connect
Thread.sleep(1000);
sec--;
}
instance.startStrategy(new GetContext());
IHistory history = GetContext.getHistory();
IContext context = GetContext.getContext();

Set<Instrument> subscribedInstruments = context.getSubscribedInstruments();
subscribedInstruments.add(instrument);
context.setSubscribedInstruments(subscribedInstruments, true);
int i = 200;
while ((!context.getSubscribedInstruments().contains(instrument)
|| context.getHistory().getLastTick(instrument) == null)
&& i >= 0) {
Thread.sleep(20);
i--;
}
Calendar cal = new GregorianCalendar();
cal.set(2015, Calendar.JUNE, 9, 0, 0, 0);

long from = history.getBarStart(period, cal.getTimeInMillis());
long to = history.getBar(instrument, period, OfferSide.BID, 1).getTime();
// long to = history.getBar(instrument, period, OfferSide.BID, 0).getTime();
// long to = history.getStartTimeOfCurrentBar(instrument, period);
// assertEquals(new DateTime().withTimeAtStartOfDay().getMillis(), to);
List bars1 = history.getBars(instrument, period, OfferSide.BID, from, to);
List bars2 = history.getBars(instrument, period, OfferSide.BID, from, to);

} catch (Exception e) {
log.error(e.toString(), e);
throw e;
}
}
}

I think I already posted GetContext; in any case, it's used only to get the IHistory and IContext object.


 

Jump to:  

cron
  © 1998-2024 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