package jforex.bugtests;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

import com.dukascopy.api.IAccount;
import com.dukascopy.api.IBar;
import com.dukascopy.api.IConsole;
import com.dukascopy.api.IContext;
import com.dukascopy.api.IEngine;
import com.dukascopy.api.IIndicators;
import com.dukascopy.api.IMessage;
import com.dukascopy.api.IStrategy;
import com.dukascopy.api.ITick;
import com.dukascopy.api.Instrument;
import com.dukascopy.api.JFException;
import com.dukascopy.api.OfferSide;
import com.dukascopy.api.Period;
import com.dukascopy.api.IEngine.OrderCommand;

public class FractalTest2 implements IStrategy {

	IIndicators indicators;
	IContext context;
	IConsole console;
	IEngine engine;
	
	@Override
	public void onStart(IContext context) throws JFException {
		
		indicators = context.getIndicators();
		this.context = context;
		console = context.getConsole();
		engine = context.getEngine();
		
		//submit an order just to cause onMessage to get called
		engine.submitOrder("order1", Instrument.EURUSD, OrderCommand.BUY, 0.001);
	}
	
	@Override
	public void onMessage(IMessage message) throws JFException {
		calcFractal();
	}
	
	private void calcFractal() throws JFException{
		SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyy HH:mm:ss"); 
		dateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); 
		Date dateFrom = null;
		Date dateTo = null;
		try {
			dateFrom = dateFormat.parse("01/08/2008 00:00:00");
			dateTo = dateFormat.parse("31/08/2011 00:00:00");
		} catch (ParseException e) {
			context.getConsole().getErr().println(e);
		}

		Instrument instrument = Instrument.EURUSD;
		long fromTime = dateFrom.getTime();
		long toTime = dateTo.getTime();
		
		double[][] fractal = indicators.fractal(instrument, Period.ONE_HOUR, OfferSide.ASK, 2, fromTime, toTime);
		context.getConsole().getOut().println(fractal[0][0]);
	}

	@Override
	public void onTick(Instrument instrument, ITick tick) throws JFException {}

	@Override
	public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {}

	@Override
	public void onAccount(IAccount account) throws JFException {}

	@Override
	public void onStop() throws JFException {}

}
