¿Cómo codificar? - página 97

 
matrixebiz:
Ok, lo probaré cuando llegue a casa pero entonces ¿por qué sigue funcionando ya con órdenes de Compra? Gracias

Podría estar en una orden de venta, pero el precio cumple la condición para el código de cambio de parada de compra, por lo que se cambia, y ya no cumple las condiciones para la sección de venta, por lo que no se cambia allí.

Gran Ser

 

Gracias Big Be por tu ayuda pero me acabo de dar cuenta de que mi antiguo código funciona pero tengo que habilitar el uso de un StopLoss para las órdenes de VENTA para que se modifiquen..

Es extraño que no necesite habilitar un TakeProfit para MoveStopOnce para trabajar con una orden de COMPRA pero tengo que habilitar un StopLoss para MoveStopOnce para modificar la orden de VENTA.

Bueno, tendré que mirar el código un poco más a fondo para averiguar eso, a menos que sepas por qué.

EDIT: si se cambia a;

if(0 < OrderOpenPrice() - Point * MoveStopTo) {

[/code]

instead of;

[code]

if(OrderStopLoss() < OrderOpenPrice() - Point * MoveStopTo) {

Parece que funciona bien.

Gracias

 

Necesito ayuda con la calculadora de tamaño de posición

OK,

Así que estoy construyendo una calculadora de tamaño de la posición como una función basada en la "Fórmula Kelly"

(Tasa de ganancia-((Tasa de 1 ganancia)/(Ganancia media/Pérdida media)

Tengo todo el código y los cálculos trabajando con entradas manuales (externas) para las variables requeridas y ahora estoy tratando de conseguir que la función trabaje dinámicamente llamando a cierta información de la cuenta (es decir, quiero calcular la tasa de consistencia ganadora (%), el promedio de pips por operación ganadora, y el promedio de pips por operación perdedora)

Me vendría bien cualquier ayuda para conseguir que las tres funciones (WinRate AvgWin & AvgLoss) funcionen. He estado utilizando la variación de entrada manual durante meses y funciona muy bien. Aquí está el código completo para esta versión (automatizada) hasta este punto... en las pruebas no estoy obteniendo ninguna salida dinámica, todo vuelve a la configuración por defecto (50, 40, 20). Una vez que se adjunta a cualquier gráfico, la salida se imprime en la pestaña de registro / experto. el uso de fractales es intencional para que el crecimiento máximo de la cuenta (o pérdida mínima) se explota. como una nota de la mayoría de los corredores que ofrecen la plataforma MT comerciante permite el comercio fractal, ya sea para mini o std lotes. Esto demostrará su uso completo en el futuro con la gestión del dinero que puede quitar las posiciones de lote parcial (es decir, eliminar el 25% de 1 lote). de todos modos...

con el fin de recoger la información de la cuenta en tiempo real que necesito estoy tratando de ...

1. contar todas las operaciones

2. contar las operaciones que son rentables

etc. etc.

Puedo o no estar haciendo esto de la manera correcta.

Gracias de antemano por toda la ayuda...

SeaWolf

//+------------------------------------------------------------------+

//| KellyFormula.mq4 |||

//+------------------------------------------------------------------+

#property copyright "seawolf"

#property link "seawolf"

//+------------------------------------------------------------------+

//| ENTRADA DE INFORMACIÓN EXTERNA ||

//+------------------------------------------------------------------+

extern int MiCuenta = 1001; //------>>>> ID de la cuenta

extern int ExpertID = 500001; //------>>>> Número mágico para este EA

extern double PipValue= 1.00; //------>>>> utilizar para TODOS los cálculos

extern double LotCost= 50.0; //------>>>> usar para TODOS los cálculos

extern double PercentMax= 24.0; //------>>>> max % de cuenta apalancada @ una vez

extern int TradesMax= 3; //------>>>> máximo de operaciones simultáneas (ejemplo: 24%/3 operaciones = 8% por operación)

extern bool UseKelly= true; //------>>>> Activación del apalancamiento manual

extern double ManualLots= 1.0; //------>>>> # lotes si "UseKelly" es falso

extern double mWinRate= 50.00; //------>>>> consistencia ganadora en % (overide manual)

extern int mAvgWin= 40; //------>>>> avg # pips por operación ganadora (manual overide)

extern int mAvgLoss= 20; //------>>>> avg # pips por operación perdedora (manual overide)

//+------------------------------------------------------------------+

//| función de inicialización del experto

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| función de inicio experto ||

//+------------------------------------------------------------------+

int inicio()

{

//----

PositionSize();

{

Print("Lotes=",PositionSize()," WinRate=",WinRate()," AvgWin=",AvgWin()," AvgLoss=",AvgLoss());

}

Comment("La hora actual es ",TimeToStr(TimeCurrent(),TIME_MINUTES)," GMT ",TimeToStr(TimeCurrent(),TIME_DATE)," ... Win Rate= ",WinRate()," Avg Win= ",AvgWin()," Avg Loss= ",AvgLoss());

//----

return(0);

}

//----

//+------------------------------------------------------------------+

//| CALCULAR EL TAMAÑO DE LA POSICIÓN PARA TODAS LAS NUEVAS OPERACIONES ||.

//+------------------------------------------------------------------+

//------------------------>>>>

doble PositionSize()

{

//------------------------>>>> NO USAR LA FÓRMULA DE KELLY, USAR TARIFA PLANA

if(UseKelly == true)

{

double KelyForm = WinRate()-((1-WinRate())/(AvgWin()/AvgLoss()))

double PerTrade;

doble Lotes;

if(KelyForm > PercentMax)

{

PerTrade = (PercentMax/10)/TradesMax;

}

else if(KelyForm < PercentMax)

{

PerTrade = (KelyForm/10)/TradesMax;

}

else if(KelyForm == PercentMax)

{

PerTrade = (KelyForm/10)/TradesMax;

}

Lotes = (PerTrade * AccountBalance()/LotCost);

return(MathRound(Lots)/10);

}

}

//+------------------------------------------------------------------+

//| RECOGER LA INFORMACIÓN DE LA CUENTA EN TIEMPO REAL ||

//+------------------------------------------------------------------+

//------------------------>>>>

double WinRate()

{

double Billete;

double CuentaGanancias = 0;

for(Ticket=0;Ticket<OrdersTotal();Ticket++)

{

OrderSelect(Ticket,SELECT_BY_TICKET,MODE_HISTORY);

if(MyAccount==AccountNumber() && OrderSymbol()==Symbol() && OrderMagicNumber() == ExpertID)

{

//------>>>>

if(OrderType()==OP_BUY)

{

if(OrderClosePrice() >= OrderOpenPrice())

CountWins++;

}

else if(OrderType()==OP_SELL)

{

if(OrderClosePrice() <= OrderOpenPrice())

CountWins++;

}

}

}

if(CountWins > 0)

return(MathRound(CountWins/OrdersHistoryTotal())*10);

si no

Print("No está disponible el WinRate en tiempo real");

return(mWinRate);

}

//------>>>>

//------------------------>>>>

double AvgWin()

{

double Billete;

double CountTrades = 0;

double CountPips = 0;

for(Ticket=0;Ticket<OrdersTotal();Ticket++)

{

OrderSelect(Ticket,SELECT_BY_TICKET,MODE_HISTORY);

if(MyAccount==AccountNumber() && OrderSymbol()==Symbol() && OrderMagicNumber() == ExpertID)

{

//------>>>>

if(OrderType()==OP_BUY && OrderClosePrice()>=OrderOpenPrice())

CountTrades++;

{

if(OrderProfit() >= 0)

CountPips++;

}

if(OrderType()==OP_SELL && OrderClosePrice()<=OrderOpenPrice())

CountTrades++;

{

if(OrderProfit() >= 0)

CountPips++;

}

}

}

if(CountPips > 0)

return(MathRound(CountPips/CountTrades)*10);

si no

Print("AvgWin en tiempo real no disponible");

return(mAvgWin);

}

//------>>>>

//------------------------>>>>

double AvgLoss()

{

double Billete;

double CountTrades = 0;

double CountPips = 0;

for(Ticket=0;Ticket<OrdersTotal();Ticket++)

{

OrderSelect(Ticket,SELECT_BY_TICKET,MODE_HISTORY);

if(MyAccount==AccountNumber() && OrderSymbol()==Symbol() && OrderMagicNumber() == ExpertID)

{

//------>>>>

if(OrderType()==OP_BUY && OrderClosePrice()<OrderOpenPrice())

CountTrades++;

{

if(OrderProfit() < 0)

CountPips++;

}

if(OrderType()==OP_SELL && OrderClosePrice()>OrderOpenPrice())

CountTrades++;

{

if(OrderProfit() < 0)

CountPips++;

}

}

}

if(CountPips > 0)

return(MathRound(CountPips/CountTrades)*10);

si no

Print("Pérdida media en tiempo real no disponible");

return(mAvgLoss);

}

//---------------------------------------------------------------------+

 

A: Matrixebiz

EDIT: if you change to;

if(0 < OrderOpenPrice() - Point * MoveStopTo) {

[/code]

instead of;

[code]

if(OrderStopLoss() < OrderOpenPrice() - Point * MoveStopTo) {

Parece que funciona bien.

Gracias

De nada.

Big Be

 

Fxpro,preguntar

Hola a todos... quiero preguntar cómo configurar los lotes de EA en FxPro...

Estoy confundido porque tiene 6 dígitos (1 dígito extra) he fijado el S / L y T / P, pero no puedo cambiar el lote ..

siempre 0.4 por operación.. aunque lo cambie a 0.1 o 0.3

He utilizado 10 puntos 3 EA ..

Por favor, ayúdame .. correo electrónico a hansen_hardrocker@yahoo.co.id

o puede PM por favor ..

cheerz todos ..

 

Lote Ask_change (fxpro)

Fxpro,preguntar

Hola a todos... quiero preguntar cómo configurar los lotes de EA en FxPro...

estoy confundido porque tiene 6 dígitos (1 dígito extra) he fijado el S/L y T/P pero no puedo cambiar el lote..

siempre 0.4 por operación.. incluso lo cambio a 0.1 o 0.3

He utilizado 10 puntos 3 EA ..

Por favor, ayúdame .. correo electrónico a hansen_hardrocker@yahoo.co.id

o puede PM por favor ..

cheerz todos ..

 

Yo también lo quiero. Por favor, envíenme a omidchart@yahoo.com

 

Probablemente sea porque tienes activada la gestión del dinero en el EA.

 

Gracias

matrixebiz:
Probablemente porque usted tiene la gestión del dinero habilitado en la EA.

Gracias hermano...

Soy un novato ...

 

¿Se puede cambiar este EA?

Hola programadores,

Tengo este EA que coloca órdenes de stop por encima y por debajo del precio actual. Lo que necesito es un AE que coloque órdenes limitadas en lugar de órdenes stop por encima y por debajo del precio actual. ¿Puede cambiar este AE para que haga justamente eso manteniendo todos los parámetros iguales?

Gracias de antemano,

Paul

Archivos adjuntos: