[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 604

 
hoz:

Mas se você coloca as coisas assim:

Desta forma o sinal será válido permanentemente após a abertura do bar e ... Até o infinito. Para que eu preciso dele? O principal é abrir um pedido na abertura do bar em vez da embalagem.


И ... Ao infinito - este é um caso especial, se sua condição necessária - estabelecimento de ordem - não será cumprida hoje ou amanhã...

E para evitar a abertura de um pacote, devemos simplesmente verificar antes de cada abertura se o pedido é aberto ou foi aberto durante o período que você precisa.

 
rigonich:


Na prática, isto é usado em todas as operações que trabalham com ordens. É preciso primeiro selecionar a ordem e depois fazer algo com ela (ver as informações da ordem, enviar uma ordem de serviço ao servidor para modificá-la ou fechá-la). Há duas maneiras de selecionar ordens no terminal, por ticket, que é o número atribuído à ordem no servidor que não muda para uma determinada ordem, ou pelo número da ordem (índice) sob o qual a ordem é armazenada no terminal. Este número pode mudar a cada tick, dependendo de quais e quantos pedidos são abertos, definidos, fechados ou excluídos.

Para trabalhar com pedidos, são implementados ciclos de avaliação de pedidos.


Eu sei como iniciar um ciclo desse tipo.

for(int i=0; i<total; i++)

{

se(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

Como posso obter uma variável para dar VERDADEIRO - quando os dois últimos negócios estão perdendo, e FALSO quando são lucrativos?

OU desta forma.

quando as negociações são fechadas por stop - em algum lugar a caixa de seleção counter.... deve ser ligada mas como eu pego o momento de fechar ?

 
rigonich:


Este é o índice que determina a posição da ordem na matriz onde os dados sobre as ordens presentes no terminal são armazenados.

Isto é,o que está sublinhado (em SELECT_BY_POS) bool OrderSelect(int index, int select, int pool=MODE_TRADES)



Entendo corretamente que a última ordem que fechei terá índice 1. E depois de fechar o próximo, índice 2...e assim por diante com cada nova posição fechada? E os totais diários? os negócios de ontem contam? ou começa tudo de novo a cada dia?
 
lottamer:


Eu sei como iniciar tal ciclo...

for(int i=0; i<total; i++)

{

se (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

Como posso obter uma variável para dar VERDADEIRO - quando os dois últimos negócios estão perdendo, e FALSO quando são lucrativos?

OU desta forma.

quando as negociações são fechadas por stop - em algum lugar a caixa de seleção counter.... deve ser ligada mas como eu pego o momento de fechar ?


Existem algumas soluções para estes problemas. A maneira mais fácil é percorrer todos os pedidos do loop, procurando aquele que foi fechado por último, ver se seu pedido foi fechado em uma parada ou lucro, escolher seu ticket, iniciar o loop novamente, se o pedido com o ticket que você salvou, ignorá-lo, encontrar aquele que foi fechado por último, mas um...

P.S. E nãoMODE_TRADES, mas MODE_HISTÓRIA.

 
mas outra pergunta ....Segunda funçãodeApósAbrirPos() . se a EA foi desativada, esta função devolverá o valor do último negócio FECHADO ontem? (não pode ser verificado - o mercado está estagnado)
 
rigonich:


Existem algumas soluções para estes problemas. A mais fácil é provavelmente a seguinte: passe por todos os pedidos do loop, procure aquele que foi fechado por último, use a parada ou lucro para encontrar o pedido, salve seu ticket, reinicie o loop, se o pedido com o ticket que você salvou foi selecionado, pule-o,encontre aquele que fechou por último, mas um...

P.S. E nãoMODE_TRADES, mas MODE_HISTÓRIA.


a lógica é clara.... mas para mim é impossível escrevê-la em meu código... é muito complicado... nunca trabalhei com laços de força bruta antes... simplesmente não precisei dela... portanto, é uma floresta escura :))) e as voltas que vi não são muito claras para mim... é claro que eles tentam algo... e é isso.

Você poderia me dar o exemplo mais simples... mas com explicações, para que eu entenda o que está acontecendo no loop e onde?

 
lottamer:

talvez você possa refazer duas opções a partir daqui https://forum.mql4.com/ru/38949/page5#434244

Função TimeOpenLastPos().

Esta função retorna o tempo da última posição aberta.

Precisamos de um tempo aberto da última posição FECHADO.

ou

Função SegundosPósAbrirPos().

Esta função retorna o número de segundos desde que a última posição foi aberta.

E DEVE ser em horas.... ao invés de segundos.

este está mais próximo.

A primeira opção pode ser usada com mudanças mínimas (procure o histórico e o que você precisa). Você quer que ele não abra mais de um negócio por dia?
 
lottamer:
Mas outra questão ... a função deSegundosPósAbrirPós() . se a EA foi desativada, esta função devolverá o valor do último negócio FECHADO ontem? (não pode ser verificado - o mercado está estagnado)


Ele o fará.

Mais precisamente, ela será, mas não fechada, mas aberta.

 
rigonich:


Na prática, isto é usado em todas as operações que trabalham com ordens. É preciso primeiro selecionar uma ordem e depois fazer algo com ela (ver as informações da ordem, enviar uma ordem de serviço ao servidor para modificá-la ou fechá-la). Há duas maneiras de selecionar ordens no terminal, por ticket, que é o número atribuído à ordem no servidor que não muda para uma determinada ordem, ou pelo número da ordem (índice) sob o qual a ordem é armazenada no terminal. Este número pode mudar a cada tick, dependendo de quais e quantos pedidos são abertos, definidos, fechados ou excluídos.

Para trabalhar com pedidos, há ciclos de avaliação de pedidos.


Bem, por exemplo, eu tenho uma ordem limite na abertura de D1. TP e SL podem não funcionar por alguns dias, se verificarmos a existência de um pedido, ele estará disponível e não abriremos um novo. Portanto, não é bom. Assim, o comércio potencial será perdido.
 
hoz:

Bem, por exemplo, eu tenho uma ordem limite de abertura D1. TP e SL podem não funcionar por alguns dias, se verificarmos se há um pedido... ele estará disponível e não abriremos um novo. Portanto, não é bom. Assim, o comércio potencial será perdido.

Em seguida, verifique os horários de abertura de todos os pedidos, e veja se há um aberto hoje.
Razão: