Dukascopy
 
 
Wiki JStore Search Login

Attention! Read the forum rules carefully before posting a topic.

    Submit JForex API bug reports in this forum only.
    Submit Converter issues in Converter Issues.
    Off topics are strictly forbidden.

Any topics which do not satisfy these rules will be deleted.

null returned
 Post subject: null returned Post rating: 0   New post Posted: Sun 29 Mar, 2015, 19:02 
User avatar

User rating: 0
Joined: Tue 25 Feb, 2014, 16:16
Posts: 6
context.getIndicatorChartPanel()
context.getFeedDescriptor()
both return null, at least on weekend.


package jforex;

import com.dukascopy.api.indicators.*;
import com.dukascopy.api.drawings.*;
import com.dukascopy.api.feed.*;
import com.dukascopy.api.*;
import java.awt.Color;
import java.io.*;

public class RiskControl implements IIndicator {
    private IndicatorInfo indicatorInfo;
    private InputParameterInfo[] inputParameterInfos;
    private OptInputParameterInfo[] optInputParameterInfos;
    private OutputParameterInfo[] outputParameterInfos;
    private double[][] inputs = new double[1][];
    private int timePeriod = 2;
    private double[][] outputs = new double[1][];
    private IIndicatorContext context;
    private IPriceMarkerChartObject slMarker;
    private IPriceMarkerChartObject tpMarker;
    private IPriceMarkerChartObject opMarker;
    private IFeedDescriptor feedDescriptor;
   
    public void onStart(IIndicatorContext context) {
        PrintStream stream = context.getConsole().getOut();
        context.getConsole().getOut().print("00");
     
        indicatorInfo = new IndicatorInfo("EXAMPIND", "Sums previous values", "My indicators",
            true, false, false, 1, 1, 1);
       
        inputParameterInfos = new InputParameterInfo[] {new InputParameterInfo("Input data", InputParameterInfo.Type.DOUBLE)};
       
        optInputParameterInfos = new OptInputParameterInfo[] {new OptInputParameterInfo("Time period", OptInputParameterInfo.Type.OTHER,
            new IntegerRangeDescription(2, 2, 100, 1))};
       
        outputParameterInfos = new OutputParameterInfo[] {new OutputParameterInfo("out", OutputParameterInfo.Type.DOUBLE,
            OutputParameterInfo.DrawingStyle.LINE)};
       
        IHistory history = context.getHistory();
        this.context = context;
        IIndicatorChartPanel panel = context.getIndicatorChartPanel();
       
        IChartObjectFactory factory = panel.getChartObjectFactory();
        //double balance = context.getAccount().getBalance();
     
        feedDescriptor = context.getFeedDescriptor();

/*      Period period = feedDescriptor.getPeriod();       
        Instrument instrument = feedDescriptor.getInstrument();
       
       try{

            double priceAsk = history.getBar(instrument, period, OfferSide.ASK, 0).getClose();
            double priceBid = history.getBar(instrument, period, OfferSide.BID, 0).getClose();
            double priceMid = (priceAsk + priceBid)/2.0;
           
            slMarker = factory.createPriceMarker("SL", priceMid - 20.0 * instrument.getPipValue());
            opMarker = factory.createPriceMarker("OP", priceMid);
            slMarker.setColor(Color.RED);
            opMarker.setColor(Color.ORANGE);
            slMarker.setLineWidth(2.0f);
            opMarker.setLineWidth(2.0f);
           
        } catch(Exception ex){
           context.getConsole().getErr().print(ex.toString());
        }
            stream.print(slMarker.getPrice(0));
            stream.print(opMarker.getPrice(0));
       */
    }

    public IndicatorResult calculate(int startIndex, int endIndex) {
        PrintStream stream = context.getConsole().getOut();
          context.getConsole().getNotif().println("00");
       
        //IConsole console = context.getConsole();
        //panel.add();
       
        //calculating startIndex taking into account lookback value
        if (startIndex - getLookback() < 0) {
            startIndex -= startIndex - getLookback();
        }
        int i, j;
        for (i = startIndex, j = 0; i <= endIndex; i++, j++) {
            double value = 0;
            for (int k = timePeriod; k > 0; k--) {
                value += inputs[0][i - k];
            }
            outputs[0][j] = value;
        }
        return new IndicatorResult(startIndex, j);
       
        //return new IndicatorResult(startIndex, 0);
    }

    public IndicatorInfo getIndicatorInfo() {
        return indicatorInfo;
    }

    public InputParameterInfo getInputParameterInfo(int index) {
        if (index <= inputParameterInfos.length) {
            return inputParameterInfos[index];
        }
        return null;
    }

    public int getLookback() {
        return timePeriod;
    }

    public int getLookforward() {
        return 0;
    }

    public OptInputParameterInfo getOptInputParameterInfo(int index) {
        if (index < optInputParameterInfos.length) {
            return optInputParameterInfos[index];
        }
        return null;
    }

    public OutputParameterInfo getOutputParameterInfo(int index) {
        if (index < outputParameterInfos.length) {
            return outputParameterInfos[index];
        }
        return null;
    }

    public void setInputParameter(int index, Object array) {
        inputs[index] = (double[]) array;
    }

    public void setOptInputParameter(int index, Object value) {
        timePeriod = (Integer) value;
    }

    public void setOutputParameter(int index, Object array) {
        outputs[index] = (double[]) array;
    }
}


 
 Post subject: Re: null returned Post rating: 0   New post Posted: Mon 30 Mar, 2015, 08:20 
User avatar

User rating:
Joined: Fri 31 Aug, 2007, 09:17
Posts: 6139
These methods will return a value only when the indicator is attached to a chart.
They will return null when onStart is called during compilation or when indicator is called from a strategy.


 
 Post subject: Re: null returned Post rating: 0   New post Posted: Mon 30 Mar, 2015, 11:39 
User avatar

User rating: 0
Joined: Tue 25 Feb, 2014, 16:16
Posts: 6
Good to know.
That should be in remarks section in API documentation in the method documentation.


 

Jump to:  

  © 1998-2024 Dukascopy® Bank SA
On-line Currency forex trading with Swiss Forex Broker - ECN Forex Brokerage,
Managed Forex Accounts, introducing forex brokers, Currency Forex Data Feed and News
Currency Forex Trading Platform provided on-line by Dukascopy.com