package jforex;

import java.util.*;
import com.dukascopy.api.*;
import com.dukascopy.api.feed.*;
import com.dukascopy.api.feed.util.*;
import com.dukascopy.api.indicators.*;

public class AddIndicatorToChart implements IStrategy {
	private IEngine engine;
	private IConsole console;
	private IHistory history;
	private IContext context;
	private IIndicators indicators;
	private IUserInterface userInterface;
	
	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();
        
        IFeedDescriptor feedDescriptor = new TimePeriodAggregationFeedDescriptor(Instrument.EURUSD, Period.ONE_MIN, OfferSide.BID, Filter.WEEKENDS);
        IChart chart = context.openChart(feedDescriptor);
        
        IIndicator sma = indicators.getIndicator("sma");
        chart.add(sma, new Object[] {30});
        
        Object[] smaOutputs;
        
        do {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
                break;
            }
            
            Map<IIndicator, Object[]> allOutputs = chart.getLastCalculatedIndicatorOutputs();
            smaOutputs = allOutputs.get(sma);
            
            console.getOut().println(Arrays.deepToString(smaOutputs));
            
        } while (smaOutputs == null || Double.isNaN(((double[]) smaOutputs[0])[0]));
        
        context.stop();
	}

	public void onAccount(IAccount account) throws JFException {
	}

	public void onMessage(IMessage message) throws JFException {
	}

	public void onStop() throws JFException {
	}

	public void onTick(Instrument instrument, ITick tick) throws JFException {
	}
	
    public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {
    }
}
