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

 
utilizar variables globales como opción
 

Así es como hice la toma de beneficios en uno de mis EAs:

extern double ProfitAutoClose = 100.0; // Incremento para la toma de beneficios

doble Depo;

int init()
{
//----
Depo=AccountEquity();
GlobalVariableSet("Depo",Depo);
//----
return(0);
}

int start()
{

Depo=GlobalVariableGet("Depo");

if(AccountEquity()-Depo>ProfitAutoClose)
{

ClosePositions("0",-1, Mn);//cerrar todas las posiciones

Depo=CuentaPatrimonio();

GlobalVariableSet("Depo",Depo);

}

...

 
Rita >> :

Esta es precisamente la dificultad. ¿Cómo se determina la equidad en la(s) etapa(s) anterior(es)?

Hay que contar con algún valor patrimonial previo. ¿De dónde sacamos el valor anterior?

OBTENER UNA VARIABLE.

 

Gracias a todos. Sí, en efecto.

He cerrado en la toma de beneficios (de khorosh) y esta opción funciona muy bien. ¡Y después de optimizar el parámetro ProfitAutoClose el drawdown ha disminuido considerablemente!


Sin embargo, no es exactamente un recorte de la equidad.

¿Cómo se añade aquí la equidad de arrastre? ¿Introduciría otra variable?

 
Echa un vistazo a la equidad de arrastre en el nuevo asesor de Igor Kim.
 

¡Gracias, granit77!

Pero esa fue la versión con la que experimenté originalmente. No encajará, porque ahí la red de arrastre es empujada fuera de la balanza e interactúa con la balanza . Lo que se busca es el beneficio.

En mi EA, la equidad siempre está por debajo del balance y esta construcción no es adecuada.

Lo he mencionado antes (último post de la 7ª página):

"¿Cómo puedo arrastrar la equidad si mi EA siempre muestra ganancias negativas?
Es decir,no hay ganancias, pero tengo una pérdida actual (es la operación específica de EA, cada posición individual se cierra (en su mayoría) en el plus, pero todas las posiciones abiertas están en la pérdida total).

 
Rita >> :

Y con mi EA - la equidad siempre está permanentemente por debajo del equilibrio y esta construcción no encaja.

Cierre primero las operaciones no rentables y luego las rentables. El saldo será inferior a los fondos propios (lo que equivale a los fondos propios por encima del saldo).

// No afectará a la rentabilidad de ninguna manera.

Por lo demás, deduzco que tienden a ponerse nerviosos por el hecho mismo de la "equidad<balance". Tan frustrado, de hecho, que se está ralentizando bastante. ;)

Básicamente, puedes enviarme el código fuente (si no quieres hacerlo público) y lo corregiré por ti.

 

Rita, aquí está un vistazo al código (como un ejemplo), una vez que hice a mí mismo, NO usar, pero funcionó como recuerdo ahora :)

no hay vínculos con los balances, los beneficios del balance y otras cosas innecesarias

(compruébelo bien antes de utilizarlo, modifíquelo según sus necesidades)

if (!GlobalVariableCheck("StopTrading")) {if (!GlobalVariableCheck("TrStopEquity")) {¡ int sl=SL_Equity; int tp=TP_Equity; if (( sl!¡=0 && AccountEquity()<=sl) || (tp!=0 && AccountEquity()>=tp)){ GlobalVariableSet("StopTrading",1); Sleep(500); ClosePositions(); if ( ShowComment){ comm="Comercio completado. Todas las operaciones están cerradas.\n"; comm=comm+"Asesores expertos parados en: "+TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS); Comentario( pref, comm);}¡} } }si (!GlobalVariableCheck("StopTrading")) {bool tr_stop=TrStop_Equity; int¡tr_step=TrStep_Equity; int tr_dist=TrDist_Equity; int tr_lvl =TrStartLvl_Equity;if (( tr_stop)||( tr_lvl!¡=0 && AccountEquity()>=tr_lvl)||(GlobalVariableCheck("trStopEquity")) { si (!GlobalVariableCheck("TrStopEquity")){ GlobalVariableSet("TrStopEquity",1);} ¡ Sleep(500); si (!GlobalVariableCheck("SL_Equity")){ GlobalVariableSet("SL_Equity",(AccountEquity()-tr_dist));} Sleep(500); sl=GlobalVariableGet("SL_Equity"); if (AccountEquity()<=sl){ GlobalVariableSet("StopTrading",1); Sleep(500); GlobalVariableDel("TrStopEquity"); Sleep(500); GlobalVariableDel("SL_Equity"); Sleep(500); ClosePositions(); si ( ShowComment){ comm="Comercio completado. Todas las operaciones están cerradas.\n"; comm=comm+"Asesores expertos parados en: "+TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS); Comentario( pref, comm);} Si no{si (AccountEquity()>( sl+tr_dist+tr_step)GlobalVariableSet("SL_Equity",(AccountEquity()-tr_dist);Dormir(500);if ( ShowComment) { comm="El Trailing Stop está en marcha:\n"; comm=comm+"Nivel de Stop Loss:"+DoubleToStr(NormalizeDouble( sl,2),2)+"\n"; comm=comm+TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);Comentario( pref, comm); } }} 
Las funciones utilizadas son las de Kim, búscalas en el foro si no las tienes ya.
 

Si tiene un arrastre para la equidad, por favor, envíenos un simple- cerrar todas las posiciones y eliminar todas las órdenes si la equidad = ХХХХ, es decir, por ejemplo, antes de la apertura de posiciones, el saldo fue 10000, establecer la equidad en el arrastre para 10500, y tan pronto como la equidad = 10500, cerrar todas las órdenes y las posiciones abiertas).

He mirado el de Kim... creo que todo parece un poco complicado...) más arriba en este hilo...) Gracias de antemano:)

 

Ah, eso es, creo que lo encontré justo arriba... stCloseOrders parece ser el correcto:)

Pero si alguien tiene algo parecido, que lo eche... nunca es demasiado útil:)