Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 252
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
> err=StringToInteger((string)err)
esto debería pasar a los anales ;-)
originalmente en err obviamente obtuviste int de GetLastError(). Convierte el código de error en una descripción legible ErrorDescription(err); siempre que #include <stdlib.mqh> esté activado.
pero la forma en que está escrito es un fastidio.
PD/ Y no aprendas a programar con MQL. MQL 4 y 5 son lenguajes de destino para una plataforma concreta.
¿Puede decirme si se puede escribir de esta manera. no quiere abrir las transacciones. tal vez el formato de los números calculados es incorrecto? u otros defectos en el código?
double TakeLong(double shp)
{
int CurrentDayRange=0, fiveDayATR=0, take=0;
doble TP_ATR=0;
//////Entradas de giro
doble P, S1, R1, S2, R2, S3, R3;
double LastHigh, LastLow, x;
int barras_contadas = IndicadorContado();
int límite, i;
shp=iHigh(Symbol(),PERIOD_D1,0);
//---- Cálculo del indicador Pivot
if(counted_bars == 0)
{
x = Período();
si(x > 240)
return(-1);
}
if(counted_bars < 0)
return(-1);
limit = (Bares - counted_bars) - 1;
//----
for(i = límite; i >= 0; i--)
{
if(High[i+1] > LastHigh)
LastHigh = High[i+1];
//----
if(Low[i+1] < LastLow)
LastLow=Low[i+1];
if(TimeDay(Time[i]) != TimeDay(Time[i+1])
{
P = (LastHigh + LastLow + Close[i+1]) / 3;
R1 = (2*P) - LastLow;
S1 = (2*P) - LastHigh;
R2 = P + (LastHigh - LastLow);
S2 = P - (LastHigh - LastLow);
R3 = (2*P) + (LastHigh - (2*LastLow));
S3 = (2*P) - ((2* LastHigh) - LastLow);
LastLow = Open[i];
LastHigh = Open[i];
}
}
////ATR cálculo
for (i=1;i<6;i++)
{ if(iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i)>0) FiveDayATR += (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i));}
FiveDayATR = NormalizeDouble(FiveDayATR/5,Digits());
CurrentDayRange = (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i));
if(FiveDayATR-CurrentDayRange>0) TP_ATR=Ask+FiveDayATR-CurrentDayRange; si no TP_ATR=0;
if (Bid>R1 && TP_ATR==0) take=shp;
else if (Bid<R1 && R1<TP_ATR) take=R1;
si no toma=TP_ATR;
devolver(tomar);
}
El código sugerido parece un indicador. Las operaciones se abren mediante un Asesor Experto o un script. La llamada a la función OrderSend no está permitida en el indicador. El indicador puede alarmar - inserte la llamada de la función de alerta o el sonido en el lugar apropiado
El código propuesto es similar al indicador. Las operaciones se abren mediante un Asesor Experto o un script. La llamada a la función OrderSend está prohibida en el indicador. El indicador puede señalar - insertar la llamada a la función de alerta o el sonido en el lugar apropiado
Este es el código de definición de TP, que envía el resultado a OrderSend. sin este complejo algoritmo, las operaciones se envían, pero no hay manera de enviarlas. Llamo a la función TP = TakeLong(SHP);
Hay muchas formas de depurar, el proceso de encontrar un error cuando se establece que lo hay. La primera es F5 - iniciar la depuración en MetsEditor. 2) usar Alertas para rastrear la ejecución. 3 y 4) emiten información de depuración a las etiquetas de texto y a la función Comentario. Elige la forma más conveniente y depura esta sencilla función - entonces te convertirás en un programador. Un programa con miles de líneas se considera complejo.
No quiere abrir las transacciones. ¿Quizás el formato de los números calculados está mal? o algún otro defecto en el código?
MathAbs( Close1[i] - Open1[i] ) / Point + 1
MathAbs( Close2[i] - Open2[i] ) / Point + 1
En el código completo se ve así
doubleClose1 = iClose(Symbol(), 0, i);
double Open1 = iOpen(Symbol(), 0, i);
double Close2 = iClose(Symbol(), 0, i+1);
double Open2 = iOpen(Symbol(), 0, i+1);
MathAbs( Close1[i] - Open1[i] ) /Punto + 1
MathAbs( Close2[i] - Open2[i] ) / Punto + 1
if (Close1 < Open1 && Close2 > Open2){
BUY();
}
if (Close1 > Open1 && Close2 < Open2){
SELL();
}
¿Es correcto? ¿Cómo puedo hacer que funcione?
¿Lo has probado en la cuenta demo M1? ¿Qué obtienes?
¿Lo has probado en una cuenta demo M1? ¿Cómo está funcionando?
¿Puede decirme por qué la red de arrastre se activa en cada tic?