[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 239

 
IgorM:

iHighest y iLowest para ayudarte, y lee el algoritmo para construir ZZ

SZY:no es la tarea más fácil, el código será pequeño, pero el algoritmo es complejo, no puedo encontrar el código, pero he buscado un pico en High: High[iHighest(NULL,0,MODE_HIGH,i)

1. ¿Qué es "33"?

2. High[iHighest(NULL,0,MODE_HIGH,i) dará un punto. ¿Cómo conseguir el segundo?

iLowest != segundo punto.

 
charter:

1. ¿Qué es "33"?

2. High[iHighest(NULL,0,MODE_HIGH,i) dará un punto. ¿Cómo conseguir el segundo?


1. Zig Zag.

2. no lo hará, sólo le dará la posibilidad de encontrar algún máximo para la línea superior y entonces tendrá que elegir dos de estos máximos para trazar la línea

 
charter:

La dificultad estriba en encontrar los puntos por los que posteriormente se trazará la línea.

No es difícil trazar líneas cuando se pueden ver estos puntos. ¿Cómo se "ven" programáticamente?

¡Gracias, corregido!

 
charter:

La dificultad estriba en encontrar los puntos por los que posteriormente se trazará la línea.

No es difícil trazar líneas cuando se pueden ver estos puntos. ¿Cómo se "ven" programáticamente?

¡Gracias, corregido!

 

¡Buenos días a todos los conocedores!

Por favor, ayúdeme a corregir el código en el Asesor Experto https://www.mql5.com/ru/code - Ilan.

¡La idea es que el EA tiene un parámetro ajustable para la reducción de la equidad, que cierra todas las órdenes!

Sin embargo, esta función con posiciones de lote apareció más tarde, por lo que nuestro EA ha estado cerrando todas las órdenes abiertas siguiendo la tendencia y deja sin tocar las posiciones de bloqueo. Entonces, ¿cómo arreglarlo para que todas las órdenes se cierren a una determinada reducción de capital?

Aquí está la sección donde se cierran las órdenes (las órdenes de tendencia y de pérdida tienen números mágicos diferentes). Todo funciona aquí. El Asesor Experto está cerrando todas las órdenes. La detracción es 4 o más veces superior a la establecida, hasta el punto de vaciar el depósito:

if (UseEquityStop) {

if (CurrentPairProfit < 0.0 && MathAbs(CurrentPairProfit) > TotalEquityRisk / 100.0 * AccountEquityHigh()) {

CloseThisSymbolAll(MagicNumber);

CloseThisSymbolAll(LMagN);

PrintF("Closed All due to Stop Out");

NewOrdersPlaced = FALSE;

Resulta que las órdenes perdedoras se están cubriendo, pero no se tienen en cuenta a la hora de calcular el beneficio y el patrimonio actuales. Aquí está el segmento que calcula el beneficio actual:

double CalculateProfit() {

double ld_ret_0 = 0;

for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;

if (OrderSymbol() == Symbol())

if (OrderMagicNumber() == MagicNumber || OrderMagicNumber() == LMagN)

if (OrderType() == OP_BUY || OrderType() == OP_SELL) ld_ret_0 += OrderProfit();

}

return (ld_ret_0);

Y aquí está el segmento que calcula la equidad:

double AccountEquityHigh() {

if ((CountTrades(MagicNumber) == 0) && (CountTrades(LMagN) == 0)) AccountEquityHighAmt = AccountEquity();

if (AccountEquityHighAmt < PrevEquity) AccountEquityHighAmt = PrevEquity;

else AccountEquityHighAmt = AccountEquity();

PrevEquity = AccountEquity();

return (AccountEquityHighAmt);

He resaltado en negro las secciones que he añadido. ¿Qué he olvidado? ????? Por qué no funciona?????

 
polsvv:

¡Buenos días a todos los conocedores!

Por favor, ayúdeme a corregir el código en el Asesor Experto https://www.mql5.com/ru/code - Ilan.

¡La idea es que el EA tiene un parámetro ajustable para la reducción de la equidad, que cierra todas las órdenes!

Sin embargo, la función de bloqueo apareció más tarde, por lo que nuestro EA ha estado cerrando todas las órdenes abiertas siguiendo la tendencia y deja intactas las posiciones de bloqueo. Entonces, ¿cómo arreglarlo para que todas las órdenes se cierren a una determinada reducción de capital?

Aquí está la sección donde se cierran las órdenes (las órdenes de tendencia y de pérdida tienen números mágicos diferentes). Todo funciona aquí. El Asesor Experto está cerrando todas las órdenes. La detracción es 4 o más veces superior a la establecida, hasta el punto de vaciar el depósito:

if (UseEquityStop) {

if (CurrentPairProfit < 0.0 && MathAbs(CurrentPairProfit) > TotalEquityRisk / 100.0 * AccountEquityHigh()) {

CloseThisSymbolAll(MagicNumber);

CloseThisSymbolAll(LMagN);

PrintF("Closed All due to Stop Out");

NewOrdersPlaced = FALSE;

Resulta que las órdenes perdedoras se están cubriendo, pero no se tienen en cuenta a la hora de calcular el beneficio y el patrimonio actuales. Aquí está el segmento que calcula el beneficio actual:

double CalculateProfit() {

double ld_ret_0 = 0;

for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;

if (OrderSymbol() == Symbol())

if (OrderMagicNumber() == MagicNumber || OrderMagicNumber() == LMagN)

if (OrderType() == OP_BUY || OrderType() == OP_SELL) ld_ret_0 += OrderProfit();

}

return (ld_ret_0);

Y aquí está el segmento que calcula la equidad:

double AccountEquityHigh() {

if ((CountTrades(MagicNumber) == 0) && (CountTrades(LMagN) == 0)) AccountEquityHighAmt = AccountEquity();

if (AccountEquityHighAmt < PrevEquity) AccountEquityHighAmt = PrevEquity;

else AccountEquityHighAmt = AccountEquity();

PrevEquity = AccountEquity();

return (AccountEquityHighAmt);

He resaltado en negro las secciones que he añadido. ¿Qué he olvidado? ????? Por qué no funciona?????

¿Tal vez debería? :

//===================================================================================
double CalculateProfit() 
{
   double ld_ret_0 = 0;
   for (int cnt = 0;  cnt < OrdersTotal(); cnt++) {
      if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol()!=Symbol())           continue;
         if (OrderType()>1)                     continue;
         if (OrderMagicNumber()==MagicNumber || 
             OrderMagicNumber() == LMagN)       ld_ret_0 += OrderProfit();
         }
      else if (!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
         Print ("Func: CalculateProfit(), Select Order Error = ", GetLastError());
         break;
         }
      }
   return (ld_ret_0);
}
//===================================================================================
 
artmedia70:

¿Tal vez sea así como debe ser?

Así es como se inserta el código para que se pueda leer
 
eddy:
así es como se pone el código para poder leerlo.
¿Ah, sí? ¿Esa es toda la diferencia que puedes ver?
 
Hola a todos!

Justo este fin de semana estoy usando el probador de estrategias por primera vez. No consigo entender para qué sirve la función "Optimización". He seleccionado diferentes parámetros optimizables, pero el equilibrio no cambia. ¿Qué es lo que trata de optimizar y cómo? ¿Alguien lo utiliza? :)
 
AndrejFX:
Hola a todos.

Este fin de semana he utilizado por primera vez el probador de estrategias. No consigo entender para qué sirve la función "Optimización". He seleccionado diferentes parámetros optimizables, pero el equilibrio no cambia. ¿Qué es lo que trata de optimizar y cómo? ¿Alguien lo utiliza? :)

Intenta usar la F1 para empezar.

Encuentre la Interfaz de Usuario -> Probador.

Tal vez https://www.mql5.com/ru/articles/mt4/tester ayude

Razón de la queja: