Firebird v63G - página 30

 

Como se puede ver en el gráfico del USDCHF de la última semana, Firebird lo está haciendo muy bien en un mercado de rango limitado. Cuando los mercados se convierten en tendencia, Firebird suele tomar decisiones equivocadas. Así que la solución para esto puede ser muy simple: tenemos que salir tan pronto como el marcador se convierta en tendencia y volver cuando el mercado de rango limitado se restablezca.

En Phoenix hay una pieza de código que cuida estos cambios. En resumen, toma los máximos de las últimas 24, 12, 6 y 2 horas y puede decidir cuándo el mercado se convierte en tendencia y cuándo se restablece el rango de mercado.

Archivos adjuntos:
 

Excelente trabajo Hendrick, su lluvia de ideas está dando sus frutos, estoy deseando probar Phoenix cuando lo publique.

Hendrick:
Aquí puedes ver la diferencia de comportamiento entre Phoenix y Firebird para el USDCHF cuando las cosas se ponen difíciles:

Firebird estaba colocando 3 COMPRAS, todas paradas.

Phoenix está esperando el momento adecuado, hizo 3 VENTAS que todas golpearon el TP.

¿Bueno?
 
MarvinSk:
Se está acercando mucho ahora

He añadido esto

if ((Safe1!=1)&&(DealTime==2)) {

for (int i=OrdersTotal()-1; i>=0; i--) {

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==Symbol()) {

if (OrderType()==OP_BUY) {

pBid=MarketInfo(OrderSymbol(), MODE_BID);

OrderClose(OrderTicket(), OrderLots(), pBid, slip, clCloseBuy);

}

if (OrderType()==OP_SELL) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK);

OrderClose(OrderTicket(), OrderLots(), pAsk, slip, clCloseSell);

}

}

}

}

}

En un Back Test veo que cierra las OpenTrades, pero necesito añadir la función de búsqueda de STOPLOSS, porque está cerrando operaciones que tienen GANANCIAS POSITIVAS, cuando las variables Safe1 y DealTime coinciden....

Así que el Stoploss tiene que ser la tercera trampa... La semana que viene enviaré esto una vez que lo tenga funcionando...

Una vez más todo el mundo es la idea de tener algún control sobre las operaciones abiertas existentes durante cuando el mercado se convierte en Volitile ... Si una operación se va a detener, prefiero que se detenga a la mitad y no al 100%. Por lo menos cuando el mercado se recupera usted no tiene mucho para compensar...

Gracias

Hola Marvin,

Una solución mucho más fácil será cerrar un comercio abierto tan pronto como la señal cambia. ¿Qué opinas?

 
Hendrick:
Hola Marvin, Una solución mucho más fácil será cerrar una operación abierta tan pronto como la señal cambie. ¿Qué opinas?

Hey Hendrick... Cuando usted dice que la señal se refiere a cuando Safe1 y Dealtime valor se convierten en verdad?

Si ese es el caso lo que he visto de backtesting porque el mercado está cerrado en este momento, es que algunas operaciones positivas también se cerraron ... Así que la comprobación de STOPLOSS es la tercera variable para controlar eso

Tengo un código presentado por ELIHAYUN

Mira esto Hendrick ...

void CloseOrder(int ticket,double numLots,double close_price)

{

int CerrarCnt, err;

// intenta cerrar 3 veces

CloseCnt = 0;

while (CloseCnt < 3)

{

if (OrderClose(ticket,numLots,close_price,Slippage,Violet))

{

CloseCnt = 3;

}

si no

{

err=GetLastError();

Print(CloseCnt," Error al cerrar la orden : (", err , ") " + ErrorDescription(err));

if (err > 0) CloseCnt++;

}

}

}

void CloseHalfSL()

{

double LosePercent = 50.0; // 50% del S/L

for(int i=OrdersTotal()-1;i>=0;i--) // escanear todas las órdenes y posiciones...

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if (OrderMagicNumber() != MagicNumber) continuar;

if ( OrderSymbol()==Symbol() )

if (OrderProfit() < 0) // tenemos una operación con pérdidas

{

double prc = Bid;

if (OrderType() == OP_SELL) prc = Ask;

double ord_prc = OrderOpenPrice();

double ord_SL = OrderStopLoss();

int SL_puntos = MathAbs(ord_prc - ord_SL) / Punto;

int Pérdida_real = MathAbs(prc - ord_prc) / Punto;

if ( (Actual_Lose * 100 / SL_points) >= LosePercent) // Demasiada pérdida

{

CloseOrder(OrderTicket(), OrderLots(), prc);

}

}

}

}

/// ---- Comprueba si no es seguro negociar y luego llama a CloseHalfSL

if (NotSafeToTrade) CloseHalfSL();

 
MarvinSk:
Ahora estamos más cerca

He añadido esto

if ((Safe1!=1)&&(DealTime==2)) {

for (int i=OrdersTotal()-1; i>=0; i--) {

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==Symbol()) {

if (OrderType()==OP_BUY) {

pBid=MarketInfo(OrderSymbol(), MODE_BID);

OrderClose(OrderTicket(), OrderLots(), pBid, slip, clCloseBuy);

}

if (OrderType()==OP_SELL) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK);

OrderClose(OrderTicket(), OrderLots(), pAsk, slip, clCloseSell);

}

}

}

}

}

En un Back Test veo que cierra las OpenTrades, pero necesito añadir la función de búsqueda de STOPLOSS, porque está cerrando operaciones que tienen GANANCIAS POSITIVAS, cuando las variables Safe1 y DealTime coinciden....

Así que el Stoploss tiene que ser la tercera trampa... La semana que viene os enviaré esto una vez que lo tenga funcionando...

Una vez más todo el mundo es la idea de tener algún control sobre las operaciones abiertas existentes durante cuando el mercado se convierte en Volitile ... Si una operación se va a detener, prefiero que se detenga a la mitad y no al 100%. Por lo menos cuando el mercado se recupera usted no tiene mucho que compensar...

Gracias

Esta podría ser una forma de dejar abiertas las órdenes de GANANCIAS POSITIVAS. Añade "&& OrderProfit()<0" en la línea if(OrderType()".

if ((Safe1!=1)&&(DealTime==2)) {

for (int i=OrdersTotal()-1; i>=0; i--) {

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==Symbol()) {

if (OrderType()==OP_BUY && OrderProfit()<0) {

pBid=MarketInfo(OrderSymbol(), MODE_BID);

OrderClose(OrderTicket(), OrderLots(), pBid, slip, clCloseBuy);

}

if (OrderType()==OP_SELL && OrderProfit()<0) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK);

OrderClose(OrderTicket(), OrderLots(), pAsk, slip, clCloseSell);

}

}

}

}

}

Wackena

 
Wackena:
Esta podría ser una forma de dejar abiertas las órdenes de GANANCIAS POSITIVAS. Añadir "&& OrderProfit()<0" en la línea if(OrderType()".

if ((Safe1!=1)&&(DealTime==2)) {

for (int i=TotalPedidos()-1; i>=0; i--) {

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==Symbol()) {

if (OrderType()==OP_BUY && OrderProfit()<0) {

pBid=MarketInfo(OrderSymbol(), MODE_BID);

OrderClose(OrderTicket(), OrderLots(), pBid, slip, clCloseBuy);

}

if (OrderType()==OP_SELL && OrderProfit()<0) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK);

OrderClose(OrderTicket(), OrderLots(), pAsk, slip, clCloseSell);

}

}

}

}

}

Wackena

Wackena gracias.. pero he hecho una corrección a nuestra sintaxis

double pBid, pAsk;

if ((Safe1!=1)&&(DealTime==2)) {

for (int i=OrdersTotal()-1; i>=0; i--) {

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==Symbol()) {

if ((OrderType()==OP_BUY)&&(OrderProfit()<0)){

pBid=MarketInfo(OrderSymbol(), MODE_BID);

OrderClose(OrderTicket(), OrderLots(), pBid, slip, clCloseBuy);

}

if ((OrderType()==OP_SELL)&&(OrderProfit()<0)) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK);

OrderClose(OrderTicket(), OrderLots(), pAsk, slip, clCloseSell);

}

}

}

}

}

 

Ok, estoy probando con las adiciones que hice en relación con el manejo de las operaciones abiertas existentes cuando el mercado es volátil...

La única excepción que tengo es... En lugar de TradingHour de 0 - 24

Estoy operando con este patrón:

0 - 7 EST

11 - 24 EST

Lo hago porque quiero asegurarme de que el EA no opere explícitamente durante la apertura de NY... He visto demasiada volitilidad a las 8 - 10 EST

Voy a publicar mis resultados a medida que avanza la semana ... Tenemos algunas noticias que hacen ruido esta semana, veamos que pasa

 

Acabo de terminar de leer el libro "Bird Watching in Lion Country". No está mal. El último capítulo es útil. También es bastante relevante para la idea de Firebird y Phoenix. La idea no es exactamente la misma, pero sí muy parecida, y se pueden robar fácilmente algunas buenas ideas de ella e implantarlas para convertir a Firebird en un EA impresionante. Si Hendrick, Wackena y los demás desarrolladores de Firebird están interesados en leerlo, háganmelo saber.

 

Quiero probar Firebird

Hola hendrik,.. Quiero probar la nueva versión de Fire Bird (ya que hay muchas versiones de Firebird). ¿Puede mostrarme por favor, ....

el trabajo duro de los chicos para el desarrollo de Firebird a Phoenix, yo respeto a todos ustedes,...

Gracias

 

No hay problema con la cuenta real

MarvinSk:
Cualquiera tiene una cuenta en vivo con InterbankFX

Estoy recibiendo estos errores

2006.06.26 20:10:59 : orden de compra 1.00 USDCHFm apertura a 1.2407 sl: 1.2307 tp: 1.2417 falló [Error común]

¿Significa esto que no permiten EA en las cuentas LIVE?

Tengo una cuenta real con IBFX, sin problemas hasta ahora...