double bidP=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits);
double Averab=((askP+bidP)*1)/2.0;
Print("askP="+askP+" bidP="+bidP+" Averab="+Averab+" MathFloor((int)Averab)="+MathFloor((int)Averab));
en spread=2
askP=105143 bidP=105141 Averab=105142 MathFloor((int)Averab)=105142
en la dispersión=3
askP=105144 bidP=105141 Averab=105142.5 MathFloor((int)Averab)=105142
en 4!!!! spread
askP=105545 bidP=105141 Averab=105143 MathFloor((int)Averab)=105142
¿Por qué?
Hola a todos, ya me he cansado de la exactitud de las cotizaciones. Normalizaciones, etc.
De alguna manera deberías ser capaz de entender lo que son double e int. Cómo funciona la conversión de tipos.
Nunca he utilizado MathMod y MathFloor. Tu código grita mucho que no entiendes en absoluto lo que hay detrás de lo que has escrito.
La impresión del número doble no es nada. Si quieres imprimir el valor real de double, tienes que mirar sus bytes.
cebado sólo para evitar tener que escribirlo manualmente,
La variable en sí no da el resultado que espero de ella.
Elreparto de tipos, la normalización de int y el doblaje es lo que he estado haciendo sin ayuda.
De momento estoy desesperado ya que he probado todas las opciones. y he puesto un trozo de código de 1 en 1000 que no funciona como debería.
Pero gracias por la ayuda.
Intenta hacer lo que quiero: no me enseñes el código después, sólo dime si funciona o no.
Tome la oferta y la demanda.
y calcular el precio medio.
Si el diferencial es impar (3,5,7,9, etc.) entonces iguala el precio medio más cercano a la Oferta.
Por ejemplo:
Oferta=1,55555 Demanda=1,55557 Precio medio=1,55556 Spread=2
Oferta=1,5555 Pregunta=1,55558 Precio medio=1,55556 Spread=3
y lo harás bien.
Pero cuando el diferencial es de 4,5,6,7 - tendrás esa precisión yendo hacia lo desconocido. Y los números nadarán en sentido contrario.
double bidP=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits);
double Averab=((askP+bidP)*1)/2.0;
Print("askP="+askP+" bidP="+bidP+" Averab="+Averab+" MathFloor((int)Averab)="+MathFloor((int)Averab));
en spread=2
askP=105143 bidP=105141 Averab=105142 MathFloor((int)Averab)=105142
en la dispersión=3
askP=105144 bidP=105141 Averab=105142.5 MathFloor((int)Averab)=105142
en 4!!!! spread
askP=105545 bidP=105141 Averab=105143 MathFloor((int)Averab)=105142
¿Por qué?
Una vez tuve una situación similar, mi mente hervía de indignación en ese momento. El reemplazo de double por float ayudó , aún no sé por qué.
Gracias, lo probaré........ a mí también me está dando vueltas la cabeza.
¡¡¡SÍ!!! ¡Así es exactamente como funciona! Está bien.
float bidP=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits);
float Averab=((askP+bidP))/2.0;
¡¡¡Gracias!!! No sé lo que haría más........
int askP = (int)(Ask / Point + ALPHA);
int bidP = (int)(Bid / Point + ALPHA);
Así funciona MathFloor
{
return((int)((Num > 0) ? Num : Num - 1));
}
para los diferentes diferenciales? incluyendo 2,3,4,5,6,7 ?
Porque ya probé tu manera (sin+ ALPHA). 2,3 spread está bien, pero 4,5 ya es un fallo
Normalización, esto es lo primero que hice en la función, pero desafortunadamente en ciertos diferenciales, empieza a fallar
la normalización es la primera cosa que hice en la función, pero desafortunadamente en ciertos márgenes, empieza a fallar
tomar el Ask y el Bid.
y calcular el precio medio.
Si el diferencial es impar (3,5,7,9 etc.) entonces iguala el precio medio más cercano a la Oferta.
int DoubleToInt( const double Num )
{
return((int)(Num + ALPHA));
}
void OnStart()
{
double NewPrice = DoubleToInt((Ask + Bid) / (2 * Point)) * Point;
Print(NewPrice);
}
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Hola a todos, me estoy cansando de la exactitud de las citas. La normalización, etc.
float askP=NormalizeDouble(Ask,Digits)/NormalizeDouble(Point,Digits);
float bidP=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits);
float Averab=((askP+bidP))/2.0;
AUTOPRICE=MathFloor(Averab)*Point;
Print("FLOAT "+" askP="+askP+" bidP="+bidP+" Averab="+DoubleToString(Averab,10)+" AUTOPRICE="+DoubleToString(AUTOPRICE,10));
double AUTOPRICE2;
double askP2=NormalizeDouble(Ask,Digits)/NormalizeDouble(Point,Digits);
double bidP2=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits);
double Averab2=((askP2+bidP2))/2.0;
AUTOPRICE2=MathFloor(Averab2)*Point;
Print("DOUBLE "+" askP2="+askP2+" bidP2="+bidP2+" Averab2="+DoubleToString(Averab2,10)+" AUTOPRICE="+DoubleToString(AUTOPRICE2,10));
difusión:2
2017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - DOBLE PRUEBA MATHFLOOR EURUSD,M30:DOBLE askP2=105143 bidP2=105141 Averab2=105142.000000 AUTOPRICE=1.0514200000
2017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - DOBLE PRUEBA MATHFLOOR EURUSD,M30:FLOAT askP=105143 bidP=105141 Averab=105142.0000000000 AUTOPRICE=1.0514199734
difusión:3
2017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - DOBLE PRUEBA MATHFLOOR EURUSD,M30:DOBLE askP2=105144 bidP2=105141 Averab2=105142.5000000000 AUTOPRICE=1.0514200000
2017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - DOBLE PRUEBA MATHFLOOR EURUSD,M30:FLOAT askP=105144 bidP=105141 Averab=105142.5000000000 AUTOPRICE=1.0514199734
difusión:4
2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOBLE PRUEBA MATHFLOOR EURUSD,M30:DOBLE askP2=105145 bidP2=105141 Averab2=105143.000000 AUTOPRICE=1.0514200000
2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOBLE PRUEBA MATHFLOOR EURUSD,M30:FLOAT askP=105145 bidP=105141 Averab=105143.0000000000 AUTOPRICE=1.0514299870
difusión:5
2017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - DOBLE PRUEBA MATHFLOOR EURUSD,M30:DOBLE askP2=105146 bidP2=105141 Averab2=105143.5000000000 AUTOPRICE=1.0514300000
2017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - DOBLE PRUEBA MATHFLOOR EURUSD,M30:FLOATaskP=105146 bidP=105141 Averab=105143.5000000000 AUTOPRICE=1.0514299870
Esas señales adicionales están en algún lugar al final del túnel..........