package jforex.strategies.indicators;

import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.TimeZone;

import java.util.*;
import java.io.*;

import com.dukascopy.api.*;
import com.dukascopy.api.IEngine.OrderCommand;
import com.dukascopy.api.IIndicators.AppliedPrice;
import com.dukascopy.api.IIndicators.MaType;
import com.dukascopy.api.feed.FeedDescriptor;
import com.dukascopy.api.feed.IFeedDescriptor;
import com.dukascopy.api.feed.IRenkoBar;
import com.dukascopy.api.indicators.IIndicator;
import java.util.List;

import com.dukascopy.api.feed.IPriceAggregationBar;


public class TestRenko implements IStrategy {
    
   
    
    private IEngine engine;
    private IConsole console;
    private IHistory history;
    
    private IAccount account;
    private IContext context;

        
    private IIndicators indicators;
    private int counter = 0;
    private IFeedDescriptor feedDescriptor;
    private IOrder order = null;
 //   @Configurable("Brick size (pips)")
    public int brickSize = 1;      
    
    @Configurable("Instrument")
    public Instrument instrument = Instrument.EURUSD;
    @Configurable("Offer side")
    public OfferSide offerSide = OfferSide.BID;
    @Configurable("Slippage")
    public double slippage = 0.7;    
    @Configurable("Amount")
    public double amount = 0.01;                
    @Configurable("Take profit pips") 
    public int takeProfitPips = 3;        
    @Configurable("Stop loss in pips")
    public int stopLossPips = 3;         


    private IRenkoBar brick;
    private IRenkoBar brickPrevious;






 
    @Override
    public void onStart(IContext context) throws JFException {
        this.console = context.getConsole();
        this.indicators = context.getIndicators();
        this.history = context.getHistory();
        this.engine = context.getEngine();
        
        this.context = context;

          
        // range bar feed
        feedDescriptor = new FeedDescriptor();
        feedDescriptor.setDataType(DataType.RENKO);
        feedDescriptor.setOfferSide(offerSide);
        feedDescriptor.setInstrument(instrument);
        feedDescriptor.setPriceRange(PriceRange.valueOf(brickSize));
    
    }

    
    
    
    
  






    @Override
    public void onTick(Instrument instrument, ITick tick) throws JFException {
        if (instrument != this.instrument) {
            return;
        }
 
                                                                                                                                                
        brick         = history.getRenkoBar(instrument, offerSide, PriceRange.valueOf(brickSize), 0);
        brickPrevious = history.getRenkoBar(instrument, offerSide, PriceRange.valueOf(brickSize), 1);
        
        
        print("brick.getOpen(): " + brick.getOpen());
        print("brick.getClose(): " + brick.getClose());
        print("brickMeno1.getOpen(): " + brickPrevious.getOpen());
        print("brickMeno1.getClose(): " + brickPrevious.getClose());                        
        
       
    
    
    }




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

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

    @Override
    public void onAccount(IAccount account) throws JFException {
        this.account = account;
    }

    @Override    
    public void onStop() throws JFException {
    }

 
    private void print(String str) {
        
        console.getOut().println(str);
    }

}
