Gracias, entendido, sabrías modificarlo para que haga el breakeven que quiero?
Si tengo 30 pips de stop loss, que cuando vaya ganando 30 pips, ponga el stop loss justo en el precio que se hizo la entarda en largo o en corto, así si el precio se da la vuelta en contra de la posición abierta, no pierda ningún pip. Pensaba que esta estrategia de Dukascopy iba a hacer eso.
Un saludo.
Ejecutar en Remote Run
Re: Ejecutar en Remote Run
Más sencillo, si pongo stop loss de 30 pips en la orden de entrada(stop buy o stop sell), y en la estrategia pongo 1 pip, entonces cuando lleve 30 pips de ganancia, me lo pondrá 1 pip por encima del precio de apertura de la posición?
Entonces si me valdría tal como está programado.
Entonces si me valdría tal como está programado.
Re: Ejecutar en Remote Run
Creo que sí es asíeurer escribió:Más sencillo, si pongo stop loss de 30 pips en la orden de entrada(stop buy o stop sell), y en la estrategia pongo 1 pip, entonces cuando lleve 30 pips de ganancia, me lo pondrá 1 pip por encima del precio de apertura de la posición?
Entonces si me valdría tal como está programado.
Re: Ejecutar en Remote Run
Acabo de comprobarlo en la cuenta real, el stop loss está 1pip por encima del precio de entrada, es prácticamente estar en el breakeven. Y encima no pierdo el pip que me cuesta abrir y cerrar la posición. ![Very Happy :D](./images/smilies/icon_biggrin.gif)
![Very Happy :D](./images/smilies/icon_biggrin.gif)
Re: Ejecutar en Remote Run
Mi gozo en un pozo!
La estrategia se ha parado desde los servidores de Dukascopy Bank. Por chat me han confirmado esto y me han dicho esto otro:
This means that strategy overloaded server CPU for more then 60 sec and was stopped automaticaly
y que mejorando el código de programación podría evitar de nuevo que la estrategia se parase.
Sabrías optimizar el código?
Estoy haciendo trading en real con cinco pares a la vez, pude ser que eso sea un problema, aunque no entiendo el mensaje que recibí sobre la CPU. Enfadado le contesté que comprasen una CPU mejor.
Pongo de nuevo lo último que me modificaste para que funcionase en Remote Server.
/*
StopManager.java
version 1.0
Copyright 2010 Quantisan.com
Move stops to breakeven when equidistance to original stop loss
*/
package jforex;
import com.dukascopy.api.*;
import java.util.*;
public class StopManagerInstruments implements IStrategy {
private IEngine engine;
private IConsole console;
private IContext context;
@Configurable("Instruments") public Set<Instrument> eInstruments = new HashSet<Instrument>( Arrays.asList(new Instrument[] {
Instrument.EURUSD, Instrument.EURGBP
})) ;
@Configurable("Lock-in Pips for Breakeven")
public int lockPip = 3;
@Configurable("Move stop to breakeven?")
public boolean moveBE = true;
public void onStart(IContext context) throws JFException {
this.engine = context.getEngine();
this.console = context.getConsole();
this.context = context;
context.setSubscribedInstruments(eInstruments); // nos subscribimos a los pares seleccionados...
}
public void onAccount(IAccount account) throws JFException {
}
public void onMessage(IMessage message) throws JFException {
}
public void onStop() throws JFException {
}
public void onTick(Instrument instrument, ITick tick) throws JFException {
if(eInstruments.contains(instrument)){//El bloque for solo cuando el par está entre los seleccionados...
for (IOrder order : engine.getOrders(instrument)) {
if (order.getState() == IOrder.State.FILLED) {
boolean isLong;
double open, stop, diff, newStop;
String label = order.getLabel();
IChart chart;
isLong = order.isLong();
open = order.getOpenPrice();
stop = order.getStopLossPrice();
diff = open - stop; // stop loss distance
if (isLong) { // long side order
if (moveBE && diff > 0 && tick.getBid() > (open + diff)) {
// make it breakeven trade + lock in a few pips
newStop = open + instrument.getPipValue() * lockPip;
order.setStopLossPrice(newStop);
console.getOut().println(label + ": Moved stop to breakeven");
chart = this.context.getChart(instrument);
chart.draw(label + "_BE", IChart.Type.SIGNAL_UP, tick.getTime(), newStop);
}
}
else { // short side order
// Move to breakeven
if (moveBE && diff < 0 && tick.getAsk() < (open + diff)) { // diff is negative
// make it breakeven trade + lock in a few pips
newStop = open - (instrument.getPipValue() * lockPip);
order.setStopLossPrice(newStop);
console.getOut().println(label + ": Moved stop to breakeven");
chart = this.context.getChart(instrument);
chart.draw(label + "_BE", IChart.Type.SIGNAL_DOWN, tick.getTime(), newStop);
}
}
}
}
}//fin if(eInstruments.contains(instrument))
}
public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {
}
}
Un saludo.
La estrategia se ha parado desde los servidores de Dukascopy Bank. Por chat me han confirmado esto y me han dicho esto otro:
This means that strategy overloaded server CPU for more then 60 sec and was stopped automaticaly
y que mejorando el código de programación podría evitar de nuevo que la estrategia se parase.
Sabrías optimizar el código?
Estoy haciendo trading en real con cinco pares a la vez, pude ser que eso sea un problema, aunque no entiendo el mensaje que recibí sobre la CPU. Enfadado le contesté que comprasen una CPU mejor.
Pongo de nuevo lo último que me modificaste para que funcionase en Remote Server.
/*
StopManager.java
version 1.0
Copyright 2010 Quantisan.com
Move stops to breakeven when equidistance to original stop loss
*/
package jforex;
import com.dukascopy.api.*;
import java.util.*;
public class StopManagerInstruments implements IStrategy {
private IEngine engine;
private IConsole console;
private IContext context;
@Configurable("Instruments") public Set<Instrument> eInstruments = new HashSet<Instrument>( Arrays.asList(new Instrument[] {
Instrument.EURUSD, Instrument.EURGBP
})) ;
@Configurable("Lock-in Pips for Breakeven")
public int lockPip = 3;
@Configurable("Move stop to breakeven?")
public boolean moveBE = true;
public void onStart(IContext context) throws JFException {
this.engine = context.getEngine();
this.console = context.getConsole();
this.context = context;
context.setSubscribedInstruments(eInstruments); // nos subscribimos a los pares seleccionados...
}
public void onAccount(IAccount account) throws JFException {
}
public void onMessage(IMessage message) throws JFException {
}
public void onStop() throws JFException {
}
public void onTick(Instrument instrument, ITick tick) throws JFException {
if(eInstruments.contains(instrument)){//El bloque for solo cuando el par está entre los seleccionados...
for (IOrder order : engine.getOrders(instrument)) {
if (order.getState() == IOrder.State.FILLED) {
boolean isLong;
double open, stop, diff, newStop;
String label = order.getLabel();
IChart chart;
isLong = order.isLong();
open = order.getOpenPrice();
stop = order.getStopLossPrice();
diff = open - stop; // stop loss distance
if (isLong) { // long side order
if (moveBE && diff > 0 && tick.getBid() > (open + diff)) {
// make it breakeven trade + lock in a few pips
newStop = open + instrument.getPipValue() * lockPip;
order.setStopLossPrice(newStop);
console.getOut().println(label + ": Moved stop to breakeven");
chart = this.context.getChart(instrument);
chart.draw(label + "_BE", IChart.Type.SIGNAL_UP, tick.getTime(), newStop);
}
}
else { // short side order
// Move to breakeven
if (moveBE && diff < 0 && tick.getAsk() < (open + diff)) { // diff is negative
// make it breakeven trade + lock in a few pips
newStop = open - (instrument.getPipValue() * lockPip);
order.setStopLossPrice(newStop);
console.getOut().println(label + ": Moved stop to breakeven");
chart = this.context.getChart(instrument);
chart.draw(label + "_BE", IChart.Type.SIGNAL_DOWN, tick.getTime(), newStop);
}
}
}
}
}//fin if(eInstruments.contains(instrument))
}
public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {
}
}
Un saludo.
Re: Ejecutar en Remote Run
Pues no sé qué se podría optimizar ahí, porque hace bien poco... además el código era suyo ¿no? jeje... No sé... habrá sido un pico puntual o algo... Más que tocarlo podrías ejecutar cinco estrategias con un par cada una mejor que una con cinco pares ¿no?
Re: Ejecutar en Remote Run
Hola máscara.
La estrategia es bastante simple. Yo tampoco veo mucho que se pueda optimizar.
Lo que voy a hacer, ya que es una Estrategia programada por Dukascopy, es preguntarles a ellos.
Nunca pensé que tuviese un problema con una Estrategia programada por ellos mismos.
Pondré aquí la contestación.
Un saludo.
La estrategia es bastante simple. Yo tampoco veo mucho que se pueda optimizar.
Lo que voy a hacer, ya que es una Estrategia programada por Dukascopy, es preguntarles a ellos.
Nunca pensé que tuviese un problema con una Estrategia programada por ellos mismos.
Pondré aquí la contestación.
Un saludo.
Si te ha gustado este hilo del Foro, ¡compártelo en redes!