Programar en JForex mi estrategia supersimple

 

Publi

Programar en JForex mi estrategia supersimple

 

Publi

Página 1 de 3 123 ÚltimoÚltimo
Resultados 1 al 10 de 25


  1. #1
    Avatar de zitrux



    Reputación:
    Poder de reputación: 25

    Espana
    Mensajes: 3.268
    Créditos: 1.705

    Re: Programar en JForex mi estrategia supersimple


    Publi
    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.
    Foro de Forex Trading United

  2. Publi
    Publi


  3. #2




    Reputación:
    Poder de reputación: 21

    Cayman Islands
    Mensajes: 1.877
    Créditos: 756

    Re: Programar en JForex mi estrategia supersimple

    Cita Iniciado por crisnar2009 Ver mensaje
    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.
    Foro de Forex Trading United

  4. #3
    Avatar de crisnar2009
    Erectus


    Reputación:
    Poder de reputación: 13

    Mensajes: 220
    Créditos: 50

    Re: Programar en JForex mi estrategia supersimple

    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
    Foro de Forex Trading United



  5. #4




    Reputación:
    Poder de reputación: 21

    Cayman Islands
    Mensajes: 1.877
    Créditos: 756

    Re: Programar en JForex mi estrategia supersimple

    Cita Iniciado por Angel_88 Ver mensaje
    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:
    1. Un par: Cualquiera
    2. Gráfico: Tipo Renko de 5 pips
    3. Indicador: Fractal (7)

    El gráfico tendrá una pinta tal que así:Archivo adjunto 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:

    • Compra: Rotura por 1pip del último fractal superior.
    • 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:

    • Stoploss: Tamaño Renko + 1pip
    • Takeprofit: Tamaño Renko - 1pip

    Gestión de posición:

    • 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:
    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 .

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


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

  6. #5
    Avatar de zitrux



    Reputación:
    Poder de reputación: 25

    Espana
    Mensajes: 3.268
    Créditos: 1.705

    Re: Programar en JForex mi estrategia supersimple

    Muy interesante angel_88, aprovechando que también tengo Jforex, voy a ir viendo como va funcionando.
    Foro de Forex Trading United

  7. #6




    Reputación:
    Poder de reputación: 11

    Mensajes: 8
    Créditos: 50

    Re: Programar en JForex mi estrategia supersimple

    Parece interesante

    Como funcionaria con MT4 de Forexyard,alguien lo sabe

    Gracias
    Foro de Forex Trading United

  8. #7




    Reputación:
    Poder de reputación: 11

    Mensajes: 1
    Créditos: 50

    Re: Programar en JForex mi estrategia supersimple

    Cita Iniciado por Angel_88 Ver mensaje
    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:
    1. Un par: Cualquiera
    2. Gráfico: Tipo Renko de 5 pips
    3. Indicador: Fractal (7)

    El gráfico tendrá una pinta tal que así:Archivo adjunto 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:

    • Compra: Rotura por 1pip del último fractal superior.
    • 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:

    • Stoploss: Tamaño Renko + 1pip
    • Takeprofit: Tamaño Renko - 1pip

    Gestión de posición:

    • 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:
    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 ].

    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.

    Código:
    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(selectedInstrument,
                    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);
        }
    }
    Foro de Forex Trading United

  9. #8




    Reputación:
    Poder de reputación: 12

    Mensajes: 71
    Créditos: 50

    Re: Programar en JForex mi estrategia supersimple

    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 )

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




    Programar en JForex mi estrategia supersimple-renko.jpg


    Sl2
    Foro de Forex Trading United

  10. #9




    Reputación:
    Poder de reputación: 12

    Mensajes: 5
    Créditos: 50

    Re: Programar en JForex mi estrategia supersimple

    Cita Iniciado por zitrux Ver mensaje
    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
    Foro de Forex Trading United

  11. #10




    Reputación:
    Poder de reputación: 21

    Cayman Islands
    Mensajes: 1.877
    Créditos: 756

    Re: Programar en JForex mi estrategia supersimple


    Publi
    Cita Iniciado por pilsener Ver mensaje
    Aqui tienes el script para conertir los graficos de MT4 a fractal.

    Renko Bars and How to Setup in MT4 | System-Forex.Info

    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
    Foro de Forex Trading United

Página 1 de 3 123 ÚltimoÚltimo
This website uses cookies
Utilizamos cookies propias y de terceros para elaborar información estadística y mostrarle publicidad personalizada a través del análisis de su navegación. Si continúa navegando acepta su uso. Más información y política de cookies.
     

 

Publi


Aviso Legal
Ley Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal