Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Справочник MQL5 доступен на 8 языках. Изучай MQL5 на удобном тебе языке!
Леонид
1782
Леонид 2011.07.24 13:42  
индикатор Андрея Георгиевича (комментарии не наши)
Файлы:
Kirill
6
Kirill 2011.07.24 16:02  
Roman.:


Попробуйте в этом участке кода - делить не на 10, но на 100...

И здесь - посмотрите торговые условия - какое количество мин. лот возможно приобрести на данном, как у Вас типе торгового счета - например, если 5 лот, то максимум будет не 1000, но 500... Как то так... поправьте и эти значения переменных:

Пробовал делить на 100, в итоге получается вместо 0.50 лота на 10000 депозита при дельте 500, 0.05 лота на те же 10000, дельта 500. Если сделать при этом дельту в 50, то получится если делить на 10, то лот 1.90, если делить на 100, то 0.19 (скорость нарастания в обоях случаях та же самая что в 0.50/0.05 что в 1.90/0.19). Из этого могу сделать вывод что не дельта и не деление на 10 или 100 мешают высчитыванию лота в 0.01 а что-то другое...

Думал найду ответ в индикаторе Андрея Георгиевича который скинули на следующей странице. Но после того как почитал комментарии к коду и посмотрел сам индикатор в который можно вписать лишь одну переменную (депо) (которая и не депо и не дельта). Понял что нет(

Роман
7939
Роман 2011.07.24 16:09  
Kirus777:

Пробовал делить на 100, в итоге получается вместо 0.50 лота на 10000 депозита при дельте 500, 0.05 лота на те же 10000, дельта 500. Из этого могу сделать вывод что не дельта и не деление на 10 или 100 мешают высчитыванию лота в 0.01 а что-то другое...

Поставьте Дельту 100...будет Вам увеличение на 0,01 лота.

И здесь ставите 0,01...вместо 0,1.

extern double Lots        = 0.01;  // Фиксированный размер лота

Дельта лежит в основе изменений. Это - единственная варьируемая константа в уравнении, которую пользователь свободно изменяет в соответствии со своим методом и/или стилем торговли. Также дельта может изменять динамику исхода. Общее правило такое: чем меньше дельта, тем более агрессивным может быть управление капиталом, а чем дельта больше, тем более консервативным становится метод.

Kirill
6
Kirill 2011.07.24 17:11  
Roman.:

Поставьте Дельту 100...будет Вам увеличение на 0,01 лота.

И здесь ставите 0,01...вместо 0,1.

Дельта лежит в основе изменений. Это - единственная варьируемая константа в уравнении, которую пользователь свободно изменяет в соответствии со своим методом и/или стилем торговли. Также дельта может изменять динамику исхода. Общее правило такое: чем меньше дельта, тем более агрессивным может быть управление капиталом, а чем дельта больше, тем более консервативным становится метод.

У меня всегда там стояло 0.01

Дельта на сколько мне известно задается в единицах депозита (в моем случае в USD).

Книгу читал, матчасть знаю, программировать не умею, в коде разбираюсь со словариком).

Проблема в том что поставь я дельту, 500, 100, или 50. Первый лот на тестере будет 0.50, 1.30 или 1.90 на депозите в 10000. А подели я не на 10, а на 100 (в моменте который вы указали до этого). То будет 0.05 0.13 и 0.19.


Vasiliy Sokolov
20257
Vasiliy Sokolov 2011.07.24 17:29  
Более подробно о методе Райана Джонса можно почитать тут. Там же находятся комментарии, по тому как работает эта функция.
double get_mmfp_lot()
{
   double _profit;
   double d, x;
   //for example _balance=11375.03; 
   _profit=AccountBalance()-begin_balance;
   //_profit=AccountProfit();
   if(_profit<=0)return(1.0*mm_steep);
   d=(_profit/(mm_delta)/*agressive*/);
   d=d*2.0;
   x=(1.0+MathSqrt(1+4.0*d))/2; //Формулу НЕ ИЗМЕНЯТЬ!!!
   x=MathFloor(x);
   return(x*mm_steep);
}
Shniperson
842
Shniperson 2011.07.24 18:24  

А как для тупых это можно кодом сделать ?

вот у меня Lots = AccountFreeMargin() /10000; (получается что при 5000 депо лот = 0.5)

Вот как эту формулу можно вписать сюда попроще? одной строкой заместо AccountFreeMargin() /10000 ??

Роман
7939
Роман 2011.07.24 18:31  
Shniperson:

А как для тупых это можно кодом сделать ?

вот у меня Lots = AccountFreeMargin() /10000; (получается что при 5000 депо лот = 0.5)

Вот как эту формулу можно вписать сюда попроще? одной строкой заместо AccountFreeMargin() /10000 ??

//+------------------------------------------------------------------+
//|                                                       b-Lots.mqh |
//|                                           Ким Игорь В. aka KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//|  21.12.2005  Библиотека функций расчёта размера лота.            |
//+------------------------------------------------------------------+

//------- Внешние параметры модуля -----------------------------------
extern string _Parameters_b_Lots = "---------- Параметры модуля расчёта лота";
extern int LotsWayChoice  = 0;    // Способ выбора рабочего лота:
                                  //  0-фиксированный,
                                  //  1-процент от депозита,
                                  //  2-фиксированно-пропорциональный,
                                  //  3-фракционно-фиксированный,
extern double Lots        = 0.1;  // Фиксированный размер лота
extern int LotsPercent    = 10;   // Процент от депозита
extern int LotsDeltaDepo  = 500;  // Коэффициент приращения депозита
extern int LotsDepoForOne = 500;  // Размер депозита для одного минилота
extern int LotsMax        = 1000; // Максимальное количество минилотов


//+------------------------------------------------------------------+
//| Главная функция получения размера лота (вызывается из советника) |
//+------------------------------------------------------------------+
double GetSizeLot()
{
  double dLot;

  if (LotsWayChoice==0) dLot=Lots;

  // фиксированный процент от депозита
  if (LotsWayChoice==1)
  {
    dLot=MathCeil(AccountFreeMargin()/10000*LotsPercent)/10;
  }

  // фиксированно-пропорциональный
  if (LotsWayChoice==2)
  {
    int k=LotsDepoForOne;
    for (double i=2; i<=LotsMax; i++)
    {
      k=k+i*LotsDeltaDepo;
      if (k>AccountFreeMargin())
      {
        dLot=(i-1)/10000; break;
      }
    }
  }

  // фракционно-фиксированный
  if (LotsWayChoice==3)
  {
    dLot=MathCeil((AccountFreeMargin()-LotsDepoForOne)/LotsDeltaDepo)/10;
  }

  if (dLot<0.1) dLot=0.1;
  return(dLot);
}
//+------------------------------------------------------------------+
Попробуйте так - Ваш вариант ММ № 2.
/ /123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий