Preço por pipa - página 9

 
gordon:

Minha definição perde seu significado original quando citada fora do contexto. Para esclarecer - a palavra 'preço' na definição de MODE_TICKSIZE se refere às cotações de preços reais possíveis , enquanto na definição de Ponto se refere a qualquer preço.

- Gordon, minha definição também não é muito quente ( Ponto = fator multiplicador para o menor preço decimal ) e a analogia hexadecimal é tão foleira... Mas talvez eu tenha um vencedor aqui...

Lógica :
O corretor precisa estabelecer relações de preços entre pares para girar em torno de MODE_LOTSIZE sendo 100.000 unidades de moeda cotada & MODE_TICKVALUE sendo 10 unidades de moeda cotada. Somente por esta condição igual de inter-relação, os preços podem ser cotados entre si. Isto suponho que seja a base para a formação de preços forex.

Ponto = MODE_LOTSIZE / Tickvalue na moeda cotada, por exemplo:
GBPUSD 0,0001 = 100.000 / 10 USD
USDJPY 0,01 = 100.000 / 1.000 JPY <-- MathRound( MODE_TICKVALUE * último lance de moeda cotada )
CHFJPY .... etc. se você ou alguém puder confirmar seria ótimo.

Todas as apostas estão canceladas se vamos começar a falar de contratos futuros. Por exemplo, FXPro tem contratos de futuros no formato quase normal #Amy onde "meu" é um código de expiração padrão como M0. EUR_JPY_fut soa como um estranho contrato sintético.

- Ok Jjc... Presumo que o futuro também tenha um preço diferente & construção de TICK_VALUE. Portanto, isto definitivamente descartaria todos os instrumentos não forex. Os prefixos e entre-fixos são considerados menos prováveis.

- CB Eu estaria muito interessado em ouvir sua opinião sobre o cálculo acima. Obrigado por sua opinião até o momento.

Com os melhores cumprimentos
cameo

 
cameofx:

- Gordon, minha definição também não é muito quente ( Ponto = fator multiplicador para o menor preço decimal ) e a analogia hexadecimal é tão foleira... Mas talvez eu tenha um vencedor aqui...

Lógica :
O corretor precisa estabelecer relações de preços entre pares para girar em torno de MODE_LOTSIZE sendo 100.000 unidades de moeda cotada & MODE_TICKVALUE sendo 10 unidades de moeda cotada. Somente por esta condição igual de inter-relação, os preços podem ser cotados entre si. Isto suponho que seja a base para a formação de preços forex.

Ponto = MODE_LOTSIZE / Tickvalue na moeda cotada, por exemplo:
GBPUSD 0,0001 = 100.000 / 10 USD
USDJPY 0,01 = 100.000 / 1.000 JPY <-- MathRound( MODE_TICKVALUE * último lance de moeda cotada )
CHFJPY .... etc. se você ou alguém puder confirmar seria ótimo.

- Ok Jjc... Presumo que o futuro também tenha preço diferente e edifício TICK_VALUE. Portanto, isto definitivamente descartaria todos os instrumentos não forex. Os prefixos e os entre-fixos são considerados menos prováveis.

- CB Eu estaria muito interessado em ouvir sua opinião sobre o cálculo acima. Obrigado por sua opinião até o momento.

Com os melhores cumprimentos
cameo

A lógica mudaria se Dígitos = 5 ou Dígitos = 3?
 

FInalmente ter conexão para postar...

Would the logic change if Digits = 5 or Digits = 3?

Sem engcomp, a lógica não é suposto mudar. Pelo menos é isso que estou tentando descobrir.

Estou tentando chegar ao fundo de várias coisas, Os elencos são até agora : Ponto, MODE_TICKVALUE, MODE_TICKSIZE, Preço. Posso acabar apresentando-os apenas sob uma nova luz, mas se eu puder explorá-los a partir daí, então valeria a pena.

IMO, MODE_TICKVALUE convertido em moeda cotada é muito importante . Por isso, em nome da discussão, vou chamá-lo de QUOTE_TICKVALUE. A propósito, a equação anterior é retrógrada.

Para calcular se Ponto é de fato : QUOTE_TICKVALUE (TickValue em moeda cotada) / MODE_LOTSIZE, eu tenho isto. (Cálculo_do_Ponto é suposto corresponder ao Ponto)

string Sym = Symbol();
double Calc_Point = QUOTE_TICKVALUE(Sym) / MarketInfo(Sym, MODE_LOTSIZE);
int QUOTE_TICKVALUE(string Sym)
{
   string quoted_currency_name = StringSubstr(Sym,3,3); double TV, QTV = 0.0;
   if (MarketInfo(StringConcatenate("USD", quoted_currency_name), MODE_LOTSIZE)) > 0)
   {
     TV = MarketInfo(Sym, MODE_TICKVALUE);
     QTV = MathRound(TV * MarketInfo(Sym, MODE_BID));
     return(QTV);
   }
   else if ((MarketInfo(StringConcatenate(quoted_currency_name, "USD"), MODE_LOTSIZE)) > 0)
   {
     TV = MarketInfo(Sym, MODE_TICKVALUE);
     QTV = MathRound(TV * MarketInfo(Sym, MODE_BID));
     return(QTV);
   }
}
Nota: para os pares cruzados que tenham cotado a moeda como base em sua forma em USD (por exemplo, EURGBP), o acima mencionado terá que ser modificado um pouco.

Portanto, a qualquer momento, a qualquer preço:

USDJPY, GBPJPY, AUDJPY, XXXJPY............. tem VALOR_PONTO DE --> 1000 [JPY]
EURUSD, AUDUSD, GBPUSD, XXXUSD tem VALOR_PONTO DE --> 10 [USD]
EURCHF, USDCHF, XXXCHF............. tem VALOR_PONTO DE --> MathPow(10, x) [CHF]

Preciso sublinhar que estou 'extraindo' QUOTE_TICKVALUE do TICK_VALUE flutuante. Portanto, acho que o que isto significa é que o QUOTE_TICKVALUE é pré-determinado pelo corretor e o mais importante é: eles paralelizarão e serão consistentes entre cada moeda que serve como a moeda cotada. Assim, desde que MODE_LOTSIZE = 100.000 e QUOTE_TICKVALUE = 10 do USD, podemos ter certeza de que os outros componentes do símbolo que servem como moeda de cotação também serão consistentes (ou seja, você não pode mudar 10 USD para 1 USD sem dividir outras QUOTE_TICKVALUE-s com 10 também - creio que é aqui que podemos determinar meu Ponto_Válido em geral). Espero que isso esteja claro...

Eu não posso (pela minha vida) ter rede & MT4 ao mesmo tempo hoje em dia (é complicado...). Portanto, se alguém puder ajudar ou verificar isso seria ótimo.

cameo

 

Encontrei o que preciso, Valid_Point & ainda mais. Um entendimento mais profundo para Ponto, TickValue, Ticksize, Symbol(), & preço em geral. Obrigado a todos que compartilharam suas idéias e comentários desde que LEHayes iniciou este tópico.

Com os melhores cumprimentos
cameo

 

Cara, olha só a tempestade cerebral que eu causei. Espero que tenha sido útil. Não tive tempo para acompanhar o fio da meada, mas espero ter a oportunidade de rever.

Depois de toda esta discussão e excelente trabalho, chegamos a um ponto em que temos algum tipo de função padrão para gerar o que estávamos procurando? Esta pergunta tem o objetivo de nos levar a um resumo.

 

Alguém tem experiência com as dicas de cálculo acima sobre metais ou outros símbolos que não sejam moedas cruzadas?

Encontrei este tópico porque estava interessado no cálculo da mudança de preço na moeda da conta de um movimento de um ponto no símbolo.

Minha teoria básica era a seguinte:

Preço por pip = Tamanho do contrato * Ponto

Preço por pip na moeda da conta = Preço por pip * Taxa de câmbio do contador de contas,

onde

Tamanho do contrato = MarketInfo(Symbol(), MODE_LOTSIZE)

Ponto = Ponto = MarketInfo(Symbol(), MODE_POINT)

A taxa de câmbio do contador da conta é o preço da moeda cotada do símbolo expresso na moeda da conta (CCCAAA onde AAA é a moeda da conta e CCC é a moeda cotada do símbolo).

Eu verifiquei o acima com diferentes contas demo do corretor (icm, insta, fxopen, fxopen ecn) em relação a lotes reais de 1,0 operações no Histórico de contas. Eu também verifiquei o método de cálculo do valor do tickbreaker.

Eu encontrei o seguinte:

- O preço de um movimento de um ponto de um símbolo não é fácil de calcular com diferentes corretores e no caso de metais

- até mesmo o valor do tickbreaker * ponto / tiquetaque fórmula pode levar a resultados falsos (insta - prata, icm - eurusd, fxopen - prata e ouro)

- no caso do icm - ouro, mesmo o tamanho do contrato * O ponto leva a um mau resultado (0,5 em vez de 5,0 real, é um erro de dados do corretor?)

Você pode encontrar resultados detalhados aqui:Preço por pip.

Portanto, minha conclusão é que não há um método 100% confiante de cálculo do Preço por pip.

 
Obrigado por compartilhar este pequeno programa que você escreveu. Não posso acreditar que foi tão fácil!! você me poupou muito tempo :-)
engcomp:

Em anexo, encontra-se um pequeno roteiro que desenvolvi que pode responder à sua pergunta.

Como os scripts não têm parâmetros "externos", você tem que alterá-los no código e recompilá-los.

Basta carregar em sua pasta de especialistas/scripts, compilar e anexar a um gráfico.

Informe-me como corre, Helmut

 
Comentários sobre DE30
double  PointValuePerLot(string pair=""){
    /* Value in account currency of a Point of Symbol.
     * In tester I had a sale: open=1.35883 close=1.35736 (0.0147)
     * gain$=97.32/6.62 lots/147 points=$0.10/point or $1.00/pip.
     * IBFX demo/mini       EURUSD TICKVALUE=0.1 MAXLOT=50 LOTSIZE=10,000
     * IBFX demo/standard   EURUSD TICKVALUE=1.0 MAXLOT=50 LOTSIZE=100,000
     *                                  $1.00/point or $10.0/pip.
     *
     * https://forum.mql4.com/33975 CB: MODE_TICKSIZE will usually return the
     * same value as MODE_POINT (or Point for the current symbol), however, an
     * example of where to use MODE_TICKSIZE would be as part of a ratio with
     * MODE_TICKVALUE when performing money management calculations which need
     * to take account of the pair and the account currency. The reason I use
     * this ratio is that although TV and TS may constantly be returned as
     * something like 7.00 and 0.0001 respectively, I've seen this
     * (intermittently) change to 14.00 and 0.0002 respectively (just example
     * tick values to illustrate).
     * https://forum.mql4.com/43064#515262 zzuegg reports for non-currency DE30:
     * MarketInfo(Symbol(),MODE_TICKSIZE) returns 0.5
     * MarketInfo(Symbol(),MODE_DIGITS) return 1
     * Point = 0.1
     * Prices to open must be a multiple of ticksize */
    if (pair == "") pair = Symbol();
    return(  MarketInfo(pair, MODE_TICKVALUE)
           / MarketInfo(pair, MODE_TICKSIZE) ); // Not Point.
}
 
Tenho tentado calcular a porcentagem de risco em símbolos não forexo, mas não consegui chegar a nada que seja mesmo remotamente confiável, uma vez que a maioria dos símbolos não forexo se comporta de forma muito diferente. Alguém tem alguma dica sobre como calcular o valor correto da tubulação em símbolos não forexo para calcular uma porcentagem de risco correta?
 
Como é que o acima mencionado NÃO funciona corretamente?