[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 419

 

Forexman77:
Como posso obter o programa para dar o nível de EMA como um preço? Suponha que EMA1 com período (1), EMA2 com período (0), EMA1 igual a 1,3321, enquanto EMA2 para o período atual é 1,3200. O resultado da expressão (EMA1 a EMA2) deve ser 0,0121. Quando você executa o roteiro, o alerta mostra zero, enquanto que nós precisamos de "0,0121". Como resolver este problema?

double delta = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0) - iMA(NULL,0,0,0,MODE_EMA,PRICE_CLOSE,0);

if (delta == 0.0121) Alert("Delta=0.0121"); 
 
Forexman77:
Como fazer o programa sair o nível de EMA como o preço? Suponha que EMA1 com período (1), EMA2 com período (0), EMA1 igual a 1,3321, EMA2 para o período atual 1,3200. O resultado da expressão (EMA1 a EMA2) deve ser 0,0121. Quando eu executo o roteiro, o alerta mostra zero, enquanto eu preciso de "0,0121". Como resolver este problema?

É possível ver o roteiro em si? - Presumivelmente você ou tem o tipo de dado errado, por exemplo, interger em vez de duplo (assim ele arredonda para zero), ou algo mais que causa zero: é difícil de entender sem o código.

A propósito, se você verificar o que escreveu antes com o script, o erro pode estar tanto no próprio script (presumivelmente escrito apenas para verificar seu indicador), ou no próprio código do indicador.

 
TarasBY:
Se você tiver filtrado corretamente seus pedidos, o que sugeri que fizesse, e se incluir comissões e trocas em seus cálculos, então tudo funciona corretamente.


Você deve ter dado um caminho muito complicado.

não está funcionando para mim.


Eu inseri estupidamente o seguinte em sua amostra:

ld_Profit = fGet_ProfitLastCloseOrd (12);    
Print (ld_Profit);

Dá algum número, mas está muito longe da realidade.

Poderia, por favor, me mostrar onde preciso inserir o número 12 para que funcione. Porque eu não sei nada sobre "ordens de filtragem"....

 
lottamer:


Você deve ter dado um jeito muito complicado.

não está funcionando para mim.


Eu inseri estupidamente o seguinte em sua amostra:

Dá algum número, mas está muito longe da realidade.

Poderia, por favor, me mostrar onde preciso inserir o número 12 para que funcione. Porque eu não sei nada sobre "filtragem de pedidos"....

Fiz todos os cálculos intermediários no gráfico para ter um melhor controle da função funcionando.

Resta apenas a você escrever o código.

Você tem duas maneiras: ou entender você mesmo (por exemplos - eu lhe dei um roteiro de trabalho), ou encontrar alguém que faça isso por você.

P.S. Se de repente você quiser entender, você pode começar daqui.

Arquivos anexados:
 
Chiripaha:

É possível ver o roteiro em si? - Presumivelmente você ou tem o tipo de dado errado, por exemplo, interger em vez de duplo (assim ele arredonda para zero), ou algo mais que causa zero: é difícil de entender sem o código.

A propósito, se você escrever o que escreveu antes, o erro pode estar ou no próprio script (presumivelmente escrito para testar seu indicador) ou no próprio código do indicador.


Você está certo, eu removi o EMA da int para o dobro e tudo está como deveria ser.
 
TarasBY:

Para o controle total da função, todos os cálculos intermediários são mostrados no gráfico.

Tudo o que lhe resta é escrever o código.

Há duas maneiras: ou você mesmo pode descobrir (usando exemplos - eu lhe dei um roteiro de trabalho), ou você pode encontrar alguém para fazer isso por você.

P.S. Se de repente você quiser descobrir, você pode começar daqui.


Obrigado, eu definitivamente tentarei descobrir
 
Forexman77:
Como posso fazer o programa sair o nível de EMA como um preço? Suponha que EMA1 com período (1), EMA2 com período (0), EMA1 é 1,3321 e EMA2 é 1,3200 para o período atual. O resultado da expressão (EMA1 a EMA2) deve ser 0,0121. Quando eu executo o roteiro, o alerta mostra zero, enquanto eu preciso de "0,0121". Como resolver este problema?

