[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 149

 

Favor avisar um novato, AccountBalance() - ele mostra a quantidade de fundos no saldo, mas eu preciso calcular meu saldo calculado (calc_balance),

Este saldo é simples, mas ainda não posso escrevê-lo, há uma quantidade total de ordens em aberto e pendentes (Orderstotal), por exemplo 3 ordens, o risco máximo por uma posição em aberto é de 2%,

para abrir outra negociação, preciso calcular o risco máximo (2%) do saldo calculado, ou seja, a lógica da fórmula grosso modo seria: calc_balance=AccountBalance()-2%-2%-2%-2%,

Ou seja, uma subtração consistente - mas como escrevê-la em código ainda não teve sucesso, espero sua ajuda.

Obrigado de antemão!

 
Você pode me dizer como os Fundos (AccountEquity() ) e as Garantias (AccountMargin() ) são separados para posições de Compra e Venda?
 
T-G:
Você pode me dizer como os Fundos (AccountEquity() ) e as Garantias (AccountMargin() ) são separados para posições de Compra e Venda?
AccountEquity() só é possível para sua conta e AccountMargin() com suas condições veja as muito "Funções Úteis" de Kim!
 
Cavalheiros, alguém pode aconselhar um indicador ou um Expert Advisor, expondo os níveis de apoio e resistência em D1, sem atrasos de preferência))))
 
Top2n:
Cavalheiros, alguém pode aconselhar um indicador ou um Expert Advisor, expondo os níveis de apoio e resistência em D1, sem atrasos de preferência))))
Em busca de: DailyPivotPoints
 

Boa tarde a todos, estou tendo um problema e não consigo descobrir o que é.


Há duas funções dadas. Se eu chamar 1, então nada funciona. No segundo caso, tudo funciona. Por favor, informe qual é o erro?

Agradecemos antecipadamente!

int OrderBuy(double pLots, string pComment, int pMagic, int pDatetime, color pColor)
{
   int ticket = 0;
   int err = 0;
   int c = 0;
   int NumberOfTries = 100;
   for (c = 0; c < NumberOfTries; c++) 
     {
         RefreshRates();
         ticket = OrderSend(Symbol(), OP_BUY, pLots, Ask, 0, Ask-0.0005, Ask+0.0005, pComment, pMagic, pDatetime, pColor);
         err = GetLastError();
         if (err == 0/* NO_ERROR */) break;
         if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break;
         Sleep(5000);
      }
      return(ticket);

}


int OrderSell(double pLots, string pComment, int pMagic, int pDatetime, color pColor)
{
   int ticket = 0;
   int err = 0;
   int c = 0;
   int NumberOfTries = 100;
   
   for (c = 0; c < NumberOfTries; c++) 
   {
         RefreshRates();
         ticket = OrderSend(Symbol(), OP_SELL, pLots, Bid, 0, Bid+0.0005, Bid-0.0005, pComment, pMagic, pDatetime, pColor);
         err = GetLastError();
         if (err == 0/* NO_ERROR */) break;
         if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break;
         Sleep(5000);
    }
    return(ticket);

}





//вызовы функций

ticket = OrderBuy(lot, "---"+count+" ---", MagicNumber, 0, HotPink);
         Print(ticket+":тикет");//здесь выдает -1
         if (ticket < 0) 
               {
                  Print("Error: ", GetLastError());//здесь выдает "0";
                  return (0);
               } 




ticket = OrderSell(lot, "---"+count+" ---", MagicNumber, 0, HotPink);
         Print(ticket+":тикет");
         if (ticket < 0) 
               {
                  Print("Error: ", GetLastError());
                  return (0);
               } 
 
Se você quiser manter dentro dos cálculos do terminal, a maneira mais fácil é subtrair do que você tem o que resta se você abrir uma ordem apropriada:
double ld_MarginPosition = AccountFreeMargin() - AccountFreeMarginCheck();
 
arabon:

Boa tarde a todos, estou tendo um problema e não consigo descobrir o que é.


Há duas funções dadas. Se eu chamar 1, então nada funciona. No segundo caso, tudo funciona. Por favor, informe qual é o erro?

Agradecemos antecipadamente!


Função GetLastError() que em OrderSell e OrderBuy em loop, redefine o valor do erro (ver ajuda em GetLastError ATTENTION), portanto

Print("Error: ", GetLastError());

Tente imprimir diretamente no laço, então você verá onde o pedido não abre devido a um erro.

 

Eu fiz um indicador simples que "vira" o instrumento. Às vezes, para percepção é mais fácil ver um par ao contrário, e o olho fica "lavado" ao olhar para a mesma imagem. Eu nunca li de arquivo (eu nunca sequer tentei trabalhar com arquivo), eu posso exibir um gráfico completo, alguém tem alguma idéia?


Arquivos anexados:
converter.mq4  2 kb
 

Ainda não a encontrei, nem por busca, nem entre as funções de Kim.

Como calcular corretamente a margem para pedidos abertos separadamente?

Eu costumava fazer isso desta maneira:

в цикле
if (OrderType() == OP_BUY ) {  
   MarginBuy += (OrderOpenPrice()*OrderLots()/AccountLeverage())*MarketInfo(Symbol(), MODE_LOTSIZE);
}
         
if (OrderType() == OP_SELL ) {  
   MarginSell += (OrderOpenPrice()*OrderLots()/AccountLeverage())*MarketInfo(Symbol(), MODE_LOTSIZE);
}

Eu tenho um valor diferente do que o que o terminal mostra

Se você quiser se encaixar nos cálculos do terminal, a maneira mais fácil é subtrair do que você tem o que resta se você abrir o pedido correspondente:
double ld_MarginPosition = AccountFreeMargin() - AccountFreeMarginCheck();


Não se pode simplesmente subtraí-lo. Preciso de um cálculo separado para cada direção.

Razão: