Precisa de uma fórmula de tamanho LOT de gerenciamento de dinheiro baseada em SL e Risco de Conta!

 

Olá, preciso de um código/fórmula que redimensione o tamanho do lote com base no Risco de Conta % calculado pela inclusão do STOPLOSS, e levando em consideração que minha conta está em EUR.

O que eu tenho é isto:

extern double RISK=1;  //1% RISK
double LOT;

LOT = NormalizeDouble(AccountEquity()*RISK/10000,2);

Mas este não considera a perda de estoque.

Então eu encontrei este na busca do google

lot=NormalizeDouble(AccountBalance( )*MaximumRisk/StopLoss/(MarketInfo(Symbol(), MODE_TICKVALUE)),2);

E este aqui

lot = Risk * AccountEquity() / MarketInfo(Symbol(), MODE_TICKVALUE) / Stop;

Mas nada disso funciona, por favor me ajude a consertá-los, ou me dê um melhor, obrigado!

 
  1. Saldo da conta *% = RISK = (OrderOpenPrice - OrderStopLoss)*DIR * OrderLots * DeltaPerlot (Nota OOP-OSL inclui o SPREAD)
  2. NÃO utilize TickValue por si só - DeltaPerlot
  3. Você também deve verificar o FreeMargin para evitar parar
 
   double Spread=MarketInfo(Symbol(),MODE_SPREAD)/Q;
   double Risk=(RiskPercent*AccountEquity())/100;//this means if your balance 1000$ & RiskPercent=10% >> you going to risk 100$
   double lot=Risk/((StopLoss+Spread)*MarketInfo(Symbol(),MODE_TICKVALUE)*Q);//Make Sure to Define Your StopLoss & Q=10 in 5 digits or Q=1 in 4 Digits 
 
yousefh:, leia o comentário no meu DeltaPerlot. NÃO use o valor do tick por si só.
 
yousefh:

Desculpe, não é bom.

WHRoeder:
  1. Saldo da conta *% = RISK = (OrderOpenPrice - OrderStopLoss)*DIR * OrderLots * DeltaPerlot (Nota OOP-OSL inclui o SPREAD)
  2. NÃO utilize TickValue por si só - DeltaPerlot
  3. Você também deve verificar o FreeMargin para evitar parar

Ok, entendo seu ponto de vista, então aqui está minha lógica e cálculo de como eu calculo o RISK %.


Que em código MQL4 se parece com isto:

extern double MYSTOPLOSS = 50;  // CUSTOM SL SIZE IN PIPS AFTER THE STOPLEVEL
extern double  RISK =2; // 2% ACCOUNT RISK

double LOT =(AccountEquity()*RISK)/(100*(MarketInfo(Symbol(),MODE_STOPLEVEL)+MYSTOPLOSS)* Point *100000 );


Um simples 1 forro, nada complicado, agora por favor, ajude-me a inserir o material DELTA de que você tem falado, eu sei que a fórmula não está completa, então, por favor, ajude-me. E por favor, note que minha conta está em EURO, então na maioria dos casos é a moeda básica.

 
Ajude-me por favor rapidamente, eu gostaria de terminar este projeto antes de X-mas :)
 
Proximus: Ajude-me por favor rapidamente, gostaria de terminar este projeto antes de X-mas :)
  1. Falta de planejamento
  2. agora, por favor, ajude-me a inserir essas coisas do DELTA
    Você se preocupou em clicar nos links fornecidos?
 
WHRoeder:

  1. agora, por favor, ajude-me a inserir essas coisas do DELTA
    Você se preocupou em clicar nos links fornecidos?

Sim, eu fiz, mas eu não entendo como você encaixa isso em minha equação, você disse que precisava disso:

  MarketInfo(pair, MODE_TICKVALUE)
           / MarketInfo(pair, MODE_TICKSIZE) 
Mas não entendo como isso ajuda minha equação, pois dividir esses dois números dará um grande número em vez do tamanho do tiquetaque...
 
Proximus:

Sim, eu fiz, mas eu não entendo como você encaixa isso em minha equação, você disse que precisava disso:

Mas não entendo como isso ajuda minha equação, pois dividir esses dois números dará um grande número em vez do tamanho do tiquetaque...

Tente este link: https://www.mql5.com/en/forum/148224.

Talvez olhar para ela de um ângulo diferente possa ajudar.

 
ubzen:

Tente este link: https://www.mql5.com/en/forum/148224.

Talvez olhar para ele de um ângulo diferente possa ajudar.


Pessoal da WTF, não deveria ser TICKVALUE * TICKSIZE em vez de TICKVALUE /TICKSIZE? Eu acho que há um grande erro





Acabei de fazer um indicador rápido que mostra valores separados, acho que o TICKVALUE * TICKSIZE é o apropriado...


E note que a conta demo está em EUR, portanto é a moeda base, enquanto eu fiz o mesmo teste com uma conta em USD e lá o PONTO foi equivalente a TICKVALUE * TICKSIZE porque mede o valor da moeda cotada.

Arquivos anexados:
 

Se eu tiver entendido bem a pergunta, isto fará o trabalho por você.

for( i=0; i<=ot; i++ ) for( z=0; z<=10; z++ )
      {
         if( long_orders_array_ATF[i][z] > 0 )
         for (zz=0; zz<=10; zz++)
         { 
            OrderSelect(zz,SELECT_BY_POS,MODE_TRADES);
            if (OrderTicket()==long_orders_array_ATF[i][z]) zz=ot+2; 
            if (ot+2<=zz)  
            long_potencial_loss = (OrderLots() * (OrderOpenPrice() - OrderStopLoss()))*100000;
            long_sum_potencial_loss = long_sum_potencial_loss + long_potencial_loss;
         }
      }
...

lot_size = ((((free-long_sum_potencial_loss) * percent_depo)/100.0)/pips)/100000 ; }
Razão: