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

 

Essa é uma pergunta. Como posso otimizar agora? O esqueleto do Expert Advisor é agora o seguinte:

init(){
        //если файл истории не существовал, формируем заголовок
}

start(){
        //ловим тики
        //смотрим, сколько прошло секунд с последнего вызова start():
                //если 1 или больше, то---(блок свеч)---
                        //запоминаем, сколько прошло секунд
                        //---(блок выбора режима)---
                        //формируем RateInfo - столько раз, сколько прошло секунд
                //если 0, то---(блок теней)---
                        //редактируем RateInfo - столько раз, сколько прошло секунд в прошлый раз
}

//---(блок выбора режима)---
//флаги в экстерне - все бычьи, все медвежьи или любые
//если все бычьи, то в close всегда ask
//если все медвежьи, то в close всегда bid
//Если любые, то
        //если текущий бид меньше предыдущего, то медвежья
        //в любом другом случае бычья

Coloquei open-close em variáveis e removi o segundo bloco FileSeek, que se tornou desnecessário, adicionei seleção de estilo de velas (todas em alta, todas em baixa, qualquer), adicionei sombras se o próximo asc ou lance for maior ou menor que o anterior alto e baixo, adicionei traçado com a impressão, que é ativada por uma bandeira no cabeçalho, comentei tudo com links para números de linha, tentei tornar o código legível para o fórum. Também acrescentei números de linha para imprimir.

Agora veja:

Acima é um período de tempo de carrapato, abaixo é um segundo período de tempo. As sombras (rabos) são quando dois carrapatos foram pegos em um segundo e a oferta ou pedido é diferente da anterior. O tique funciona como um relógio. O segundo carrapato atrasa, significa que ele gasta mais tempo para processar o carrapato do que o intervalo de tempo mínimo entre os carrapatos. É por isso que eu estou perguntando como otimizar o código. Estou anexando o código e repetindo que já comentei tudo demais. Se você quiser verificar como funciona - você o configura como uma EA em minutos, então em busca autônoma e abre o 'seg'+ nome do instrumento.

Arquivos anexados:
hhi.jt.mq4  29 kb
 
david2:
Como implementar esta função em sua EA? Quando um TP ou SL é acionado em qualquer uma das ordens da baía, todas as ordens da baía devem ser fechadas.

Se você tem experiência em programação, uma dica:

1. Após abrir uma ordem de compra, conte o número de ordens de compra

2. Salvar seu número em uma variável global

No próximo tick, verifique as condições de que a quantidade de ordens de compra seja menor do que a anterior e, em seguida, feche todas as ordens de compra.

Há funções que calculam a quantidade de pedidos pelo tipo de posição aberta e pelo fechamento de posições de um tipo selecionado (compra ou venda) na Kodobase.

Muitas características úteis em funções da Kim

 

Sobre a conversão de tipos variáveis.
Escrito o valor do coeficiente duplo K na descrição da linha como texto (K=0,573).
Durante a execução do código, o valor do coeficiente K foi alterado várias vezes.
Agora quero multiplicar a variável duplo Z pelo valor K=0,573 após extrair a string de descrição da linha ObjectDescription(string name).
É possível converter uma variável de tipo string para uma variável de tipo duplo em MQL para obter 0,573 novamente. Se possível, por favor, me dê o link.
Cumprimentos. Shurkin.

 
Shurkin:

É possível converter uma variável de tipo string em MQL para uma variável de tipo duplo para obter novamente 0,573. Se possível, por favor, me dê um link.
.

https://docs.mql4.com/ru/convert/StrToDouble
 
08:05:30 Sec.TF AUDUSD,M1: 15
08:05:31 Tick.tf AUDUSD,M1: 0
08:05:33 Tick.tf AUDUSD,M1: 0
08:05:33 Tick.tf AUDUSD,M1: 0
08:05:35 Tick.tf AUDUSD,M1: 0
08:05:38 Tick.tf AUDUSD,M1: 0
08:05:39 Tick.tf AUDUSD,M1: 0
08:05:39 Tick.tf AUDUSD,M1: 0
08:05:40 Tick.tf AUDUSD,M1: 0
08:05:41 Tick.tf AUDUSD,M1: 0
08:05:42 Tick.tf AUDUSD,M1: 0
08:05:42 Tick.tf AUDUSD,M1: 0
08:05:43 Tick.tf AUDUSD,M1: 0
08:05:51 GMT AUDUSD,M1: 15062
08:05:54 Tick.tf AUDUSD,M1: 0
08:05:54 Tick.tf AUDUSD,M1: 0
08:05:55 Tick.tf AUDUSD,M1: 0
08:05:56 Tick.tf AUDUSD,M1: 0
08:05:56 Tick.tf AUDUSD,M1: 0
08:05:57 Tick.tf AUDUSD,M1: 0
08:05:58 Tick.tf AUDUSD,M1: 0
08:05:58 Tick.tf AUDUSD,M1: 16
08:05:59 Tick.tf AUDUSD,M1: 0
08:06:00 Tick.tf AUDUSD,M1: 0
08:06:06 Tick.tf AUDUSD,M1: 0
08:06:06 Tick.tf AUDUSD,M1: 0
08:06:09 GMT AUDUSD,M1: 10156
08:06:16 Tick.tf AUDUSD,M1: 0
08:06:16 Tick.tf AUDUSD,M1: 0
08:06:17 Tick.tf AUDUSD,M1: 0
08:06:18 Tick.tf AUDUSD,M1: 0
08:06:26 GMT AUDUSD,M1: 5078
08:06:27 Tick.tf AUDUSD,M1: 0
08:06:28 Tick.tf AUDUSD,M1: 0
08:06:30 Tick.tf AUDUSD,M1: 31

