¡Hola a todos y feliz año nuevo! ¿Pueden decirme: cómo puedo hacer para que mi script utilice un indicador del mercado?
Más concretamente: hay un indicador "Automatic Trendline" en el mercado. Quiero hacer un robot basado en él, que abriría o cerraría una posición en el momento en que el precio cruce estas líneas en el indicador (bien, y bajo condiciones adicionales especificadas).
¡Hola a todos y feliz año nuevo! Me puede decir: ¿cómo puedo darme cuenta de que mi script utilizaría un indicador del mercado?
Más concretamente: hay un indicador "Automatic Trendline" en el mercado. Quiero hacer un robot basado en él, que abriría o cerraría una posición en el momento en que el precio cruce estas líneas en el indicador (bien, y bajo condiciones adicionales especificadas).
No hay problema para mí. Para el mercado o CodeBase no se puede utilizar la artesanía de otra persona del mercado ...
Para ti, no hay problema. No puedes utilizar las manualidades de otra persona del mercado o de CodeBase...
Para ti mismo. No sé cómo hacerlo. No puedo encontrar el código en código abierto. O cómo atornillar en mi código que captaría la posición de las líneas.
Aquí tienes un ejemplo de cómo añadir un indicador descargado del Mercado a un Asesor Experto
// Глобальная переменная для хендла индикатораint tlHandle;
intOnInit() {
// Создаем хендл индикатора
tlHandle = iCustom(Symbol(), PERIOD_CURRENT, "Market\\Automatic Trendlines", false, 5, 15, clrRed, clrBlue, 2, "My Support", "My Resistance");
// Можем добавить индикатор на график, если хотим. // Для использования в расчетах это необязательноChartIndicatorAdd(ChartID(), 0, tlHandle);
// Вызовем один раз OnTick(), чтобы на выходных у нас что-то в логе отобразилосьOnTick();
return(INIT_SUCCEEDED);
}
voidOnDeinit(constint reason) {}
voidOnTick() {
// Объявляем массивы для буферов индикатораdouble tlBuffer0[], tlBuffer1[]; // ,tlBuffer1, ...int res;
// Копируем нужное количество значений из индикаторных буферов в массивы
res = CopyBuffer(tlHandle, 0, 0, 100, tlBuffer0);
res = CopyBuffer(tlHandle, 1, 0, 100, tlBuffer1);
// У разных индикаторов различное количество индикаторных буферов, // числа из которых используются для построения линий, значков, цветовых меток на графике// Сколько их у данного индикатора и как используются их числа исследуйте самостоятельно// res = CopyBuffer(tlHandle, 2, 0, 100, tlBuffer2);// Пользуемся полученными значениямиArrayPrint(tlBuffer0);
ArrayPrint(tlBuffer1);
}
Si no vas a forzar la asignación de valores numéricos a los elementos de la enumeración (a juzgar por el ejemplo, no lo harás), puedes hacerlo así:
// Объявляем перечислениеenum ENUM_NAME {
ENAME_1,
ENAME_JSDF,
ENAME_ERT,
ENAME_QWERTY,
ENAME_FEF
};
// Обявляем константу, хранящую количество элементов перечисления#define ENUM_NAME_SIZE 5// Массив для хранения элементов перечисления
ENUM_NAME E_NAME[ENUM_NAME_SIZE];
intOnInit() {
// Заполняем массив значениями, преобразуя к типу ENUM_NAMEfor(int i = 0; i < ENUM_NAME_SIZE; i++) {
E_NAME[i] = (ENUM_NAME) i;
}
// Пользуемся массивомArrayPrint(E_NAME);
for(int i = 0; i < ENUM_NAME_SIZE; i++) {
Print(EnumToString(E_NAME[i]));
}
return(INIT_SUCCEEDED);
}
voidOnDeinit(constint reason) {}
En este caso, tendrás que cambiar también la constante que almacena el número de elementos al añadir elementos a la enumeración.
Además, es mejor utilizar el prefijo ENUM_ sólo para el nombre de la enumeración en sí, y utilizar algún otro prefijo para sus elementos. Esta convención se utiliza en todas las enumeraciones MQL estándar.
Si no vas a forzar la asignación de valores numéricos a los elementos de la enumeración (a juzgar por el ejemplo - no lo harás), puedes hacerlo así:
En este caso, tendrás que cambiar también la constante que almacena el número de elementos al añadir elementos a la enumeración.
Además, es mejor utilizar el prefijo ENUM_ sólo para el nombre de la enumeración en sí, y utilizar algún otro prefijo para sus elementos. Esta convención se utiliza en todas las enumeraciones MQL estándar.
Gracias por su ayuda. He estado usando ENUM durante tantos años que ni siquiera se me ocurrió leer la ayuda.
jeremy10p100 # : Hola y gracias por su respuesta. He podido hacer un script que cumple con mis expectativas, pero desafortunadamente todavía hay dos errores que no puedo entender o corregir. ¿Sabría con quién contactar para un poco de ayuda? Son sólo dos líneas de código que se registran como errores después de la compilación...
Puedes crear un trabajo freelance y elegir entre los desarrolladores que soliciten tu trabajo
Intentando enviar json mediante WebRequest, el servidor devuelve:"\u0022BTCUSD\u0022 no es un tipo de paquete válido para la desnormalización".
Es decir, no le gusta la codificación de comillas \u0022 . He probado a especificar todas las variantes de codificación en cabeceras y StringToCharArray, nada ayuda.
Desde python todo sale sin problemas: response = requests.post(url, data=json.dumps(data), headers=headers) es decir, todo va bien con el servidor.
Permítanme reformular la pregunta de otra manera. ¿Es posible dar al optimizador una orden en el bloque OnInit para omitir la variante de prueba/optimización en determinadas condiciones?
input group "Входные настройки Стохастик"
input bool Stoch = false; // Стохастик включен/выключен
input int in_StochK = 14; // период основной линии K
input int in_StochD = 3; // период первичного сглаживания D
input int in_StochSlow = 3; // период окончательного сглаживания
int OnInit() {
if ((Stoch = false) && ((StochK != 0) || (StochK != 0) || (StochSlow != 0)))
{
// Некая команда, которая говорит, что такой вариант даже не стоит пробовать оптимизировать
}
}
He intentado hacerlo, pero da lugar a variantes de optimización incorrectas.
if ((Stoch = false) && ((StochK != 0) || (StochK != 0) || (StochSlow != 0)))
{
Print("Такой вариант тестирования не имеет смысла");
return(INIT_FAILED);
}
El objetivo es que pueda habilitar la enumeración de variantes de 4 parámetros esto cásticos (Stoch, in_StochK, int in_StochD, int in_StochSlow) al optimizar.
Cuando estocástico está habilitado (Stoch = true), el optimizador enumera las variables in_StochK, in_StochD, in_StochSlow. Todo funciona correctamente en esta parte.
Cuando el estocástico está desactivado (Stoch = false), el optimizador sigue buscando las variables in_StochK, in_StochD, in_StochSlow. Y necesito hacer algún tipo de tope en el código para que no las busque si Stoch = false.
¡Hola a todos y feliz año nuevo! ¿Pueden decirme: cómo puedo hacer para que mi script utilice un indicador del mercado?
Más concretamente:
hay un indicador "Automatic Trendline" en el mercado. Quiero hacer un robot basado en él, que abriría o cerraría una posición en el momento en que el precio cruce estas líneas en el indicador (bien, y bajo condiciones adicionales especificadas).
¡Hola a todos y feliz año nuevo! Me puede decir: ¿cómo puedo darme cuenta de que mi script utilizaría un indicador del mercado?
Más concretamente:
hay un indicador "Automatic Trendline" en el mercado. Quiero hacer un robot basado en él, que abriría o cerraría una posición en el momento en que el precio cruce estas líneas en el indicador (bien, y bajo condiciones adicionales especificadas).
No hay problema para mí. Para el mercado o CodeBase no se puede utilizar la artesanía de otra persona del mercado ...
Para ti, no hay problema. No puedes utilizar las manualidades de otra persona del mercado o de CodeBase...
Para ti mismo. No sé cómo hacerlo. No puedo encontrar el código en código abierto. O cómo atornillar en mi código que captaría la posición de las líneas.
Hola, @Rad89
Necesitas las funciones iCustom() y CopyBuffer().
Aquí tienes un ejemplo de cómo añadir un indicador descargado del Mercado a un Asesor Experto
enum ENUM_NAME { ENUM_1, ENUM_jsdf .... ENUM_FEF; };¿Cómo asignar memoria a la matriz E_NAME[] para que haya memoria suficiente para todos los valores posibles de ENUM_NAME (sin repeticiones)?¿ E inicializar E_NAME [] con todos los valores posibles ?
Hola, @pivomoe
Si no vas a forzar la asignación de valores numéricos a los elementos de la enumeración (a juzgar por el ejemplo, no lo harás), puedes hacerlo así:
En este caso, tendrás que cambiar también la constante que almacena el número de elementos al añadir elementos a la enumeración.
Además, es mejor utilizar el prefijo ENUM_ sólo para el nombre de la enumeración en sí, y utilizar algún otro prefijo para sus elementos. Esta convención se utiliza en todas las enumeraciones MQL estándar.
Hola, @pivomoe
Si no vas a forzar la asignación de valores numéricos a los elementos de la enumeración (a juzgar por el ejemplo - no lo harás), puedes hacerlo así:
En este caso, tendrás que cambiar también la constante que almacena el número de elementos al añadir elementos a la enumeración.
Además, es mejor utilizar el prefijo ENUM_ sólo para el nombre de la enumeración en sí, y utilizar algún otro prefijo para sus elementos. Esta convención se utiliza en todas las enumeraciones MQL estándar.
Gracias por su ayuda. He estado usando ENUM durante tantos años que ni siquiera se me ocurrió leer la ayuda.
Hola y gracias por su respuesta. He podido hacer un script que cumple con mis expectativas, pero desafortunadamente todavía hay dos errores que no puedo entender o corregir. ¿Sabría con quién contactar para un poco de ayuda? Son sólo dos líneas de código que se registran como errores después de la compilación...
Puedes crear un trabajo freelance y elegir entre los desarrolladores que soliciten tu trabajo
https://www.mql5.com/fr/job
Intentando enviar json mediante WebRequest, el servidor devuelve:"\u0022BTCUSD\u0022 no es un tipo de paquete válido para la desnormalización".
Es decir, no le gusta la codificación de comillas \u0022 .
He probado a especificar todas las variantes de codificación en cabeceras y StringToCharArray, nada ayuda.
Desde python todo sale sin problemas:
response = requests.post(url, data=json.dumps(data), headers=headers)
es decir, todo va bien con el servidor.
¿Cómo solucionar el problema?
Permítanme reformular la pregunta de otra manera. ¿Es posible dar al optimizador una orden en el bloque OnInit para omitir la variante de prueba/optimización en determinadas condiciones?
He intentado hacerlo, pero da lugar a variantes de optimización incorrectas.
if ((Stoch = false) && ((StochK != 0) || (StochK != 0) || (StochSlow != 0))) { Print("Такой вариант тестирования не имеет смысла"); return(INIT_FAILED); }El objetivo es que pueda habilitar la enumeración de variantes de 4 parámetros esto cásticos (Stoch, in_StochK, int in_StochD, int in_StochSlow) al optimizar.