Cálculo correto do lote a partir da % do depósito - página 4

 

Obrigado a todos por sua ajuda e participação... Aqui está o resultado do meu "sofrimento".

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;

}

Não parece muito difícil, mas eu não poderia ter feito isso sem aconselhamento.

 

double lotCount=currMove/(pipsLoss*MarketInfo(currName,MODE_TICKVALUE));//então o próprio cálculo do lote é realizado

isto é o mais legal que há... e agora contando

dupla correnteMove=deposSize*proc/100 = 1*100/100 = 1; temos 1 libra

currentName = "EURUSD

MarketInfo(currName,MODE_TICKVALUE) = 0,1 para cotações de cinco dígitos

pipsLoss = 1000

no total, temos

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

tudo parece bem(margem é 68,53 por lote), se pipsLoss = 100, então lotCount = 0,1, mas não há margem suficiente para isso - para 0,1 precisamos de 6,853, e temos 1 libra...

e por outro lado, no primeiro caso, tendo 1 libra e abrindo com uma parada de 1000 pips, teremos 0,31 de uma libra restante

Pergunto-me se isto é dinheiro suficiente para uma ordem com um stop-loss de 1000 pips para sobreviver a um drawdown de 999 pips, duvido que isso aconteça,

ou seja, o preço de 1 pip a 0,01 lote será 0,001, 0,31/0,001 = 310 pips, ou seja, se perdermos 310 pips a ordem será fechada por uma parada (isto se a parada estiver a 0%, o que é errado porque é sempre maior, o que significa que a ordem fechará mais cedo), portanto todos os cálculos são inúteis, pois não nos permitem calcular corretamente o lote correto nas condições dadas, de modo que a ordem funcionaria corretamente em uma parada de perda

 
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);
  }
 

parece que todas as idéias de contar o lote crescem do mesmo lugar e são tão semelhantes aos cogumelos depois da chuva. (Estou me criticando...)

É melhor usar sua cabeça para pensar sobre o que a função de cálculo de lote deve contar e o que ela deve levar em conta, porque as opções propostas não resistem a críticas...

 

Deixe-me explicar para aqueles que são muito dotados... currMove - este é o valor em dinheiro da porcentagem perdida ao passar pipLots pips (2% do depósito para 1000 libras em um curso de 1000 pips (5 dígitos) será de $20) ...

isto é o melhor que se pode fazer... agora faça as contas

dupla correnteMove=deposSize*proc/100 = 1*100/100 = 1; temos 1 libra

isto é, se alguém tem uma perda de 1 dólar nestas condições, só posso admirar o extremo do comerciante - neste caso ele tem 50 libras de depósitos... Se alguém recebe 1 dólar em condição de perda, então só posso admirar o extremismo do comerciante - nesse caso, ele tem um depósito de 50 dólares...

Acho que a seguinte discussão do texto do post é inútil... Porque é desrespeitoso discutir com os trolls, e desatento como eles são.

Sinto-me honrado.

 
gochu:

Deixe-me explicar para aqueles que são muito dotados... currMove - este é o valor em dinheiro da porcentagem perdida ao passar pipLots pips (2% do depósito para 1000 libras em um curso de 1000 pips (5 dígitos) será de $20) ...

isto é o melhor que se pode fazer... agora faça as contas

dupla correnteMove=deposSize*proc/100 = 1*100/100 = 1; temos 1 libra

isto é, se alguém tem uma perda de 1 dólar nestas condições, então só posso admirar o extremo do comerciante - neste caso ele tem 50 libras de depósitos... Se alguém recebe 1 dólar em condição de perda, então só posso admirar o extremismo do comerciante - nesse caso, ele tem um depósito de 50 dólares...

Acho que a seguinte discussão do texto do post é inútil... Porque é desrespeitoso discutir com os trolls, e desatento como eles são.

Honra.

corrente duplaMove=deposSize*proc/100 = 1*100/100 =1 geralmente significa que o depósito é de $1 e não de $50 (e há uma perda de100% )

:-)

 
EverAlex:
corrente duplaMove=deposSize*proc/100 = 1*100/100 =1 geralmente significa que o depósito é de $1 e não de $50 (e há uma perda de100% )

bem.... com um depósito como este, que Deus nos ajude!

 

Vinin:

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


para que serve o Lote ?

e em que é medido o iSL (acho que estava falando de pontos de símbolo comercial acima)?

...(lSL*dLotCost*dLotStep))*dLotStep; significa que não está no símbolo de pontos de comércio (MODE_POINT), mas em LOTSTEPs ?

ou o que ?
 
EverAlex:

para que serve o Lote ?

e em que é medido o iSL (acho que estava falando de pontos de símbolo comercial acima)?

...(lSL*dLotCost*dLotStep))*dLotStep; significa que não está no símbolo de pontos de comércio (MODE_POINT), mas em LOTSTEPs ?

ou o quê?

Este é o cálculo do lote ajustado ao risco. Quanto do depósito você vai perder quando a parada for acionada
 
Vinin:

Este é o cálculo do lote levando em conta o risco. Que parte do depósito será perdida quando a parada for acionada

Portanto, lSL é quantos pontos para SL

Ponto = 0,00001 (entre aspas de 5 dígitos)

dLotStep = 0.01


A fórmula (lSL*dLotCost*dLotStep))*dLotStep está ok

Deve ser algo como (lSL*dLotCost*Point))*dLotStep