package jforex;

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

public class Strategy implements IStrategy {
	private IEngine engine;
	private IConsole console;
	private IHistory history;
	private IContext context;
	private IIndicators indicators;
	private IUserInterface userInterface;
	
    @Configurable("Instrument")
    public Instrument myInstrument = Instrument.EURUSD;
    
    @Configurable("Period")
    public Period myPeriod = Period.ONE_MIN;
    
    private ITimeDomain curWeekend;
    
	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();
        
        curWeekend = context.getDataService().getOfflineTimeDomain(myInstrument);
        console.getOut().println("Current weekend: " + curWeekend);
	}

	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 {
        if (!instrument.equals(myInstrument) || !period.equals(myPeriod)) {
            return;
        }
        
        if (askBar.getTime() >= curWeekend.getStart() && askBar.getTime() < curWeekend.getEnd()) {
            console.getOut().println("Skip weekend bar: " + askBar);
            return;
        }
        
        if (askBar.getTime() >= curWeekend.getEnd()) {
            curWeekend = context.getDataService().getOfflineTimeDomain(myInstrument);
            console.getOut().println("Current weekend: " + curWeekend);
        }
        
        console.getOut().println("Processing bar: " + askBar);
    }
}
