Problem with opening code of operations.

 

Hello everyone!

          I need help, in the attached code I use it to calculate the necessary lotage, the problem is that the resulting value comes out with a very long number and I have not been able to cut it to only 4 characters, that is "0.07", I have tried it with a balance of €2048 and the result is always 0.07000000000001, can you help me?

double  Lotaje5  = DoubleToString(AccountBalance()*0.5/(StopLoss*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE))/100,2);
 
Manuel de los Heros Soler:

Hello everyone!

          I need help, in the attached code I use it to calculate the necessary lotage, the problem is that the resulting value comes out with a very long number and I have not been able to cut it to only 4 characters, that is "0.07", I have tried it with a balance of €2048 and the result is always 0.07000000000001, can you help me?

Have you tried NormalizeDouble() instead of DoubleToString() ?


https://www.mql5.com/en/docs/convert/normalizedouble

Documentation on MQL5: Conversion Functions / NormalizeDouble
Documentation on MQL5: Conversion Functions / NormalizeDouble
  • www.mql5.com
NormalizeDouble - Conversion Functions - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 
double  Lotaje5  = DoubleToString(AccountBalance()*0.5/(StopLoss*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE))/100,2);

Risk depends on your initial stop loss, lot size, and the value of the symbol. It does not depend on margin and leverage. No SL means you have infinite risk. Never risk more than a small percentage of your trading funds, certainly less than 2% per trade, 6% total.

  1. You place the stop where it needs to be — where the reason for the trade is no longer valid. E.g. trading a support bounce, the stop goes below the support.

  2. AccountBalance * percent/100 = RISK = OrderLots * (|OrderOpenPrice - OrderStopLoss| * DeltaPerLot + CommissionPerLot) (Note OOP-OSL includes the spread, and DeltaPerLot is usually around $10/PIP but it takes account of the exchange rates of the pair vs. your account currency.)

  3. Do NOT use TickValue by itself - DeltaPerLot and verify that MODE_TICKVALUE is returning a value in your deposit currency, as promised by the documentation, or whether it is returning a value in the instrument's base currency.
              MODE_TICKVALUE is not reliable on non-fx instruments with many brokers - MQL4 programming forum (2017)
              Is there an universal solution for Tick value? - Currency Pairs - General - MQL5 programming forum (2018)
              Lot value calculation off by a factor of 100 - MQL5 programming forum (2019)

  4. You must normalize lots properly and check against min and max.

  5. You must also check FreeMargin to avoid stop out

  6. For MT5, see 'Money Fixed Risk' - MQL5 Code Base (2017)

Most pairs are worth about $10 per PIP. A $5 risk with a (very small) 5 PIP SL is $5/$10/5 or 0.1 Lots maximum.

 
R4tna C # :

¿Has probado NormalizeDouble() en lugar de DoubleToString() ?


https://www.mql5.com/en/docs/convert/normalizedouble

¡Hola R4tna C # !

Lo he intentado ahora con este código y el valor de 0.070000000000001 continúa.



double  balance = NormalizeDouble(AccountBalance(),0);
double  Lotaje5  = NormalizeDouble(balance*0.5/(StopLoss*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE))/100,2);
Problem with opening code of operations.
Problem with opening code of operations.
  • 2022.05.12
  • www.mql5.com
Hello everyone...
 
William Roeder #:

Risk depends on your initial stop loss, lot size, and the value of the symbol. It does not depend on margin and leverage. No SL means you have infinite risk. Never risk more than a small percentage of your trading funds, certainly less than 2% per trade, 6% total.

  1. You place the stop where it needs to be — where the reason for the trade is no longer valid. E.g. trading a support bounce, the stop goes below the support.

  2. AccountBalance * percent/100 = RISK = OrderLots * (|OrderOpenPrice - OrderStopLoss| * DeltaPerLot + CommissionPerLot) (Note OOP-OSL includes the spread, and DeltaPerLot is usually around $10/PIP but it takes account of the exchange rates of the pair vs. your account currency.)

  3. Do NOT use TickValue by itself - DeltaPerLot and verify that MODE_TICKVALUE is returning a value in your deposit currency, as promised by the documentation, or whether it is returning a value in the instrument's base currency.
              MODE_TICKVALUE is not reliable on non-fx instruments with many brokers - MQL4 programming forum (2017)
              Is there an universal solution for Tick value? - Currency Pairs - General - MQL5 programming forum (2018)
              Lot value calculation off by a factor of 100 - MQL5 programming forum (2019)

  4. You must normalize lots properly and check against min and max.

  5. You must also check FreeMargin to avoid stop out

  6. For MT5, see 'Money Fixed Risk' - MQL5 Code Base (2017)

Most pairs are worth about $10 per PIP. A $5 risk with a (very small) 5 PIP SL is $5/$10/5 or 0.1 Lots maximum.

Thank you very much but that is not what I was asking, regarding your concept of risk and monetary management, you are completely wrong, your concept is the most kamikaze I have ever heard, the ideal management has always been to lose the minimum and win the maximum , that is, 0.5% of the balance per maximum operation and, if possible, work with lots of three operations of 0.15%. Use 2% with 20 operations that you make and lose, you have lost not 2% of your capital, but 10% and that in three months is bankrupt.

 
SOLVED, this is the code.
double  Lotaje51  =  NormalizeDouble(balance*0.5/(StopLoss*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE))/100,2);
string  Lotaje5 = DoubleToString(Lotaje51,2);
 
Manuel de los Heros Soler #: Thank you very much but that is not what I was asking, regarding your concept of risk and monetary management, you are completely wrong, your concept is the most kamikaze I have ever heard, the ideal management has always been to lose the minimum and win the maximum , that is, 0.5% of the balance per maximum operation and, if possible, work with lots of three operations of 0.15%. Use 2% with 20 operations that you make and lose, you have lost not 2% of your capital, but 10% and that in three months is bankrupt.

William is not wrong! He is absolutely correct in regard to how to calculate the risk. You are the one that is misinformed about it. Please read his post again and pay careful attention to every detail as you are making many mistakes in both your calculations and in your code.

 
Manuel de los Heros Soler #:

¡Hola R4tna C # !

Lo he intentado ahora con este código y el valor de 0.070000000000001 continúa.

Please post only in English on this part of the forums. Use the automatic translation tool if needed. Use simple language structure when using mechanical translation. (2013)

Or use the Spanish forum (upper right corner): Español