Stoploss Strategie

nimaka

Neues Mitglied
Hallo,

ich lerne mit Java zu programmieren, um Strategien für Forex zu machen, als erste Programm möchte ich zu jede Order, dass ich von Hand sende, ein Stoploss zu verbinden.
Ich zeige euch den Code, weil ich es nicht schaffe und ich kann den Fehler nicht finden.

Vielen dank im Voraus!
Java:
package test;

import com.dukascopy.api.Configurable;
import com.dukascopy.api.IAccount;
import com.dukascopy.api.IBar;
import com.dukascopy.api.IConsole;
import com.dukascopy.api.IContext;
import com.dukascopy.api.IEngine;
import com.dukascopy.api.IHistory;
import com.dukascopy.api.IIndicators;
import com.dukascopy.api.IMessage;
import com.dukascopy.api.IOrder;
import com.dukascopy.api.IStrategy;
import com.dukascopy.api.ITick;
import com.dukascopy.api.IUserInterface;
import com.dukascopy.api.Instrument;
import com.dukascopy.api.JFException;
import com.dukascopy.api.Period;

public class strat implements IStrategy{
    private IEngine engine;
    private IConsole console;
    private IHistory history;
    private IContext context;
    private IIndicators indicators;
    private IUserInterface userInterface;
    private IOrder order;


       @Configurable("Instrument")
       public Instrument instrument = Instrument.EURUSD;
       @Configurable("periode")
       public Period period = Period.TEN_SECS;
       @Configurable("Stop Loss In Pips")
       public double StopLossInPips = 5;
       @Override
       public void onAccount(IAccount arg0) throws JFException {
        // TODO Auto-generated method stub
      
    }

    @Override
    public void onBar(Instrument arg0, Period arg1, IBar arg2, IBar arg3) throws JFException {
        // TODO Auto-generated method stub
      
    }

    @Override
    public void onMessage(IMessage arg0) throws JFException {
        // TODO Auto-generated method stub
      
    }

    @Override
    public void onStart(IContext arg0) throws JFException {
        // TODO Auto-generated method stub
         boolean isLong;
         isLong = order.isLong();
         for ( IOrder order: getOrders( instrument)){
              if (isLong) {
                   order.setStopLossPrice(order.getOpenPrice() - StopLossInPips);
              }else order.setStopLossPrice(order.getOpenPrice() + StopLossInPips);
           }
      
    }

    @Override
    public void onStop() throws JFException {
        // TODO Auto-generated method stub
      
    }

    @Override
    public void onTick(Instrument arg0, ITick arg1) throws JFException {
        // TODO Auto-generated method stub
      
    }
}
 
Zuletzt bearbeitet von einem Moderator:

Tom299

Bekanntes Mitglied
Ich hatte mir mal eine GUI für Dukascopy geschrieben, mit der ich Order ausführen und StopLoss usw. setzen und ändern konnte oder 50% Gewinnmitnahme machen konnte usw. Bin aber schon vor Jahren dort weg und kenn die aktuelle API nicht mehr. Ein StopLoss zu setzen sollte aber nicht so schwer sein.

Dein Fehler ist aber bestimmt die Umrechnung bzw. du machst gar keine Umrechnung. Du mußt die Pips erst mal umrechnen in die aktuelle Einheit der Währung.
5 Pips Stop bei EUR/USD wären dann z.B. Order 1,1215 und Stop bei 1,1210 bei einem BUY. Also mußt du für EUR/USD das Stop umrechnen 5 Pips * 0,0001 weil EUR/USD mit 0,0001 tickt. Andere Währungen haben nur 2 Stellen usw.
Bei deiner Rechnung würde du z.B. 1,1215 - 5 rechnen (5 Pips), das wäre aber negativ, kann dann nicht funktionieren.

Ich glaub es gab bei jedem Instrument sowas wie Instrument.PipValue oder sowas in der Art, das du zum umrechnen benutzen kannst.
 

Tom299

Bekanntes Mitglied
Ich hab mal meinen Code angeschaut und sowas entdeckt, das dir weiterhelfen sollte:

Java:
                                if ((stopPips != null) && (stopPips > 0)) {
                                    Double stopOrderPips = instrument.getPipValue() * stopPips;
                                    Double stopOrderPrice = dblSellPrice + stopOrderPips;
//                                    return context.getEngine().submitOrder("DukaScalper_" + new Date().getTime(), instrument, IEngine.OrderCommand.SELL, amount, 0, 5, stopOrderPrice, 0);
                                    return context.getEngine().submitOrder("DukaScalper_" + Utils.getLabelDate(), instrument, IEngine.OrderCommand.SELL, amount, 0, 5, stopOrderPrice, 0);
                                }
 

Ähnliche Java Themen

Neue Themen


Oben