Versión 1.105: Introducidas funciones separadas OpenBuy y OpenSell
//| Apertura de la posición BUY por símbolo|
//+------------------------------------------------------------------+
bool OpenBuy(const double lot)
{
bool res=false;
double price=m_symbol.Ask();
double tp=m_symbol.NormalizePrice(m_symbol.Bid()+InpTP*m_adjusted_point);
if(m_trade.Buy(lot,m_symbol.Name(),price,0.0,tp))
if(m_trade.ResultDeal()>0)
res=true;
return(res);
}
//+------------------------------------------------------------------+
//| Abrir una posición de VENTA por símbolo|
//+------------------------------------------------------------------+
bool OpenSell(const double lot)
{
bool res=false;
double price=m_symbol.Bid();
double tp=m_symbol.NormalizePrice(m_symbol.Ask()-InpTP*m_adjusted_point);
if(m_trade.Sell(lot,m_symbol.Name(),price,0.0,tp))
if(m_trade.ResultDeal()>0)
res=true;
return(res);
}
Ahora el código es más legible.
Como siempre el problema es ¿qué hacer con las posiciones no rentables que quedan colgadas? He aquí un ejemplo de la versión 1.105:

y la versión 1.105 con un pequeño cambio: en OnTradeTransaction (cuando se detecta el cierre de una posición TakeProfit) buscamos la posición más no rentable y cerramos esta posición más no rentable:

Permítame recordarle que las pruebas individuales se realizan exclusivamente en el modo"Cada Tick Basado en Tick Real".
Ambas variantes comenzaron en 10000. Qué variante elegir - creo que depende de sus objetivos específicos.
hay una opción para cerrar todas las posiciones cuando al menos una de ellas recibe un tp
En este caso puede ser así
la primera salida - dos posiciones multidireccionales, una de ellas recibe TakeProfit y cerramos todas (es decir, cerramos la posición restante - la no rentable). Como resultado, tomamos ganancias en TakeProfit y al mismo tiempo una pérdida en la segunda posición.
Eso no suena muy bien.
En este caso puede ser así
primero empezamos - dos posiciones multidireccionales, una obtiene TakeProfit y cerramos todas (es decir, cerramos la restante - la no rentable). Como resultado, tomamos ganancias en TakeProfit y al mismo tiempo una pérdida en la segunda posición.
Eso no es muy bueno.
Tengo uno de estos, pero no martin debe ser de 2 mínimo + entrada con éxito.
El problema principal es encontrar una entrada donde la suma de las entradas exitosas debe más de la mitad de la suma de las no exitosas.
8 rodillas de 0,01 es suficiente si no es una cruz.
teoría
1) se abren 2 órdenes de 0.01 cada una en diferentes direcciones sobre la señal
2) si el precio pasa la distancia requerida al beneficio, entonces una recarga con una toma, el número de recargas, el paso de la rodilla y la toma - se puede jugar con esto durante mucho tiempo.
He decidido dejar la segunda opción (... con un pequeño cambio: en OnTradeTransaction (cuando se detecta el cierre de una posición por TakeProfit) buscamos la posición más no rentable y cerramos esta posición más no rentable ...):
Foro sobre trading, sistemas automatizados de trading y testeo de estrategias de trading
Asesores Expertos: Nuevo Martin
Vladimir Karputov, 2017.01.22 19:00
Como siempre el problema - ¿qué hacer con las posiciones no rentables que cuelgan? Aquí hay un ejemplo de la versión 1.105:

y la versión 1.105 con un pequeño cambio: en OnTradeTransaction (cuando se detecta el cierre de la posición TakeProfit) buscamos la posición más no rentable y cerramos esta posición más no rentable:

Permítame recordarle que las pruebas individuales se realizan exclusivamente en el modo"Cada Tick Basado en Tick Real".
Ambas variantes comenzaron en 10000. Qué variante elegir - creo que depende de sus objetivos específicos.
ahora versión 1.106
Versión 1.007 - protección contra el reinicio del terminal:
if(!RefreshRates())
return;
if(m_first)
{
//--- protección contra el reinicio del terminal:
int total=0;
for(int i=PositionsTotal()-1;i>=0;i--) // devuelve el número de posiciones abiertas
if(m_position.SelectByIndex(i)) // selecciona la posición por índice para acceder posteriormente a sus propiedades
if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
total++;
//--- si ya hay posiciones abiertas por este Asesor Experto en la cuenta de trading -
//--- así que inicializamos las variables de tal manera que parece que ya ha sido la primera vez.
if(total>0)
{
bln_buy=true;
bln_sell=true;
m_first=false;
return;
}
if(OpenBuy(InpLot))
bln_buy=true;
if(OpenSell(InpLot))
bln_sell=true;
m_first=false;
}
//---
Ahora si el terminal ha sido reiniciado o el EA ha sido recompilado y el EA ya ha abierto posiciones en la cuenta de trading dada, no habrá una situación de "primera ejecución".
Versión 1.108 Ahora en el cruce y en el TakeProfit si hay una posición rentable, también se cierra.
Compare 1.108 (gráficos superiores) con la versión anterior 1.107:
и
La versión 1.108 tiene un beneficio total menor, pero también los drawdowns en periodos difíciles son el doble de pequeños comparados con la versión 1.107.
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso


New Martin:
New Martin - asesor que abre dos posiciones opuestas al iniciarse. Procesamiento de OnTradeTransaction. Al activarse el Take Profit se abre una posición (UNA) en la misma dirección. El cruce de dos indicadores МА será la señal de apertura de la posición con un lote aumentado.
Autor: Vladimir Karputov