Lot size - page 2

To add comments, please log in or register
Keith Watford
Moderator
15052
Keith Watford  

why do you divide the lot by the lotStep and then multiply by the lot step again?

Say the lotstep is 0.1 and your calculated lot size is 0.57

Divide 0.57 by 0.1 and you will get 5.7, mathfloor will return the integer 5

multiply the 5 by 0.1 and you get 0.5 which is a valid lot size whereas 0.57 is not

Luciole
120
Luciole  
Keith Watford:

why do you divide the lot by the lotStep and then multiply by the lot step again?

Say the lotstep is 0.1 and your calculated lot size is 0.57

Divide 0.57 by 0.1 and you will get 5.7, mathfloor will return the integer 5

multiply the 5 by 0.1 and you get 0.5 which is a valid lot size whereas 0.57 is not

Thanks a lot


It seems that I do  not have to do it with the CDouble library.

Could you confirm?


double tp_lots = CDouble::RoundToLots(OrderLots() * 0.80);
nicholi shen
2256
nicholi shen  
Luciole:

Thanks a lot


It seems that I do  not have to do it with the CDouble library.

Could you confirm?


I am the developer of the CDouble library. It's open-source so you can dive into the code for confirmation, but just to save you a bit of time... 

double CDouble::RoundToLots(double number, string symbol = NULL, bool always_return_valid = true)
{
   symbol = symbol == NULL ? _Symbol : symbol;
   double min = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN);
   double max = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX);
   double lots = RoundToStepDown(number, SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP));
   if (always_return_valid && lots < min)
      return min;
   if (always_return_valid && lots > max)
      return max;
   return lots;
}
double CDouble::RoundToStepDown(double number, double step)
{
   return step * floor(number / step);
}
Luciole
120
Luciole  
nicholi shen:

I am the developer of the CDouble library. It's open-source so you can dive into the code for confirmation, but just to save you a bit of time... 

Thanks a lot for your help.

Is is definitely more complex than I expected.


Just to be clear the code that you wrote just above, is the code I have to read to understand how it works?

and not the code I have to write in my own program?


Thanks and Sorry, I am a beginner in coding...

Luciole

Fernando Carreiro
4957
Fernando Carreiro  

Luciole: Thanks a lot for your help. Is is definitely more complex than I expected.

Just to be clear the code that you wrote just above, is the code I have to read to understand how it works?

and not the code I have to write in my own program?

Thanks and Sorry, I am a beginner in coding...

Yes, that is correct. That code which  @nicholi shen has shown you, is the functionality behind the CDouble method "RoundToLots".

It is always good to know how the "engine" works before you "drive a car"!

Luciole
120
Luciole  
Fernando Carreiro:

Yes, that is correct. That code which  @nicholi shen has shown you, is the functionality behind the CDouble method "RoundToLots".

It is always good to know how the "engine" works before you "drive a car"!

Exactly ! and I think I got it !

but I am not really in coding (as you probably already know)

and I was not 100% sure of that.. hi hi !


Thanks a lot for your help :)

Luciole
120
Luciole  

i wrote that in my program:

#include <Double.mqh>


it is written this error message:

can't open "C:\Users\Ludivine\AppData\Roaming\MetaQuotes\Terminal\76AE827A66F7801B9D79B1FD1D2103FD\MQL4\include\Double.mqh" include file TradingGM_FOREX_VENTE.mq4 12 11


Should I download the library somewhere?

nicholi shen
2256
nicholi shen  
Luciole:

i wrote that in my program:

#include <Double.mqh>


it is written this error message:

can't open "C:\Users\Ludivine\AppData\Roaming\MetaQuotes\Terminal\76AE827A66F7801B9D79B1FD1D2103FD\MQL4\include\Double.mqh" include file TradingGM_FOREX_VENTE.mq4 12 11


Should I download the library somewhere?

Yes you need to download this file and copy it to C:\Users\Ludivine\AppData\Roaming\MetaQuotes\Terminal\76AE827A66F7801B9D79B1FD1D2103FD\MQL4\include

Luciole
120
Luciole  
nicholi shen:

Yes you need to download this file and copy it to C:\Users\Ludivine\AppData\Roaming\MetaQuotes\Terminal\76AE827A66F7801B9D79B1FD1D2103FD\MQL4\include

Thanks I did and it is almost working !!! thanks a lot !

I still have some problems when I try to close some part of the lots.


What I initially wrote was :

if (MarketInfo(Symbol(), MODE_BID) <= profit)
               {
                   if(OrderSelect (magic,SELECT_BY_TICKET) == true)
                     lot3 = CDouble::RoundToLots(OrderLots() * 0.8);
                     OrderClose (OrderTicket(), lot3, OrderClosePrice(), 10, Red);
                     return(0);
               }

But then, a warning message saying "return value of 'orderClose' should be checked

So I wrote that, as suggested here

 {
                   if(OrderSelect (magic,SELECT_BY_TICKET) == true)
                     lot3 = CDouble::RoundToLots(OrderLots() * 0.8);
                     OrderClose (OrderTicket(), lot3, OrderClosePrice(), 10, Red);
                     return(0);
               }

Now there is this error message  "'return' - 'void' function returns a value".

I am confused as I do not understand why should I wrote return 0.. or do anything else..

Any suggestions? :)



OrderClose - Trade Functions - MQL4 Reference
OrderClose - Trade Functions - MQL4 Reference
  • docs.mql4.com
OrderClose - Trade Functions - MQL4 Reference
Edith1995
10
Edith1995  

Have picked up a few things here, will come back with questions.

123
To add comments, please log in or register