Pon "Me gusta" y sigue las noticias
Deje un enlace a él, ¡qué los demás también lo valoren!
Evalúe su trabajo en el terminal MetaTrader 5
- Visualizaciones:
- 961
- Ranking:
- Publicado:
- 2016.05.23 07:48
- Actualizado:
- 2016.11.22 07:33
-
¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa
Vez en cuando que me sale una nueva idea acerca de alguna estrategia nueva para aplicar y ver resultados en el probador de estrategias. Antes, todavía copié mi EA anterior y elimininé todo lo que me indesaba
y añadí cosas nuevas, por lo que el resultado fue el nuevo EA. Hace algún tiempo encontré una mejor manera para mí. He desarrollado una plantilla o esquema para la mayor parte de mis futuros EAs.
Esto sucedió cuando estaba pensando en más estrategias en un EA y de conmutación entre ellas, según un período (tendencia, agitación,...).
Necesitaba un esquema de EA que me permite tener todo el código de la "acción" junto y todo el código "estrategia" junto. Llegué a un esquema que quiero compartir hoy con vosotros.
La estructura principal de este EA es el siguiente:
ActionCode - contiene código independiente de la estrategia implementada en este EA
StrategyCode - contiene código de toda la estrategia
Cada uno hace algo, la parte ActionCode para decidir lo que hay que hacer, se pide llamando a la parte StrategyCode, la cual devuelve un resultado, que puede ser ejecutado de nuevo por parte universal ActionCode.
Parte ActionCode
int _STRATEGY_NUMBER = 1; #define _OPEN_LONG 1 #define _OPEN_SHORT 2 #define _CLOSE_LONG 3 #define _CLOSE_SHORT 4 #define _GET_LONG_STOPLOSS_PRICE 5 #define _GET_SHORT_STOPLOSS_PRICE 6 #define _GET_LONG_TAKEPROFIT_PRICE 7 #define _GET_SHORT_TAKEPROFIT_PRICE 8 #define _GET_LOTS 9 #define _GET_TRAILED_STOPLOSS_PRICE 10 #define _GET_TRAILED_TAKEPROFIT_PRICE 11 #define _GET_TRADED_TIMEFRAME 12 #define _OPEN_PENDING_BUY_STOP 13 #define _OPEN_PENDING_SELL_STOP 14 #define _OPEN_PENDING_BUY_LIMIT 15 #define _OPEN_PENDING_SELL_LIMIT 16 #define _GET_PENDING_BUY_STOP_PRICE 17 #define _GET_PENDING_SELL_STOP_PRICE 18 #define _GET_PENDING_ORDER_EXPIRATION 19 int start() { double Stoploss = 0; double TakeProfit = 0; if(LastBarTraded()) return(0); if(OrdersTotal() > 0) { Stoploss = Strategy(_STRATEGY_NUMBER, _GET_TRAILED_STOPLOSS_PRICE); TakeProfit = Strategy(_STRATEGY_NUMBER, _GET_TRAILED_TAKEPROFIT_PRICE); if(Stoploss != 0 || TakeProfit != 0) ModifyAllPositions(_MAGICNUMBER, Stoploss, TakeProfit); if(Strategy(_STRATEGY_NUMBER, _CLOSE_LONG) == 1) CloseAllLongPositions(_MAGICNUMBER); if(Strategy(_STRATEGY_NUMBER, _CLOSE_SHORT) == 1) CloseAllShortPositions(_MAGICNUMBER); } if(!TradeAllowed(1)) return(0); if(Strategy(_STRATEGY_NUMBER, _OPEN_LONG) == 1) OpenPosition(false, Strategy(_STRATEGY_NUMBER, _GET_LOTS), Strategy(_STRATEGY_NUMBER, _GET_LONG_STOPLOSS_PRICE), Strategy(_STRATEGY_NUMBER, _GET_LONG_TAKEPROFIT_PRICE), 3, _MAGICNUMBER); if(Strategy(_STRATEGY_NUMBER, _OPEN_SHORT) == 1) OpenPosition(true, Strategy(_STRATEGY_NUMBER, _GET_LOTS), Strategy(_STRATEGY_NUMBER, _GET_SHORT_STOPLOSS_PRICE), Strategy(_STRATEGY_NUMBER, _GET_SHORT_TAKEPROFIT_PRICE), 3, _MAGICNUMBER); if(Strategy(_STRATEGY_NUMBER, _OPEN_PENDING_BUY_STOP) == 1) OpenPendingPosition(false, Strategy(_STRATEGY_NUMBER, _GET_LOTS), Strategy(_STRATEGY_NUMBER, _GET_PENDING_BUY_STOP_PRICE), Strategy(_STRATEGY_NUMBER, _GET_LONG_STOPLOSS_PRICE), Strategy(_STRATEGY_NUMBER, _GET_LONG_TAKEPROFIT_PRICE), 3, _MAGICNUMBER, Strategy(_STRATEGY_NUMBER, _GET_PENDING_ORDER_EXPIRATION)); if(Strategy(_STRATEGY_NUMBER, _OPEN_PENDING_SELL_STOP) == 1) OpenPendingPosition(true, Strategy(_STRATEGY_NUMBER, _GET_LOTS), Strategy(_STRATEGY_NUMBER, _GET_PENDING_SELL_STOP_PRICE), Strategy(_STRATEGY_NUMBER, _GET_SHORT_STOPLOSS_PRICE), Strategy(_STRATEGY_NUMBER, _GET_SHORT_TAKEPROFIT_PRICE), 3, _MAGICNUMBER, Strategy(_STRATEGY_NUMBER, _GET_PENDING_ORDER_EXPIRATION)); return(0); }
Parte StrategyCode
double Strategy(int STRATEGY, int COMMAND) { switch(STRATEGY) { // Descripción breve de la estrategia case 1: { return(Strategy_001(COMMAND)); } // Descripción breve de la estrategia case 2: { return(Strategy_002(COMMAND)); } //... // Short description of strategy case 99: { return(Strategy_099(COMMAND)); } } return(0); } double Strategy_001(int COMMAND) { string _SYMBOL = Symbol(); int _TIMEFRAME = getStrategyTimeframeByNumber(_STRATEGY_TIMEFRAME); double result = 0; int i; switch(COMMAND) { case _OPEN_LONG: { // break; // if(!OpenNewBar()) // break; if(Open long condition is true) result = 1; break; } case _OPEN_SHORT: { // break; // if(!OpenNewBar()) // break; if(Open short condition is true) result = 1; break; } case _CLOSE_LONG: { // break; if(Close long condition is true) result = 1; break; } case _CLOSE_SHORT: { // break; if(Close short condition is true) result = 1; break; } case _GET_LONG_STOPLOSS_PRICE: { // break; result = Long SL price break; } case _GET_SHORT_STOPLOSS_PRICE: { // break; result = Short SL price break; } case _OPEN_PENDING_BUY_STOP: { break; } case _OPEN_PENDING_SELL_STOP: { break; } case _GET_PENDING_BUY_STOP_PRICE: { break; } case _GET_PENDING_SELL_STOP_PRICE: { break; } case _GET_LONG_TAKEPROFIT_PRICE: { break; } case _GET_SHORT_TAKEPROFIT_PRICE: { break; } case _GET_TRAILED_STOPLOSS_PRICE: { break; } case _GET_TRAILED_TAKEPROFIT_PRICE: { break; } case _GET_LOTS: { result = Lot amount; break; } case _GET_TRADED_TIMEFRAME: { result = _TIMEFRAME; break; } case _GET_PENDING_ORDER_EXPIRATION: { break; } } return(result); }
Se puede ver que la aplicación de la nueva estrategia en este esquema es muy fácil. Sólo poner un nuevo CASO en la función Strategy() y agrega una nueva función Strategy_NNN() con las reglas de la estrategia implementada.
Este esquema no se ajusta a cualquier estrategia, solo para los que abren una posición en el tiempo y tienen un nivel de "workflow".
Como ejemplo adjunto código completo con estrategia de pocas perdidas implementada (véase código)
Espero que muchos de vosotros podáis inspiraros en esto y tal vez vengan algunas nuevas ideas, para mejorar este concepto.Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/code/8625

Otro indicador que muestra el gráfico de ticks, que sería útil para los pipsers. Tiene algunas características.

Wrapper para leer y escribir en MySQL

Otro indicador Fibo.

Muestra dónde comprar y donde vender a través de las flechas. Si una tendencia se produce luego traerá beneficio, si no hay ninguna tendencia, no habrá ningún beneficio.