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
{
...
return(NormalizeDouble(lots,2));
}
Este comentario realmente me ayuda mucho, y esto es útil pero que me da más decimales.
( más decimales es normal - porque ya leí sobre ello )
Todavía me preocupa'Normal izeDouble' y estoy buscando otra manera, que es mejor que 'NormalizeDouble'
¡Gracias!
Grandes gracias que se escribió comentarios.
@whroeder1- Voy a investigar ampliamente su comentario (/ enlaces) grandes gracias.
@Marco- Voy a utilizarlo después de la cuestión LotSize LotStep. ¡Gracias!
Este comentario realmente me ayuda mucho, y esto es útil pero que me da más decimales.
( más decimales es normal - porque ya leí sobre ello )
Todavía me preocupa'NormalizeDouble' y estoy buscando otra manera, que es mejor que 'NormalizeDouble'
¡Gracias!
Tal vez lo mejor sería establecer exactamente lo que usted está buscando para lograr.
Si lo que quieres es que la función devuelva un tamaño de lote válido para realizar una orden, no necesitas utilizar NormalizeDouble(). Mi fragmento de código original o el de WHRoeder lo conseguirán. Hay sutiles diferencias entre ellos que serán una cuestión de preferencia personal.
Pero, si usted hace un Print() directo de ese valor del lote puede obtener algunos resultados "extraños" ... como su 0.07000000000000001
Esto no será un problema para OrderSend() pero puede no ser lo que usted espera ver.
Si quiere ver los números mostrados de manera "normal", tiene 2 opciones:
1. Puede utilizar NormalizeDouble() en la función. Para una impresión estándar, el valor será el que usted espera. Pero si imprimes (manualmente) suficientes decimales, eventualmente verás que el número no es exactamente lo que crees que es. Este es el punto que WHRoeder está tratando de hacer (creo). Esta solución no es la más elegante, pero es la más sencilla. O...
2. Puedes dejar el tamaño del lote como está (es decir, no usar NormalizeDouble) y luego ajustar el valor para fines de visualización cuando sea necesario. Podría utilizar DoubleToStr() o StringFormat() o printf() para lograr esto, dependiendo de lo que necesite. Este es un enfoque más flexible.
Recuerde que el valor real y la forma en que ese valor se muestra no tienen que ser los mismos. Nunca podrá almacenar exactamente 0,07:
printf("%.24f",myVal);
Result: 0.070000000000000006661338
Tal vez sería mejor establecer exactamente lo que usted está buscando para lograr.
...
Wow, agradable a usted lo escribió, casi entiendo como su comentario.
Así que voy a escribir un nuevo comentario, pronto.
//--- segunda vez editado
Como he mencionado que no necesito LotSize y LotStep muestra a la derecha sólo en la pantalla, necesito LotSize y LotStep podría mostrar lo mismo en todas partes.
Sólo me preocupa eso.
Bueno, si se trata de un loteamiento dinámico siempre se puede conectar una caja de cambios simple.
double Lots;
Balance=AccountInfoDouble(ACCOUNT_BALANCE);
if(Balance>10000)
{Lots=10;Print(" Gear Two");}
if(Balance>100000)
{Lots=100;Print(" Gear Three");}
if(Balance>1000000)
{Lots=1000;Print(" Gear Four");}
if(Balance>10000000)
{Lots=10000;Print(" Gear Five");}
if(Balance<10000000)
{Lots=1000;Print(" Gear Four");}
if(Balance<1000000)
{Lots=100;Print(" Gear Three");}
if(Balance<100000)
{Lots=10;Print(" Gear Two");}
if(Balance<10000)
{Lots=1;Print(" Gear One");}
if(Balance>1000000000)
{Lots=0;}
Necesito publicar parte de mi EA con usted, así que espero que le ayudará a entender más claramente a mí.
Por lo tanto, necesito saber es que un buen código o qué?
Por favor, dame un buen consejo (claramente) o ayuda, gracias de antemano.
const long & lparam , // Parameter of type long event
const double & dparam , // Parameter of type double event
const string & sparam // Parameter of type string events
)
{
_lotCalc();
//-------Process Button---------------------------------------------------------|
if ( sparam == _btnLotMinus )
{
ObjectSetInteger( 0, _btnLotMinus, OBJPROP_STATE, false );
_lotSize -= _lotStep;
if ( NormalizeDouble( _lotSize, 2 ) <= 0 ) _lotSize = _lotMin;
_calcUpdade( CALC_CHANGE_LOT );
Print( " | Lot: ", _lotSize );
return;
} //---if Close
// ...
}
double _lotCalc()
{
//---
_lotMin = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_MIN );
_lotMax = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_MAX );
_lotStep = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_STEP );
//---
return( NormalizeDouble( _lotSize, 2 ) );
}
Necesito publicar parte de mi EA con usted, así que espero que le ayudará a entender más claramente a mí.
Entonces, necesito saber si es un buen código o qué?
Por favor, dame un buen consejo (claramente) o ayuda, gracias de antemano.
Tarde en la noche, no compilado, no probado.
No podemos ver dónde estableces primero _lotSize... recuerda que tendrás que asegurarte de que _lotSize es siempre un múltiplo de _lotStep.
IMHO sería mejor si mantuvieras todos tus cálculos de lote juntos, en lugar de dividirlos entre OnChartEvent() y _lotCalc(). Una función que compruebe min / max / step y haga el incremento / decremento.
const long & lparam , // Parameter of type long event
const double & dparam , // Parameter of type double event
const string & sparam // Parameter of type string events
)
{
_lotCalc();
//-------Process Button---------------------------------------------------------|
if ( sparam == _btnLotMinus )
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
_lotSize = fmax(_lotMin, _lotSize-_lotStep);
_calcUpdade( CALC_CHANGE_LOT );
printf( " | Lot: %.2f ", _lotSize );
return;
} //---if Close
// ...
}
void _lotCalc()
{
//---
_lotMin = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_MIN );
_lotMax = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_MAX );
_lotStep = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_STEP );
//---
}
A última hora de la noche, sin compilar, sin probar.
No podemos ver donde se establece primero _lotSize ... recuerde que usted tendrá que asegurarse de que _lotSize es siempre un múltiplo de _lotStep.
IMHO sería mejor si mantuvieras todos tus cálculos de lote juntos, en lugar de dividirlos entre OnChartEvent() y _lotCalc(). Una función que compruebe min / max / step y haga el incremento / decremento.
Eso me ayudó mucho, eso significa que resolvió mis problemas de lotSize y losStep.
Muchas gracias hombre.
#Lote 0 (cero) & (entre el problema resuelto del tamaño del lote y el paso del lote) - Cerrado
Sí, olvidé el código de lotSize, así que lo uso en la funcióninit.
¿Es un buen lugar para _lotSize?
Gracias.
{
_pip = Point;
if( Digits == 0 || Digits == 2 || Digits == 3 || Digits == 5 ) _pip = 10 * Point;
_lotSize = _lotValue * MarketInfo( Symbol(), MODE_MINLOT );
//...
}