Funciones útiles de KimIV - página 84

 
vopros писал(а) >>

¡Igor, hola!

¿Podría aconsejarme cómo implementar una notificación sonora en un indicador existente?

Por ejemplo, en ZigZag. Cómo puedo añadir que habrá un sonido en el momento de dibujar la nueva línea:

//| ZIG-ZAG_RPoint_v2_m.mq4 |https://www.mql5.com/ru/code/8739
//| Copyright © 2004-2008, Poul_Trade_Forum |Reproducido el código del indicador RPoint . RPoint'.
//| Aborigen & Kharko |
//| http://forex.kbpauk.ru/ | ZIGZAG DE CALIDAD
//+------------------------------------------------------------------+

 

Señores programadores, por favor hagan un EA (por dinero razonable) del indicador de Kim.

Detalles por correo

Vladimir

vladmo@mail.ru

//+------------------------------------------------------------------+
//| i-MorningRange.mq4 ||
//| Kim Igor V. aka KimIV |
//| http://www.kimiv.ru |
//| |
//| 08.02.2006 El indicador de rango de la mañana. ||
//+------------------------------------------------------------------+
#property copyright "Kim Igor V. aka KimIV"
#enlace de la propiedad "http://www.kimiv.ru"

#propiedad ventana_del_gráfica_del_indicador
#property indicator_buffers 2
#property indicator_color1 blue
#property indicator_color2 Naranja

//------- Parámetros del indicador externo -------------------------------
extern string CheckTime = "08:00"; // Comprobar la hora del rango
extern bool ShowHistory = True; // Mostrar niveles de historia
extern inttern NumberOfDays = 5; // Número de días de historia
extern bool ShowComment = True; // Mostrar comentarios

//------- Bufferes indicadores ------------------------------------------
doble dBuf0[], dBuf1[];

//+------------------------------------------------------------------+
//| Función de inicialización de indicadores personalizada |
//+------------------------------------------------------------------+
void init() {
SetIndexArrow(0, 217);
SetIndexBuffer(0, dBuf0);
SetIndexStyle (0, DRAW_ARROW, 1, 2);
SetIndexArrow(1, 218);
SetIndexBuffer(1, dBuf1);
SetIndexStyle (1, DRAW_ARROW, 1, 2);

EliminarLíneas();
for (int i=0; i<2; i++) {
ObjectCreate("HLine "+i, OBJ_HLINE, 0, 0,0);
}

for (i=0; i<NúmeroDeDías; i++) {
CreateLines("upLine "+i, indicator_color1);
CreateLines("dnLine "+i, indicator_color2);
}
}

//+------------------------------------------------------------------+
//| Crear objetos de línea |
//| Parámetros: |
//| no - nombre de la línea ||
//| cl - color de la línea |
//+------------------------------------------------------------------+
void CreateLines(string no, color cl) {
ObjectCreate(no, OBJ_TREND, 0, 0,0, 0,0);
ObjectSet(no, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(no, OBJPROP_WIDTH, 1);
ObjectSet(no, OBJPROP_COLOR, cl);
ObjectSet(no, OBJPROP_RAY, False);
}

//+------------------------------------------------------------------+
//| Función de desinicialización de indicadores personalizada |
//+------------------------------------------------------------------+
void deinit() {
EliminarLíneas();
Comentario(");
}

//+------------------------------------------------------------------+
//| Eliminar las líneas horizontales. ||
//+------------------------------------------------------------------+
void EliminarLíneas() {
for (int i=0; i<2; i++) {
ObjectDelete("HLine "+i);
}

for (i=0; i<NúmeroDeDías; i++) {
ObjectDelete("upLine "+i);
ObjectDelete("dnLine "+i);
}
}

//+------------------------------------------------------------------+
//| Función de iteración de indicadores personalizada |
//+------------------------------------------------------------------+
void start() {
datetime t1, t2, dt;
doble p1, p2;
int b1, b2; sd=0;

t1=StrToTime(TimeToStr(CurTime(), TIME_DATE)+" 00:00");
t2=StrToTime(TimeToStr(CurTime(), TIME_DATE)+""+CheckTime);
b1=iBarShift(NULL, 0, t1);
b2=iBarShift(NULL, 0, t2);
p1=Alto[Máximo(NULL, 0, MODO_ALTO, b1-b2+1, b2)];
p2=Low[Lowest(NULL, 0, MODE_LOW, b1-b2+1, b2)];

SetHLine(0, p1);
SetHLine(1, p2);

si (MostrarHistoria) {
dt=decDateTradeDay(CurTime());
for (int i=0; i<NúmeroDeDías; i++) {
DrawLines(dt, i);
dt=decDateTradeDay(dt);
while (TimeDayOfWeek(dt)<1 | TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt);
}
}

if (ShowComment) Comment("CheckTime="+CheckTime);
}

//+------------------------------------------------------------------+
//| Establecer los detalles de la línea horizontal del día actual. ||
//+------------------------------------------------------------------+
void SetHLine(int nl, double pp) {
color cl;

if (pp!=EMPTY_VALUE) {
interruptor (nl) {
caso 0: cl=color_del_indicador1; break;
caso 1: cl=color_del_indicador2; break;
}
ObjectSet("HLine "+nl, OBJPROP_COLOR, cl);
ObjectSet("HLine "+nl, OBJPROP_PRICE1, pp);
ObjectSet("HLine "+nl, OBJPROP_STYLE, STYLE_DOT);
}
}

//+------------------------------------------------------------------+
//| Dibujar líneas en el gráfico |
//| Parámetros: |
//| dt - fecha del día de negociación |
//| nd - número del día (para la numeración de los objetos) |
//+------------------------------------------------------------------+
void DrawLines(datetime dt, int nd) {
datetime t1, t2;
doble p1, p2;
int b1, b2;

t1=StrToTime(TimeToStr(dt, TIME_DATE)+" 00:00");
t2=StrToTime(TimeToStr(dt, TIME_DATE)+""+CheckTime);
b1=iBarShift(NULL, 0, t1);
b2=iBarShift(NULL, 0, t2);
p1=Alto[Máximo(NULL, 0, MODO_ALTO, b1-b2+1, b2)];
p2=Low[Lowest(NULL, 0, MODE_LOW, b1-b2+1, b2)];

ObjectSet("upLine "+nd, OBJPROP_TIME1, t1);
ObjectSet("upLine "+nd, OBJPROP_PRICE1, p1);
ObjectSet("upLine "+nd, OBJPROP_TIME2, t2);
ObjectSet("upLine "+nd, OBJPROP_PRICE2, p1);

ObjectSet("dnLine "+nd, OBJPROP_TIME1, t1);
ObjectSet("dnLine "+nd, OBJPROP_PRICE1, p2);
ObjectSet("dnLine "+nd, OBJPROP_TIME2, t2);
ObjectSet("dnLine "+nd, OBJPROP_PRICE2, p2);
}

//+------------------------------------------------------------------+
//| Disminuir la fecha en un día de negociación |
//| Parámetros: |
//| dt - fecha del día de negociación |
//+------------------------------------------------------------------+
datetime decDateTradeDay(datetime dt) {
int ty=TiempoAño(dt);
int tm=TimeMonth(dt);
int td=TimeDay(dt);
int th=Hora(dt);
int ti=TiempoMinuto(dt);

td--;
si (td==0) {
tm--;
si (tm==0) {
ty--;
tm=12;
}
si (tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12) td=31;
if (tm==2) if (MathMod(ty, 4)==0) td=29; else td=28;
si (tm==4 || tm==6 || tm==9 || tm==11) td=30;
}
return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
}
//+------------------------------------------------------------------+

 
Igor, ¡hola! Hay dos expertos (experto1 y experto2).El experto1 tiene un archivo en el que escribe los datos de cada nueva fila. Experto2 tiene un valor para comparar con el valor máximo del archivo. Por favor, ayúdame a sacar este número máximo.
 
Milka писал(а) >>
Hola Igor, hay dos Asesores Expertos (Expert1 y Expert2). Expert1 tiene un archivo en el que escribe los datos de cada nueva fila. Experto2 tiene un valor para comparar con el valor máximo en el archivo. Por favor, ayúdame a sacar este número máximo.

En el Experto 2, cargue todos los números en un array y luego utilice ArrayMaximum().

 
KimIV >> :

En el Experto 2, cargue todos los números en un array y luego utilice ArrayMaximum().

No puedo cargar los datos en un array

 
Milka писал(а) >>

Tengo problemas para cargar datos en un array.

Mira mis funciones de matriz en este hilo. Los ejemplos deben llenar los arrays con datos.

 

¡Igor, hola!

Cuando creo una línea en un gráfico ( por ejemplo - ObjectCreate(tLine,OBJ_TREND,0,Time[3],Low[3],Time[1],Low[1]) la plataforma dibuja un DRIVE de longitud infinita, mientras que el tutorial dice - ¡un TREAD! No encuentro cómo convertir OBJ_TREND en un segmento de la longitud adecuada. Convertir manualmente todos los rayos o el truco (dibujar un triángulo por así decirlo) parece estar fuera de lugar. ¿Puedes darme una pista...

 
alexpert007 писал(а) >>

¡Igor, hola!

Cuando creo una línea en un gráfico ( por ejemplo - ObjectCreate(tLine,OBJ_TREND,0,Time[3],Low[3],Time[1],Low[1]) la plataforma dibuja un DRIVE de longitud infinita, mientras que el tutorial dice - ¡un TREAD! No encuentro cómo convertir OBJ_TREND en un segmento de la longitud adecuada. Convertir manualmente todos los rayos o el truco (dibujar un triángulo por así decirlo) parece estar fuera de lugar. Pista...

Utilice ObjectSet(tLine, OBJPROP_RAY, False).

 

Hola Igor,

Ya planteé la cuestión del cierre parcial de posiciones y, en particular, el error 131 (p. 49-50 auth.6232). No es un problema de cierre parcial, pero el error 131 en el registro no me permite seguir escribiendo el EA. He encontrado un enlace a su función "Cerrar un tercio de una posición" en la rama "¿Existe una función lista para el cierre parcial de una posición?", pero no he encontrado la función dada aquí, en esta rama, ni su respuesta a la pregunta de 6232. La respuesta (p.50) ayudó a resolver parcialmente el problema. El registro no generó un error, pero apareció un efecto secundario: la primera posición abierta no se cerró como era necesario.

A modo de comparación, el primer gráfico se cerró "como debe ser", pero con 131 errores constantemente:

y un gráfico sin error, pero con cierre incorrecto de la primera (y por alguna razón sólo la primera) posición abierta:

 

El código de cierre era así:

Archivos adjuntos:
codv1.mq4  8 kb