BrotherPyrus: hothand funciona en MT4 de cinco dígitos, pero no en una plataforma de cuatro dígitos. ¿Alguna idea de lo que causa esto, y alguna pista sobre cómo solucionarlo?
Los EA's deben ajustarse para 4/5 dígitos, TP, SL, Y deslizamiento. En los brokers ECN primero hay que abrir y LUEGO poner los stops.
if(iBarHour >= iOpenHour && iBarHour <= iOpenHour + iBarsToTrade && Tradeopen()==false) // Check if time is ok to trade & no trade is open
{
// if(High[2]>High[1] && Low[2]<Low[1]) // see if we have an inside barif(iHigh(hothand(), 60, 2)>iHigh(hothand(), 60, 1) && iLow(hothand(), 60, 2) < iLow(hothand(), 60, 1)) // see if we have an inside bar
{ // on the hothand pair// IB found if(iHigh(hothand(), 60, 1) > dDayOpenPrice) // IB high on hothand pair is greater than day open price bullish signal
{
int buyspread=MarketInfo(hothand(),MODE_SPREAD);
double buyentry = iHigh(hothand(), 60, 1) + 10 + buyspread; //Low of prev bar + 1 pip + spreaddouble buystop = iLow(hothand(), 60, 1) - 10; //Low of prev bar - 1 pipdouble buytpx1 = iHigh(hothand(), 60, 1)+(iHigh(hothand(), 60, 1)-iLow(hothand(), 60, 1)); //1:1 r:rdouble buytpx3 = iHigh(hothand(), 60, 1)+(iHigh(hothand(), 60, 1)-iLow(hothand(), 60, 1))*3; // 1:3 r:rOrderSend(Symbol(),OP_BUY,1 , Ask, 3, buystop, buytpx1, "DIBSBUY", Mnumber1); //Open buy orderOrderSend(Symbol(),OP_BUY,1 , Ask, 3, buystop, buytpx3, "DIBSBUY", Mnumber3);
}
if(iLow(hothand(), 60, 1) < dDayOpenPrice) // IB low on hothand pair is lower than day open price bearish signal
{
int sellspread=MarketInfo(hothand(),MODE_SPREAD);
double sellentry = iLow(hothand(), 60, 1)-10; //Low of prev bar - 1 pip double sellstop = iHigh(hothand(), 60, 1)+ 10 + sellspread; // High of prev bar + 1 pip + Spreaddouble selltpx1 = iLow(hothand(), 60, 1)-(iHigh(hothand(), 60, 1)- iLow(hothand(), 60, 1)); //1:1 r:rdouble selltpx3 = iLow(hothand(), 60, 1)-(iHigh(hothand(), 60, 1)- iLow(hothand(), 60, 1))*3; // 1:3 r:rOrderSend(Symbol(),OP_SELL,1 , Ask, 3, sellstop, selltpx1,"DIBSSELL",Mnumber1); //Open Sell OrderOrderSend(Symbol(),OP_SELL,1 , Ask, 3, sellstop, selltpx3,"DIBSSELL",Mnumber3); //Open Sell Order
}
}
}
//
}
Muy bien, estoy de vuelta,
Esta es la parte de mi código donde se ejecutan las operaciones, sólo voy a trabajar con 5 dígitos por el momento. La idea aquí es que utilicé mi función hothand para elegir qué par es mejor para el comercio para el día. Este código debe buscar una barra interior en el gráfico de 1 hora. (La función hothand devuelve una cadena del par, por cierto) Cuando encuentra una barra interior, acabo de hacer que abra una operación de compra o de venta para probarla. No estoy seguro de si el backtester puede manejar múltiples pares de comercio de 1 gráfico? He descargado el historial de 1min para todos los pares que utiliza. Pero sólo parece abrir operaciones en el eurusd que es el gráfico que he adjuntado,
WHRoeder gracias por pasar por aquí y ayudar de nuevo también. El problema es que no se puede hacer un seguimiento de los datos de la cuenta de resultados de la cuenta de resultados. Estoy seguro de que puede detectar un millón de cosas mal con ese código también.
Esta es la parte de mi código donde se ejecutan las operaciones, sólo voy a trabajar con 5 dígitos por el momento. La idea aquí es que utilicé mi función hothand para elegir qué par es mejor para el comercio para el día. Este código debe buscar una barra interior en el gráfico de 1 hora. (La función hothand devuelve una cadena del par, por cierto) Cuando encuentra una barra interior, acabo de hacer que abra una operación de compra o venta para probarla. No estoy seguro de si el backtester puede manejar múltiples pares de comercio de 1 gráfico? He descargado el historial de 1min para todos los pares que utiliza. Pero sólo parece abrir operaciones en el eurusd que es el gráfico que he adjuntado,
Algunos comentarios generales:
usted compra en Ask y vende en Bid
si tu broker es de tipo ECN no puedes poner el SL y el TP cuando colocas la orden (en este caso los pones a 0), tienes que colocar la orden, luego modificar la orden para añadir el SL y el TP
compruebe siempre el resultado de la colocación de una orden y compruebe los errores devueltos, tendrá que manejarlos actuando en consecuencia
si planea tener este EA en múltiples gráficos, es decir, colocar órdenes desde múltiples gráficos, necesitará algún tipo de Mutex para evitar Order Context Busy (revise los posts de WHRoeder, él tiene un excelente Mutex)
Damm WHRoeder, su derecho "nuestras paradas se basan en el par hothand(), pero usted está abriendo una orden con Symbol()" No me di cuenta de eso. Que estupidez. Estas cosas son tan fatigosas mentalmente mientras tratas de aprenderlas. Pero sí estúpido. Gracias por repasar este lío. Probablemente me tome un descanso y vuelva mañana con la mente despejada. Arreglaré las cosas que has señalado.
dazamate: Como que no reconoce la salida del par de la función hothand. La salida de la función hothand es una cadena así que no veo por qué no funciona
OrderSend(hothand(),OP_SELL,1 , Ask, 3, sellstop, selltpx1,"DIBSSELL",Mnumber1); //Open Sell Order
El precio de compra/venta es el precio actual de Symbol() pero está intentando abrir otro par. Precio falso.
No puede obtener los valores de barra cero del probador para otros TF/pares
No puede abrir operaciones de otros pares en el probador, IIRC
Nombre de símbolo desconocido USDCHF para la función OrderSend
¿De dónde sacas esa cadena? ¿Es el gráfico actual el mismo patrón, o USD,EUR, o USD/EUR, o USDEURm, o USDEURfxf etc.
Le sugiero que SOLO opere con el par actual. Si hothand() no es el actual, no hay operaciones. De esta manera funciona en el probador, siempre se puede poner el EA en otros pares controlando así los pares que comercia, Y se evitan todas las trampas.
Hola chicos, estoy intentando hacer un código que haga lo siguiente
externstring sComment4 = "Max Hours allowed before pending orders are deleted";
externint pendinglimit = 4;
// * EVERYTIME A TRADE GETS TRIGGERED
bartraded = TimeHour(TimeCurrent());
// DELETE PENDING ORDERS THAT HAVE NOT BEEN TRIGGERED WITHIN if(TimeHour(TimeCurrent()) > bartraded + pendinglimit && Tradeopen()==true) // Check to see if pending orders have expired
{
for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--) //scan through open orders
{
if (OrderSelect(tnumber, SELECT_BY_POS) &&
OrderType()==(OP_BUYSTOP||OP_SELLSTOP) && // The order selected is either a pending buy on stop order or a buy on sell orderOrderMagicNumber()==(Mnumber1||Mnumber3)) // The orders magic number is the same as the magic number used in this ea
{
OrderSelect(tnumber, SELECT_BY_POS); // Select orderOrderDelete(tnumber); // Delete it
}
}
}
Si una orden pendiente ha estado abierta durante x cantidad de barras la elimine si el número de barras ha superado x
Hola Daz & Co,
hothand funciona en MT4 de cinco dígitos, pero no en una plataforma de cuatro dígitos.
hothand funciona en MT4 de cinco dígitos, pero no en una plataforma de cuatro dígitos. ¿Alguna idea de lo que causa esto, y alguna pista sobre cómo solucionarlo?
Muy bien, estoy de vuelta,
Esta es la parte de mi código donde se ejecutan las operaciones, sólo voy a trabajar con 5 dígitos por el momento. La idea aquí es que utilicé mi función hothand para elegir qué par es mejor para el comercio para el día. Este código debe buscar una barra interior en el gráfico de 1 hora. (La función hothand devuelve una cadena del par, por cierto) Cuando encuentra una barra interior, acabo de hacer que abra una operación de compra o de venta para probarla. No estoy seguro de si el backtester puede manejar múltiples pares de comercio de 1 gráfico? He descargado el historial de 1min para todos los pares que utiliza. Pero sólo parece abrir operaciones en el eurusd que es el gráfico que he adjuntado,
WHRoeder gracias por pasar por aquí y ayudar de nuevo también. El problema es que no se puede hacer un seguimiento de los datos de la cuenta de resultados de la cuenta de resultados. Estoy seguro de que puede detectar un millón de cosas mal con ese código también.
No ajusta el deslizamiento para 4/5 dígitos. No es compatible con ECN
Siempre pruebe los códigos de retorno para averiguar por qué no funciona
buystop = iLow(hothand()...Tus stops están basados en el par hothand(), pero estás abriendo una orden con Symbol(). Si no son iguales los stops son completamente falsosMuy bien, estoy de vuelta,
Esta es la parte de mi código donde se ejecutan las operaciones, sólo voy a trabajar con 5 dígitos por el momento. La idea aquí es que utilicé mi función hothand para elegir qué par es mejor para el comercio para el día. Este código debe buscar una barra interior en el gráfico de 1 hora. (La función hothand devuelve una cadena del par, por cierto) Cuando encuentra una barra interior, acabo de hacer que abra una operación de compra o venta para probarla. No estoy seguro de si el backtester puede manejar múltiples pares de comercio de 1 gráfico? He descargado el historial de 1min para todos los pares que utiliza. Pero sólo parece abrir operaciones en el eurusd que es el gráfico que he adjuntado,
Algunos comentarios generales:
usted compra en Ask y vende en Bid
si tu broker es de tipo ECN no puedes poner el SL y el TP cuando colocas la orden (en este caso los pones a 0), tienes que colocar la orden, luego modificar la orden para añadir el SL y el TP
compruebe siempre el resultado de la colocación de una orden y compruebe los errores devueltos, tendrá que manejarlos actuando en consecuencia
si planea tener este EA en múltiples gráficos, es decir, colocar órdenes desde múltiples gráficos, necesitará algún tipo de Mutex para evitar Order Context Busy (revise los posts de WHRoeder, él tiene un excelente Mutex)
Pero parece que solo abre operaciones en el eurusd que es el gráfico al que lo he adjuntado,
Sí, . . .
Symbol () es el par al que se adjunta el EA/Indicador, ¿se refiere a esto en su lugar?
Sí, lo hice, pero ahora me sale este error
http://clip2net.com/s/144hq
Como que no reconoce la salida del par de la función hothand. La salida de la función hothand es una cadena así que no veo por qué no funciona
Como que no reconoce la salida del par de la función hothand. La salida de la función hothand es una cadena así que no veo por qué no funciona
Hola chicos, estoy intentando hacer un código que haga lo siguiente
Si una orden pendiente ha estado abierta durante x cantidad de barras la elimine si el número de barras ha superado x
Algo podría estar mal con mi lógica tal vez?