Лот в % от депозита. - страница 3

 

А по теме кто-нибудь может что сказать?

 
Nickolay72:

А по теме кто-нибудь может что сказать?

Почитайте учебник - там всё есть.

https://book.mql4.com/ru/build/lots

Функция определения количества лотов - Создание обычной программы - Учебник по MQL4
Функция определения количества лотов - Создание обычной программы - Учебник по MQL4
  • book.mql4.com
Функция определения количества лотов - Создание обычной программы - Учебник по MQL4
 
Roman Shiredchenko:

Почитайте учебник - там всё есть.


Читал.Там не объясняется,почему в терминале вместо 0.25 лотов получается 25.0 лотов.

""" 

 bool ModLots()

{
 if(OrdersHistoryTotal()==0)
 {
  string Symb =Symbol();
  double FreeMarg =AccountFreeMargin();
  double One_Lot =MarketInfo(NULL,MODE_TICKVALUE);
  double Step =MarketInfo(NULL,MODE_LOTSTEP);
  double Min_Lot =MarketInfo(NULL,MODE_MINLOT);
  double Max_Lot =MarketInfo(NULL,MODE_MAXLOT);
  double lot =MathFloor((FreeMarg*Risk/100/One_Lot/Step)*Step);
  if(lot<Min_Lot) Lot=Min_Lot;
  if(lot>Max_Lot) Lot=Max_Lot;
 }

 return(true);

Вот так вот правильно.Работет.Но в тестере ошибка 134.Не пойму как исправить.На евро-долларе при 1000 в кармане выдает 25.0 лотов,хотя на калькуляторе получается 0.25,как и нужно.Где косяк,как получить правильное значение в советнике??? 

  

 
Nickolay72:

Читал.Там не объясняется,почему в терминале вместо 0.25 лотов получается 25.0 лотов.

""" 

 bool ModLots()

{
 if(OrdersHistoryTotal()==0)
 {
  string Symb =Symbol();
  double FreeMarg =AccountFreeMargin();
  double One_Lot =MarketInfo(NULL,MODE_TICKVALUE);
  double Step =MarketInfo(NULL,MODE_LOTSTEP);
  double Min_Lot =MarketInfo(NULL,MODE_MINLOT);
  double Max_Lot =MarketInfo(NULL,MODE_MAXLOT);
  double lot =MathFloor((FreeMarg*Risk/100/One_Lot/Step)*Step);
  if(lot<Min_Lot) Lot=Min_Lot;
  if(lot>Max_Lot) Lot=Max_Lot;
 }

 return(true);

Вот так вот правильно.Работет.Но в тестере ошибка 134.Не пойму как исправить.На евро-долларе при 1000 в кармане выдает 25.0 лотов,хотя на калькуляторе получается 0.25,как и нужно.Где косяк,как получить правильное значение в советнике??? 

  

Ещё раз по шагам всё проверьте. Там всё правильно написано и расписано.

Калькулятор - ф  топку. Он от лукавого. :-)

 
bool ModLots()
{
 if(OrdersHistoryTotal()==0)
 {
  int Pl =AccountLeverage();
  double FreeMarg =AccountFreeMargin();
  double One_Lot =MarketInfo(NULL,MODE_TICKVALUE);
  double Step =MarketInfo(NULL,MODE_LOTSTEP);
  double Min_Lot =MarketInfo(NULL,MODE_MINLOT);
  double Max_Lot =MarketInfo(NULL,MODE_MAXLOT);
  double lot =MathFloor((FreeMarg*Risk/100/One_Lot/Step/Pl)*Step);
  if(lot<Min_Lot) Lot=Min_Lot;
  if(lot>Max_Lot) Lot=Max_Lot;
 }
 return(true);

}

Вот верное решение.По крайней мере результат в отладке 0.01 лот. 

 
Nickolay72:

А по теме кто-нибудь может что сказать?

А что, есть кто будет читать?
 
Dmitry Fedoseev:
А что, есть кто будет читать?
А что,это форум для почитать ,а не помочь?Может тогда переименовать в литературный?
 
Nickolay72:
А что,это форум для почитать ,а не помочь?Может тогда переименовать в литературный?
Переименуйте может быть и поможет.
 

видимо математику тут плохо знают или заниматься её и думать никто не хочет :-)

намекаю - устанавливать лотность в прямой пропорции от текущего баланса это безумие которое в большинстве случаев ведёт к потере депозита..

 
в этой строке double lot =MathFloor((FreeMarg*Risk/100/One_Lot/Step)*Step); 100 замените на 10000
Причина обращения: