Características da linguagem mql5, subtilezas e técnicas - página 8

 

Diz na Ajuda

PTUM_SYMBOL_CALC_MODE

Identificador

Descrição

Fórmula

SÍMBOLO_CALC_MODE_FOREX

Modo Forex - cálculo de lucro e margem para Forex

Margem: Lotes*Tamanho_Contrato/Alavancagem

Lucro: (fechar_preço_aberto_preço)*Tamanho_de_contrato*Lotes

SYMBOL_CALC_MODE_FUTURES

Modo Futuros - calcular margem e lucro para futuros

Margem: Lotes *Margem Inicial*Percentagem/100

Lucro: (fechar_preço_abrir_preço)*TickPrice/TickSize*Lots

SÍMBOLO_CALC_MODE_CFD

Modo CFD - cálculo de margem e lucro para CFD

Margem: Lotes *Tamanho do contrato*Preço de mercado*Percentagem/100

Lucro: (fechar_preço_aberto_preço)*Tamanho_de_contrato*Lotes

SÍMBOLO_CALC_MODE_CFDINDEX

Modo índice CFD - cálculo de margem e lucro para índices CFD

Margem: (Lotes*TamanhoContrato*Preço de Mercado)*TickPrice/TickSize

Lucro: (fechar_preço_aberto_preço)*Tamanho_de_contrato*Lotes

SÍMBOLO_CALC_MODE_CFDLEVERAGE

CFD Leverage mode - cálculo de margem e lucro para CFD ao negociar com alavancagem

Margem: (Lotes*Tamanho do contrato*Preço de mercado*Percentagem)/Alavancagem

Lucro: (fechar_preço_aberto_preço)*Tamanho_de_contrato*Lotes

SÍMBOLO_CALC_MODE_EXCH_STOCKS

Modo cambial - cálculo de margem e lucro para negociação de títulos em bolsa

Margem: Lotes*Tamanho do Contrato*Preço Aberto

Lucro: (fechar_preço_aberto_preço)*Tamanho_de_contrato*Lotes

SÍMBOLO_CALC_MODE_EXCH_FUTURES

Modalidade Futuros - cálculo de margem e lucro para negociação de contratos de futuros na bolsa

Margem: Lotes*Margem Inicial ou Lotes*Margem de Manutenção

Lucro: (fechar_preço_aberto_preço)*Lots*TickPrice/TickSize

SÍMBOLO_CALC_MODE_EXCH_FUTURES_FORTS

FORTS modalidade Futuros - cálculo de margem e lucro para negociação de contratos futuros sobre FORTS. O tamanho da margem pode ser diminuído pelo valor do MarginDiscount de acordo com as seguintes regras:

1. Se o preço de uma posição longa (Buy order) for inferior ao preço calculado, MarginDiscount = Lots*((PriceSettle-PriceOrder)*TickPrice/TickSize)

2. Se o preço de uma posição curta (ordem de venda) for superior ao preço de liquidação, então MarginDiscount = Lots*((PriceOrder-PriceSettle)*TickPrice/TickSize)

onde:

    • PriceSettle - preço de liquidação (compensação) da sessão anterior;
    • PriceOrder - preço médio ponderado de uma posição ou preço de abertura especificado na ordem (ordem);
    • TickPrice - tick price (custo da mudança de preço em um ponto);
    • TickSize - tick size (etapa mínima de mudança de preço)

Margem: Lotes*Margem Inicial ou Lotes*Margem de Manutenção

Lucro: (fechar_preço_aberto_preço)*Lots*TickPrice/TickSize

SYMBOL_CALC_MODE_SERV_COLLATERAL

Modo colateral - o instrumento é usado como um activo não transaccionável na conta de negociação. O valor de mercado da posição aberta é calculado com base no volume, preço actual de mercado, dimensão do contrato e rácio de liquidez. O valor é contabilizado no Activo, o qual é adicionado ao Capital Próprio. Assim, as posições abertas em tal instrumento aumentam a Margem Livre e servem como garantia adicional para as posições abertas em instrumentos negociados

Margem: não

Lucro: não

Valor de mercado: Lotes*Tamanho do contrato*Preço de mercado*LiqudityRate

 
fxsaber:

Diz na Ajuda.

Com todo o respeito, pretendo levá-lo de volta à leitura

P.S.

Você pode obtê-lo, mas se utilizarmos o AUDCAD, obteremos a margem na moeda AUD, enquanto a conta é denominada em dólares. Se você usar o preço AUDUSD, você receberá a quantidade necessária de margem, mas não é universal e ruim, porque existem contas com prefixos e sufixos, e aqui começa toda uma história. Além disso, pode simplesmente não haver nenhum par aberto na visão geral do mercado e o cálculo é um beco sem saída.

Um programa que funciona com dinheiro (a reivindicação dos desenvolvedores) não pode calculá-lo. O velho, mau e lento mt4 poderia funcionar com dinheiro, mas o novo e chique mt5 não pode. Como assim?

 
fxsaber

Use esta fórmula a partir do link:

Por exemplo, calculamos as garantias para o CADJPY, obtemos as garantias no CAD

SymbolInfoDouble("CADJPY",SYMBOL_TRADE_CONTRACT_SIZE) / AccountInfoInteger(ACCOUNT_LEVERAGE)*0.7625 // СADUSD

Eu posso ver0,7625, é preço CADUSD, mas o terminal nem sequer tem um par assim.

É tão difícil transferir a função"MODE_MARGINREQUIRED" para mt5 usando o método "copypaste", tornando assim a vida dos desenvolvedores mais fácil?

 
Artyom Trishkin:
Eu gostaria de ter o cálculo independente do tipo de programa.
Os desenvolvedores pensam que o cálculo da margem (e algumas outras funções de informação) é uma função de negociação e deve ser proibido nos indicadores. Comecei uma linha séria sobre este assunto - os seus moderadores cortaram-na imediatamente, anonimamente como sempre. Agora não quero saber, afixei um indicador esterilizado sem margem em KB.
 
Vitaly Muzichenko:

Com todo o respeito, pretendo levá-lo de volta à sua leitura.

Admito, eu estava desatento. De alguma forma sempre achei desnecessário o cálculo de margens. Especialmente em indicadores. Onde pode ser necessário em indicadores?

Eu acho que a solução é muito simples. Quando eu estiver livre, vou pensar nisso.

 
Vitaly Muzichenko:

Você pode obtê-lo, mas se você usar AUDCAD, você receberá a margem na moeda AUD, e a conta é denominada em dólares. Se usarmos o preço AUDUSD, obtemos a margem necessária, mas não é universal e ruim, porque há contas com prefixos e sufixos e aqui começa toda uma história. Além disso, pode simplesmente não haver nenhum par aberto na visão geral do mercado e o cálculo irá por água abaixo.

E o que retornarão os quatro se o AUDUSD não estiver na visão geral do mercado?

Para a tarefa específica de reflexão da margem no indicador é possível construir uma muleta, tendo em conta os prefixos e sufixos (ou utilizando um conselheiro auxiliar). Há tudo para negociar.

 
Andrey Khatimlianskii:

E o que retornarão os quatro se o AUDUSD não estiver na visão geral do mercado?

Para a tarefa específica de exibição de margem no indicador, pode-se construir uma muleta que leva em conta prefixos e sufixos (ou usar uma EA auxiliar). E para negociar, tudo parece estar lá.

Quatro irão retornar"MODE_MARGINREQUIRED" )

Alexey Volchanskiy:
Penso que o cálculo da margem (e algo mais a partir de funções informativas) é uma função de negociação e deve ser proibido nos indicadores. Comecei uma linha séria sobre este assunto - os seus moderadores cortaram-na imediatamente, anonimamente como sempre. Agora não quero saber, afixei um indicador esterilizado sem margem em KB.

Está mesmo a ser negociado? ))) Embora sim, disparar não é proibido. Com o que será que ele negocia, abre ou fecha, ou apenas modifica as ordens?

fxsaber:

Admito, eu estava desatento. Eu sempre não tive necessidade de calcular margens. Além disso, não é necessário em indicadores. Onde pode ser necessário em indicadores?

Eu acho que a solução é muito simples. Quando eu estiver livre, vou inventá-lo.

Para além do MA e dos estocásticos, existem indicadores informativos. Por exemplo, o indicador de informação para conhecer o depósito antes de fazer um negócio (observe MM), calcular o lote e ver se ele se encaixa nas condições do seu TS ou não para entrar no negócio e esperar por outro sinal. E este é apenas um único exemplo do seu uso.

 
fxsaber:

Eu acho que a solução é muito simples. Eu descubro quando estiver livre.

A solução veio imediatamente.
// Размер свободных средств, необходимых для открытия 1 лота на покупку
double GetMarginRequired( const string Symb )
{
  MqlTick Tick;

  return(SymbolInfoTick(Symb, Tick) ? Tick.ask * SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_VALUE) /
        (SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0);
}
Este é um cálculo para FOREX. O resto é por analogia.
 
fxsaber:
A solução veio logo a seguir.
// Размер свободных средств, необходимых для открытия 1 лота на покупку
double GetMarginRequired( const string Symb )
{
  MqlTick Tick;

  return(SymbolInfoTick(Symb, Tick) ? Tick.ask * SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_VALUE) * SymbolInfoDouble(Symb, SYMBOL_TRADE_CONTRACT_SIZE) *
         SymbolInfoDouble(Symb, SYMBOL_POINT) / (SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0);
}
Este é o cálculo para FOREX. O resto é semelhante.
Muito obrigado, ainda há um bug com pares de ienes.
 
Vitaly Muzichenko:
Muito obrigado, ainda há um bug com pares de ienes.
Sim, eu estraguei um pouco. Agora está correcto.
Razão: