Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 52

 
trader781:

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"?

 
Artyom Trishkin:

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

График AUDJPY, M5, 2017.01.02 22:49 UTC, MetaQuotes Software Corp., MetaTrader 4, Demo
График AUDJPY, M5, 2017.01.02 22:49 UTC, MetaQuotes Software Corp., MetaTrader 4, Demo
  • www.mql5.com
Символ: AUDJPY. Период графика: M5. Брокер: MetaQuotes Software Corp.. Торговая платформа: MetaTrader 4. Режим торговли: Demo. Дата: 2017.01.02 22:49 UTC.
 
trader781:

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()

 
Artyom Trishkin:

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

 
trader781:

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.

 
Alexey Viktorov:

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.

No es alta, pero sí del 100%. De momento estoy trabajando en la última y el resto están en pausa, pero el esquema es impreciso y me gustaría hacerlo mejor
 

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);

}

 
Олег:


Aquí, creo que puedes hacerlo tú mismo.
Archivos adjuntos:
6645.mq4  7 kb
 
trader781:
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á...

 
Alexey Viktorov:

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á...

La cuestión es que SIEMPRE habrá órdenes perdedoras con un determinado lote, que además tendrán que ser cubiertas a costa del resto. El desencadenante es la hora de cierre. Si cerramos incluso uno, toda la cadena se perderá. Por lo tanto, la cuestión es cómo rastrear el precio medio de todos los elegidos.