Hello Support,
I have problem with Kama indicator on Renko Chart.
There is difference between chart result and strategy result for Kama Indicator.
But for Sma Indicator, strategy result generate same result as chart.
Can you help me?
Thank you.
package jforex.strategies.sdk;
import java.util.*;
import com.dukascopy.api.*;
import com.dukascopy.api.IIndicators.AppliedPrice;
import com.dukascopy.api.feed.IFeedDescriptor;
import com.dukascopy.api.feed.IFeedListener;
import com.dukascopy.api.feed.IRenkoBar;
import com.dukascopy.api.feed.IRenkoBarFeedListener;
import com.dukascopy.api.feed.util.RenkoFeedDescriptor;
import com.dukascopy.api.IEngine.*;
import com.dukascopy.api.DataType;
import com.dukascopy.api.IBar;
import com.dukascopy.api.IChart;
import com.dukascopy.api.IConsole;
import com.dukascopy.api.IContext;
import com.dukascopy.api.IHistory;
import com.dukascopy.api.IIndicators;
import com.dukascopy.api.IMessage;
import com.dukascopy.api.IStrategy;
import com.dukascopy.api.ITick;
import com.dukascopy.api.ITimedData;
import com.dukascopy.api.Instrument;
import com.dukascopy.api.JFException;
import com.dukascopy.api.OfferSide;
import com.dukascopy.api.Period;
import com.dukascopy.api.feed.IFeedDescriptor;
public class KAMATEST implements IStrategy, IFeedListener {
private IFeedDescriptor feedDescriptor = new RenkoFeedDescriptor(Instrument.EURUSD, PriceRange.valueOf(20), OfferSide.BID, IFeedDescriptor.DEFAULT_BASE_PERIOD);
public Instrument selectedInstrument = feedDescriptor.getInstrument();
private IAccount account;
private IEngine engine;
private IConsole console;
private IHistory history;
private IContext context;
private IIndicators indicators;
private IUserInterface userInterface;
private String User;
private IOrder order = null;
private double Volume;
private double [] kama1 = new double [3];
private double [] sma = new double [3];
@Override
public void onStart(IContext context) throws JFException {
this.engine = context.getEngine();
console = context.getConsole();
history = context.getHistory();
this.context = context;
indicators = context.getIndicators();
this.userInterface = context.getUserInterface();
context.setSubscribedInstruments(java.util.Collections.singleton(feedDescriptor.getInstrument()), true);
if(feedDescriptor.getDataType() == DataType.TICKS){
console.getWarn().println("The strategy can't trade according to the tick feed!");
context.stop();
}
context.subscribeToFeed(feedDescriptor, this);
}
@Override
public void onFeedData(IFeedDescriptor feedDescriptor, ITimedData feedData) {
try {
IBar prevBar = history.getRenkoBar(selectedInstrument, feedDescriptor.getOfferSide(), feedDescriptor.getPriceRange(), 1);
if (Volume != prevBar.getVolume()) {
Object[] smaObjectsFeed = indicators.calculateIndicator(feedDescriptor, new OfferSide[]{feedDescriptor.getOfferSide()}, "SMA",
new AppliedPrice[]{AppliedPrice.CLOSE}, new Object[]{30}, 3, prevBar.getTime(), 0 );
sma = (double[]) smaObjectsFeed[0];
console.getOut().println("sma[0]: " + sma[0] + " sma[1]: " + sma[1] + " sma[2]: " + sma[2]);
Object[] kama1ObjectsFeed = indicators.calculateIndicator(feedDescriptor, new OfferSide[]{feedDescriptor.getOfferSide()}, "KAMA",
new AppliedPrice[]{AppliedPrice.CLOSE}, new Object[]{30,2,30}, 3, prevBar.getTime(),0);
kama1 = (double[]) kama1ObjectsFeed[0];
console.getOut().println("kama1[0]: " + kama1[0] + " kama1[1]: " + kama1[1] + " kama1[2]: " + kama1[2]);
Volume = prevBar.getVolume();
}
} catch (Exception e) {
console.getErr().println(e);
e.printStackTrace();
}
}
@Override
public void onStop() throws JFException {}
@Override
public void onMessage(IMessage message) throws JFException {}
@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 {}
}
