Gracias por tu aporte, en mi caso es MQL5 y yo tampoco soy experto jeje. Estaba esperando a ver si alguien me pudiera orientar un poco antes de poner el código, por si se me paso algo.
Saludos.
Versión para imprimir
Gracias nuevamente por contestar. No lo he probado en cuenta demo ya que la cree y no me deja conectar con el servidor que me manda Alpari UK en el mail.
Mi cuenta de bróker es la MT5 de Alpari UK y pone lo siguiente cuando miras en las características de la cuenta en la página Web: Ejecución del mercado NDD ECN para forex Así que en teoría si es ECN. Cierto es que no puedo asignar SL y TP cuando abro una orden y tengo que asignarlos una vez esta abierta.
Me imaginaba que las ordenes de SL y TP no iban a funcionar por el hecho de que es ECN, pero aun así quería probar si me lanzaba la orden, pero por lo que se ve no lo hace. ¿Será debido como bien dices, que tengo lanzar la orden primero sin SL y TP y modificarla después?
¿Cómo sería la mejor forma de hacerlo? ¿Crearíais un función nueva para que modifique la orden y asigne el SL y TP?
También es de 5 dígitos, esto sí que no lo había contemplado y no sé como lo tengo que desarrollar para multiplicar por 10.
Un saludo y gracias por vuestra ayuda.
Editado:
Hola de nuevo, no se si has echado un ojo a mis dudas (me vale cualquiera que me las resuelva jeje), pero aun así edito porque estuve probando y me dices que tengo que multiplicar por 10, pero cuando hago depuración en el metaeditor el mrequest.sl me da 1.24605, es decir que me coge los 5 dígitos, entonces no entiendo porque tengo que multiplicar por 10. Adjunto captura.
Archivo adjunto 34740
Un saludo y gracias.
No se tienen que ver las medias móviles, el EA las usa internamente. En el probador tampoco se ven solo cuando lo finaliza se muestran, ver las medias es cuestión de estética nada mas. :)
Tienes el código fuente del EA? ... lo mas probable si no lo tienes que que tenga restringido operar en real... si tiene puesto la restricción solo te funcionara en demo o en tester.
Buenas tardes a tod@s,
Pues como el titulo indica no me hace nada el asesor experto que estoy realizando. Quise probar para ver si iba por buen camino, ya que en el probador de estrategias me funciona (se me muestran los indicadores, compra y vende, etc), pero una vez lo cargo en el grafico y lo paremetrizo, ya no hace nada, lo único que si se me muestra en el grafico es un Comment que le metí a la hora de programarlo para ver el contenido de unos arrays en el grafico.
Por si era culpa de mi asesor y tiene pinta de que lo es (ya que aun estoy en pruebas y quería ver si funcionaba en mi cuenta real) probé con uno de los que trae el MT5 (ea_marsi_1-02) y este si que me llega a comprar y vender, pero no se muestra información de los indicadores, no se si esto debe ser así.
Tengo cuenta en Alpari Uk y si se me ejecuta uno de ellos entiendo que no será culpa del bróker.
Os pongo dos capturas del asesor experto que traía el MT5 que probé.
La primera grafica es de la cuenta real y en ella se deberían de ver dos medias móviles o ¿no?.
Archivo adjunto 34507
La segunda corresponde al strategy tester visualization y se visualizan las dos medias.
Archivo adjunto 34508
Ahora os pongo otras dos capturas del asesor experto que estoy creando. La primera en cuenta real y la segunda en el probador, como veis en el segundo grafico si que se muestran los dos indicadores RSI y CCI.
Archivo adjunto 34509
Archivo adjunto 34510
La primera pregunta es, ¿se tendrían que ver los indicadores del asesor experto en la cuenta real como sucede en el probador de estrategias?
¿Alguien que sepa que puede estar pasando para que mi asesor experto no me compre ni venda? En el probador esto lo hace correctamente.
Un saludo y gracias.
Gracias por contestar. Me imaginaba que lo usaba internamente, pero quería estar seguro.
El asesor que probé para ver si era cosa de mi cuenta real, después de comprobar que el mío no lanzaba ordenes al mercado, si que funciona bien(puesto que me compra, vende y cierra operaciones con SL y TP). Así que el problema esta en el asesor que estoy desarrollando. He de decir que es muy muy básico, ya que estoy aprendiendo poco a poco, pero quería probarlo para ver si por lo menos ya era capaz de lanzar ordenes al mercado en cuenta real, ya que como bien dije en el probador si que me lo hace.
Os pongo el código.
//+------------------------------------------------------------------+
//| Declaracion de variables
//+------------------------------------------------------------------+
input double Lote=0.01; // Lotes
input int magic=7777777; // magic
input int StopLoss=100; // Stop Loss
input int TakeProfit=50; // Take Pro
input int Slippage=50; // Desviacion
//+------------------------------------------------------------------+
//| Declarar variables para almacenar los manejadores de indicadores |
//+------------------------------------------------------------------+
int rsi_handle;
int cci_handle;
//+------------------------------------------------------------------+
//| Declarar variables para almacenar los datos de los indicadores |
//+------------------------------------------------------------------+
double rsi_buffer[];
double cci_buffer[];
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
rsi_handle=iRSI(Symbol(),Period(),14,PRICE_CLOSE);
cci_handle=iCCI(Symbol(),Period(),14,PRICE_TYPICAL );
if(rsi_handle==INVALID_HANDLE || cci_handle==INVALID_HANDLE)
{
Alert("Error al cargar el indicador, intentar de nuevo");
return(-1);
}
return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
if(rsi_handle!=INVALID_HANDLE)IndicatorRelease(rsi _handle);
if(cci_handle!=INVALID_HANDLE)IndicatorRelease(cci _handle);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(CopyBuffer(rsi_handle,0,0,3,rsi_buffer)<0 || CopyBuffer(cci_handle,0,0,3,cci_buffer)<0) // manejador del indicador // número del buffer del indicador //posición de inicio // cantidad de datos a copiar // array de destino en el que se copian los datos
{
return;
}
if(!ArraySetAsSeries(rsi_buffer,true) || !ArraySetAsSeries(cci_buffer,true))
{
return;
}
Comment(rsi_buffer[0]+"--- Valor vela previa = "+DoubleToString(rsi_buffer[2],4)+"---"+DoubleToString(rsi_buffer[1],4)+"--CCI="+DoubleToString(cci_buffer[2],4)+"---"+DoubleToString(cci_buffer[1],4));
if(!PositionSelect(_Symbol))
{
if (rsi_buffer[2]<=30 && rsi_buffer[1]>30 && cci_buffer[2]<=-100 && cci_buffer[1]>-100)
{
compra();
}
else if(rsi_buffer[2]>=70 && rsi_buffer[1]<70 && cci_buffer[2]>=100 && cci_buffer[1]<100)
{
venta();
}
}
}
//+------------------------------------------------------------------+
bool compra()
{
MqlTick last_tick;
MqlTradeRequest mrequest;
MqlTradeResult mresult;
SymbolInfoTick(_Symbol,last_tick);
ZeroMemory(mrequest);
mrequest.action = TRADE_ACTION_DEAL;
mrequest.symbol = Symbol();
mrequest.volume = Lote;
mrequest.magic = magic;
mrequest.deviation=Slippage;
mrequest.type = ORDER_TYPE_BUY;
mrequest.sl=last_tick.bid-StopLoss*Point();
mrequest.tp=last_tick.ask+TakeProfit*Point();
OrderSend(mrequest,mresult);
return(true);
}
bool venta()
{
MqlTick last_tick;
MqlTradeRequest mrequest;
MqlTradeResult mresult;
SymbolInfoTick(_Symbol,last_tick);
ZeroMemory(mrequest);
mrequest.action = TRADE_ACTION_DEAL;
mrequest.symbol = Symbol();
mrequest.volume = Lote;
mrequest.magic = magic;
mrequest.deviation=Slippage;
mrequest.type=ORDER_TYPE_SELL;
mrequest.sl=last_tick.ask+StopLoss*Point();
mrequest.tp=last_tick.bid-TakeProfit*Point();
OrderSend(mrequest,mresult);
return(true);
}
Hasta aquí es todo el código que tengo hecho, es lo que he ido aprendiendo y también gracias a gente de este foro que me ha estado ayudando, ya que había muchos aspectos que desconocía.
A ver si podéis saber que es lo que sucede.
Un saludo y gracias.
Ya lo haz probado en cuenta demo?
Tu broker es tipo ECN?
Tu broker es de 5 digitos?
Si tu broker es tipo ECN no te funciona el EA porque primero tienes que lanzar la orden de compra o venta sin stoploss o takeprofit, ya luego tienes que modificar la orden asignándole el tp y sl.
Si el broker es de 5 digitos tienes que multiplicar por 10 el tp y sl.