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

 

Всех благодарю за помощь и участие... выкладываю результат моих "мучений"

double lotSize(double deposSize=1000.0, string currName="USDCHF", double proc=2.0, int pipsLoss=1000)

{

double currMove=deposSize*proc/100;// расчет процента от величины, предположительно, депозита

double lotCount=currMove/(pipsLoss*MarketInfo(currName,MODE_TICKVALUE));//ну а тут и ведеться сам расчет лота

if(lotCount<MarketInfo(currName,MODE_MINLOT))

{

return MarketInfo(currName,MODE_MINLOT);

}

return NormalizeDouble(lotCount,2);

//return lotCount;

}

вроде не так и сложно, но без советов, не справился бы.

 

double lotCount=currMove/(pipsLoss*MarketInfo(currName,MODE_TICKVALUE));//ну а тут и ведеться сам расчет лота

круче не куда.. а теперь считаем

double currMove=deposSize*proc/100 = 1*100/100 =1; имеем 1 бакс

currName = "EURUSD"

MarketInfo(currName,MODE_TICKVALUE) = 0.1 для пятизначных котировок

pipsLoss = 1000

итого имеем

double lotCount=currMove/(pipsLoss*MarketInfo(currName,MODE_TICKVALUE)) = 1 /(1000*0.1) = 0.01

вроде бы все хорошо (маржа составляет 68.53 на лот), если pipsLoss = 100, то lotCount = 0.1, однако маржи на это не хватит - на 0.1 нужно 6.853, а у нас 1 бакс..

а с другой стороны в первом случае, имея 1 бакс и открытие со стопом в 1000 пунктов останется 0.31 от бакса

интересно, а хватит этих средств чтобы ордер со стоплоссом в 1000 пунктов пережил просадку в 999 пунктов сомневаюсь, что это случится,

т.к. стоимость 1 пункта при лоте 0.01 будет 0.001, отсюда 0.31/0.001 = 310 пунктов, т.е. при минусе в 310 пунктов ордер будет закрыт по стопауту (это если стопаут равен 0%, а это не так, т.к. он всегда больше, что значит что ордер еще раньше закроется), таким образом все расчеты ничего не стоят, т.к. они не позволяют корректно посчитать правильный лот при заданных условиях, чтобы ордер корректно отработал по стоплоссу..

 
double CalcLotSize(double Lot,double lRisk,int lSL=0)
  {
   string lSymbol=Symbol();
   double dLotMin    = MarketInfo(lSymbol, MODE_MINLOT        );
   double dLotMax    = MarketInfo(lSymbol, MODE_MAXLOT        );
   double dLotStep   = MarketInfo(lSymbol, MODE_LOTSTEP       );


   double dLot=Lot;

   if(lRisk>0)
     {
      if(lSL>0)
        {
         double dLotCost=MarketInfo(lSymbol,MODE_TICKVALUE);
         dLot=MathRound(AccountFreeMargin()*lRisk*0.01/(lSL*dLotCost*dLotStep))*dLotStep;
        }
      else
        {
         double dLotMargin=MarketInfo(lSymbol,MODE_MARGINREQUIRED);
         dLot=MathRound(AccountFreeMargin()*lRisk *0.01/(dLotMargin*dLotStep))*dLotStep;

        }
     }

   if(dLot<dLotMin) dLot=dLotMin;

   if(dLot>dLotMax) dLot=dLotMax;

   return(dLot);
  }
 

похоже что все идеи посчитать лот растут из одного места и похожи как грибы после дождя.. (обкритиковался прямо таки..)

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

 

поясню для особоодаренных... currMove - это величина в деньгах процента проигранного при прохождении pipLots пунктов (2% от депоза для 1000 баксов при ходе в 1000 пипсов (5 знаков)будет 20$)..

круче не куда.. а теперь считаем

double currMove=deposSize*proc/100 = 1*100/100 =1; имеем 1 бакс

то есть если у кого-то получается 1 бакс проиграша при этих условиях, то мне только остается восхищаться экстремализмом трейдера - в этом случае у него депоз 50 баксов... я, немного ранбше, техзадания тоже вроде написал не особо заумно...лично я после этого не знаю, стоит ли спорить с человеком, что вниманием особо не отличается, что для форекса особенно важно...

последующий дискус по тексту поста считаю бессмысленным... потому как с тролями дискутировать, да еще и такими невнимательными, что себя не уважать.

Честь имею.

 
gochu:

поясню для особоодаренных... currMove - это величина в деньгах процента проигранного при прохождении pipLots пунктов (2% от депоза для 1000 баксов при ходе в 1000 пипсов (5 знаков)будет 20$)..

круче не куда.. а теперь считаем

double currMove=deposSize*proc/100 = 1*100/100 =1; имеем 1 бакс

то есть если у кого-то получается 1 бакс проиграша при этих условиях, то мне только остается восхищаться экстремализмом трейдера - в этом случае у него депоз 50 баксов... я, немного ранбше, техзадания тоже вроде написал не особо заумно...лично я после этого не знаю, стоит ли спорить с человеком, что вниманием особо не отличается, что для форекса особенно важно...

последующий дискус по тексту поста считаю бессмысленным... потому как с тролями дискутировать, да еще и такими невнимательными, что себя не уважать.

Честь имею.

double currMove=deposSize*proc/100 = 1*100/100 =1 вообще означает, что депозит $1, а не $50 (и заложены 100% потери)

:-)

 
EverAlex:
double currMove=deposSize*proc/100 = 1*100/100 =1 вообще означает, что депозит $1, а не $50 (и заложены 100% потери)

ну что же.... с таким депозом, Бог в помощь!

 

Vinin:

double CalcLotSize(double Lot,double lRisk,int lSL=0)


а зачем тут Lot ?

и в чем измеряется iSL (вроде выше речь шла про пункты торгового символа)?

...(lSL*dLotCost*dLotStep))*dLotStep; означает, что это не в пунктах торгового символа (MODE_POINT), а в LOTSTEP'aх ?

или как?
 
EverAlex:

а зачем тут Lot ?

и в чем измеряется iSL (вроде выше речь шла про пункты торгового символа)?

...(lSL*dLotCost*dLotStep))*dLotStep; означает, что это не в пунктах торгового символа (MODE_POINT), а в LOTSTEP'aх ?

или как?

Это расчет лота с учетом риска. Какую часть депозита потеряете при срабатывании стопа
 
Vinin:

Это расчет лота с учетом риска. Какую часть депозита потеряете при срабатывании стопа

Поэтому lSL - это сколько пунктов до SL

Point = 0.00001 (на 5 значных котировках)

dLotStep = 0.01


Формула (lSL*dLotCost*dLotStep))*dLotStep - годится

Должно быть что-то типа (lSL*dLotCost*Point))*dLotStep

Причина обращения: