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

 
Arles:
Favor aconselhar como resolver o problema: A mesma EA está em vários gráficos, um sinal para abrir uma ordem aparece em dois gráficos ao mesmo tempo, por exemplo. No entanto, precisamos da segunda ordem para não abrir. A EA tem um cheque para um pedido aberto, mas isso não ajuda porque a primeira EA tem que abrir o pedido e a segunda também envia um pedido para abrir o pedido. Você tem alguma solução?
Não é muito claro para que fins são utilizados vários EAs idênticos em vários gráficos. - Com base neste entendimento, seria mais lógico aconselhar algo. Entretanto, com base nas informações de que dispomos, se você quiser apenas uma EA para negociar, você pode desativar a segunda EA de negociar tanto nas configurações (se alguma for fornecida dentro da EA) quanto na guia "Geral" - Permitir que a EA negocie (desmarque a caixa de seleção).
A propósito, todos os Expert Advisors não trabalham em paralelo no mesmo terminal, mas sequencialmente. - Até o primeiro terminar seu trabalho, o segundo não processará dados. Portanto, se a EA for escrita corretamente, ou seja, se ela verificar o pedido feito, então a segunda já levará em conta este pedido. - Esta é uma delas. Mas isto só acontecerá se os Conselheiros Especializados forem criados para trabalhar coerentemente. Digamos que eles têm a mesma Magik e a mesma contabilidade para a Gestão do Dinheiro. Caso contrário, somente desativando os EAs "supérfluos". - Então por que colocá-los em...?
 
Chiripaha:
Não é muito claro para que fins são utilizados vários EAs idênticos em vários gráficos.

O Expert Advisor apenas analisa o par sobre o qual ele está pairando. Em qual par o sinal aparece primeiro, ele abre uma ordem. Mas às vezes um sinal aparece em dois pares ao mesmo tempo. E, por estranho que pareça, 2 ordens são abertas, embora haja um cheque no Expert Advisor para cada ordem em aberto e este não deve abrir a segunda ordem. Isto é necessário porque não temos dinheiro suficiente no depósito.

Até que o 1º não tenha terminado o trabalho, o 2º não processará dados.

Sim, mas quando a 1ª terminou o trabalho e abriu um pedido, a 2ª, tendo começado a trabalhar, por um curto período de tempo, NÃO vê que já existe um pedido. Ou ele começa a trabalhar antes da abertura do pedido.
--

Mais uma coisa: quando o primeiro EA é Sleep(1000), o segundo EA espera ou começa a funcionar?

 

Boa tarde a todos!

Codificou a seguinte idéia

Condição N1 ...Se alta[1] excede um máximo de X

e, ao mesmo tempo

Condição N2 - A diferença entre Alto[1] e Baixo da primeira das próximas 150 velas >= 150 p.

------------------------------------------------------------------

Ação N1 . Eliminar pedido anterior

Ação N2 ..Colocar ordem pendente

Ação N3 . Atribuir valores às variáveis.

PROBLEMA. Apesar do fato de que a ordem pendente deve ser colocada se não houver ordens no mercado, ou a última ordem não for colocada na barra atual. se (ot==0|| last_order_bar>0)

Quando a Condição N1 e a Condição N2 são cumpridas, as ordens pendentes SEVERAL são colocadas simultaneamente.

Quero colocar apenas UM pedido pendente.

-----------------------------------------------

Os valores ot e last_order_bar são calculados acima neste código

                                                                                                                        
                                                                                                                
int last_order_bar = 0;                                                                                                                 
int ot = OrdersTotal();                                                                                                                 
                                                                                                                        
 if (ot>0) //если есть ордера в рынке                                                                                                                   
 {                                                                                                                      
   if (OrderSelect (ot-1,SELECT_BY_POS)) //выбрали последний ордер                                                                                                                      
      if ( OrderType ()==OP_SELLSTOP) //проверили тип
        last_order_bar = iBarShift (Symbol (),0,T ); //запомнили, на каком  баре открыт последний ордер (если он есть)                                                                                                                  
 }                                                                                                                      
if(High[1] > X )
 {
   
   for(int i=1;i<150;i++)
     {
      if((High[1]-Low[i])>=1500*Point)//
      break;         //
             {
     if (ot>0) 
         {
           bool R = OrderDelete(OrderTicket());  
         }
if(R==0)                      //если последний выставленный SELLSTOP удален
         {
if (ot==0 || last_order_bar>0)        
int Ticket=OrderSend(Symbol(),OP_SELLSTOP,0.1,iHigh( Symbol (), 0,1)-1500*Point,1,iHigh( Symbol (), 0,1),iHigh( Symbol (), 0,1)-1610*Point,"jfh",123 );//выставить новый SELLSTOP       
if (Ticket>0)                // если SELLSTOP выставлен
 N = (OrderTicket());        //запомнить в глобальную переменную N тикета данного SELLSTOP .
 T = Time [0];               //запомнить в глобальную переменную время выставления данного SELLSTOP
 X=iHigh( Symbol (), 0,1);   //запомнить в глобальную переменную High свечи N1 после которой был выставлен данный SELLSTOP
   
 }
 }
 }
 }
}
 }   
                        
return(0);
 
Arles:

O Expert Advisor apenas analisa o par sobre o qual ele está pairando. Em qual par aparece primeiro um sinal, ele abre uma ordem. Mas às vezes um sinal aparece em dois pares ao mesmo tempo. E, por estranho que pareça, duas ordens são abertas, embora o Consultor Especialista tenha um cheque para qualquer ordem aberta e não deve abrir a segunda. Isto é necessário porque não temos dinheiro suficiente no depósito.

Sim, mas quando a primeira terminou seu trabalho e abriu uma ordem, a segunda, tendo começado a trabalhar, não vê por um curto período de tempo que a ordem já existe. Ou ele começa a trabalhar antes da abertura do pedido.
--

Mais uma coisa: quando a primeira EA é Sleep(1000), a segunda EA espera ou começa a funcionar?

Em relação à primeira pergunta: estipulei que se os EAs forem escritos corretamente. É claro que pode acontecer da maneira que você descreveu, se não houver um cheque na EA para uma ordem colocada (aberta) e para o cálculo da administração do dinheiro - tudo isso depende do nível (e preguiça) do programador - se ele pensou nessas coisas e as prescreveu na EA ou não. Se tudo for implementado corretamente, então nenhuma de suas preocupações acontecerá. - O sinal, sim, pode aparecer em 2 pares simultaneamente, mas (ver o posto anterior), os Conselheiros Especialistas trabalham sequencialmente. Portanto, até que o primeiro EA não tenha processado as citações, o próximo EA não começará a funcionar. - Penso que esta é a razão pela qual decidimos usar ordem seqüencial (mesmo que fosse possível processar citações em paralelo, seria um tópico diferente para discussão).

Depende também do nível da EA. Uma vez que todas as coisas que você perguntou são muito difíceis de prescrever - um trabalho não muito pequeno, exigindo conhecimento de finanças. É por isso que os EAs tendem a ser "simples", e estão orientados a receber a conta completa da moeda corrente. Normalmente, uma moeda é negociada. Porque, para negociar várias moedas, por exemplo, você precisa ter um tipo de depósito bem diferente, e sistemas tão simples não são realmente aplicáveis lá. A única exceção a isto seriam as operações (esqueci o termo exato, vou reformular a frase de forma diferente) de hedging, quando um abre a um preço e reabre imediatamente a outro (ou mesmo vários) - a diferença é para si mesmo. Mas este é um tipo diferente de EA e tudo será contabilizado lá (tudo em um). - E em geral, na minha opinião, se não há mais dinheiro do que liquidez em um par, então negociar em todos os pares ao mesmo tempo é um mau tom. (mas esta é minha opinião particular) Portfólios, etc. - Isto não é para comércio especulativo. Por alguma razão, as pessoas não levam isso em conta de forma alguma. - Se você não é uma empresa que produz ou comercializa internacionalmente, então você não precisa de muitas moedas. - Este é o meu ponto - por que eles geralmente não implementam tais blocos para contabilidade de diferentes moedas em EAs - porque eles são irrelevantes.

E à segunda pergunta: francamente falando, eu mesmo tenho esta pergunta em aberto - não tenho certeza de como o terminal reage quando o Sleep(1000) funciona - estou apelando para aqueles que sabem disto para me dar uma resposta. Idealmente, o terminal neste momento só processará os preços de fluxo - ou seja, receberá cotações e desenhará gráficos e indicadores. Mas enquanto esta EA estiver "esperando", ela não passará sua vez para mais ninguém. - Mas esta é a minha suposição, da qual não tenho certeza absoluta. Talvez, outra exceção a esta "fila" sejam os roteiros que podem ser lançados para execução enquanto a EA aguarda. - Eu tenho a mesma pergunta.

Entretanto, eu saio desta ignorância construindo meus Conselheiros Especializados com base na correção do primeiro ponto.

 
solnce600:

Boa tarde a todos!

Codificou a seguinte idéia

Condição N1 ...Se alta[1] excede um máximo de X

e, neste caso

Condição N2 - A diferença entre Alto[1] e Baixo da primeira das 150 velas seguintes >= 150 p.

------------------------------------------------------------------

Ação N1 . Eliminar pedido anterior

Ação N2 ..Colocar ordem pendente

Ação N3 . Atribuir valores às variáveis.

PROBLEMA. Apesar do fato de que a ordem pendente deve ser colocada se não houver ordens no mercado, ou a última ordem não for colocada na barra atual. se (ot==0 || last_order_bar>0)

Quando a Condição N1 e a Condição N2 são cumpridas, as ordens pendentes SEVERAL são colocadas simultaneamente.

Preciso apenas DE UM pedido pendente para ser feito.

: )) Andrey, você está fazendo aquelas perguntas que já estão explicadas no livro didático. Veja o exemplo do Terminal no tutorial, onde os princípios e a lógica de como as ordens precisam ser consideradas são descritos em detalhes. - Então, a maioria de suas perguntas desaparecerá por si só. Em geral, o tutorial é construído sobre o fato de que a estrutura de QUALQUER Expert Advisor competente é completamente apresentada como um exemplo. - Esta é a beleza da coisa. + conceitos teóricos básicos de programação são dados. Mas há nele um enigma - não é destinado ao leitor preguiçoso - ele decorre da estrutura do que está escrito. Ou seja, para remover perguntas sobre pontos específicos você deve ler o livro completo, mas poucos concordarão em recontar (o livro-texto).

Você está construindo pilhas sobre a contabilidade das encomendas. - Você precisa de uma abordagem mais simples. A ordem está lá ou não - e não importa em que barra (sob suas condições) ela está aberta. - Devido a estas complexidades, ficamos confusos ao considerar pedidos e condições. - Daí, os erros algorítmicos, que qualquer programador deve procurar. Mudar a lógica de escrita do programa e os erros algorítmicos desaparecerão (por si só).

 
OK. Obrigado.
 
Arles:

O Expert Advisor apenas analisa o par sobre o qual ele está pairando. Em qual par o sinal aparece primeiro, ele abre uma ordem. Mas às vezes um sinal aparece em dois pares ao mesmo tempo. E, por estranho que pareça, 2 ordens são abertas, embora haja um cheque no Expert Advisor para cada ordem em aberto e este não deve abrir a segunda ordem. Isto é necessário porque não temos dinheiro suficiente no depósito.

Isto é bastante elementar! O primeiro Expert Advisor abre um pedido. Se não importa qual EA abriu a ordem... então crie uma condição em ambas. Criar uma função booleana que encontre a última ordem aberta, e respectivamente extrair o tempo de sua abertura. Seeste tempo de abertura forigual à abertura da barra atual, saímos da função com TRU. Coloque a função no início dapartida e se a modalidade for TRU, então saia da partida.
 
Chiripaha:

E quanto à segunda pergunta: para ser honesto, eu mesmo tenho esta pergunta aberta - não tenho certeza absoluta de como o terminal reage quando o Sleep(1000) funciona - estou apelando para aqueles que sabem - para que me dêem uma resposta. Idealmente, o terminal neste momento só processará os preços de fluxo - ou seja, receberá cotações e desenhará gráficos e indicadores. Mas enquanto esta EA estiver "esperando", ela não passará sua vez para mais ninguém. - Mas esta é a minha suposição, da qual não tenho certeza absoluta. Talvez, outra exceção a esta "fila" sejam os scripts que podem ser lançados para execução enquanto a EA aguarda. - Eu tenho a mesma pergunta.

Entretanto, eu tento sair desta ignorância construindo meus Conselheiros Especializados com base na correção do primeiro ponto.



Tanto quanto sei, depois de dormir() o Expert Advisor simplesmente adormece, ou seja, seu trabalho é pausado e neste momento ele não está recebendo citações nem reagindo a nada. Assim, o terminal passa a "fila" para outro.

Se alguém discordar, por favor me corrija!

 
hoz:


Pelo que entendi, quando o Sleep() foi processado, o Expert Advisor simplesmente adormece, ou seja, seu trabalho é suspenso e neste momento o Expert Advisor recebe citações e não reage a absolutamente nada. Assim, o terminal passa a "fila" para outro.

Se alguém discordar, por favor me corrija!

Eu não estou preparado para concordar. - Porque desta posição se perde a lógica do trabalho correto e do cálculo tanto do dinheiro quanto das posições por parte dos Expert Advisors. - Esta é uma delas. Segundo. - Se minha EA está dormindo, por exemplo, por 100 milissegundos, e outra começa a trabalhar ao mesmo tempo, então o que acontecerá, que assim que esses 100 milissegundos passarem, a outra terá que parar seu trabalho... e passá-lo de volta para este no meio e assim por diante indefinidamente. Por outro lado. Tenho visto (não raro) em EAs quando eles enviam para "dormir" por minutos e muitas vezes a cada bloco de execução. - Então, se todas as outras corujas não estão trabalhando durante este tempo, também é de alguma forma errado. - Portanto, a questão é bastante pertinente. Gostaria de entender a lógica de operação neste ponto. Mas não encontrei nenhuma explicação detalhada em documentos oficiais.

Mas de dois males eu escolheria o último. Neste caso, eu simplesmente deixaria a coruja da qual tenho certeza. Caso contrário, tudo na mesma: pelo menos a correção dos recálculos é preservada, embora seu trabalho seja retardado.

O problema não é tão trivial quanto parece. - A questão é que minhas experiências mostraram que se a caixa"Permitir o comércio de EAs" não for verificada, então o trabalho da EA não pára - todos os cálculos são feitos da mesma maneira em cada tic tac. Apenas as transações da EA não são enviadas para o servidor. Mas, se estes cálculos forem preenchidos com estes "deslizes" (não muito corretamente), então se houver 5-10 destes EAs, então eles podem especificamente retardar a execução do EA real que está sendo negociado atualmente.

Sim, alguns programadores colocam controle sobre as permissões de comércio e saltar o trabalho de coruja nesta base. Mas isso não é feito com mais freqüência. E se o código estiver fechado, não podemos de forma alguma entender se a operação é de frenagem ou não (e qual coruja exatamente). - Agora vou dar uma olhada neste tópico em busca no fórum. Algo desacelerou.

Obrigado a Arles pela pergunta, por me lembrar e me atualizar. Eu não tinha experiência suficiente para entender o que estava escrito sobre o assunto. Vou fazer isso novamente agora.

 
Arles:

O Expert Advisor apenas analisa o par sobre o qual ele está pairando. Em qual par aparece primeiro um sinal, ele abre uma ordem. Mas às vezes um sinal aparece em dois pares ao mesmo tempo. E, por estranho que pareça, 2 ordens são abertas, embora haja um cheque no Expert Advisor para cada ordem em aberto e este não deve abrir a segunda ordem. Isto é necessário porque não temos dinheiro suficiente no depósito.

Sim, mas quando o primeiro terminou seu trabalho e abriu uma ordem, o segundo, tendo começado a trabalhar, não vê por um curto período de tempo que a ordem já existe. Ou ele começa a trabalhar antes da abertura do pedido.
--

Mais uma coisa: quando o 1º EA Dormir(1000) o segundo espera ou começa a funcionar?

Com um pequeno depósito, não se negocia com vários pares (conselho mundial).

Tecnicamente, a fim de fazer diferentes EAs levar em conta o número total de pedidos, podemos tentar este esquema:

    int li_total - OrdersTotal();
    if (li_total == 0) Sleep (1000);
    li_total - OrdersTotal();
    if (li_total == 0) OrderSend();

Não sei se funcionará bem (deve funcionar com 2). Seria mais seguro fazê-lo através de variáveis globais do terminal organizando "Semáforo" trabalhando sequencialmente. Então, não importa quantos Expert Advisors trabalhem em paralelo.

Razão: