Tengo un Asesor Experto que trabaja en el historial (para el análisis). Yo establezco manualmente un parámetro en él - el tiempo (horas, minutos) de la colocación de los pedidos. Ejecuto el EA dentro del rango de fechas establecido, cambio los tiempos de las órdenes y lo vuelvo a ejecutar. Lo hago 96 veces (después de 15 minutos) al día. ¿Cómo puedo hacer un bucle para que lo haga solo?
artmedia70: Vuelvo a preguntar: ¿cuándo quiere hacer el pedido exactamente? No respondas con tu código (no quiero entenderlo - ya tenemos bastantes códigos propios para analizar), sino sólo con palabras,
Por ejemplo: Quiero poner una pausa por encima/por debajo de la MA a esa distancia, siempre que ... ...bla, bla, bla...
Por segunda vez te pido que me expliques. Habríamos resuelto su problema hace tiempo.
Por el momento el problema es este: fastMa cruzó slowMa arriba... ...así que estamos buscando dónde comprar. Entonces esperamos hasta que el precio, es decir, Ask (ya que consideramos comprar) alcance fastMa ( bueno, supongo que no habrá un valor exacto, necesitamos +- alguna desviación, se renombra i_thresholdFromMa) y tan pronto como el precio alcance fastMa +- i_thresholdFromMa, el Asesor Experto debe colocar BUYSTOP en (fastMa + buyHear * pt).
Lo que se me ha ocurrido no funciona en un terminal y no siempre funciona en otro. Entonces, algo está mal.
La última variante de la función buyHear aquí:
//+-------------------------------------------------------------------------------------+//| Открытие длинной позиции |//+-------------------------------------------------------------------------------------+bool OpenBuy()
{
int ticket = -1;
double OOP = fastMa + buyHear * pt;
if ((ND(OOP) - Ask) >= g_stopLevel)
{
if (ND(OOP) > Ask) // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником
{
ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0);
}
}
if (ticket > 0)
{
return (true);
}
elseAlert (GetLastError());
}
Estos son los parámetros de entrada:
externdouble i_thresholdFromMa = 5; // Отступ от МАexterndouble buyHear = 10, // Расстояние от МА до отложки на байint init()
{
if (Digits == 1 || Digits == 3 || Digits == 5)
pt = Point * 10;
}
Los errores se pueden ver en la captura de pantalla (en OrderSend() el precio se alimenta por encima de la cuenta roja, mientras que la orden como se ve en la captura de pantalla está por debajo de....):
artmedia70: Y otra cosa: si tienes fastMA y slowMA definidos como globales, ¿por qué los pasas a funciones? Todas las funciones pueden verlas de todos modos, sin pasar sus parámetros a la función llamada.
Y antes no eran globales, se declaraban en funciones específicas, no en el inicio. Pero como no se utilizaban en ninguna de las funciones, obtenerlas cada vez era de alguna manera, digamos, un signo de "malos modales como programador" y no es cómodo tener líneas de código idénticas en diferentes funciones.
Artyom, ¿crees que tengo la muñeca correcta al principio? Es decir, que en cada tic se reciba el valor. ¿No es demasiado caro? Como no soy programador de formación, a veces se me ocurren estas preguntas...
La respuesta no está del todo clara para mí, así que permítanme preguntar de nuevo. ¿He entendido bien que al establecer las condiciones de negociación
Debe utilizar el valor de la MA para el correspondiente número de barras hacia atrás, pero no el valor marcado con una flecha amarilla en la imagen.
He dibujado la figura según he entendido tu respuesta.
En realidad, la pregunta está un poco fuera de lugar. La cuestión no es el desplazamiento de la curva, sino el valor de la barra que el Asesor Experto necesita obtener del buffer. Esto es lo que hay que entender. Y NO hay correspondencia entre el sesgo y la obtención del valor del buffer.
string symbol, int timeframe, int fast_ema_period, int slow_ema_period, int signal_period, int applied_price, int mode, int shift)
Cálculo del indicador de convergencia/divergencia de las medias móviles. En los sistemas en los que la OMA se denomina histograma MACD, este indicador se dibuja como dos líneas. En el terminal del cliente, la convergencia/divergencia de las medias móviles se dibuja como un histograma.
Parámetros:
símbolo
-
Nombre del símbolo, sobre cuyos datos se calculará el indicador. NULL significa símbolo actual.
marco temporal
-
Período. Puede ser uno de los períodos del gráfico. 0 significa el período del gráfico actual.
fast_ema_period
-
Periodo de promediación para el cálculo de la media móvil rápida.
periodo_de_ema_lento
-
Periodo de promediación para el cálculo de una media móvil lenta.
periodo_de_señal
-
Periodo de promediación para el cálculo de la línea de señal.
Por favor, indique si en el modo de prueba de "precios abiertos" el comprobador utiliza sólo los precios de apertura o los precios de apertura, cierre, máximo y mínimo.
Por favor, aconséjeme cómo resolver el siguiente problema.
Hay un indicador en forma compilada. El código no está disponible. El indicador refleja los niveles de precios en la ventana del gráfico principal. Quiero usar estos niveles para mi EA pero es imposible llamar al indicador usando la función iCustom() - los niveles mostrados son objetos gráficos. ¿Es posible leer los datos de otra manera, por ejemplo, a través de los nombres de los objetos y la hora? Los nombres de todos los niveles son conocidos (disponibles en la configuración del indicador), los objetos se actualizan una vez a la semana.
Quiero decir de entrada que no tengo mucha experiencia en programación, agradecería mucho una respuesta útil.
Es una buena idea. Los objetos gráficos se reconocen por su nombre. Los niveles se pueden establecer mediante dos tipos (básicos) de objetos gráficos: OBJ_TREND (línea de tendencia) y OBJ_HLINE (línea horizontal). Según tengo entendido, se necesitan dos propiedades de estos objetos (precio y posiblemente tiempo):
//---- Уровень для горизонтальной линииdouble ld_Level = ObjectGet (Name, OBJPROP_PRICE1);
//---- Уровень для трендовой линии на текущем баре
ld_Level = ObjectGetValueByShift (Name, Bar);
datetime ldt_Time = ObjectGet (Name, OBJPROP_TIME1);
Sancho77: Por favor, aconséjeme: en el modo de prueba por "precios de apertura", ¿el probador utiliza sólo los precios de apertura, cierre, alto y bajo?
Sí, sólo los precios abiertos, por eso es importante tenerlo en cuenta al analizar el EA. Por ejemplo, si la cola de la vela rompe su canal, entonces el EA puede no notarlo, pero usted puede escribir esto en la lógica del programa y resolver el problema.
Hola a todos.
Tengo un Asesor Experto que trabaja en el historial (para el análisis). Yo establezco manualmente un parámetro en él - el tiempo (horas, minutos) de la colocación de los pedidos. Ejecuto el EA dentro del rango de fechas establecido, cambio los tiempos de las órdenes y lo vuelvo a ejecutar. Lo hago 96 veces (después de 15 minutos) al día. ¿Cómo puedo hacer un bucle para que lo haga solo?
Vuelvo a preguntar: ¿cuándo quiere hacer el pedido exactamente? No respondas con tu código (no quiero entenderlo - ya tenemos bastantes códigos propios para analizar), sino sólo con palabras,
Por ejemplo: Quiero poner una pausa por encima/por debajo de la MA a esa distancia, siempre que ... ...bla, bla, bla...
Por segunda vez te pido que me expliques. Habríamos resuelto su problema hace tiempo.
Por el momento el problema es este: fastMa cruzó slowMa arriba... ...así que estamos buscando dónde comprar. Entonces esperamos hasta que el precio, es decir, Ask (ya que consideramos comprar) alcance fastMa ( bueno, supongo que no habrá un valor exacto, necesitamos +- alguna desviación, se renombra i_thresholdFromMa) y tan pronto como el precio alcance fastMa +- i_thresholdFromMa , el Asesor Experto debe colocar BUYSTOP en (fastMa + buyHear * pt).
Lo que se me ha ocurrido no funciona en un terminal y no siempre funciona en otro. Entonces, algo está mal.
La última variante de la función buyHear aquí:
Estos son los parámetros de entrada:Los errores se pueden ver en la captura de pantalla (en OrderSend() el precio se alimenta por encima de la cuenta roja, mientras que la orden como se ve en la captura de pantalla está por debajo de....):
Y otra cosa: si tienes fastMA y slowMA definidos como globales, ¿por qué los pasas a funciones? Todas las funciones pueden verlas de todos modos, sin pasar sus parámetros a la función llamada.
Y antes no eran globales, se declaraban en funciones específicas, no en el inicio. Pero como no se utilizaban en ninguna de las funciones, obtenerlas cada vez era de alguna manera, digamos, un signo de "malos modales como programador" y no es cómodo tener líneas de código idénticas en diferentes funciones.
Artyom, ¿crees que tengo la muñeca correcta al principio? Es decir, que en cada tic se reciba el valor. ¿No es demasiado caro? Como no soy programador de formación, a veces se me ocurren estas preguntas...
La respuesta no está del todo clara para mí, así que permítanme preguntar de nuevo. ¿He entendido bien que al establecer las condiciones de negociación
Debe utilizar el valor de la MA para el correspondiente número de barras hacia atrás, pero no el valor marcado con una flecha amarilla en la imagen.
He dibujado la figura según he entendido tu respuesta.
En realidad, la pregunta está un poco fuera de lugar. La cuestión no es el desplazamiento de la curva, sino el valor de la barra que el Asesor Experto necesita obtener del buffer. Esto es lo que hay que entender. Y NO hay correspondencia entre el sesgo y la obtención del valor del buffer.
hola
primera pregunta
A=verdadero
si el valor de Imacd(Línea principal) hace 15 minutos es inferior a 30 minutos
hola
primera pregunta
A=verdadero
si el valor de Imacd (Línea principal) hace 15 minutos es inferior a 30 minutos
La pregunta aquí es
si lo entiendo correctamente
¿número de qué períodos?
o ¿cómo obtengo el valor del macd de la barra anterior en lugar de la actual?
int inicio ()
{
bool A=trueif
(iMACD(NULL,15,12,26,9,PRICE_CLOSE,MODE_MAIN,1)<iMACD(NULL,15,12,26,9,PRICE_CLOSE,MODE_SIGNAL,2)) { A==true; } return; }Haga clic en losperiodos del gráfico y vea qué periodos. Y encontrar la barra anterior( shift = 1) a la barra actual(shift = 0) en el último lugar:
O mejor aún, ¡empieza a estudiar el libro de texto de S. Kovalev!Hola de nuevo.
Por favor, aconséjeme cómo resolver el siguiente problema.
Hay un indicador en forma compilada. El código no está disponible. El indicador refleja los niveles de precios en la ventana del gráfico principal. Quiero usar estos niveles para mi EA pero es imposible llamar al indicador usando la función iCustom() - los niveles mostrados son objetos gráficos. ¿Es posible leer los datos de otra manera, por ejemplo, a través de los nombres de los objetos y la hora? Los nombres de todos los niveles son conocidos (disponibles en la configuración del indicador), los objetos se actualizan una vez a la semana.
Quiero decir de entrada que no tengo mucha experiencia en programación, agradecería mucho una respuesta útil.
Algo así.
Por favor, aconséjeme: en el modo de prueba por "precios de apertura", ¿el probador utiliza sólo los precios de apertura, cierre, alto y bajo?
Sí, sólo los precios abiertos, por eso es importante tenerlo en cuenta al analizar el EA. Por ejemplo, si la cola de la vela rompe su canal, entonces el EA puede no notarlo, pero usted puede escribir esto en la lógica del programa y resolver el problema.