Erros, bugs, perguntas - página 2319

 
Olá! Pode dizer-me como corrigir um erro com a afixação incorrecta do preço? Está a atirar fora todos os índios.eurusd
 
Slava:

Definições de símbolos, não gráficos.

Na visão geral do mercado, seleccione "especificação do símbolo" no menu de contexto do símbolo

 
Igor Semyonov:

Obrigado.

Mostrar os registos do terminal no momento do problema desde o início

 
Slava:

Obrigado.

Mostrar os registos do terminal no momento do problema desde o início

Enviei o ficheiro de registo através de mensagem privada.

 
Igor Semyonov:

Enviei o ficheiro de registo por mensagem privada.

Sim, obrigado.

Os registos são todos claros.

Diga-me, a situação que descreveu é continuada?

 

Volume sem DoubleToString(Volume, 2). A imagem do ecrã é EURUSD.

 
Slava:

Sim, obrigado.

Tudo está claro a partir dos registos.

Diga-me, a situação que descreveu continua?

Depois de reiniciar o terminal, tudo está bem até agora.

 

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Insectos, insectos, perguntas

pantural, 2018.11.01 16:03

Olá caros programadores de MT, gostaria de reportar um erro no algoritmo de cálculo do Sharpe Ratio. No relatório anexo do Sr.Aleksey Vyazmikin onde SR=0,29 mas de acordo com os meus cálculos é cerca de 3,7-3,8 (dependendo se PnL zero) sugere que o erro na ausência de um factor de escala no desvio padrão (sqrt(comprimento)) porque o retorno médio não depende do comprimento da série, converge, e o RMS aumenta como sqrt(comprimento)

C++

double SharpRatio(vector<double> pnl)

{

double avret = 0;

for (int i = 0; i < pnl.size(); ++i) avret += pnl[i];

avret /= pnl.size();


double var = 0;

for (int i = 0; i < pnl.size(); ++i) var += pow(pnl[i] - avret, 2);

var = sqrt(var / pnl.size()) / sqrt(pnl.size());


return  avret / var;

}

Vamos tomar dois TCs idênticos. Iniciamo-los simultaneamente. Um dia depois, ambos mostram a matriz pnl. A primeira foi parada, a segunda não. Depois de outro dia, o segundo mostrou-nos exactamente a mesma pnl.

Ou seja, o primeiro tem pnl[] e o segundo tem pnl[]+pnl[]. Ou seja, o segundo dia de troca foi idêntico ao primeiro dia de troca.


Depois, de acordo com a fórmula sugerida, a razão Sharpe do segundo TS será sqrt(2) (raiz de dois) menos do que a do primeiro. Mas eles negociaram de forma idêntica!

 
fxsaber:

Tomar dois TCs idênticos. Execute-os ao mesmo tempo. Após 24 horas, ambos mostraram um conjunto de pnl. A primeira foi parada, a segunda não. Outro dia mais tarde, o segundo mostrou exactamente a mesma pnl.

Ou seja, o primeiro tem pnl[] e o segundo tem pnl[]+pnl[]. Ou seja, o segundo dia de troca foi idêntico ao primeiro dia de troca.


Então, de acordo com a fórmula sugerida, a segunda TS's Sharpe Ratio será sqrt(2) (raiz de dois) menor do que a da primeira. Mas eles negociaram de forma idêntica!

Como é que é a piada? "Devem ser mortos enquanto são pequenos" .

Bem, vejamos o exemplo do ficheiro anexado a . Porque em teoria tudo parece assustador até o sentir com as mãos.

Existem 144 ofícios nesse ficheiro, cujo valor Sharpe é 0,29 (o site mostra-o com uma precisão de 2 casas decimais, e não há problema - ninguém precisa de 5 casas decimais, neste caso 2 casas decimais é suficiente para uma boa medida para comparar duas estratégias).

Sharpe é calculado como a razão K/STD, onde:

  • K - a taxa média de crescimento para o histórico comercial
  • STD é o desvio padrão dos ganhos ao longo do histórico comercial

Suponhamos que temos o dobro das transacções que foram cópias de transacções anteriores. Isto significa que agora temos 288 ofícios = 144*2. Ao mesmo tempo, K não irá mudar. Assim, só podemos mudar Sharpe alterando as DST.

STD inicial=MathSqrt(X2/(n-1)), onde:

  • X2 é a soma dos quadrados dos desvios em relação à média X_aver
  • n - número de teads == 144

Isto é Sharpe=MathSqrt(X2/(144-1)) = MathSqrt(X2/143)

Duplicámos o número de transacções, por isso, para uma história duas vezes maior, o novo Sharpe é calculado desta forma

SharpeNew=MathSqrt(X2_new/(2*144-1))

Onde X2_new=2*X2. Portanto SharpeNew/Sharpe ratio = MathSqrt(X2/(144-1)) / MathSqrt(X2_new/(2*144-1)) =

MathSqrt(X2/(144-1))  / MathSqrt(2* X2/(2*144-1)) =  MathSqrt(X2/(143))  / MathSqrt(2* X2/(283))= MathSqrt(X2*283/(2*143*X2))= MathSqrt(283/286)= 0.994741 

Mesmo se eu misturar o denominador com o numerador, SharpeNew estará na faixa de 0,292919- 0,296025. Ou seja, a diferença estará algures no terceiro dígito.

Mas não por 10-20 vezes. Verifique por si próprio onde cometi um erro.

 
Rashid Umarov:

Qual é a piada? "Devem ser mortos enquanto são pequenos".

Não me entendeu bem.

Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos

Insectos, insectos, perguntas

fxsaber, 2018.11.06 13:23

Depois, de acordo com a fórmula proposta, a razão Sharpe da segunda TS seria sqrt(2) (raiz de duas) menos do que a primeira. Mas eles negociaram de forma idêntica!


Referia-me à fórmula citada de C++.


E na fórmula utilizada em MT, é claro, não se subtrairia nada. Então o exemplo proposto, não importa quantos intervalos de 144, Sharp seria sempre o mesmo.