08:06:32 GMT AUDUSD,M1: 15

Parte do registro com temporizador de milissegundos em ambos os códigos (tick e segundo período de tempo). Até agora, só consigo pensar em remover completamente os ciclos, ou seja, um ou mais carrapatos por segundo, não importa quantos segundos tenham passado desde o último carrapato - é sempre uma vela. Se houvesse um segundo e assim por diante carrapatos por segundo - um candelabro com sombras. Mas então haverá um segundo TF com "buracos" e por High[15] suponhamos que não tomarei o valor de asc 15 segundos atrás...

 
hoz:

Eu me perguntava como escrever uma função. A idéia é que quando N velas rebolam em uma determinada direção, deve calcular o número de velas. MAS. Para isso há várias condições, ou mais precisamente, haverá uma lista delas ao longo do tempo.

Digamos que a tendência, por exemplo, é dirigida para baixo. ...um pullback sobe. Eu quero, se 5 castiçais subiram, e cada castiçal estava em alta, e, por exemplo, o tamanho de cada castiçal era maior quei_sizeOfCurrBar, e algumas outras condições, então produzir o número de barras continuamente em alta, e retornar algum resultado da função.

Qual é a melhor maneira de escrevê-lo? No momento, comecei a escrever, e entendo que deveria passar por um loop por barras, e de alguma forma limitar a visão na profundidade da história não por um número fixo de barras, mas por barras, com esses parâmetros, que nos interessam pelas condições.

Eis o que eu tenho, tenho:

No momento, estamos indo da penúltima barra para a barra com índice 6, ou seja, 5 barras seguidas. Mas quero que meu consultor especializado busque apenas as barras que estão em alta e não todas elas seguidas. Como implementá-la adequadamente?

Eu filtrei de forma correta por tamanho.

Bem, quando tudo já estiver escrito, o contador na parte inferior já calculará o número de barras contínuas com parâmetros nht,etvsvb e se houver um número suficiente de tais barras, então algum valor da função será devolvido.

Como sempre original: contar barras "de baixo"...

for (int i=Bars-1; i>=Bars-6; i--)
 
Zhunko:

Há muitas maneiras diferentes:

1. Através de uma variável global.

2. Através de arquivo.

3. via iCustom().

4. Através das variáveis gráficas globais.

5. Mapeamento. Você pode transferir dados de um terminal para outro terminal. Ou em um terminal para transferir dados de uma janela para outra janela sem limitações de variáveis globais MT4.


Qual destes trabalhos é o mais rápido?
 
gyfto:

Qual destes trabalhos é o mais rápido?
5. Mapeamento.
 
hoz:
Na impressão tem um valor de 1 e 2... Que porra está acontecendo aqui afinal?
Print("i = ", i, "; up = ", cnt, "; cnt = ", cnt);

Apenas desatenção. Em geral, o bool aqui é de 4 bytes, o que não o obriga a tomar apenas valores 0 e 1. C++ boolearn é de 1 byte. Eu pessoalmente uso bool em aritmética binária no switch(), se eu precisar fazer múltiplas escolhas, confiando que é sempre 0 ou 1))) Assim:

bool f1, f2, f3, f4//флаги

switch(8*f4+4*f3+2*f2+f1){
   case 0:
   ...
   case 15:
}//без default
 
gyfto:

Essa é uma pergunta. Como posso otimizar agora? O esqueleto do Expert Advisor é agora o seguinte:

Coloquei open-close em variáveis e removi o segundo bloco FileSeek, que se tornou desnecessário, adicionei seleção de estilo de velas (todas em alta, todas em baixa, qualquer), adicionei sombras se o próximo asc ou lance for maior ou menor que o anterior alto e baixo, adicionei traçado com a impressão, que é ativada por uma bandeira no cabeçalho, comentei tudo com links para números de linha, tentei tornar o código legível para o fórum. Também acrescentei números de linha para imprimir.

Agora veja:

Na parte superior há um período de tempo, na parte inferior - segundos. As sombras (rabos) são quando dois carrapatos foram pegos em um segundo e a oferta ou pedido difere do anterior. O tique funciona como um relógio. O segundo carrapato atrasa, significa que ele gasta mais tempo para processar o carrapato do que o intervalo de tempo mínimo entre os carrapatos. É por isso que eu estou perguntando como otimizar o código. Estou anexando o código e repetindo que já comentei tudo demais. Se você quiser verificar como funciona - você o configura como uma EA em minutos, então em busca autônoma e abre o 'seg'+ nome do instrumento.

Eu não entrei na lógica, mas algo me diz que há alguns cálculos extras. Há um ano e meio atrás eu estava resolvendo o mesmo problema com citações recolhendo e formando castiçais M1 com corte claro no início do minuto astronômico.
Se você estiver interessado, poderá dar uma olhada em alguns momentos de pura otimização de seu código (arquivo). Realmente, se falamos seriamente sobre otimização, você precisa medir o tempo de execução do código. ;)
Arquivos anexados:
hhi.jt_c_.mq4  23 kb
Razão: