[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 303
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Hay muchas opciones, por ejemplo, registrar los tiempos de apertura en un archivo, pero es más fácil desplazarse por las órdenes de apertura y comparar los tiempos de vida
.
Es necesario cerrar todas las posiciones abiertas después de un intervalo de tiempo
El script no encontrará el tiempo del probador tan fácilmente (pero el indicador sí), puede adjuntar el asesor de pruebas al inicio
de forma rápida y fiable ...
Tratando de escribir un inikator. No entiendo por qué se redibuja. Además, sólo recurre al renderizado. Por favor, ayúdame. Soy nuevo en la programación.
#propiedad ventana_del_gráfica_del_indicador
#property indicator_buffers 2
#property indicator_color1 Magenta
#property indicator_color2 Rojo
//---- parámetros de entrada
extern int N;
datetime some_time=D'1971.01.11 00:00';
datetime some_time_1=D'1971.01.11 00:00';
//---- buffers
doble RLB_Buffer[];
double RLB_Buffer_1[];
double Línea_real_Balance=0,x=0,última_alta,última_baja,RLB, Línea_real_Balance_1=0,x1=0,última_alta_1,última_baja_1,RLB_1;
bool dirlong,first;
int i,ii,barra_alta,barra_baja,primera_barra,barra_ahora,primera_barra_1,barra_ahora_1;
//+------------------------------------------------------------------+
//| Función de inicialización de indicadores personalizada |
//+------------------------------------------------------------------+
int init()
{
nombre_corto_de_cadena;
//---- línea indicadora
SetIndexStyle(0, DRAW_ARROW);
SetIndexArrow(0, 159);
SetIndexBuffer(0,RLB_Buffer);
//----;
SetIndexStyle(1, DRAW_ARROW);
SetIndexArrow(1,159);
SetIndexBuffer(1,RLB_Buffer_1);
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int inicio()
{
int barras_contadas=IndicadorContado();
Comentario(i," ",ii);
//----
if(Bares < 3)
return(0);
//----------
first_t_bar=iBarShift(NULL,0,some_time,false); //la tendencia de las barras es ascendente
now_bar=iBarShift(NULL,0,TimeCurrent(),false); //última barra, la más a la derecha
i=barras contadas-primera_barra+1;
//------------
first_t_bar_1=iBarShift(NULL,0,some_time_1,false); //barra de inicio de tendencia
now_bar_1=iBarShift(NULL,0,TimeCurrent(),false); //última barra, la más a la derecha
ii=barras contadas-primera_barra_1+1;
// if(IsVisualMode()==TRUE) i=first_t_bar-counted_bars-1; //if(counted_bars), then trend start bar
if(counted_bars == 0)
{
primero = falso;
i=primera_t_barra+1;
ii=primera_barra_1+1;
}
//------------ //contabilización de las barras negativas
dirlong = false;
if(iMA(NULL,0,1,0,MODE_SMA,PRICE_MEDIAN,0)>iMA(NULL,0,2,0,MODE_SMA,PRICE_MEDIAN,0))dirlong = true;
if(dirlong == true) //si la tendencia es al alza
{
while(i>=0)
{
x++; //cuento de barras desde el inicio de la tendencia
Real_Line_Balanse=Cerrada[i+5]; //Cuento de la suma de ralentizaciones de la tendencia
RLB=Real_Line_Balanse;
if(RLB<Low[1]) RLB_Buffer[i]=Real_Line_Balanse; //muestra la línea sólo si el precio es alcista
//-------
if(RLB>Close[i]&& x>50) //si el precio ha cruzado el RLB de arriba a abajo
{
bar_high=iHighest(NULL,0,MODE_HIGH,first_t_bar,now_bar);//entonces determinar HIGH entre
//última barra e inicio de la tendencia
tiempo_1=Tiempo[barra_alta]; //nuevo comienzo de la tendencia bajista
x=0; //puesta a cero del contador de barras desde el inicio de la tendencia
Real_Line_Balanse=0;
}
i--;
}//mientras
//-------
}//dirlong
//---------------------
//---------------------
if(dirlong == false) //si la tendencia es a la baja
{
while(ii>=0)
{
x1++; //conteo de barras desde el inicio de la tendencia
Real_Line_Balanse_1=Cerrar[ii+10]; //contar la cantidad de barras de la tendencia
RLB_1=Línea_Real_Balanse_1;
if(RLB_1>High[1]) RLB_Buffer_1[ii]=Real_Line_Balanse_1;
//-------
if(RLB_1<Close[ii]&& x1>50) //si el precio ha cruzado el RLB de arriba a abajo
{
bar_low=iLowest(NULL,0,MODE_LOW,first_t_bar_1,now_bar_1);//entonces determina el LOW entre
//última barra e inicio de la tendencia
some_time=Time[bar_low]; //nuevo comienzo de la tendencia al alza
x1=0; //puesta a cero del contador de barras desde el inicio de la tendencia
Real_Line_Balanse_1=0;
}
ii--;
} //mientras
//-------
}//dirlong
//---------------------
return(0);
}
//+------------------------------------------------------------------+
Esto es una tontería. En lugar de
i=barras contadas-primera_barra+1;
Puse un diseño que cuenta las barras que se cuenta a sí mismo. Todo empezó a funcionar bien. IndicatorCounted(); falla o no lo entiendo...
¿cómo informar a una variable sobre el estado de una orden cerrada?
Esto es una tontería. En lugar de
i=barras contadas-primera_barra+1;
Puse una construcción que cuenta las barras contadas en sí. Todo va bien. IndicatorCounted(); falla o no lo entiendo...
Se utiliza while(i>=0), de modo que cuando aparece una nueva vela, i=1 (para asegurarse de que los datos de la vela anterior se cuentan con los datos registrados una vez).
Por qué introducir some_time=D'1971.01.11 00:00'; usar Bares , IndicatorCounted no me funciona (bueno, el error es probablemente por el first_t_bar).
Su algoritmo y debería arreglarlo.
"Soynuevo en la programación."Desde 2007).
¿cómo informar a una variable sobre el estado de una orden cerrada?
:)
+ ...
Para Vitaluha:
https://docs.mql4.com/ru/trading/OrderStopLoss
https://docs.mql4.com/ru/trading/OrderTakeProfit
El problema es que el EA reabre constantemente las órdenes, es decir, hay una señal de compra - abre una orden, luego la cierra en beneficio, y las condiciones se conservan la abre de nuevo.
Pensé que se podría manejar con el contador tradicional de compra y venta - si una orden de compra ha abierto el contador +1 y una nueva compra no puede ser abierta hasta que el contador sea 0 y el contador se restablece sólo cuando se cierra.