[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 589

 
ilunga:
Porque estas são variáveis locais que já na segunda carrapato de loja de lixo em vez de bilhete

Muito obrigado! Pensei nisso honestamente o tempo todo!
 
Roman.:


Ver trailer. Coloque seu conteúdo na pasta Experts do terminal. Selecione o cronograma do instrumento em que você está interessado e coloque-o no quadro do Expert Advisor,

Definir parâmetros para abrir uma ordem em variáveis externas MetaTrader:

Em seguida, você espera pela formação de uma nova barra no prazo do instrumento que você selecionou.

Quando o Expert Advisor abre um pedido do mercado, compare o tempo de sua abertura com o tempo de abertura de um novo bar.

Roman, como prometido, quero lhe mostrar o que acontece na prática quando se trabalha com o Consultor Especialista na "abertura na abertura". Primeiro, a EA é acionada no próximo tick após colocá-la no gráfico de 1 hora e abre uma segunda negociação na abertura da próxima vela. Por que, ainda não consigo entender. Em segundo lugar, o preço de abertura do negócio não coincide com o preço de abertura de uma vela nova:

2012.02.24,12:00,1.3392,1.3405,1.3383,1.3387,768 - a vela se abre em 1.3392 e o pedido é acionado em 1.3390. Especifico um deslize de 1 ponto nos ajustes. Se eu entrasse 0 pips, a EA não acionaria de forma alguma.

Eu anexei o registro. O importante para mim ainda é que a ordem de abertura coincidiu com o preço de abertura do candelabro.

 

Olá, senhores. Eu gostaria de um esclarecimento.

Estou correto para entender que se no código os comandos OrderDelete e OrderSend são escritos sequencialmente e se o EA recebe um sinal para executar ambos os comandos (retirada + definição) no tick #1, então:

- estes dois comandos não podem ser executados no mesmo tick # 1, e sua execução é esticada por pelo menos 3 ticks, e

- no tick #1 o comando OrderDelete é emitido;

- após o OrderDelete ter sido submetido, somente com o próximo tick #2 o resultado é devolvido, e somente agora com o mesmo tick #2 o comando OrderSend pode ser submetido;

- o resultado do comando OrderSend só será conhecido no tick #3.

É este o caso?


E é verdade que não há possibilidade de enviar dois comandos para a MT no mesmo carrapato?

Estou escrevendo um EA em MT4.

Obrigado.

 
Les:

Olá, senhores. Eu gostaria de um esclarecimento.

Estou correto para entender que se no código os comandos OrderDelete e OrderSend são escritos sequencialmente e se o EA recebe um sinal para executar ambos os comandos (retirada + definição) no tick #1, então:

- estes dois comandos não podem ser executados no mesmo tick # 1, e sua execução é esticada por pelo menos 3 ticks, e

- no tick #1 o comando OrderDelete é emitido;

- após o OrderDelete ter sido submetido, somente com o próximo tick #2 o resultado é devolvido, e somente agora com o mesmo tick #2 o comando OrderSend pode ser submetido;

- o resultado do comando OrderSend só será conhecido no tick #3.

É este o caso?


E é verdade que não há possibilidade de enviar dois comandos para a MT no mesmo carrapato?

Estou escrevendo um EA em MT4.

Obrigado.

Um tique é uma nova citação. E não há conexão entre os comandos OrderDelete e OrderSend

Se houver novidades e deslizes, então, quando uma simples OrderSend for executada, uma dúzia de tiquetaques terá passado. E se o mercado estiver em um flat noturno, ambos os comandos podem ser executados dentro de um tick

 
Les:

Tudo depende da rapidez com que os carrapatos andam. Em geral, funções que retornam um valor, OrderDelete, OrderSend, etc. não são executadas de forma assíncrona, ou seja, até que toda a operação seja passada e um código de erro seja emitido (ou NO_ERROR em caso de sucesso), o próximo operador não será executado. Outra coisa é que vários carrapatos podem funcionar durante este tempo, mas não serão processados pela função start().


Também pode haver uma colisão quando, por exemplo, uma ordem aciona uma perda de estoque e você tenta abrir/fechar outra ordem com o mesmo tique. Então o servidor pode, em alguns casos, não permitir que você execute a operação.


Ou seja, a resposta às suas perguntas é não, não é))

 
ilunga:

Um tique é uma nova citação. E não há conexão com OrderDelete e OrderSend comando tempo de execução

Se houver novidades e deslizes, no momento em que um simples OrderSend é executado, uma dúzia de tiquetaques já passaram. E se o mercado estiver em um flat noturno, então ambos os comandos podem ser executados dentro de um único tick.

MT, tanto quanto sei, puxa informações do servidor via ticking (e o servidor, por sua vez, dá respostas sobre comandos simultaneamente com o envio de novos ticks, otimiza os custos por tempo). E antes que um novo tique chegue, nada se sabe. Era isso que eu queria dizer. Mas talvez eu esteja errado nessa suposição? A pergunta tem mais a ver com a segunda opção que você mencionou, quando o tique é lento, em vez de uma dúzia de carrapatos.

Entendi corretamente, portanto, que obter uma resposta no comando nº 1 não é um pré-requisito para ir ao comando nº 2 e processá-lo completamente?

A resposta do comando é a parte "não essencial" do comando? Sua presença não é crítica para passar para o próximo comando?

Entramos em uma discussão com alsu abaixo, e acho que assumi o mesmo que ele: que ter uma resposta é fundamental. Você escreve que dois comandos podem ser executados em um único tique. Então as informações do servidor vêm sem nenhuma conexão com o fluxo de cotação?


