[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 160
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
Si durante la prueba visual del EA 1.mq4 (adjunto) pongo en un gráfico el indicador 3-cci-h3 (adjunto), entonces, como parecería, con exactamente los mismos parámetros de señales cci calculadas del indicador y el cci real (texto del objeto en la esquina superior derecha) no coinciden.
¿POR QUÉ?
¿Por qué no funcionan las alertas en este indicador?
Código de asesor experto:
Código del indicador:
//+------------------------------------------------------------------+
//| i-3CCI-h.mq4 ||
//| johnfantom & KimIV |
//| http://www.kimiv.ru |
//| |
//| 02.01.2006 CCI con 3 TF en una botella. ||
//+------------------------------------------------------------------+
#property copyright "johnfantom & KimIV"
#enlace de propiedad "http://www.kimiv.ru"
#property indicador_separar_ventana
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
#propiedad indicador_máximo 1.4
#property indicator_level1 0
#propiedad indicador_mínimo -1.2
//------- Parámetros del indicador externo -------------------------------
extern int CCI_Period_0 = 14; // Periodo del CCI para el marco temporal actual
extern int Nivel_0 = 100; // Nivel del CCI para la TF actual
extern int TF_1 = 60; // Número de minutos en la primera franja de tiempo
extern int CCI_Period_1 = 14; // Periodo CCI para la primera TF
extern int Nivel_1 = 100; // Nivel CCI para la primera TF
extern int TF_2 = 240; // Número de minutos del segundo TF
extern int CCI_Period_2 = 14; // Periodo del CCI para la segunda TF
extern int Nivel_2 = 100; // Nivel de CCI para la segunda TF
extern int NumberOfBars = 1000; // Número de barras (0-Todas)
extern int ExtBars = 3;
int por;
//------- Buffer de indicadores ------------------------------------------
doble buf0[];
//+------------------------------------------------------------------+
//| Función de inicialización de indicadores personalizada |
//+------------------------------------------------------------------+
void init() {
IndicadorDígitos(1);
SetIndexBuffer(0, buf0);
SetIndexLabel(0, "i-3CCI-h");
SetIndexStyle (0, DRAW_HISTOGRAM, STYLE_SOLID, 2);
SetIndexEmptyValue(0, 0);
}
//+------------------------------------------------------------------+
//| Función de desinicialización de indicadores personalizada |
//+------------------------------------------------------------------+
void deinit() {
Comentario(");
}
//+------------------------------------------------------------------+
//| Función de iteración de indicadores personalizada |
//+------------------------------------------------------------------+
void start() {
doble cci0,cci1,cci2;
int nb1, nb2; count;
int InicioDeBucle, sh;
if (NumberOfBars==0) LoopBegin=Bars-1;
else LoopBegin=NúmeroDeBarras-1;
LoopBegin=MathMin(Bars-1, LoopBegin);
count=IndicadorContado();
for (sh=cuenta; sh>=0; sh--) {
nb1=iBarShift(NULL, TF_1, Time[sh+1], False);
nb2=iBarShift(NULL, TF_2, Time[sh+1], False);
cci0=iCCI(NULL, 0, CCI_Period_0, PRICE_CLOSE, sh+1);
cci1=iCCI(NULL, TF_1, CCI_Period_1, PRICE_CLOSE, nb1);
cci2=iCCI(NULL, TF_2, CCI_Period_2, PRICE_CLOSE, nb2);
/* doble cci[3];
cci[0]=cci0;
cci[1]=cci1;
cci[2]=cci2;
string s1="cci-0 ***"+DoubleToStr(cci[0],3);
string s2="cci-1 ***"+DoubleToStr(cci[1],3);
string s3="cci-2 ***"+DoubleToStr(cci[2],3);
cadena str[3];
str[0]=s1;
str[1]=s2;
str[2]=s3;
color col=Lima;
for(int y=0;y<3;y++)
{ObjectCreate("señaldetexto "+y,OBJ_LABEL,0,0,0)
ObjectSet("señal de texto "+y,OBJPROP_CORNER,1);
ObjectSet("textSignal "+y,OBJPROP_XDISTANCE,35-25);
ObjectSet("textSignal "+y,OBJPROP_YDISTANCE,y*(20)+20+8);
if(cci[y]>=0)col=Lima;else col=Rojo;
if(cci[y]>Nivel_0) col=Aqua;
if(cci[y]<Nivel_0) col=VioletaOscuro;
ObjectSetText("textoSeñal "+y,str[y],15, "Tahoma",col);
}
*/
if (cci0>Nivel_0 && cci1>Nivel_1 && cci2>Nivel_2) {buf0[sh]=1;
if (per != Time[0]) {per = Time[0];
if(sh<=ExtBars && ExtBars!=-1)
Alert(Symbol(),Period()," ",
TiempoAño(Tiempo[sh]),",
TimeDay(Time[sh]),",
TimeMonth(Time[sh]),",
TiempoHora(Tiempo[sh]),":",
TimeMinute(Time[sh]),",
"Compra");}}
if (cci0<-Nivel_0 && cci1<-Nivel_1 && cci2<-Nivel_2) {buf0[sh]=-1;
if (per != Time[0]) {per = Time[0];
if(sh<=ExtBars && ExtBars!=-1)
Alert(Symbol(),Period()," ",
TiempoAño(Tiempo[sh]),",
TimeDay(Time[sh]),",
TimeMonth(Time[sh]),",
TiempoHora(Tiempo[sh]),":",
TimeMinute(Time[sh]),",
"Venta");}}
}
}
//+------------------------------------------------------------------+
Pruébalo por tu cuenta. Yo no consigo que funcione en absoluto. No funciona en absoluto.
Las líneas deben estar alineadas. Pero en la práctica es un poco diferente.
¿Puede decirme qué puede estar mal?
Hice una función recursiva que escribe un valor en el buffer.
Cuando se llama desde el indicador funciona bien, cuando intenté ponerlo en el EA, la respuesta es 0
¿Cuál puede ser el problema?
¿Puede decirme qué puede estar mal?
Hice una función recursiva que escribe un valor en el buffer.
Cuando se llama desde el indicador funciona bien, cuando intenté ponerlo en el EA, la respuesta es 0
¿Cuál puede ser el problema?
¿¡Tal vez el tamaño del buffer no está ajustado!?
He encontrado donde se produce el enganche.
Resulta que IndicatorCounted da 0 en el indicador y -1 en el Asesor Experto (esta función tiene comprobación de corrección - ser >=0, por lo tanto no se considera en el Asesor Experto)
¿Cuál es el motivo y cómo se soluciona el error?
MT4 build 225, eurusd M1.
He encontrado donde se produce el enganche.
Resulta que IndicatorCounted da 0 en el indicador y -1 en el Asesor Experto (esta función tiene comprobación de corrección - ser >=0, por lo tanto no se considera en el Asesor Experto)
¿Cuál es el motivo y cómo se soluciona el error?
MT4 build 225, eurusd M1.
https://docs.mql4.com/ru/customind
if (k>k1+7 && s<(High[1]-(High[1]-Low[1])/2) && bay==true)
{
int t=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,NULL,NULL,"My order #",16384,0,Green);
bay=false;
Print (GetLastError());
}
}
if (s>(High[0]-(High[0]-Low[0])/2) && bay==false)
{
OrderSelect(t,SELECT_BY_TICKET,MODE_TRADES);
Print (GetLastError());
OrderClose(t,0.1,Ask,5,Red);
}
if (k>k1+7 && s<(High[1]-(High[1]-Low[1])/2) && bay==true)
{
int t=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,NULL,NULL,"My order #",16384,0,Green);
bay=false;
Print (GetLastError());
}
}
if (s>(High[0]-(High[0]-Low[0])/2) && bay==false)
{
OrderSelect(t,SELECT_BY_TICKET,MODE_TRADES);
Print (GetLastError());
OrderClose(t,0.1,Ask,5,Red);
}
La apertura y el cierre tienen lugar en diferentes ticks. Y el Asesor Experto ya no recuerda lo que se asignó a la variable t. Debe ser global o estática.
Una variable global se define fuera de las funciones. O puede declararse como static int
La apertura y el cierre tienen lugar en diferentes ticks. Y el Asesor Experto ya no recuerda lo que se asignó a la variable t. Debe ser global o estática.
Una variable global se define fuera de las funciones. O puede declararse como static int
muchas gracias, lo había olvidado ))
En el Indicador que puse (para luego compararlos con el Tiempo[i]):
Luego, en el bucle
Como resultado, StrToTime (StartRange) y StrToTime(EndRange) producen ceros .
- ¿Por qué y cómo solucionarlo?