İş tamamlandı
İş Gereklilikleri
Necesito un desarrollador que ajuste una EA actual desarrollada para que realice operaciones de compra y de venta. El código es sencillo, es una reversión a la media con desviaciones típicas y EMA, algo básico. La lógica para comprar y vender es abrir una operación cuando el precio haya cerrado en niveles extremos y cerrar cuando alcance el punto promedio, básicamente como cualquier estrategia de reversión a la media.
La estrategia emplea dos desviaciones típicas de una EMA central, de forma que cuando el precio cierre por encima de una y debajo de la otra al mismo tiempo se ejecuten operaciones de compra o venta, según corresponda, y se cierre automáticamente una vez el precio haya alcanzado la EMA central. El sistema no tiene Take Profits ni Stop Loss específicos como tal, sino órdenes de salida, las cuales pueden producir o ganancias o pérdidas. Igualmente es un sistema que solo permite una única dirección al mismo tiempo. Está pensado para trabajar en velas de 1 minuto.
El lote es una variable indicada como una cantidad fija que puede ser modificada arbitrariamente, así como el periodo de la EMA y las desviaciones de la misma. Por la lógica de la estrategia, nunca se va a dar que en una posición abierta se ejecuten señales para una posición contraria, pueden darse ejecuciones en la misma dirección que la entrada inicial que NO serán ejecutadas, de forma que se mantendrá una única posición en una única dirección cada vez que se den las condiciones para una señal de compra.
La lógica es la siguiente:
1) Detecta que el precio cierra por encima de una desviación típica del precio y debajo de la otra.
2) Ejecuta la orden de compra o de venta, dependiendo de cuáles sean las desviaciones que sobrepasa y cuales no (está todo muy claramente escrito en el código)
3) Una vez el precio cierre por debajo o por encima de la EMA, la operación se cerrará automáticamente
Listo, necesito alguien que desarrolle las órdenes de entrada y salida del mercado únicamente. Pongo una parte del código para que puedan hacerse a la idea:
#include <Trade/Trade.mqh> //--- input parameters input double Dev1=2.0; input double Dev2=2.25; input int emaPeriod=12; input double DefaultQuantity=1; int ema_handle, bollinger_handle1, bollinger_handle2; double Close[]; CTrade trade; ---------------- void OnTick() { //--- Calculation of stdevs and EMA double mid = iMA(_Symbol, PERIOD_CURRENT, emaPeriod, 0, MODE_EMA, PRICE_CLOSE); double dev = iStdDev(_Symbol, PERIOD_CURRENT, emaPeriod, 0, MODE_EMA, PRICE_CLOSE); double up1 = mid + Dev1 * dev; double low1 = mid - Dev1 * dev; double up2 = mid + Dev2 * dev; double low2 = mid - Dev2 * dev; CopyClose(_Symbol,PERIOD_CURRENT,0,1,Close); if (PositionSelect(_Symbol) == false) { if (up1 <= Close[0] && up2 >= Close[0]) { trade.Sell(DefaultQuantity,_Symbol,0.0,0.0,0.0,""); } else if (low1 >= Close[0] && Close[0] >= low2) { trade.Buy(DefaultQuantity,_Symbol,0.0,0.0,0.0,""); } else { if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL && mid >= Close[0]) { trade.PositionClose(_Symbol); } else if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && mid <= Close[0]) { trade.PositionClose(_Symbol); } } }