package jforex.strategies;

import java.util.*;

import com.dukascopy.api.*;
import com.dukascopy.api.IEngine.OrderCommand;
import com.dukascopy.api.IIndicators.*;
import com.dukascopy.api.IOrder;
import com.dukascopy.api.Instrument.*;

public class HeikinAshiSet implements IStrategy {

    private IEngine engine;
    private IConsole console;
    private IHistory history;
    private IContext context;
    private IIndicators indicators;
    private IOrder order;
    @Configurable("Instrument")
    public Instrument selectedInstrument = Instrument.EURUSD;
    @Configurable("Period")
    public Period selectedPeriod = Period.ONE_MIN;

    @Override
    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();
    }

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

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

    @Override
    public void onStop() throws JFException {
    }

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

        boolean heikini_2 = false;
        boolean i = true;
        int candlesBefore = 10;
        int candlesAfter = 0;
        long currBarTime = history.getBar(selectedInstrument, selectedPeriod, OfferSide.BID, 0).getTime();
        double[][] heikin = indicators.heikinAshi(selectedInstrument, selectedPeriod, OfferSide.BID, Filter.WEEKENDS, candlesBefore, currBarTime,
                candlesAfter);

        for (IOrder order : engine.getOrders()) {
            if (order.getState() == IOrder.State.FILLED && order.getLabel().startsWith("Verkauf")) {
                i = false;
            }
        }

        if (heikin[8][0] >= heikin[8][1] && heikin[7][0] >= heikin[7][1] && heikin[9][0] >= heikin[9][1]) {
            heikini_2 = true;
        }

        if (i == true && heikini_2 == true) {
            order = engine.submitOrder(getLabel("Verkauf"), selectedInstrument, OrderCommand.SELL, 0.001);
            heikini_2 = false;
            i = false;
        }
    }

    @Override
    public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {
    }
    
    
    int counter = 1;
    private String getLabel(String label) {
        label = label + (counter++);
        return label;
    }
}