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

 
7bec:

mas certamente deveria ser AccountBalance e não AccountFreeMargin aqui, então de repente o especialista não está trabalhando em um lote?

Você pensou muito antes de fazer uma pergunta a uma criança de quatro anos? Você realmente acha que ele vai lhe responder?
 
zoritch:

Você pensou muito antes de fazer uma pergunta a uma criança de quatro anos? Você realmente acha que ele lhe responderá?
E se você tiver sorte?
 
7bec:

mas certamente deveria ser AccountBalance e não AccountFreeMargin aqui, então de repente o especialista não está trabalhando em um lote?

Você não deve usar esta função, quero dizer toda a função aqui que eu gostei no verão de 2010. Porque pode ser impresso de uma maneira melhor
 
wenay:

Você não deve usar esta função, quero dizer, toda a função aqui que eu gostei no verão de 2010. Porque há melhores maneiras de imprimir


Por exemplo... Pelo que encontrei na rede durante a noite, eu gostei mais desta.

Claro que qualquer código pode ser aperfeiçoado ao infinito, mas o melhor é o inimigo do bom ;)

 

Não sou especialista em programação MQL4, por isso procuro algumas dicas.

Este é o terceiro dia que estou coçando a cabeça para escrever um roteiro para o cálculo do lote. Minha idéia é a seguinte: tendo um depósito (condicional) de US$ 1000 o lote será de 0,05 (na verdade dividido por 20000).

Tudo bem quando você trabalha com EURUSD, GBPUSD, AUDUSD, NZDUSD (ou seja, compra na moeda do depósito) .... Não sei como conseguir muito por USDJPY (ou USDRUR)... Não sei como conseguir muito em USDJPY... Se estou entediado, o que estou perdendo????, me diga onde procurar algo mais.

 
gochu:

Não sou especialista em programação MQL4, por isso procuro algumas dicas.

Este é o terceiro dia que estou coçando a cabeça para escrever um roteiro para o cálculo do lote. Minha idéia é a seguinte: tendo um depósito (condicional) de US$ 1000 o lote será de 0,05 (na verdade dividido por 20000).

Tudo bem quando você trabalha com EURUSD, GBPUSD, AUDUSD, NZDUSD (ou seja, compra na moeda do depósito) .... Como faço para calcular o lote para CADJPY (ou USDRUR)? 1000 libras (por hoje) se transformam em 113.000 ienes ou 38700 rublos, não serão 5,65 e 0,19 lotes nesse caso ... Estou trabalhando demais, o que estou perdendo???? avise para onde ir ... Deixe sua brincadeira e seu trolling para mais tarde!


Veja o problema de um ângulo ligeiramente diferente: usar um lote equivalente a uma certa quantia de dinheiro na moeda do depósito.

Aqui está um roteiro para calcular o tamanho do lote, dependendo do tamanho do contrato. O tamanho do contrato é definido na moeda do depósito.

Arquivos anexados:
 

Abaixo está minha forma de calcular o lote para uma troca (código antes da atualização da MQL4, portanto sem #propriedade estrita):

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 -----
 

o TradedLotFunc() sempre retorna mais que zero?

Se não, então o código se transforma em uma besteira se(Deal_f<=0, 0) retornar(MinLot_f); - você é membro de um partido? ...e metralhadora atirando novamente...

E o resto é ainda mais engraçado se(TradedLot<=MinLot_f) retornar(MinLot_f) ; - Você é um homem de festa? ...e a metralhadora explodiu novamente...

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

em geral, se assumirmos que a função funciona corretamente, mal é suficiente para abrir a primeira e única ordem em uma conta comercial...

Dificilmente porque não leva em conta nem as posições abertas existentes nem a perda da ordem a ser aberta, ou seja, é uma versão de estudante

E nenhuma pessoa sã usaria essa bondade ao negociar em uma conta real.

 

Obrigado pelas dicas, mas eu não formulei minha pergunta corretamente.... Quero basear meus cálculos na quantidade de dinheiro perdido/roubado. Obviamente, as garantias para o euro.quid e a libra esterlina são diferentes, mas não é exatamente a isso que eu quero chegar. O ideal seria que eu tivesse uma função que tomasse parâmetros como entrada:

1- moeda de depósito (vou verificar as libras esterlinas e o euro),

2 - Valor do depósito (1000)

3 - meu par de moedas comerciais (gostaria de verificar CADJPY e USDCHF)

4 - meu percentual de levantamento de depósito (vamos assumir 2%) e

5- um certo número de pontos (100 pips para plataformas de 4 dígitos e 1000 para plataformas de 5 dígitos).

Parâmetro de saída Eu quero obter o tamanho do lote.

Ou seja, (tudo está claro para pares com aspas inversas, EURUSD, GBPUSD, AUDUSD, NZDUSD, ou seja, se a moeda de cotação for a moeda do depósito)... a fim de

em um depósito de 1000 libras, eu perco / ganho 2% (ou seja, 20 libras) quando a moeda passa de 100(4 dígitos)/1000 pips (5 dígitos), eu tenho que usar lote 0,02.

(Quero repetir que eu deveria usar mais dinheiro para negociar GBPUSD do que para EURUSD, ou especialmente NZDUSD, mas minha pergunta não é sobre o uso de dinheiro, mas sobre perda nominal e/ou lucro ... por favor, me avise ... estou perdendo a cabeça ... estou trabalhando com este problema há menos de uma semana). Cheguei ao ponto de ter que calcular o valor da perda nas cotações da moeda ... mas como transformá-la (a perda) no desejado eu muito da moeda do depósito..... tudo aqui eu tropeço ... Obrigado pela ajuda!

 
gochu:

Obrigado, pelas dicas, mas eu não formulei corretamente minha pergunta.... Quero calcular o lote com base na quantidade de dinheiro perdido/roubado. ...

Veja a função https://docs.mql4.com/ru/marketinformation/marketinfo com o identificador de consulta MODE_TICKVALUE

Razão: