[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 134

 
klyuchnikk:

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?

¿Puedo ayudarle?
 
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);
   }
   else
    
   Alert (GetLastError());
}
Estos son los parámetros de entrada:
extern double i_thresholdFromMa = 5;                           // Отступ от МА
extern double 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....):

precio de apertura conjunto

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

 
Tincup:

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

 
Claus084:

hola

primera pregunta

A=verdadero

si el valor de Imacd (Línea principal) hace 15 minutos es inferior a 30 minutos

¡No, mejor adelante!
 
doble iMACD( 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.
precio_aplicado - Precio utilizado. Puede ser cualquiera de las constantes de precio.
modo - Índice de la línea indicadora. Puede ser cualquiera de los valores del identificador de línea del indicador.



La pregunta aquí es


si lo entiendo correctamente
- Índice del valor recibido del búfer del indicador (desplazamiento relativo a la barra actual por el número especificado de períodos hacia atrás).


¿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:

double MA0 = iMACD(symbol,timeframe,fast_ema_period,slow_ema_period,signal_period,applied_price,mode,0);//текущий бар
double MA1 = iMACD(symbol,timeframe,fast_ema_period,slow_ema_period,signal_period,applied_price,mode,1);//предыдущий бар


O mejor aún, ¡empieza a estudiar el libro de texto de S. Kovalev!
 
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.
 
xant:

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.

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);
Algo así.
 
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.

Razón de la queja: