Función de los fondos de arrastre (equidad) - ¿alguien ha encontrado uno ya hecho? - página 4

 

mi sugerencia :

//+------------------------------------------------------------------+
//|Трал по эквити                                                    |
//+------------------------------------------------------------------+
bool EcvitiTral3(double EqvTralStep){
if(OrdersTotal()<1){ gEqviti=AccountBalance();return(false);}
if(!GlobalVariableCheck("step")){ EqvTralStep= EqvTralStep;}
  else{ EqvTralStep=GlobalVariableGet("step");}
EqvTralStep= EqvTralStep*(GlobalVariableGet("multi")-GlobalVariableGet("disable"));
  if( WithoutLoss){
    if(AccountEquity()>=AccountBalance()){
      if(AccountEquity()-AccountBalance()>((AccountBalance()/100)*( EqvTralStep*2))){ EqvTralStep= EqvTralStep*2;}
      if(AccountEquity()>( gEqviti+( gEqviti/100* EqvTralStep))){
        gEqviti= gEqviti+( gEqviti/200* EqvTralStep);
        eqvtrade=true;
        if(!GlobalVariableCheck("stop")){GlobalVariableSet("stop",0);}
      }
      if(AccountEquity()<= gEqviti){ CloseAll();Print("CloseAll");GlobalVariableDel("stop");return(false);}
      else{Comment(AccountFreeMargin()+AccountMargin(),"\n",
                 "EQUITY TRALING MODE\n",
                 "EQUITY TRALING STEP   =", EqvTralStep," %",
                 "\n ACCOUNT BALANS         = ",AccountBalance(),
                 "\n CLOSE LEVEL                  = ", gEqviti,
                 "\n ACCOUNT EQUITY        = ",AccountEquity(),
                 "\n NEXT STEP                     = ", gEqviti+( gEqviti/100* EqvTralStep));
                 return(true);
      }
    }else{GlobalVariableDel("stop");} 
  }else{
    if(AccountEquity()>AccountBalance()){
      if(AccountEquity()-AccountBalance()>((AccountBalance()/100)*( EqvTralStep*2))){ EqvTralStep= EqvTralStep*2;}      
      if(AccountEquity()>( gEqviti+( gEqviti/100* EqvTralStep))){
        gEqviti= gEqviti+( gEqviti/200* EqvTralStep);
        eqvtrade=true;
        if(!GlobalVariableCheck("stop")){GlobalVariableSet("stop",0);}
      }
      if(AccountEquity()<= gEqviti){ CloseAll();Print("CloseAll");GlobalVariableDel("stop");return(false);}
      else{Comment(AccountFreeMargin()+AccountMargin(),"\n",
                 "EQUITY TRALING MODE\n",
                 "EQUITY TRALING STEP   =", EqvTralStep," %",
                 "\n ACCOUNT BALANS         = ",AccountBalance(),
                 "\n CLOSE LEVEL                  = ", gEqviti,
                 "\n ACCOUNT EQUITY        = ",AccountEquity(),
                 "\n NEXT STEP                     = ", gEqviti+( gEqviti/100* EqvTralStep));
                 return(true);
      }
    }else{GlobalVariableDel("stop");}  
  }
return(false);
}
La llamada se pone al principio, y se solapa con el resto de los bloques del EA para el tiempo de arrastre, el paso de arrastre es variable - cuadrático, lo que permite trabajar bien con los saltos de equidad capturando el máximo beneficio. El modo CU permite cortar de raíz las órdenes no rentables.
 
xrust >>:

mi sugerencia :

El paso de arrastre es variable, permite trabajar fuera de los saltos de la equidad capturando el máximo beneficio. El modo CUE permite cortar de raíz las órdenes no rentables.

¡Buenas tardes,xrust ! Por favor, explique un poco más sobre el funcionamiento de esta unidad. No consigo que funcione.

No consigo que funcione.

1. Función CloseAll(), debe ser una función f que borre todas las órdenes y/o cierre las posiciones.

Tengo un análogo de esta función y no hay ningún problema.

2. Lo he definido en las propiedades.

extern bool SinPérdida = true;

- ¿qué es este parámetro?

3.

extern double gEqviti=200;// - ¿es este el tamaño de la equidad de alcance, en el que la red de arrastre comienza a trabajar?

4. También puse -

bool eqvtrade;

¿Qué más hay que ajustar? ¿Cómo se establece el parámetro EqvTralStep;?

Y por favor (si no es difícil) describa en 2-3 palabras cómo funciona la función en forma general.

 
La función se llama al principio del EA, inmediatamente después de int Start():
//удаляем запрет на торговлю после удаления всех ордеров 
  if(OrdersTotal()<1){
    if(GlobalVariableCheck("stop")){GlobalVariableDel("stop");}  
    gEqviti=AccountBalance(); 
  } 
//тралим эквити
  if( EcvitiTral3( EqwTralStep)){return(0);}
  if(GlobalVariableCheck("stop")){return(0);}

si eqviti ha subido por encima del equilibrio, bloquea todas las funciones de acero y arrastre de EA.

Ahora para las variables: en variables globales static double gEqviti;

extern double EqwTralStep=0.03; paso de arrastre en porcentaje de los fondos propios extern bool WithoutLoss=false; permite aplicar el método Breakeven

Cómo funciona esta función: cuando la equidad excede el balance registra el nivel de balance como cero, lo que significa que necesita cerrar, si la equidad excede en EqwTralStep en porcentajes mueve el nivel de cierre hacia arriba, si la velocidad de excedencia es alta, la función aumenta el paso cuadráticamente.

 
Gracias. Lo intentaré.
 

De nada, si tiene alguna dificultad, no dude en...

 

Hecho. Ya está en marcha. Hasta ahora está funcionando bien. Lleva una segunda semana en línea.

Pero. De vez en cuando se producen algunos fallos.

Normalmente tengo entre 3 y 10 posiciones en el mercado al mismo tiempo.

Pero - Cuando hay una posición en el mercado, de repente se cierra con un beneficio =1-2 pips, ¡sin razón aparente!

No entiendo por qué. El código básico de mi Asesor Experto no prevé esta situación.

 

Es bastante fácil de controlar, estos cierres pueden ser causados por una fuerte oscilación del precio y un movimiento a un nuevo nivel de cierre y como consecuencia cerrar la posición.

Hazlo:

организуйте в функции стическую переменную static double prewlewel;

потом перед , или за комментами 

  if( prewlewel!= gEqviti){
    prewlewel= gEqviti;
    Print( prewlewel);
  } 

А здесь добавьте обнуление переменной 
if(OrdersTotal()<1){ gEqviti=AccountBalance(); prewlewel=0;return(false);}
 

xrust - Tengo una sugerencia para usted - puede traer el código de su versión de la equidad de arrastre como un EA independiente.

Sería una herramienta muy útil para los operadores manuales.

Llevo mucho tiempo buscando una herramienta de este tipo, pero no he encontrado nada adecuado, y yo mismo no soy bueno en codificación (o más bien soy débil).

 
ToKa_TuXa писал(а) >>

xrust - Tengo una sugerencia para usted - puede traer el código de su versión de la equidad de arrastre como un EA independiente.

Sería una herramienta muy útil para los operadores manuales.

¡Buena idea! Te apoyo...

Sí, es cierto. Un diseño así no pasará desapercibido.

 
Pruebe este fácil de manejar. Yo mismo lo uso. Todo lo que tiene que hacer es especificar el beneficio que desea y el porcentaje de reducción admisible después de alcanzarlo.