PDA

Ver la versión completa : Programar en JForex mi estrategia supersimple



Gerardgr
24-01-2025 06:54,
Parece interesante

Como funcionaria con MT4 de Forexyard,alguien lo sabe

Gracias

ReDiRiS
27-01-2025 06:27,
Hola chi@s!! He estado haciendo backtest manual de una estrategia muy sencilla basada en roturas de swings en gráficos Renko y da muy buenos resultados, pero claro, si se puede automatizar mejor que mejor.
La plataforma que uso es JForex del broker Dukaskopy, la idea es programar la estrategia y hacerle el backtest automático en el mismo programa y si sale positiva pues compartirla.
Paso a detallar la estrategia:
Para la receta de hoy chicos necesitaremos:

[*=center]Un par: Cualquiera
[*=center]Gráfico: Tipo Renko de 5 pips
[*=center]Indicador: Fractal (7)

El gráfico tendrá una pinta tal que así:5331

Operativa: Rotura del último fractal, es decir, entramos largos cuando se supera por 1 pip el fractal superior y entramos cortos cuando se supera por 1 pip el fractal inferior. Recalco lo del último fractal porque si se ha superado un fractal, por ejemplo el superior, no volveremos a entrar largos hasta que se forme un nuevo fractal superior y se supere por 1 pip, no vale mirar los que se han formado en el pasado. Es decir, siempre hay que fijarse en la última onda formada por un fractal superior e inferior y tener colocadas las órdenes de venta y compra correspondientes en cada uno, ya que tarde o temprano alguna de las dos se activará.

Luego; Señales de entrada:


[*=center]Compra: Rotura por 1pip del último fractal superior.
[*=center]Venta: Rotura por 1pip del último fractal inferior.

Límites de pérdida/ganancia y gestión de la operación.
Dependerá del tamaño del gráfico Renko (en este caso 5 pips). El stoploss se pondrá a (tamaño del Renko + 1 pip), es decir en este caso 6 pips, y el Take profit a (tamaño del Renko - 1 pip), es decir 5 pips. Como vemos el riesgo beneficio es negativo, arriesgamos mas de lo que queremos ganar, por lo tanto la gestión de la posición es vital. Cuando la operación vaya 5 pips a nuestro favor, en vez de cerrar la posición con el TP, cerraremos el 50% de la misma y moveremos el stop a Breakeven y pondremos un Trailing Stop de 10 pips para dejar correr la posición.

Luego; Gestión de entrada:


[*=center]Stoploss: Tamaño Renko + 1pip
[*=center]Takeprofit: Tamaño Renko - 1pip

Gestión de posición:


[*=center]Si la posición avanza el tamaño del TP a favor, cerramos 50% y ponemos un TrailinStop = 2*Tamaño Renko


Voy a poner las velas donde entraríamos del gráfico anterior, que es la libra/dollar de hoy mismo:
5332

Perdon por la parrafada, espero que haya quedado todo claro y si alguien puede compilar la estrategia para JForex pues que la postee para aplicarle un Backtest a ver como se comporta ]:reir:.

Un saludo y si hay cualquier duda aquí estoy!!


Buenas, tras leer tu post me estuve interesando por los gráficos Renko, buscando informacion y posibles sistemas para aplicar a Renko, estuve revisando el código de varios scripts y finalmente en la nueva jstore the Dukascopy encontré este codigo de un sistema muy parecido al que tu planteas. Te podria servir practicamente el 90% del código ya que las únicas diferencias que hay entre el sistema que tu planteas y este son las siguientes:

1º) El script en vez de usar el indicador "Fractal" (que solo te dibuja flecha) usa el indicador "Fractallines" (dibuja las lineas enteras en vez de solo el indicador).

2º) El script abre orden directamente al superar la última barra sobre la fractal en vez de poner una pending order +1 según tu sistema.

Por lo demas el script se ajusta a lo que andas buscando, SL/TP/TSTOP/BE todo configurable al lanzar el script.

Así pues dejo aquí el código para el que le pueda interesar.

Saludos.



package jforex.strategies.renko;


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


import com.dukascopy.api.Configurable;
import com.dukascopy.api.DataType;
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.IEngine.OrderCommand;
import com.dukascopy.api.IHistory;
import com.dukascopy.api.IIndicators;
import com.dukascopy.api.IIndicators.AppliedPrice;
import com.dukascopy.api.IChart;
import com.dukascopy.api.IMessage;
import com.dukascopy.api.IOrder;
import com.dukascopy.api.IStrategy;
import com.dukascopy.api.ITick;
import com.dukascopy.api.Instrument;
import com.dukascopy.api.JFException;
import com.dukascopy.api.OfferSide;
import com.dukascopy.api.Period;
import com.dukascopy.api.PriceRange;
import com.dukascopy.api.feed.FeedDescriptor;
import com.dukascopy.api.feed.IFeedDescriptor;
import com.dukascopy.api.feed.IRenkoBar;
import com.dukascopy.api.feed.IRenkoBarFeedListener;
import com.dukascopy.api.indicators.IIndicator;


public class FractalinesRenko implements IStrategy, IRenkoBarFeedListener {


private IEngine engine;
private IConsole console;
private IHistory history;
private IIndicators indicators;
private int counter = 0;
private IOrder order;
@Configurable("Instrument")
public Instrument selectedInstrument = Instrument.EURUSD;
@Configurable("Slippage")
public double slippage = 3;
@Configurable("Amount")
public double amount = 0.02;
@Configurable("Selected period")
public Period selectedPeriod = Period.TWENTY_SECS;
@Configurable("Take profit pips")
public double takeProfitPips = 0;
@Configurable("Stop loss in pips")
public double stopLossPips = 10;
@Configurable("Break even trigger - profit in pips")
public int beTrigger = 10;
@Configurable("Break even lock-in pips")
public int beLockin = 1;
@Configurable("OfferSide")
public OfferSide selectedOfferSide = OfferSide.BID;
@Configurable("Renko bar size (in pips)")
public int selectedRenkoBarSizeInPips = 5;
private PriceRange renkoPriceRange;
@Configurable("Trailing stop loss trigger in pips")
public int trailingTrigger = 15;
@Configurable("Number of bars on sides (FRACTAL)")
public int barCount = 2;
private IFeedDescriptor feedDescriptor;
private PriceRange selectedPriceRange;
private boolean wasSignal; // set to true if there is a signal on this
// renko, and reset back to false when new
// candle is drawn
private IContext context;
private Double blue;
private Double green;


@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;


this.selectedPriceRange = PriceRange.valueOf(selectedRenkoBarSizeInPips);
this.context.subscribeToRenkoBarFeed(selectedInstr ument,
selectedOfferSide, selectedPriceRange, this);


this.feedDescriptor = new FeedDescriptor();
feedDescriptor.setDataType(DataType.RENKO);
// feedDescriptor.setFilter(selectedFilter);
feedDescriptor.setInstrument(selectedInstrument);
feedDescriptor.setOfferSide(selectedOfferSide);
feedDescriptor.setPriceRange(selectedPriceRange);


renkoPriceRange = PriceRange.valueOf(selectedRenkoBarSizeInPips);
if (renkoPriceRange == null) {
throw new JFException(
"selectedRenkoBarSizeInPips must be between one and six");
}


IChart chart = context.getChart(selectedInstrument);
if (chart != null) {
chart.addIndicator(indicators.getIndicator("FractalLines"), new Object[]{barCount});
}


}


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


@Override
public void onBar(Instrument instrument, OfferSide offerSide,
PriceRange brickSize, IRenkoBar renkoBar) {
if (instrument != this.selectedInstrument) {
return;
}


wasSignal = false;


try {
if (instrument.equals(selectedInstrument)
&& offerSide.equals(selectedOfferSide)
&& brickSize.getPipCount() == selectedRenkoBarSizeInPips) {

Object[] askFact1 = indicators.calculateIndicator(feedDescriptor, new OfferSide[]{OfferSide.ASK}, "FractalLines", new AppliedPrice[]{AppliedPrice.CLOSE}, new Object[]{barCount}, 1);
Object[] bidFact1 = indicators.calculateIndicator(feedDescriptor, new OfferSide[]{OfferSide.BID}, "FractalLines", new AppliedPrice[]{AppliedPrice.CLOSE}, new Object[]{barCount}, 1);


blue = (Double) askFact1[0];
green = (Double) bidFact1[1];
}
} catch (Exception ex) {
console.getErr().println(ex.getMessage());
}


}


public void onTick(Instrument instrument, ITick tick) throws JFException {
if (instrument != this.selectedInstrument) {
return;
}
// this mean that we still haven't renko bars
if (blue == null) {
return;
}


IBar askBar2 = history.getRenkoBar(instrument, OfferSide.ASK, renkoPriceRange, 2);
IBar bidBar2 = history.getRenkoBar(instrument, OfferSide.BID, renkoPriceRange, 2);
IBar askBar1 = history.getRenkoBar(instrument, OfferSide.ASK, renkoPriceRange, 1);
IBar bidBar1 = history.getRenkoBar(instrument, OfferSide.BID, renkoPriceRange, 1);


if (!isActive(order)) {
// discard the order if is closed on stop loss or take profit
order = null;
}

//print(dateToStr(askBar2.getTime()));
//print("askBar2.getHigh()", askBar2.getHigh(), "askBar1.getHigh()", askBar1.getHigh(), "blue", blue);


if (!wasSignal && askBar2.getHigh() <= blue && askBar1.getHigh() > blue) {
//console.getInfo().print("!wasSignal && askBar1.getHigh() <= red1 && tick.getAsk() > red0");
// long signal when current bar pirces upper red fractal line
if (order != null && !order.isLong()) {
closeOrder(order);
order = null;
}
if (order == null) {
order = submitOrder(OrderCommand.BUY);
}
wasSignal = true;
}


if (!wasSignal && bidBar2.getLow() >= green && bidBar1.getLow() < green) {
//console.getInfo().print("!wasSignal && bidBar1.getLow() >= blue1 && tick.getBid() < blue0");
// short signal when current bar pirces lower blue fractal line
if (order != null && order.isLong()) {
closeOrder(order);
order = null;
}
if (order == null) {
order = submitOrder(OrderCommand.SELL);
}
wasSignal = true;
}


if (order != null && order.getState() == IOrder.State.FILLED) {
double newStop;
//console.getInfo().println("order != null && order.getState() == IOrder.State.FILLED");
double openPrice = order.getOpenPrice();
double currentStopLoss = order.getStopLossPrice();


if (order.isLong()) { // long side order
if (trailingTrigger > 0
&& tick.getBid() > currentStopLoss + pipToPrice(stopLossPips)
&& tick.getBid() > openPrice + pipToPrice(trailingTrigger)) {
// trailing stop loss
newStop = tick.getBid() - pipToPrice(stopLossPips);
newStop = (new BigDecimal(newStop)).setScale(
instrument.getPipScale(), BigDecimal.ROUND_HALF_UP).doubleValue();


if (currentStopLoss < newStop) {
order.setStopLossPrice(newStop);
}
} else if (beTrigger > 0
&& tick.getBid() >= (openPrice + pipToPrice(beTrigger))) {
// break even
newStop = openPrice + pipToPrice(beLockin);
newStop = (new BigDecimal(newStop)).setScale(
instrument.getPipScale(), BigDecimal.ROUND_HALF_UP).doubleValue();


if (currentStopLoss < newStop) {
order.setStopLossPrice(newStop);
}
}


} else { // short side order
if (trailingTrigger > 0
&& tick.getAsk() < currentStopLoss - pipToPrice(stopLossPips)
&& tick.getAsk() < openPrice - pipToPrice(trailingTrigger)) {
// trailing stop loss
newStop = tick.getAsk() + pipToPrice(stopLossPips);
newStop = (new BigDecimal(newStop)).setScale(
instrument.getPipScale(), BigDecimal.ROUND_HALF_UP).doubleValue();


if (currentStopLoss > newStop) {
order.setStopLossPrice(newStop);
}
} else if (beTrigger > 0
&& tick.getAsk() <= (openPrice - pipToPrice(beTrigger))) {
// break even
newStop = openPrice - pipToPrice(beLockin);
newStop = (new BigDecimal(newStop)).setScale(
instrument.getPipScale(), BigDecimal.ROUND_HALF_UP).doubleValue();


if (currentStopLoss > newStop) {
order.setStopLossPrice(newStop);
}
}
}
}
}


private double pipToPrice(double pips) {
return selectedInstrument.getPipValue() * pips;
}


public void onMessage(IMessage message) throws JFException {
// println(message);
}


public void onAccount(IAccount account) throws JFException {
}


public void onStop() throws JFException {
}


private IOrder submitOrder(OrderCommand orderCmd) throws JFException {


double stopLossPrice = 0.0, takeProfitPrice = 0.0;


// Calculating order price, stop loss and take profit prices
if (orderCmd == OrderCommand.BUY) {
if (stopLossPips > 0) {
stopLossPrice = history.getLastTick(selectedInstrument).getBid()
- pipToPrice(stopLossPips);
}
if (takeProfitPips > 0) {
takeProfitPrice = history.getLastTick(selectedInstrument).getBid()
+ pipToPrice(takeProfitPips);
}
} else {
if (stopLossPips > 0) {
stopLossPrice = history.getLastTick(selectedInstrument).getBid()
+ pipToPrice(stopLossPips);
}
if (takeProfitPips > 0) {
takeProfitPrice = history.getLastTick(selectedInstrument).getBid()
- pipToPrice(takeProfitPips);
}
}
//println("submit order ---------------------------------");
String label = getLabel(selectedInstrument);
/* println("label:" + label + ",selectedInstrument:" + selectedInstrument + ",orderCmd:"
+ orderCmd + ",amount:" + amount + ",slippage:" + slippage
+ ",stopLossPrice:" + stopLossPrice + ",takeProfitPrice:"
+ takeProfitPrice);*/
return engine.submitOrder(getLabel(selectedInstrument), selectedInstrument, orderCmd,
amount, 0, slippage, stopLossPrice, takeProfitPrice);
}


private void closeOrder(IOrder order) throws JFException {
if (isActive(order)) {
order.close();
}
}


private boolean isActive(IOrder order) throws JFException {
if (order != null && order.getState() != IOrder.State.CLOSED
&& order.getState() != IOrder.State.CREATED
&& order.getState() != IOrder.State.CANCELED) {
return true;
}
return false;
}


private String getLabel(Instrument instrument) {
counter++;
String label = instrument.name();
label = label + counter;
label = label.toUpperCase();
return label;
}


private void print(Object... o) {
for (Object ob : o) {
// console.getOut().print(ob + " ");
if (ob instanceof double[]) {
print((double[]) ob);
} else if (ob instanceof double[]) {
print((double[][]) ob);
} else if (ob instanceof Long) {
print(dateToStr((Long) ob));
} else {
print(ob);
}
print(" ");
}
console.getOut().println();
}


private void print(Object o) {
console.getOut().print(o);
}


private void println(Object o) {
console.getOut().println(o);
}


private void print(double[] arr) {
println(arrayToString(arr));
}


private void print(double[][] arr) {
println(arrayToString(arr));
}


private void printIndicatorInfos(IIndicator ind) {
for (int i = 0; i < ind.getIndicatorInfo().getNumberOfInputs(); i++) {
print(ind.getIndicatorInfo().getName() + " Input "
+ ind.getInputParameterInfo(i).getName() + " "
+ ind.getInputParameterInfo(i).getType());
}
for (int i = 0; i < ind.getIndicatorInfo().getNumberOfOptionalInputs() ; i++) {
print(ind.getIndicatorInfo().getName() + " Opt Input "
+ ind.getOptInputParameterInfo(i).getName() + " "
+ ind.getOptInputParameterInfo(i).getType());
}
for (int i = 0; i < ind.getIndicatorInfo().getNumberOfOutputs(); i++) {
print(ind.getIndicatorInfo().getName() + " Output "
+ ind.getOutputParameterInfo(i).getName() + " "
+ ind.getOutputParameterInfo(i).getType());
}
console.getOut().println();
}


public static String arrayToString(double[] arr) {
String str = "";
for (int r = 0; r < arr.length; r++) {
str += "[" + r + "] "
+ (new DecimalFormat("#.#######")).format(arr[r]) + "; ";
}
return str;
}


public static String arrayToString(double[][] arr) {
String str = "";
if (arr == null) {
return "null";
}
for (int r = 0; r < arr.length; r++) {
for (int c = 0; c < arr[r].length; c++) {
str += "[" + r + "][" + c + "] "
+ (new DecimalFormat("#.#######")).format(arr[r][c]);
}
str += "; ";
}
return str;
}


public String toDecimalToStr(double d) {
return (new DecimalFormat("#.#######")).format(d);
}


public String dateToStr(Long time) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") {


{
setTimeZone(TimeZone.getTimeZone("GMT"));
}
};
return sdf.format(time);
}
}

drakko
08-03-2025 12:02,
muy interesante y es bueno saber que alguien más usa Jforex :-), voy a estar probando lo dicho, ojala no me salgan mas dudas

pilsener
08-03-2025 15:11,
gracias pilsener pero no veo el indicador de fractal en esa pagina
Pues como dicen en mi tierra si es un perro te muerde
9932

lavandero
08-03-2025 17:02,
Lo que tiene de bueno las renko es que te eliminan el ruido de mercado y marcan buenos puntos de soportes y resistencias..., pero aún estoy intentando pillarle el rollo, a ver si consigo algo consistente con ellas.

Un saludo.
Ahhhh, muchas gracias zitrux ahora si que me queda claro que sirven para ver mejor los soportes y resistencias.
Reputacion para usted

zitrux
09-03-2025 01:11,
Hola las renko bars son todas iguales, que funcion tienen? Creo que se pierde mucha informacion sin los patrones de velas japonesas. Gracias

Lo que tiene de bueno las renko es que te eliminan el ruido de mercado y marcan buenos puntos de soportes y resistencias..., pero aún estoy intentando pillarle el rollo, a ver si consigo algo consistente con ellas.

Un saludo.

lavandero
09-03-2025 03:28,
Aqui tienes el script para conertir los graficos de MT4 a fractal.

Renko Bars and How to Setup in MT4 | System-Forex.Info (http://www.system-forex.info/2009/09/renko-bars-and-how-to-setup-in-mt4.html)

No habia visto esta estrategia pero es cojonuda, estoy con demasiados frentes abiertos, la dejo apuntada.

Hola las renko bars son todas iguales, que funcion tienen? Creo que se pierde mucha informacion sin los patrones de velas japonesas. Gracias

alfreo
09-03-2025 06:23,
Aqui tienes el script para conertir los graficos de MT4 a fractal.

Renko Bars and How to Setup in MT4 | System-Forex.Info (http://www.system-forex.info/2009/09/renko-bars-and-how-to-setup-in-mt4.html)

No habia visto esta estrategia pero es cojonuda, estoy con demasiados frentes abiertos, la dejo apuntada.

gracias pilsener pero no veo el indicador de fractal en esa pagina

agustinrivera
09-03-2025 11:16,
nunca he usado sistemas automaticos, gracias por la explicación intentare probar alguno

pilsener
09-03-2025 11:33,
hola crisnar, no le he echo bt. he estado buscando el indicador de factal que pone en su plantilla para ponerlo en mt pero no lo encuentro.



Aqui tienes el script para conertir los graficos de MT4 a fractal.

Renko Bars and How to Setup in MT4 | System-Forex.Info (http://www.system-forex.info/2009/09/renko-bars-and-how-to-setup-in-mt4.html)

No habia visto esta estrategia pero es cojonuda, estoy con demasiados frentes abiertos, la dejo apuntada.

alfreo
10-03-2025 00:23,
Hola alfeo una pregunta como haces el backtesting con que pantillas y si no es molestias podrias postear unas tomas de pantallas del panel de donde se ponen la ordenes gracias

hola crisnar, no le he echo bt. he estado buscando el indicador de factal que pone en su plantilla para ponerlo en mt pero no lo encuentro.

crisnar2009
10-03-2025 01:15,
Hola alfeo una pregunta como haces el backtesting con que pantillas y si no es molestias podrias postear unas tomas de pantallas del panel de donde se ponen la ordenes gracias

alfreo
10-03-2025 01:45,
Hola chi@s!! He estado haciendo backtest manual de una estrategia muy sencilla basada en roturas de swings en gráficos Renko y da muy buenos resultados, pero claro, si se puede automatizar mejor que mejor.
La plataforma que uso es JForex del broker Dukaskopy, la idea es programar la estrategia y hacerle el backtest automático en el mismo programa y si sale positiva pues compartirla.
Paso a detallar la estrategia:
Para la receta de hoy chicos necesitaremos:

[*=center]Un par: Cualquiera
[*=center]Gráfico: Tipo Renko de 5 pips
[*=center]Indicador: Fractal (7)

El gráfico tendrá una pinta tal que así:5331

Operativa: Rotura del último fractal, es decir, entramos largos cuando se supera por 1 pip el fractal superior y entramos cortos cuando se supera por 1 pip el fractal inferior. Recalco lo del último fractal porque si se ha superado un fractal, por ejemplo el superior, no volveremos a entrar largos hasta que se forme un nuevo fractal superior y se supere por 1 pip, no vale mirar los que se han formado en el pasado. Es decir, siempre hay que fijarse en la última onda formada por un fractal superior e inferior y tener colocadas las órdenes de venta y compra correspondientes en cada uno, ya que tarde o temprano alguna de las dos se activará.

Luego; Señales de entrada:


[*=center]Compra: Rotura por 1pip del último fractal superior.
[*=center]Venta: Rotura por 1pip del último fractal inferior.

Límites de pérdida/ganancia y gestión de la operación.
Dependerá del tamaño del gráfico Renko (en este caso 5 pips). El stoploss se pondrá a (tamaño del Renko + 1 pip), es decir en este caso 6 pips, y el Take profit a (tamaño del Renko - 1 pip), es decir 5 pips. Como vemos el riesgo beneficio es negativo, arriesgamos mas de lo que queremos ganar, por lo tanto la gestión de la posición es vital. Cuando la operación vaya 5 pips a nuestro favor, en vez de cerrar la posición con el TP, cerraremos el 50% de la misma y moveremos el stop a Breakeven y pondremos un Trailing Stop de 10 pips para dejar correr la posición.

Luego; Gestión de entrada:


[*=center]Stoploss: Tamaño Renko + 1pip
[*=center]Takeprofit: Tamaño Renko - 1pip

Gestión de posición:


[*=center]Si la posición avanza el tamaño del TP a favor, cerramos 50% y ponemos un TrailinStop = 2*Tamaño Renko


Voy a poner las velas donde entraríamos del gráfico anterior, que es la libra/dollar de hoy mismo:
5332

Perdon por la parrafada, espero que haya quedado todo claro y si alguien puede compilar la estrategia para JForex pues que la postee para aplicarle un Backtest a ver como se comporta :reir:.

Un saludo y si hay cualquier duda aquí estoy!!



que tipo de indicador fractal es ese. yo uso los del mt pero son distintos.

crisnar2009
17-04-2025 06:08,
Podria ser interesante. Se programar en JForex y tengo pendiente publicar en mi web un video de programacion en JForex para que la gente pueda comparar las distintas plataformas.

De aqui a un par de semanas no va a poder ser, pero a partir de ahi me gustaria programar, o intentarlo al menos, esta estrategia.

¿Podriais ir enviandome un privado del funcionamiento de la estrategia? A medida que haya avances, los ire contando.

En cuanto al programa que hay para convertir estrategias de mql4 a jforex, no sirve para mucho... lo siento.

Por cierto, ¿alguien sabe como puedo poner firma a mis posts? Quiero que aparezca mi pagina web, no se si se puede...


hola saludos yokinfx
bueno parienod de ue sabes programar me gustaria pedite un favor si pudieses, me gustaria si sabes unasolucion al baktesting en jforex en visual mode ya pude echar andar el grafico en modo visual pero no puedo poner ordenes ni de largos ni de cortos pero hay si se puede por favor echate un vistazo a este hilo y quedaria enormemente agradecido si pudiesese colaborar
http://www.tradingunited.es/foro/plataformas-de-trading/4253-jforex-backtesting-manual-y-otras-cosas.html

y encuantoa pasar indicadores de mt4a jforex es posible se puede y si se puedeseria muy vital poder convertir tres indicadores poderlos donar al foro para lo operan con jforex los pivots piont especiales, indicador de numeros psicologicos, y un indicador de volumen que se llama better volume 1.4, si se pudiese seria un gran aporte para el foro saludos y gracias que do a la espera

Wolfman
05-05-2025 07:55,
Podria ser interesante. Se programar en JForex y tengo pendiente publicar en mi web un video de programacion en JForex para que la gente pueda comparar las distintas plataformas.

De aqui a un par de semanas no va a poder ser, pero a partir de ahi me gustaria programar, o intentarlo al menos, esta estrategia.

¿Podriais ir enviandome un privado del funcionamiento de la estrategia? A medida que haya avances, los ire contando.

En cuanto al programa que hay para convertir estrategias de mql4 a jforex, no sirve para mucho... lo siento.

Por cierto, ¿alguien sabe como puedo poner firma a mis posts? Quiero que aparezca mi pagina web, no se si se puede...

Gracias por las aclaraciones, si mas no recuerdo cuando tengas 10 post se habilita la opcion de mensajes y la firma.

http://www.tradingunited.es/foro/content/section/115-videos-explicativos.html

aka tienes una idea de como hacerlo.

Saludos.

yokinfx
05-05-2025 13:49,
Podria ser interesante. Se programar en JForex y tengo pendiente publicar en mi web un video de programacion en JForex para que la gente pueda comparar las distintas plataformas.

De aqui a un par de semanas no va a poder ser, pero a partir de ahi me gustaria programar, o intentarlo al menos, esta estrategia.

¿Podriais ir enviandome un privado del funcionamiento de la estrategia? A medida que haya avances, los ire contando.

En cuanto al programa que hay para convertir estrategias de mql4 a jforex, no sirve para mucho... lo siento.

Por cierto, ¿alguien sabe como puedo poner firma a mis posts? Quiero que aparezca mi pagina web, no se si se puede...

Llavedefuego
09-05-2025 12:09,
Interesante no lo he probado, tratare de usarlo a ver como me va,:alien: aunque no siempre las estrategias funcionan para todos!

Angel_88
12-05-2025 04:16,
Hola, echandole un vistazo a la estrategia de angel y dada mi "inutilidad" para JForex, he estado buscando por ahí y he encontrado un EA (o script) que fabrica los gráficos Renko en MT (que como sabeis no se pueden poner de fábrica). Lo que hace es crear los graficos Renko en un chart offline pero por lo visto se pueden correr EAs sobre él. Lo digo por que a lo mejor en mql se anima mas gente a programar la estrategia de angel que no parece muy complicado y podemos intentar optimizarla.

El EA para los gráficos es el Renko LiveChartsc3.2 ( Renko Bars and How to Setup in MT4 | System-Forex.Info (http://www.system-forex.info/2009/09/renko-bars-and-how-to-setup-in-mt4.html) )

La verdad es que tiene buena pinta, quedaría algo así...




5793


Sl2


Muy buena idea Winetou! muchas gracias!! A ver si se anima mas gente y le añadimos algún filtro o mejora al sistema.

Saludos.

Winetou
13-05-2025 11:35,
Hola, echandole un vistazo a la estrategia de angel y dada mi "inutilidad" para JForex, he estado buscando por ahí y he encontrado un EA (o script) que fabrica los gráficos Renko en MT (que como sabeis no se pueden poner de fábrica). Lo que hace es crear los graficos Renko en un chart offline pero por lo visto se pueden correr EAs sobre él. Lo digo por que a lo mejor en mql se anima mas gente a programar la estrategia de angel que no parece muy complicado y podemos intentar optimizarla.

El EA para los gráficos es el Renko LiveChartsc3.2 ( Renko Bars and How to Setup in MT4 | System-Forex.Info (http://www.system-forex.info/2009/09/renko-bars-and-how-to-setup-in-mt4.html) )

La verdad es que tiene buena pinta, quedaría algo así...




5793


Sl2

zitrux
19-05-2025 05:05,
Hola Zitrux, si por supuesto, lo he probado en varios pares y tiene buena pinta, incluso probando a incluirle algun filtro sencillo para optimizarla un poco, como solo operar la rotura de fractales al alza después de un cruce de medias por ejemplo. ¿No conoceras a alguien que sepa programar en Jforex por casualidad? :divertido2:

Tengo un amigo que desgraciadamente solo lo veo en verano que me dijo que sabía programar en muchos lenguajes y creo que java estaba entre los que me dijo, tardaré en volver a verlo pero cuando lo vea se lo diré. Aunque realmente estoy interesado en aprender yo y lo tengo pendiente para un futuro espero que cercano.

No obstante nunca le habia prestado atención a estos gráficos renko, de hecho no sabía en que consistían, y la verdad es que para marcar tendencias y eliminar ruido del mercado parece que va muy bien, probé a hacer una entrada con los datos que pusiste y me salió bien, lástima que fuera con 0,001 lotes, pensaba que eran como los graficos de velas y cuando puse la órden y salía a la derecha de la última caja se me quedo cara de :sorprendido:, tengo que profundizar más en esto, lo veo muy interesante, voy a ir haciendo pruebas y buscando información y si descubro algo interesante te lo hago saber.

Un saludo.

Angel_88
19-05-2025 06:01,
Hola Angel_88 en principio no lo he probado, pero me pareció muy interesante y quiero ver como va, el problema es que estoy aplicando mi nuevo sistema y voy analizando todos los pares.
¿Lo has probado con varios pares de divisas?
A ver si mañana le encuentro un hueco y le hecho un vistazo.

Un saludo.

Hola Zitrux, si por supuesto, lo he probado en varios pares y tiene buena pinta, incluso probando a incluirle algun filtro sencillo para optimizarla un poco, como solo operar la rotura de fractales al alza después de un cruce de medias por ejemplo. ¿No conoceras a alguien que sepa programar en Jforex por casualidad? :divertido2:

zitrux
20-05-2025 09:53,
Hola Angel_88 en principio no lo he probado, pero me pareció muy interesante y quiero ver como va, el problema es que estoy aplicando mi nuevo sistema y voy analizando todos los pares.
¿Lo has probado con varios pares de divisas?
A ver si mañana le encuentro un hueco y le hecho un vistazo.

Un saludo.

Angel_88
20-05-2025 11:46,
Muy interesante angel_88, aprovechando que también tengo Jforex, voy a ir viendo como va funcionando.

¿Que te parece el sistema Zitrux? Lo has investigado un poquillo? Yo creo que promete y que se puede atomatizar para que no estemos todo el día delante de los gráficos. Espero que alguien con conocimiento en programación lo automatice para pasarle el backtest automático en JForex

Si no pues me pondre a aprender Java desde 0, que remedio ajajaja pero esto hay que probarlo :)

zitrux
21-05-2025 03:11,
Muy interesante angel_88, aprovechando que también tengo Jforex, voy a ir viendo como va funcionando.

Angel_88
21-05-2025 03:35,
Hola chi@s!! He estado haciendo backtest manual de una estrategia muy sencilla basada en roturas de swings en gráficos Renko y da muy buenos resultados, pero claro, si se puede automatizar mejor que mejor.
La plataforma que uso es JForex del broker Dukaskopy, la idea es programar la estrategia y hacerle el backtest automático en el mismo programa y si sale positiva pues compartirla.
Paso a detallar la estrategia:
Para la receta de hoy chicos necesitaremos:

[*=center]Un par: Cualquiera
[*=center]Gráfico: Tipo Renko de 5 pips
[*=center]Indicador: Fractal (7)

El gráfico tendrá una pinta tal que así:5331

Operativa: Rotura del último fractal, es decir, entramos largos cuando se supera por 1 pip el fractal superior y entramos cortos cuando se supera por 1 pip el fractal inferior. Recalco lo del último fractal porque si se ha superado un fractal, por ejemplo el superior, no volveremos a entrar largos hasta que se forme un nuevo fractal superior y se supere por 1 pip, no vale mirar los que se han formado en el pasado. Es decir, siempre hay que fijarse en la última onda formada por un fractal superior e inferior y tener colocadas las órdenes de venta y compra correspondientes en cada uno, ya que tarde o temprano alguna de las dos se activará.

Luego; Señales de entrada:


[*=center]Compra: Rotura por 1pip del último fractal superior.
[*=center]Venta: Rotura por 1pip del último fractal inferior.

Límites de pérdida/ganancia y gestión de la operación.
Dependerá del tamaño del gráfico Renko (en este caso 5 pips). El stoploss se pondrá a (tamaño del Renko + 1 pip), es decir en este caso 6 pips, y el Take profit a (tamaño del Renko - 1 pip), es decir 5 pips. Como vemos el riesgo beneficio es negativo, arriesgamos mas de lo que queremos ganar, por lo tanto la gestión de la posición es vital. Cuando la operación vaya 5 pips a nuestro favor, en vez de cerrar la posición con el TP, cerraremos el 50% de la misma y moveremos el stop a Breakeven y pondremos un Trailing Stop de 10 pips para dejar correr la posición.

Luego; Gestión de entrada:


[*=center]Stoploss: Tamaño Renko + 1pip
[*=center]Takeprofit: Tamaño Renko - 1pip

Gestión de posición:


[*=center]Si la posición avanza el tamaño del TP a favor, cerramos 50% y ponemos un TrailinStop = 2*Tamaño Renko


Voy a poner las velas donde entraríamos del gráfico anterior, que es la libra/dollar de hoy mismo:
5332

Perdon por la parrafada, espero que haya quedado todo claro y si alguien puede compilar la estrategia para JForex pues que la postee para aplicarle un Backtest a ver como se comporta :reir:.

Un saludo y si hay cualquier duda aquí estoy!!