Obrigado.

 
alsu:
Tudo depende da rapidez com que os carrapatos andam. Geralmente as funções, que retornam um valor, OrderDelete, OrderSend etc. não são executadas de forma assíncrona, ou seja, até que toda a operação seja passada e um código de erro seja retornado (ou NO_ERROR em caso de sucesso), o próximo operador não será executado. Outra coisa é que vários carrapatos podem funcionar durante este tempo, mas não serão processados pela função start().


Também pode haver uma colisão quando, por exemplo, uma ordem aciona uma perda de estoque e você tenta abrir/fechar outra ordem com o mesmo tique. Então o servidor pode, em alguns casos, não permitir que você execute a operação.


Isto é, a resposta a suas perguntas é não, não é))

Como não é assim, se se revela exatamente "assim", de acordo com suas próprias palavras? )) Ou estou entendendo algo errado novamente? Em resposta você escreve que as funções são executadas de tal forma que o próximo operador é executado somente após o código de erro do operador anterior ser processado. Acho que era isso que eu queria dizer: que "dois comandos não podem ser executados no mesmo tick #1", porque a resposta - aquela resposta ou código de erro - aparece mais cedo com o novo tick. Ou não é assim? Ou as respostas de comando vão em um fluxo de tempo separado, sem relação com o fluxo de cotação? Talvez meu erro tenha sido assumir que os resultados da execução do comando são devolvidos com uma nova citação?

Naturalmente, eu estava me referindo principalmente à situação em que os carrapatos são lentos.

 
Por favor me diga se é possível que o Expert Advisor feche apenas negócios positivos, apesar do sinal do indicador para fechar o negócio e fechá-los nos próximos sinais do indicador, à medida que eles saem para lucrar?
 
Les:

A MT, pelo que entendi, retira informações do servidor potikovo (e o servidor, por sua vez, dá respostas de comando ao mesmo tempo em que envia novos tiquetaques, o que otimiza os custos de tempo). E antes que um novo tique chegue, nada se sabe. Era isso que eu queria dizer. Mas talvez eu esteja errado nessa suposição? A pergunta tem mais a ver com a segunda opção que você mencionou, quando o tique é lento, em vez de uma dúzia de carrapatos.

Entendi corretamente, portanto, que obter uma resposta no comando nº 1 não é um pré-requisito para ir ao comando nº 2 e processá-lo completamente?

A resposta do comando é a parte "não essencial" do comando? Sua presença não é crítica para passar para o próximo comando?

Entramos em uma discussão com alsu abaixo, e acho que assumi o mesmo que ele: que ter uma resposta é fundamental. Você escreve que dois comandos podem ser executados em um único tique. Então as informações do servidor vêm sem nenhuma conexão com o fluxo de cotação?


Obrigado.

As respostas de comando e os carrapatos são separados e não relacionados. Se houver um apartamento morto, você pode "pegar" várias ordens abertas/fechadas no mesmo carrapato.
 

Olá. Eu não sou nada bom em programação. Eu não tenho tanta experiência em codificação, portanto, por favor, ajude-me a adicionar posições de fechamento porStopLoss e TrailingStop ao meu código. O Expert Advisor não é meu, mas a estratégia não é ruim, então a tentativa e o erro de refazer a EA para mim - e para ser honesto, eu já estou estourando minha mente, e não há muito tempo - trabalho. Já experimentei e testei e, francamente, não tenho tempo a perder - tenho que trabalhar. E aqui está o que eu faço com ele:


//+------------------------------------------------------------------+
//|                                             stohastic_system.mq4 |
//|                                                    Анатолий      |                                                                  |
//+------------------------------------------------------------------+

extern double Lots=0.4;
extern int TakeProfit=50;
extern int NWave=2;
extern int K=9;
extern int D=3;
extern int slowing=5;
extern int Average_method=2;
extern int price_field=0;

int K_level=0;
int down=0;
int up=0;


int init()
  {

   return(0);
  }

int deinit()
  {

   return(0);
  }

int start()
  {
    int ticket=0;
    double stoch_1=iStochastic(NULL,0,K,D,slowing,Average_method,price_field,MODE_MAIN,1);
    double stoch_2=iStochastic(NULL,0,K,D,slowing,Average_method,price_field,MODE_MAIN,2);
    double stoch_3=iStochastic(NULL,0,K,D,slowing,Average_method,price_field,MODE_MAIN,3);
    int Hour_curr=TimeHour(TimeCurrent());
    
    if ((stoch_1>90)&&(stoch_2>70)) K_level=90;
    if ((stoch_1<10)&&(stoch_2<30)) K_level=10;  
    if(OrdersTotal()<1)
      {        
        if((Hour_curr>=1)&&(Hour_curr<24))//проверка сигналов только в этот промежуток времени
          {
            if((K_level==10)&&(stoch_1>10))//сигнал на покупку
              {
                RefreshRates();
                Print("Сигнал на покупку. stoch_1=",stoch_1," stoch_2=",stoch_2);
                ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,Ask+TakeProfit*Point,"buy_order1",1,0,Blue);
                
                K_level=10; 
                down=0;               
              }
            if((K_level==90)&&(stoch_1<90))//сигнал на продажу
              {
                RefreshRates();
                Print("Сигнал на продажу. stoch_1=",stoch_1," stoch_2=",stoch_2);
                ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,10,0,Ask-TakeProfit*Point,"sell_order1",1,0,Red);
               
                K_level=90;
                up=0; 
              }
          }
      }
    
   
   
    return(0);
  }
   
Arquivos anexados:
Razão: