Правильный расчет лота от % депо - страница 3

 
7bec:

а вот точно здесь должно быть AccountBalance, а не AccountFreeMargin, то вдруг не эксперт не одним лотом работает?

долго думали прежде чем вопрос четырёхлетнему посту задавали ? реально думаете он Вам ответит ?
 
zoritch:

долго думали прежде чем вопрос четырёхлетнему посту задавали ? реально думаете он Вам ответит ?
а вдруг повезет
 
7bec:

а вот точно здесь должно быть AccountBalance, а не AccountFreeMargin, то вдруг не эксперт не одним лотом работает?

Не стоит использовать эту функцию, я про всю тут функцию что мне нравилась летом 2010 года. Т.к. можно напечатать по лучше
 
wenay:

Не стоит использовать эту функцию, я про всю тут функцию что мне нравилась летом 2010 года. Т.к. можно напечатать по лучше


например? из того что было найдено в сети за вечер, эта мне больше всех понравилась.

Конечно любой код можно оттачивать до бесконечности, но лучшее - враг хорошего;)

 

Здравствуйте, не судите строго.. в програмерстве на MQL4 экспертом не являюсь, потому и ищу подсказки...

3-ий день голову ламаю над написанием скрипта для расчета лота, идея моя такова: имея (условно) депоз в 1000$ лот будет 0.05, (фактически деление на 20000)

с этим все нормально, когда работаешь с парами EURUSD, GBPUSD, AUDUSD, NZDUSD (то есть покупаешь в валюте депоза).... а вот как правильно расчитать лот для CADJPY( или же USDRUR).. те самых 1000 баксов превращаются (на сегодня ) в 113000 йиэн или в 38700 рублей, не будет же лот в этом случае 5,65 и 0,19... что-то я заработался,что я упускаю???? подскажитте куда копать.. стёб и тролл оставить на потом!

 
gochu:

Здравствуйте, не судите строго.. в програмерстве на MQL4 экспертом не являюсь, потому и ищу подсказки...

3-ий день голову ламаю над написанием скрипта для расчета лота, идея моя такова: имея (условно) депоз в 1000$ лот будет 0.05, (фактически деление на 20000)

с этим все нормально, когда работаешь с парами EURUSD, GBPUSD, AUDUSD, NZDUSD (то есть покупаешь в валюте депоза).... а вот как правильно расчитать лот для CADJPY( или же USDRUR).. те самых 1000 баксов превращаются (на сегодня ) в 113000 йиэн или в 38700 рублей, не будет же лот в этом случае 5,65 и 0,19... что-то я заработался,что я упускаю???? подскажитте куда копать.. стёб и тролл оставить на потом!


Посмотрите на задачу несколько под другим углом: использовать лот, эквивалентный некоторому объёму средств в валюте депозита.

Вот скрипт для расчёта лота в зависимости от размера контракта. Размер контракта задаётся в валюте депозита.

Файлы:
 

Ниже мой способ расчёта лота для сделки (код перед обновлением MQL4 поэтому без #property strict):

extern double DealLevel = 5.0; // процент свободной маржи для сделки
//---
double LotDeal = NormalizeDouble(TradedLotFunc(DealLevel),2);

//--- TradedLotFunc() - start ----- сама функция
double TradedLotFunc(double Deal_f)
{  
   double MinLot_f  =MarketInfo(Symbol(),MODE_MINLOT);
   double MaxLot_f  =MarketInfo(Symbol(),MODE_MAXLOT);
   double LotStep_f =MarketInfo(Symbol(),MODE_LOTSTEP);
   double LotSize_f =MarketInfo(Symbol(),MODE_LOTSIZE);
   int    Leverage_f=AccountLeverage();
   //---
   int    i, coef; 
   double HighBorder;
   //---
   if(Deal_f<=0.0)  return(MinLot_f);
   if(Deal_f>100.0) Deal_f=100.0;
   double TradedLot=(AccountFreeMargin()*Deal_f/100)*Leverage_f/LotSize_f;
   if(TradedLot<=MinLot_f) return(MinLot_f);
   if(LotStep_f==0.001 || LotStep_f==0.01 || LotStep_f==0.1 || LotStep_f==1.0)
      TradedLot=MathRound(TradedLot/LotStep_f)*LotStep_f;
   else
   {  if(((TradedLot-MinLot_f)/LotStep_f)<=5.0) coef=1;
      else coef=MathRound((TradedLot-MinLot_f)/LotStep_f)-3;
      for(i=0; i<=100; i++)
      {  HighBorder=MinLot_f+(LotStep_f*coef)+(LotStep_f*i);
         if(TradedLot> HighBorder) continue;
         if(TradedLot==HighBorder) break;
         if(TradedLot< HighBorder)
         {  if(MathAbs(HighBorder-TradedLot)<=MathAbs(TradedLot-(HighBorder-LotStep_f)))
            {  TradedLot=HighBorder; break; }
            else
            {  TradedLot=HighBorder-LotStep_f;  break; }
   }  }  }
   if(TradedLot>=MaxLot_f) return(MaxLot_f);
   return(TradedLot);
}
//--- TradedLotFunc() - end -----
 

а у вас TradedLotFunc() всегда больше нуля возвращает ?

если нет, то далее по коду фигня получается if(Deal_f<=0.0) return(MinLot_f); - ты партийный ? ..и пулемет опять застрочил..

а дальше еще веселей if(TradedLot<=MinLot_f) return(MinLot_f); - ты партийный ? ..и пулемет опять застрочил..

---------------------

а вообще, если представить что функция работает правильно, то она едва годится для открытия первого и единственного ордера на торговом счете..

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

и ни один здравомыслящий торгуя на реале это добро использовать не станет..

 

Благодарю, за подсказки, но я не совсем правильно сформулировал свой вопрос.... я хочу отталкивался от количества потеряных/віиранных денег расчитать лот. Очевидно, что залог для евро.бакс и фунт.бакс - разные, но это не совсем то, к чему я хочу прийти. В идеале у меня должна получиться функция, что на вход принимала бы параметры:

1- валюта депозита (проверять буду на баксе и евро),

2- размер депозита (1000)

3- пара, на которой буду торговать (проверять бы хотел CADJPY и USDCHF ),

4- процент просадки депоза (предположим 2%) при прохождении

5- определенного количества пунктов (100 пипсов для 4-разрадный платформ и 1000 для пятизначных).

Выходным параметром хочу получить величину лота.

То есть, (все ясно для пар с обратной котировкой, EURUSD, GBPUSD, AUDUSD, NZDUSD, то есть если валютой котровки будет валюты депозита)... для того, чтоб

при депозите в 1000 баксов, я потерял/выиграл 2%(то есть, 20 баксов) при проходе валюты на 100(4знака)/1000 пипсов (5знаков), я должен использовать лот 0,02.

(повторюсь, понятно, что для торговли по GBPUSD будет использовано больше средств, чем для EURUSD, или тем более NZDUSD, но мне важно не использование средств, а номинальная их потяря/или профит...подскажите что опускаю... голова уже совсем не варит... как ни как без малого неделя, как с этой задачкой маюсь). Я дошел, до того, что дожен расчитать величину потери в валюте котировки.. а вот как дальше ее (потерю) трасформировать в нужный мне лот валюты депоза..... все тут я спекаюсь... Благодарен буду за помощь!

 
gochu:

Благодарю, за подсказки, но я не совсем правильно сформулировал свой вопрос.... я хочу отталкивался от количества потеряных/віиранных денег расчитать лот. ...

Посмотрите функцию https://docs.mql4.com/ru/marketinformation/marketinfo с идентификатором запроса MODE_TICKVALUE