Alerta no indicador. Como inserir o alerta e a seta em seu indicador?
Mercado MQL5. Problema e erros com instalação do Expert Advisor e soluções
Descrição
Neste artigo, explicarei meus métodos para calcular o tamanho do lote com base em uma porcentagem (Risco em %) de Margem Livre em diferentes pares de moedas e vários tipos de depósitos. Autolot ou Lote Dinâmico a partir do saldo. RiskManager. Mostrarei meu código Autolot.
Vamos começar:
Conceitos Básicos:
Primeiro, vamos destacar alguns conceitos utilizados neste cálculo:
Margem Livre ( AccountFreeMargin() ) – fundos que não são utilizados como garantia em posições abertas. A Margem Livre é calculada usando a fórmula: Margem Livre = Saldo Atual do Depósito – Margem Necessária para Posições Abertas. Este indicador determina o número de transações que podem ser abertas no momento atual.
Ask é o preço pelo qual você compra uma certa quantidade de um instrumento financeiro do corretor. O corretor vende para você a esse preço. Ao negociar no mercado Forex, você encontrará esse tipo de preço em todos os lugares: desde o terminal de negociação até relatórios de ações e artigos analíticos sobre mercados financeiros.
Bid é o preço pelo qual você vende uma certa quantidade de um instrumento financeiro para o seu corretor. O corretor compra de você a esse preço. Ao negociar no mercado Forex, você encontrará esse tipo de preço onde quer que ocorram discussões sobre o mercado Forex internacional: desde o terminal de negociação e as taxas de câmbio no site do seu corretor até relatórios de ações e artigos analíticos sobre mercados financeiros internacionais.
Alavancagem é a relação entre o montante da garantia e o valor emprestado. Ao selecionar inicialmente a alavancagem, você escolhe o tamanho da alavancagem, que indica o multiplicador pelo qual o depósito do Cliente será aumentado para realizar operações de negociação no mercado Forex. O Cliente pode selecionar uma alavancagem de 1:1 a 1:500, o que significa que o Cliente pode negociar apenas com seus próprios fundos ou solicitar um aumento em seu depósito de até 500 vezes para entrar no mercado com esse montante. A Alavancagem, como a relação entre o montante com o qual um trader entra no mercado e o tamanho de seu depósito, desempenha um papel crucial no processo de negociação porque permite que um trader aumente significativamente seu capital.
Par de Moedas é a designação de duas moedas que juntas formam uma taxa de câmbio. O par de moedas serve como objeto para transações financeiras. Um par de moedas é denotado pelas designações sucessivas das duas moedas que compõem o par, escritas juntas ou separadas por uma barra na seguinte forma: moeda base / moeda cotada. A moeda base é a primeira moeda que é comprada e vendida, e a moeda cotada é usada para expressar o preço da moeda base. Um par de moedas é o conceito fundamental do mercado de câmbio, presente em todos os lugares sempre que se refere a este mercado: desde relatórios de mercado até o terminal de negociação.
Tamanho do Lote – o volume da moeda base, commodity ou o número de ações especificado na especificação do contrato. O tamanho do lote depende do montante de moeda especificado no contrato e é uma unidade de medida para determinar o tamanho do contrato de negociação. Um lote tem um tamanho específico, que é usado para determinar a quantidade de moeda usada para transações financeiras no mercado Forex. Para executar uma transação, o Cliente determina o tamanho da transação, expresso no número de lotes. O volume de uma transação de negociação indica quanta moeda comporá a transação. Um lote é o tamanho do contrato, uma quantidade fixa de moeda utilizada na negociação Forex.
A taxa de câmbio entre duas moedas é determinada pela interação de oferta e demanda em um momento específico.
Este processo é conhecido como cotação de moedas, e as cotações podem ser diretas ou invertidas.
Uma cotação direta reflete o preço de uma moeda estrangeira em unidades da moeda nacional.
A maioria das taxas de câmbio é expressa como cotações diretas do dólar americano em relação às moedas de vários países.
Por exemplo, USD/UAH—30.70 significa que um dólar americano vale 30.70 hryvnias ucranianas,
e USD/CHF—1.0850 indica que um dólar americano equivale a 1.0850 francos suíços.
Existe também o conceito de taxa de câmbio cruzada, onde o dólar americano não é nem a moeda base nem a moeda cotada.
Exemplos incluem EUR/JPY, GBP/CHF e EUR/GBP.
Aspecto Técnico
- NormalizeDouble – Arredonda um número de ponto flutuante para a precisão especificada.
- MODE_LOTSIZE – Tamanho do contrato na moeda base do instrumento.
- MODE_LOTSTEP – O passo para alterar o tamanho do lote.
- AccountCurrency – Retorna o nome da moeda para a conta atual.
- MathFloor – A função retorna o maior inteiro menor ou igual a x.
Essencial: Para garantir que todos os cálculos sejam precisos, ative todos os símbolos no painel “Market Watch” :
Minha Fórmula de Cálculo para a Moeda da Conta
Minha fórmula de cálculo é a seguinte:
Depósito USD
Depósito USD Cotação Direta ()
Lot = Margem Livre * Risco * Alavancagem / 100 / Tamanho do Contrato
Depósito USD Cotação Inversa()
Lot = Margem Livre * Risco * Alavancagem / Ask / 100 / Tamanho do Contrato
Depósito USD Taxa de Câmbio Cruzada:
Opção 1: Se houver um preço atual da moeda base + USD (por exemplo, se o par de liquidação for AUDCAD, então o preço atual da moeda base = AUDUSD)
Lot = Margem Livre * Risco * Alavancagem / (Preço Atual da Moeda Base + USD) / 100 / Tamanho do Contrato
Opção 2: Se não houver um preço atual da moeda base + USD (por exemplo, CADJPY)
Lot = Margem Livre * Risco * Alavancagem / 100 / Tamanho do Contrato
Depósito EUR
Depósito EUR Cotação Direta
Lot = Margem Livre * Risco * Alavancagem / 100 / Tamanho do Contrato
Depósito EUR Taxa de Câmbio Cruzada:
Preço atual = EUR + moeda cotada (por exemplo, se o par de liquidação for AUDCAD, então o preço atual é moeda cotada = EURAUD)
Lot = Margem Livre * Risco * Alavancagem / (preço atual EUR + moeda cotada) / 100 / Tamanho do Contrato
Depósito UAH e Outros
Depósito UAH Cotação Inversa (por exemplo, USDUAH)
Lot = MathFloor(Margem Livre * Risco * Alavancagem / 100 / Preço Atual / Tamanho do Contrato / Passo do Lot / 20) * Passo do Lot
Depósito UAH Taxa de Câmbio Cruzada (ex., EURGBP)
Preço atual = MarketInfo(StringSubstr(Symbol(), 0, 3) + UAH + StringSubstr(Symbol(), 6), MODE_BID);
if(pr != 0) Lot2 = MathFloor(Margem Livre * Risco * Alavancagem / Preço Atual / 100 / Tamanho do Contrato / Passo do Lot) * Passo do Lot;
else Lot = MathFloor(Margem Livre * Risco * Alavancagem / 100 / Tamanho do Contrato / Passo do Lot) * Passo do Lot;
A ordem dessas funções foi determinada calculando os parâmetros em diferentes depósitos.
Se você tiver sugestões para esses cálculos, por favor, compartilhe suas funções Autolot ao solicitar programação.
Ou Freelance: Programação Personalizada em MetaTrader e MQL! Concluir?
Variáveis Externas Função de Cálculo Autolot:
Lots | Lote fixo para abrir uma posição. |
RiskLotType TypeAutolot | Tipo de Cálculo Autolot: BALANCE (Risco a partir do Saldo) – Autolot é calculado a partir do saldo atual. O cálculo do Lot é baseado no saldo da conta. Se houver posições abertas na conta, o próximo Lot será aproximadamente o mesmo porque o saldo não diminui com o número de posições abertas atuais! FREEMARGIN (Risco a partir da Margem Livre) – O cálculo padrão do Lot a partir da margem livre atual é que quanto mais posições abertas na conta, menor será o Lot calculado para a próxima posição. Isso porque ao abrir uma posição, a margem livre diminui, então cada nova posição aberta tem um Lot menor ao calcular o Autolot. Tipo de Cálculo de Risco para a Opção RiskLot: Modos disponíveis: RiskLotType = 0, // Risco a partir da Margem Livre RiskLotType = 1, // Risco a partir do Saldo |
DynamicLot | Lote dinâmico, Autolot, para uma posição aberta. Você pode ativar o cálculo de lote dinâmico como uma porcentagem da margem livre e outros fatores. Cálculo do Nosso Autolot: Fórmula e código: https://expforex.com/pt/my-autolot-secrets-dynamiclot-autolot/#eb-table-content-4 |
DynamicLotStopLoss | Risco a partir do SL – Calcula o lote automático, levando em consideração o Stop Loss. A perda máxima como uma porcentagem do saldo ao fechar um negócio no Stop Loss. Ao calcular o lote, nosso Expert Advisor considera o stop loss no momento da abertura do negócio. Se o negócio fechar no stop loss, a perda desse negócio será igual a uma porcentagem do saldo no momento da abertura do negócio. Importante! Se o seu stop loss for alterado após a abertura do negócio, o tamanho do lote do negócio não pode ser alterado. Ao fechar o negócio, a perda pode ser maior ou menor. Importante! Se você usar um Trailing Stop, o Stop Loss do negócio muda a cada tick, mas o tamanho do lote não pode ser alterado. Fórmula e código: https://expforex.com/pt/my-autolot-secrets-dynamiclot-autolot/#eb-table-content-5 |
LotBalancePcnt RiskLot LotBalancePercent | Porcentagem para Autolot. A porcentagem para a função de lote dinâmico (Autolot). Se RiskLot = 0, então o LOT da transação (Volume) será calculado de acordo com o parâmetro Lot. Se RiskLot for diferente de 0, então uma transação no terminal do cliente será aberta com um lote como uma porcentagem da margem livre do cliente (Autolot). |
RiskRate | A taxa da sua moeda em relação ao dólar (ou à moeda da sua conta). Por padrão, RiskRate = 0, o que significa que o Expert Advisor tentará encontrar a taxa correta na Market Review. Para que o Autolot funcione bem com todos os pares de moedas, você precisa ativar “Mostrar Todos os Pares de Moeda” no Market Watch. |
MaxLot | O lote máximo que um Expert Advisor pode abrir ao calcular um Autolot e Martingale para a primeira posição principal. |
Martin | Martingale. A multiplicação padrão do lote da última posição fechada com perda. Se Martin = 1, então o martingale não é ativado (Lots Fixos). Se Martin = 0, então o Expert Advisor não pode abrir a próxima posição. Se Martin = 2, então o primeiro lote = 0.1, o segundo lote = 0.2, e assim por diante: 0.4 – 0.8 – 1.6 – 3.2 – 6.4….. Se Martin = 0.5, então o primeiro lote = 1, o segundo lote = 0.5, e assim por diante: 0.25 – 0.125. |
Você precisa de um código?
Cálculo Autolot Função de Código:
input double Lots=0.01; //Lots --> Lote fixo para posições e ordens abertas
input bool DynamicLot=false; //DynamicLot --> Cálculo do lote a partir da margem livre
input bool DynamicLotStopLoss=false; //DynamicLotStopLoss --> Cálculo do lote a partir do StopLoss e da margem livre
input double LotBalancePercent=1; //LotBalancePercent --> Percentual para o cálculo do lote
extern double RiskRate=0; //RiskRate --> Taxa de câmbio do símbolo para a moeda de depósito no cálculo do lote
input double MaxLot=999; //MaxLot --> Lote máximo na abertura de posições
double GetSizeLot(double ll=1) // A função retorna o tamanho do lote
{
string Author = "Autor do template da função: www.expforex.com";
string lotcalc;
double pr;
string Valdepo = AccountCurrency();
// Se MM estiver habilitado, determine o tamanho do lote
double Lot2, MinLots, MaxLots;
int lotdig;
if (MarketInfo(Symbol(), MODE_LOTSTEP) == 0.01) lotdig = 2; else lotdig = 1;
if (Valdepo == "USD")
{
if (StringSubstr(Symbol(), 0, 3) == "USD")
Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else if (StringSubstr(Symbol(), 3, 3) == "USD")
Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / Ask / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else
{
pr = MarketInfo(StringSubstr(Symbol(), 0, 3) + "USD", MODE_ASK);
if (pr != 0)
Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / pr / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else
Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
}
}
if (Valdepo == "EUR")
{
if (StringSubstr(Symbol(), 0, 3) == "EUR")
Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else
{
pr = MarketInfo("EUR" + StringSubstr(Symbol(), 0, 3), MODE_BID);
if (pr != 0)
Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() * pr / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else
Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
}
}
if (Valdepo == "UAH")
{
if (StringSubstr(Symbol(), 0, 3) == "USD")
Lot2 = NormalizeDouble(AccountFreeMargin() / 40 * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else if (StringSubstr(Symbol(), 3, 3) == "USD")
Lot2 = NormalizeDouble(AccountFreeMargin() / 40 * LotBalancePcnt * AccountLeverage() / Ask / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else
{
pr = MarketInfo(StringSubstr(Symbol(), 0, 3) + "USD", MODE_ASK);
if (pr != 0)
Lot2 = NormalizeDouble(AccountFreeMargin() / 40 * LotBalancePcnt * AccountLeverage() / pr / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
else
Lot2 = NormalizeDouble(AccountFreeMargin() / 40 * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig);
}
}
MinLots = MarketInfo(Symbol(), MODE_MINLOT);
MaxLots = MaxLot;
lotcalc = "Autolot=" + Lot2;
if (!DynamicLot) Lot2 = Lots;
if (Lot2 < MinLots) Lot2 = MinLots;
if (Lot2 > MaxLots) Lot2 = MaxLots;
lotcalc = lotcalc + " MinLots=" + MinLots + " LOT=" + NormalizeDouble(Lot2, lotdig);
Print(lotcalc);
return (NormalizeDouble(Lot2, lotdig));
}
Função de Cálculo Stoploss Autolot:
Se você deseja adicionar a funcionalidade de stop loss Autolot ao seu EA, você pode baixar nosso código:
StopLosssd = Stop Loss em pontos
Variáveis Externas:
Lots = 0.1; // Lote fixo
DynamicLotStopLoss = // verdadeiro/falso
LotBalancePcnt (RiskLot) = 20; // % da margem livre
Função:
double GetSizeLotStopLoss(double StopLosssd=1) // A função retorna o tamanho do lote { string Author = "Autor do template da função: www.expforex.com"; string Valdepo = AccountCurrency(); // Se MM estiver habilitado, determine o tamanho do lote double MinLots; int lotdig; if (MarketInfo(Symbol(), MODE_LOTSTEP) == 0.01) lotdig = 2; else lotdig = 1; double Free = AccountFreeMargin(); double LotVal = MarketInfo(Symbol(), MODE_TICKVALUE); // Custo de 1 pip para 1 lote double Min_Lot = MarketInfo(Symbol(), MODE_MINLOT); double Max_Lot = MarketInfo(Symbol(), MODE_MAXLOT); double Step = MarketInfo(Symbol(), MODE_LOTSTEP); double Lot = MathFloor((Free * LotBalancePcnt / 100) / (StopLosssd * LotVal) / Step) * Step; MinLots = MarketInfo(Symbol(), MODE_MINLOT); if (Lot < MinLots) Lot = MinLots; return (NormalizeDouble(Lot, lotdig)); }
Perguntas?
Se você tiver alguma pergunta, por favor, faça-a. Não vendemos um porco em um saco.
Cada um de nossos produtos pode ser testado antes da compra.
Agradecemos seu interesse e apoio aos nossos produtos e nos esforçamos para manter altos padrões de qualidade.
Obrigado por estar conosco!
Você tem uma pergunta?
3 responses to “Meus segredos da Autolot. Lote dinâmico ou Autolot.”
-
I want to be able to double whatever lot size that is being copied from the master onto the client.. How do I do that with settings… so no matter what every new position the client with be 2x that.. master opens a trade of .03, then it will be copied to client as .06.
-
I want to be able to double whatever lot size that is being copied from the master onto the client.. How do I do that with settings… so no matter what every new position the client with be 2x that.. master opens a trade of .03, then it will be copied to client as .06.
This post is also available in: English Українська Portuguese Español Deutsch Chinese Русский Français Italiano Türkçe 日本語 한국어
Leave a Reply