Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 52
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Qué hacer si el tope/parada es de 200
pero
tp=NormalizarDoble((precio+(TakeProfit*_Punto)),Dígitos);
en un dólar-yen dará 317.000 al cambio de 117.000
resultado esperado 117.200
Si Punto()==0,001 (en el USDJPY), entonces 200*0,001 es igual a 0,2
Ahora si sumamos 0,2 a 117,0 obtenemos 117,2
¿Dónde está la "injusticia"?
Si Punto()==0,001 (en el USDJPY), entonces 200*0,001 es igual a 0,2
Ahora si sumamos 0,2 a 117,0 obtenemos 117,2
¿Y dónde está la "injusticia"?
se espera que 117+(200*_Punto) dé como resultado 117,200
normalmente se prueba en el EURUSD
Vitaly lo ha descrito más arriba, gracias.
Creo que lo he encontrado.
Creo que es lo suficientemente bueno como algoritmo intermedio y ahora es necesario filtrar estos momentos de alguna manera
https://www.mql5.com/ru/charts/6351907/audjpy-m5-metaquotes-software-corp
Se espera que 117+(200*_Punto) dé un resultado de 117,200
...Bueno, eso es lo que está dando... Te mostré el cálculo. ¿O tiene multidivisa y toma los datos de un símbolo "no nativo"?
Entonces utilice SymbolInfoDouble() y (int)SymbolInfoInteger() en lugar de Point() y Digits()
Bueno, eso es lo que está dando... Te mostré el cálculo. ¿O tiene una multidivisa y toma los datos de un símbolo "no nativo"?
Entonces, en lugar de Point() y Digits() utilice SymbolInfoDouble() y (int)SymbolInfoInteger()
Gracias, funciona)))
Actualmente estoy buscando una manera de insertar un trailing stop en una cadena de órdenes
Tengo 10 órdenes en pasos de 200 entre 115.000 y 117.000.
Cada lote es mayor en un valor x que el anterior
el objetivo es poner un trailing stop en toda la cadena de órdenes utilizando el siguiente cálculo (precio medio)+(y*_Punto)
Tengo un trailing stop, mi pregunta es cómo adjuntarlo al precio medio de toda la pila y cómo se calcula en función de los lotes
Gracias, funciona)))
Actualmente se está buscando una forma de insertar el trailing en una cadena de órdenes
Tengo 10 pedidos en pasos de 200 de 115.000 a 117.000
Cada lote es mayor en un valor x que el anterior
el objetivo es poner un trailing stop en toda la cadena de órdenes utilizando el siguiente cálculo (precio medio)+(y*_Punto)
Tengo un trailing stopper propiamente dicho; la cuestión es cómo adjuntarlo al precio medio de toda la pila y cómo se calcula en función de los lotes
Un consejo universal: aprende a programar desde cero. Entonces no tendrás esas dudas, programar no es una tarea fácil.
Y a la esencia de la pregunta: Entonces, hay que buscar entre TODAS las órdenes del bucle, seleccionando sólo las "necesarias" y modificándolas. Pero hay que tener mucho cuidado con esta pregunta, porque la probabilidad de sustituir la orden seleccionada para trabajar es muy alta.
Un consejo universal: aprende a programar desde cero. Entonces no habrá tales preguntas, la programación no es fácil.
Y a la esencia de la pregunta: Entonces, hay que pasar por TODAS las órdenes del bucle, seleccionando sólo las "necesarias" y modificándolas. Pero hay que tener mucho cuidado con esta pregunta, porque la probabilidad de sustituir la orden seleccionada para trabajar es muy alta.
Buen día a todos, escribí un EA basado en MAs. (Yo mismo empecé a escribir en MQL4 no hace mucho tiempo, así que decidí empezar con algo sencillo. Así que quería saber qué había hecho mal. La esencia del Asesor Experto es simple: dar una alerta cuando se cruzan dos o tres MAs (dependiendo del MÉTODO: Agresivo = cruce de dos MAs, conservador = cruce de 3 MAs) ... Eso es todo. Entraré en el mercado por mi cuenta. En mi Asesor Experto, prescribí dos funciones: Agresivo - se trata de una señal en un simple cruce de dos MAs rápidas y Conservador - cuando en el cruce de dos MAs rápidas se debe considerar también la más lenta (es decir, la señal en la dirección de la tendencia). El problema es que el Asesor Experto sólo da UNA alerta (cuando se inicia o cambia de marco temporal) y no dice nada sobre todas las señales posteriores. Les agradecería que me dijeran qué es lo que falla. He prescrito la función para todos los eventos según las reglas de MQL4. Por supuesto que podría registrar todo sin funciones en el evento On Tick, pero quiero registrar las funciones por separado, para que lasfunciones puedan ser fácilmentellamadas y quiero añadir nuevas funciones "filtros" con el tiempo.
Código
================================================================================================
extern bool Metod=false; // selección del método: Conservador o Agresivo.
extern int Time_Frame=1;//Time frame
input bool Metod=false; //Conservador-TRUE | Agresivo-FALSE
extern inttern FastMA_Parametr=5;
extern int intMA_Parametr=8;
extern int SlowMA_Parametr=18;
externo inttern TrendMA=163;
extern bool DemarkGo=false;
extern inttern Demperiod=4;
int rez;// si la MA cruza hacia abajo, rez=-1. si lo hace hacia arriba, rez=1.
//+------------------------------------------------------------------+
// Inicializar MA
double FastMA=iMA(Symbol(),Time_Frame,FastMA_Parametr,0,3,0,0);// FastMA
double MiddiMA=iMA(Symbol(),Time_Frame,MidMA_Parametr,0,3,0,0);// Media MA
double SlowMA=iMA(Symbol(),Time_Frame,SlowMA_Parametr,0,1,0,0); Slow МА
//+------------------------------------------------------------------+
int OnInit()
{
rez=0;
return(INIT_SUCCEED);
}
//=======================================
//------------------------------------------------------------------------------
void OnDeinit(const int reason)
{
}
//=============================================
//+---------------------Función para la señal Konservative si Metod=true---------------------------------------------+
int Konservative()
//Comprobar si hay un cruce ascendente de 3 líneas
{
si (Metod==true)
{
if(FastMA>MiddiMA&&MiddiMA>SlowMA&&rez<=0)
{
Alert(Symbol(),Time_Frame,"----Up----. Conservador");
rez=1;
Comentario ("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez);
return(rez);
}
//Comprobar el cruce de 3 líneas hacia abajo
if(FastMA<MiddiMA&&MiddiMA<SlowMA&&rez>=0)
{
Alert(Symbol(),Time_Frame," ---- DOWN----. Conservador");
rez=-1;
Comentario ("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez);
return(rez);
}
}
return(rez);
}
//=================================================
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Función agresiva si
int Agresivo()
// Comprueba si hay un cruce ascendente de 2 líneas sin lentitud
{
si (Metod==false)
{
if(FastMA>MiddiMA&&rez<=0)
{
Alert(Symbol(),Time_Frame,"----Up----. agresivo");
rez=1;
Comentario ("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez);
}
//Comprobar el cruce de 2 líneas hacia abajo sin una línea lenta
if(FastMA<MiddiMA&&rez>=0)
{
Alert(Symbol(),Time_Frame," ---- DOWN----. Agresivo");
rez=-1;
Comentario ("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez);
}
}
return(rez);
}
No es alto, sino el 100%. En este momento es el último pedido y los otros están en pausa, pero el esquema no es preciso y me gustaría que fuera mejor.
No, no al 100%. O tal vez estés hablando de otra cosa.
En general, el algoritmo es el siguiente:
Se establece un bucle para recorrer todos los pedidos.
Se selecciona la siguiente orden para trabajar con ella.
Comprueba si esa orden es necesaria... Si no, la siguiente iteración del bucle...
Si es "necesario", compruebe si es adecuado para la modificación. Simplemente compara lo lejos que está de su nivel de StopLoss
Si la distancia es suficiente, se modifica la orden.
Por lo tanto, si tiene una función de modificación con un bucle en todas las órdenes, y antes de su llamada, el bucle también está funcionando, entonces la orden seleccionada se modificará...
No, no al 100%. O tal vez estés hablando de otra cosa.
En general, el algoritmo es el siguiente:
Se establece un bucle para recorrer todos los pedidos.
Se selecciona la siguiente orden para trabajar con ella.
Comprueba si esa orden es necesaria... Si no, la siguiente iteración del bucle...
Si es "necesario", compruebe si es adecuado para la modificación. Simplemente compara lo lejos que está de su nivel de StopLoss
Si la distancia es suficiente, se modifica la orden.
Por lo tanto, si tiene una función de modificación con un bucle en todos los pedidos, y antes de su llamada, el bucle también está funcionando, entonces el pedido seleccionado se modificará...