¿Cómo codificar? - página 123

 
InTrance:
No lo intentes, hazlo

Estoy en el trabajo... y el puerto de metatrader está bloqueado aquí

 

Hola, todavía soy nuevo en la programación, y estoy teniendo problemas para añadir las siguientes características a este simple EA:

1. Tomar ganancias

2. Stop Loss

3. Trailing Stop

4. Número de pips para activar el trailing stop

//---- input parameters

extern double Lots=0.1;

extern int Slippage=5;

int MagicNum = 98760;

bool longPosOpened, shortPosOpened;

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

//| expert initialization function |

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

int init()

{

//----

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

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

//| expert start function |

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

int start()

{

double crossup = iCustom(NULL , 0, "18_28Cross", 1,18,1,28,1,0, 1);

double crossdown = iCustom(NULL , 0, "18_28Cross", 1,18,1,28,1,1,1);

if (crossup != EMPTY_VALUE)

{

if (!PosOpened(OP_BUY))

{

CloseAllOpenAndPendingTrades();

OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,Symbol(),MagicNum,0);

}

}

else if(crossdown != EMPTY_VALUE)

{

if (!PosOpened(OP_SELL))

{

CloseAllOpenAndPendingTrades();

OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,Symbol(),MagicNum,0);

}

}

return(0);

}

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

bool PosOpened(int orderType)

{

int total=OrdersTotal();

for(int cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol() == Symbol() && OrderType() == orderType)

{

return(true);

}

}

return(false);

}

void CloseAllOpenAndPendingTrades()

{

int total = OrdersTotal();

for(int i=total-1;i>=0;i--)

{

OrderSelect(i, SELECT_BY_POS);

if(Symbol() != OrderSymbol()) continue; // important! only close positions of current currency pair

int type = OrderType();

bool result = false;

switch(type)

{

//Close opened long positions

case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 200);

break;

//Close opened short positions

case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 200);

break;

//Close pending orders

case OP_BUYLIMIT :

case OP_BUYSTOP :

case OP_SELLLIMIT :

case OP_SELLSTOP : result = OrderDelete( OrderTicket() );

}

}

return(0);

}

 

¿Cómo detectar un salto de sar parabólico?

Actualmente estoy utilizando este código para detectar un salto:

if(iSAR(NULL,0,0.02,0.2,0)-iSAR(NULL,0,0.02,0.2,1)>1.0){ // si hay un salto hacia arriba

Pero esto no parece funcionar bien.

¿Cómo puedo detectar si el psar está por encima o por debajo de mis barras?

TIA

 
:: utilizar su proxy en metatrader...

IN10TION

ssvl:
estoy en el trabajo... y el puerto de metatrader está bloqueado en aquí
 
:: compare el resultado de su sar con un cierre actual[0]
ssvl:
Actualmente estoy usando este código para detectar un salto:

if(iSAR(NULL,0,0.02,0.2,0)-iSAR(NULL,0,0.02,0.2,1)>1.0){ // si hay un salto hacia arriba

Pero esto no parece funcionar bien.

¿Cómo puedo detectar si el psar está por encima o por debajo de mis barras?

TIA
 

Hey IN10TION, ¿sabe usted de una buena manera de comprobar si un comercio acaba de cerrar de manera que la EA no colocará otro comercio (reentrada) hasta la próxima señal viene? Mi EA comprueba la condición de comercio hasta digamos 10 barras, pero si una condición de comercio de venta ya se cumplió en las primeras barras y se cerró, quiero que el EA deje de comprobar hasta la compensación de 10 barras y esperar hasta la próxima señal real?

Gracias

 

Utilice la función OrderHistory().

Lux

 
luxinterior:
Utilice la función OrderHistory(). Lux

Gracias pero no estoy seguro de cómo funciona eso. En realidad no quiero saber si una orden se acaba de cerrar, sino más bien si una orden se acaba de abrir y cerrar dentro de tantas barras. Entonces sólo colocar otro comercio en la próxima entrada de la señal principal. Todavía estoy tratando de eliminar las reentradas rápidas de operaciones cuando una orden acaba de ser abierta y cerrada pero las condiciones de la operación todavía se cumplen. Quiero que de alguna manera sólo haga una operación por señal principal, de modo que aunque las condiciones de la operación sigan siendo válidas no vuelva a operar si ya se ha operado en esa señal (incluyendo el desplazamiento).

A ver si puedo explicarlo con un ejemplo. Puede que sea algo que no se pueda evitar.

EG: Digamos que estoy usando QQE y VQI como un punto de entrada de comercio de la señal (QQE cruzar y VQI cambios de compra a vender o visa-versa)

Ahora estoy añadiendo una opción SignalOffset de digamos 6 barras porque la señal de QQE y VQI podría no ocurrir exactamente en la misma barra.

Ahora digamos que hay una operación válida con 2 barras de diferencia cuando QQE y VQI coinciden, así que ahora se coloca una operación pero tengo un TP de 10 pips y la barra se mueve 15 pips, mi TP es alcanzado y la operación se cierra. Las condiciones de la operación se siguen cumpliendo debido a mi Offset de 6 barras, ahora se coloca otra operación (reentrada). si esa o dos barras se mueven 100 pips y mi TP es 10, acabo de tener 10 operaciones, mal sólo quiero una operación por señal (Offset incluido)

¿Tiene sentido? Todavía me gustaría que el comercio dentro de las 6 barras, aunque si y la señal opuesta sucede y el otro comercio se cerró todavía.

Gracias

 
Para ello: haz una variable [switch ], si ya hay una orden de venta hecha deja de hacer otras ventas (el valor del switch es -1) y sólo se reajustará cuando haya una señal de compra y una orden de compra hecha (el valor del switch es 1)... algo extra (sobrante) en lo que puedes pensar es en un reset del temporizador, en caso de que si hay una gran tendencia al alza o a la baja, puedes tener 2 o 3 ventas con una especie de intervalo entre las mismas órdenes (timing).

IN10CIÓN

matrixebiz:
Gracias pero no estoy seguro de cómo funciona eso. Realmente no quiero saber si una orden acaba de cerrarse, sino si una orden acaba de abrirse y cerrarse dentro de tantas barras. Entonces sólo colocar otro comercio en la próxima entrada de la señal principal. Todavía estoy tratando de eliminar las reentradas rápidas de operaciones cuando una orden acaba de ser abierta y cerrada pero las condiciones de la operación todavía se cumplen. Quiero que de alguna manera sólo haga una operación por señal principal, de modo que aunque las condiciones de la operación sigan siendo válidas, no vuelva a operar si ya ha operado en esa señal (incluyendo el desplazamiento).

A ver si me explico con un ejemplo. Puede ser algo que no se puede evitar.

EG: Digamos que estoy usando QQE y VQI como un punto de entrada de la señal de comercio (QQE cruz y VQI cambios de compra a la venta o visa-versa)

Ahora estoy añadiendo una opción SignalOffset de digamos 6 barras porque la señal de QQE y VQI podría no ocurrir exactamente en la misma barra.

Ahora digamos que hay una operación válida con 2 barras de diferencia cuando QQE y VQI coinciden, así que ahora se coloca una operación pero tengo un TP de 10 pips y la barra se mueve 15 pips, mi TP es alcanzado y la operación se cierra. Las condiciones de la operación se siguen cumpliendo debido a mi Offset de 6 barras, ahora se coloca otra operación (reentrada). si esa o dos barras se mueven 100 pips y mi TP es 10, acabo de tener 10 operaciones, mal sólo quiero una operación por señal (Offset incluido)

¿Tiene sentido? Todavía me gustaría que el comercio dentro de las 6 barras, aunque si y la señal opuesta sucede y el otro comercio se cerró todavía.

Gracias
 

Compartir datos entre 2 aplicaciones de metatrader

Estoy intentando escribir datos en un archivo desde un metatrader para leerlos desde un segundo metatrader.

El problema es que cuando estoy tratando de escribir en c:\ ~ Estoy recibiendo el mensaje de error "ruta de acceso al archivo absoluto "C:\EURUSD.txt" no está permitido"

¿Alguna idea u otra forma de compartir datos entre dos aplicaciones metatrader?