Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 23
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
Estoy completamente confundido.
double blevel=OrderStopLoss()<Bid-Point*TS; me funciona. SL va tras el precio sólo en beneficio.
double slevel=OrderStopLoss()>Ask+Point*TS; No sé cómo añadir este a else
No es un bool.
No es un bool, pero se llama conversión implícita
¿Qué estás haciendo de todos modos? ¿Arrastrar?
No es un bool, pero se llama conversión implícita
¿Qué estás haciendo de todos modos? ¿Arrastrar?
Sí trató de hacer un arrastre. la secuencia de comandos original era sólo para cerrar cuando el beneficio de la orden fue alcanzado
Sí, intenté hacer una red de arrastre.
Lógica:
Si el beneficio de la orden actual seleccionada en el bucle es mayor que el valor establecido, si su stoploss es menor (para la Compra)/mayor (para la Venta) que el nivel de arrastre del stoploss calculado, entonces cambia el stop al nuevo valor.
Esto es en pocas palabras.
¿No es eso lo que sugerí?
Sí, bueno... He mirado tu código con tan poca atención que es mejor decir que no lo he mirado en absoluto. Pero eso es la mitad del problema, luego he dicho tales tonterías que casi me avergüenzan. De alguna manera, de repente tuve la loca idea de que ArrayMaximum() podría aplicarse a un array de estructuras o incluso a un campo separado de este array.
Me arrepiento, no aconsejo a nadie más que piense así, no funciona...:)
Sí, bueno... He mirado tu código con tan poca atención que es mejor decir que no lo he mirado en absoluto. Pero eso es la mitad del problema, luego he dicho tales tonterías que casi me avergüenzan. Por alguna razón, de repente tuve la loca idea de que ArrayMaximum() podría aplicarse a un array de estructuras o incluso a un campo separado de este array.
Me arrepiento, no aconsejo a nadie más que piense así, no funciona...:)
Bueno... ¿Y yo? He mirado tu código de la misma manera y te he dado las gracias, porque es realmente más corto...
En resumen - ambos valen una broma...
No es un guión, es un Asesor Experto. Usted confunde los tipos de programas. El script se ejecuta una vez después de ser cargado en el gráfico y luego se borra. Si no está en bucle. Difícilmente alguien hará un script en bucle para cerrar posiciones.
según el autor:
Aquí hay un script estándar de MT4 close.mq4 ligeramente modificadoPonga el archivo en la carpeta MetaTrader\\nde los scripts,
Bueno... ¿Y yo? Justo cuando eché un vistazo a su código, me incliné en señal de gratitud - es realmente más corto...
En resumen - ambos valen una broma...
No, no estoy de acuerdo. Este código
CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle);
CopyClose(_Symbol, PERIOD_CURRENT, 1, 15, closeCandle);
double maxCandle = fmax(openCandle[ArrayMaximum(openCandle)], closeCandle[ArrayMaximum(closeCandle)]);
double minCandle = fmin(openCandle[ArrayMinimum(openCandle)], closeCandle[ArrayMinimum(closeCandle)]);
probado y funciona. Hay matrices dobles simples definidas por el usuario, y CopyRates() llena una matriz de estructuras y por lo tanto no se puede elegir el máximo y el mínimo utilizando funciones de trabajo con matrices.
según el autor:
Aquí hay un script estándar de MT4 close.mq4 ligeramente modificadoPonga el archivo en la carpeta MetaTrader\\nde los scripts,
Así que su script funciona solo una vez - lo puse en el gráfico, el script funcionó(cerró posiciones) y se descargó.
No necesitas un script, necesitas un EA.
No, no estoy de acuerdo. Este código
CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle);
CopyClose(_Symbol, PERIOD_CURRENT, 1, 15, closeCandle);
double maxCandle = fmax(openCandle[ArrayMaximum(openCandle)], closeCandle[ArrayMaximum(closeCandle)]);
double minCandle = fmin(openCandle[ArrayMinimum(openCandle)], closeCandle[ArrayMinimum(closeCandle)]);
está probado y funciona. Aquí son simples matrices dobles personalizadas, y CopyRates() llena una matriz de estructuras y por lo tanto no se puede seleccionar el máximo y el mínimo usando funciones de matriz.
Pues te digo que yo también estuve observando tu código con mucha atención. Así que - la broma es sobre mí.
SZY... Pero mi código devuelve cuatro valores: Alto/Bajo/Más Alto/Más Bajo, el tuyo sólo devuelve Alto y Bajo, y mi código comprueba el éxito de la copia de datos (aunque no todos), el tuyo no...
Así es como mi código comprueba la copia completa de los datos necesarios:
//| sFindRangeByCandlesBody.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int Begin=1; // Бар начала диапазона поиска
input int RangeBars=20; // Диапазон поиска
//---
int bars=Bars(Symbol(),PERIOD_CURRENT);
int begin=(Begin<0?0:Begin>bars-3?bars-3:Begin);
int rangeBars=(RangeBars<2?2:
RangeBars>bars-begin?bars-begin:
RangeBars); // Диапазон поиска
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
MqlRates array[];
double high=0, low=0;
int highest=-1, lowest=-1;
if(CopyRates(Symbol(),PERIOD_CURRENT,begin,rangeBars,array)==rangeBars) {
ArraySetAsSeries(array,true);
high=GetHighestValue(begin,array,highest);
low=GetLowestValue(begin,array,lowest);
}
Print("High=",DoubleToString(high,Digits()),", Highest=",highest,", Low=",DoubleToString(low,Digits()),", Lowest=",lowest);
}
//+------------------------------------------------------------------+
double GetHighestValue(int bar_begin, MqlRates &array[], int &bar_highest){
int sz=ArraySize(array);
if(sz==0) return(-1);
double high=DBL_MIN;
bar_highest=-1;
for(int i=0; i<sz; i++) {
double value=fmax(array[i].open,array[i].close);
if(value>high) {
high=value;
bar_highest=bar_begin+i;
}
}
return(high);
}
//+------------------------------------------------------------------+
double GetLowestValue(int bar_begin, MqlRates &array[], int &bar_lowest){
int sz=ArraySize(array);
if(sz==0) return(-1);
double low=DBL_MAX;
bar_lowest=-1;
for(int i=0; i<sz; i++) {
double value=fmin(array[i].open,array[i].close);
if(value<low) {
low=value;
bar_lowest=bar_begin+i;
}
}
return(low);
}
//+------------------------------------------------------------------+