Usar variáveis de tipo duplo em vez de int nos cálculos;

usar NormalizeDouble(número1-número2, a precisão desejada) ao calcular o resultado da expressão;

usar DoubleToStr(o resultado obtido, a precisão desejada) para exibir o resultado na tela (no diário);

Não há mais nada a sugerir sem seu código...

 
Forexman77:
Você está certo, eu removi o EMA da int para o dobro e tudo está como deveria ser.

Aqui, nós já o encontramos... De qualquer forma, note que para evitar erros e imprecisões ocultas, use a normalização ao comparar e calcular dados do tipo duplo
 
Chiripaha:

Conclusão: É claro que você poderia, por interesse, pedir-lhe para descrever as condições com mais detalhes, já que você só forneceu uma descrição geral: quando as ordens do robô foram estabelecidas (com ou sem antecedência; manual por volta da mesma hora que o robô ou não, etc.). Mas de qualquer forma, mesmo neste caso, você só terá que lidar com seu corretor, porque ele tem seu próprio fio que provavelmente enfileira os negócios. Suponha que, se o pedido manual pendente foi feito primeiro, então o tempo de execução do pedido será diferente (incluindo o pedido de outros clientes), e, portanto, o preço pode ser diferente. Se o robô colocou as ordens dentro do período de sinais formados, então a chegada das ordens na fila não é evidente - daí o possível viés no preço de execução. Também pode ser afetado pelo tamanho das posições sobre as quais não se escreve nada... etc....

Mas... Mesmo assim, isto só pode ser esclarecido com um corretor (DC). E presumo que ele encontrará um monte de razões que eu não mencionei. - E o conselho estava certo: entre em suas mãos e ao corretor, se, é claro, você ainda acha que suas ordens pendentes foram movidas. Mas não confunda dois conceitos diferentes: uma Ordem Pendente e um Acordo sobre esta Ordem Pendente. A ordem de limite é uma instrução para entrar no mercado a qualquer preço com o volume declarado. E o acordo - é o preço pelo qual foi possível executar seu pedido para o volume de dinheiro declarado (lote). - E os preços destas ordens provavelmente serão diferentes (especialmente no mercado rápido, que é o que lhe foi dado o link). Para ordens limitadas, o preço da ordem e o preço de execução são iguais (por definição).

E o fato de a demonstração e o verdadeiro corretor não serem diferentes um do outro é bom! - Isso mostra que o corretor não finge negócios para atrair clientes (a partir de suas palavras). - Não há nenhuma discrepância a ser vista neste caso.


Obrigado por uma resposta tão detalhada, tudo se torna claro. Se usarmos o sistema de Execução Instantânea, este problema será resolvido?

E quanto às condições que eu não mencionei:

O robô fez pedidos antes que os feitos manualmente, mas eles foram modificados antes das notícias.

O volume de negócios era o mesmo, as distâncias eram mais ou menos as mesmas

em geral, as condições eram quase exatamente as mesmas.

 
TarasBY:
O dia atual começa no início da barra D1 atual (iTime (NULL, PERÍODO_D1, 0)), mas você não está procurando maneiras fáceis...! :)))


aqui está o problema.

Tudo funciona, mas apenas UMA vez. Ou seja, se eu definir o período (iTime (NULL, PERÍODO_D1, 0)) de um dia, ele não funciona no dia seguinte.

escreveu um código de teste para testar

GetProfitFromDateInCurrency (Symbol(), -1, -1, iTime (NULL, PERIOD_M1, 0));  

if  (GetProfitFromDateInCurrency()<1 && GetProfitFromDateInCurrency()>-1)
    { My_buy ();  My_close(); }
поставил период МИНУТКИ, так чтобы за минуту слить доллар на спреде и остановиться, ДО НАЧАЛА ВТОРОЙ МИНУТЫ. И он льет и останавливается. А вот почему на второй минуте он не открывает сделок? 
Razão: