Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 220

 
danya-asg:

Compreendi meu erro, mas não entendi como resolvê-lo. A tarefa normalmente é iniciada a cada segundo, mas o tempo desde o início da vela atual não é contado corretamente.

A função Segundos() sai segundos dos dados do último tick conhecido, mas preciso de alguma forma contar o número real de segundos desde a abertura da vela de minuto no momento em que a função é chamada, mesmo que não tenha havido nenhum tick nos últimos segundos.

TimeSeconds (TimeLocal()) ou ( TimeLocal() - Time[0]) também não funcionará, porque a hora local pode diferir do servidor em vários segundos. Como resolver o problema?


Você temOnTimer() funcionando a cada segundo,

void OnTimer()
{
OnTick(); //-- старт каждую секунду
}
 
Alekseu Fedotov:


Você temOnTimer() funcionando a cada segundo,


Mas para o trabalho correto do programa eu preciso que ele mostre o tempo do servidor a cada segundo, e aqui depende se o próximo tick chegou ou não. Se não for assim, então o ontimer é iniciado mas mostra um atraso de qualquer forma, esse é o problema.
 

A única coisa que me ocorreu até agora, mas é um pouco tortuosa:

int sek
void OnTick()
{
if(Seconds() > sek)
sek = Seconds ();
Clicker (); //-- старт каждый тик
}
void OnTimer()
{
sek = TimeSeconds(TimeLocal());
Clicker (); //-- старт каждую секунду
}

E para fazer isso, tive que configurar o computador para sincronizar o tempo a cada 10 minutos.

 
danya-asg:

A única coisa que me ocorreu até agora, mas é um pouco tortuosa:

E para fazer isso, tive que configurar o computador para sincronizar o tempo a cada 10 minutos.


Você tem que fazer um timer de 100-200ms de milissegundo, e trabalhar inteiramente dentro dele.
Os segundos são muito longos, e eles escorregam com freqüência.

EventSetMillisecondTimer(200);
GetTickCount();
 

Não tenho idéia do que fazer no início, no meio e no fim. O problema é fazer uma coruja em um indicador, e a parada para arrastar 2 velas após a entrada, se o negócio for contra a tendência atual, então feche o negócio e abra uma inversão, revertendo a parada da mesma forma. Não tenho idéia de como fazer uma constante de 20 e 80 como ponto de entrada e saída.

Arquivos anexados:
f9h46khtl1.png  29 kb
 
novikov433:

Não tenho idéia do que fazer no início, no meio e no fim. O problema é fazer uma coruja em um indicador, e a parada para arrastar 2 velas após a entrada, se o negócio for contra a tendência atual, então feche o negócio e abra uma inversão, revertendo a parada da mesma forma. Não tenho idéia de como fazer constantes 20 e 80 como pontos de entrada e saída.

Perdoa-me, idiota bêbado... Mas vou lhe dizer o seguinte: se você tem tanta certeza de que "este TS não vai falhar" o que o impede de ganhar $20 manualmente e encomendar este EA de freelancers? Garanto que a maioria das pessoas decentes de lá não distribuirá este TS, muito menos o assessor em qualquer lugar...
 
Alexey Viktorov:
Perdoa-me, idiota bêbado ... Mas eu lhe digo o seguinte: se você tem tanta certeza de que "este TS não vai falhar", o que o impede de ganhar $20 manualmente e encomendar este EA em freelancer? Posso assegurar-lhes, a maioria das pessoas decentes lá e não distribuirei este TS, muito menos o assessor em qualquer lugar ...

Quero aprender como fazer um EA. Talvez o mercado mude e eu tenha que pagar mais, por exemplo, para mudar um pouco o algoritmo?

Não sei se realmente posso fazer isso com algum construtor de corujas, mas prefiro entender as funções básicas como fazer uma parada em um determinado lugar ou encomendar uma ordem para negociar em determinados dias.

Não sei por que devo fazer 1,2,3 etc. mesmo no construtor e por que devo conectar tudo por setas em tal ordem. Quem em geral estuda mql 4 e não cria cursos como os guerreiros da Internet que não têm nada para explicar por que isso acontece dessa forma, em palavras, você não fará nada de novo por si mesmo e terá que copiar seu código .... Eles sabem que ordem é responsável pelo quê, e não apontaram apenas para o aleatório ..... Bem, deixe os profissionais fazerem pirâmide, lote dinâmico, parada inteligente; minha tarefa é diferente - baixar os filtros necessários e entender a essência da formação de tendências. Obrigado por sua ajuda!

 
novikov433:

Quero aprender como fazer um EA. Talvez o mercado mude e eu tenha que pagar mais, por exemplo, para mudar um pouco o algoritmo?

Quanto à possibilidade de fazer um TS com algum construtor de corujas, deve ser realista compreender as funções básicas como fazer uma parada em um determinado lugar ou ordenar a negociação em determinados dias.

É realista escrever TOR para ATC, e no TOR especificar que seria comentado todas as linhas - você pagará um pouco mais, mas verá como e o que funciona, e então, gradualmente, você fará mudanças no código de trabalho e observará as mudanças - e assim iniciará a auto-treinamento.
 
novikov433: ... querer ... entender como fazer uma EA ... quero entender como fazer uma EA ... quero entender como fazer uma EA ... mas esta EA não deve estar realmente perdendo porque as ordens deficitárias são movidas para o Breakeven e eu só preciso esperar pela tendência de movimentação ... então eu já estou trabalhando nisso ...
Caro novikov433! Como você conhece as características simbólicas do robô comercial, você tem que ter cuidado ao escrever seu robô comercial, e você tem que ter cuidado ao escrever seu robô comercial! Você pode usar um exemplo simples. Eu dou uma ordem a minha esposa (ordem): compre um balde de batatas de manhã cedo no mercado, e às 10 horas (análise fundamental) o preço sobe - venda. Mas às vezes um caminhão cheio de batatas chega às 10h30 (notícias). E o preço (nas notícias) cai instantaneamente e dura até o final do dia, ou mesmo durante a semana inteira. Eu coloco um Stop Loss - se o preço cair 10 rublos, eu vendo assim que posso (ao preço de mercado). Como mudar o pedido, para evitar perdas. Se esta variante for interessante - escreva seu e-mail em uma mensagem.
 
Olá. Por favor, ajude-me a lidar com um erro ao testar no testador. Durante os testes, em todos os carrapatos, meu consultor especializado abre a 1ª venda, a condição não foi aprovada e ela a elimina. A 2ª vendedtop é aberta e fechada, embora a condição não tenha sido acionada. Então, no registro aparece uma tentativa de fechar a compra2, bilhete desconhecido para a função de fechamento do pedido. Estou colando o código desde que estou trabalhando e algumas imprecisões podem aparecer. O bloqueio de pedidos é normal
Symb=Symbol();                               
   Total=0;                                     
   for(int i=1; i<=OrdersTotal(); i++)          
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) 
        {                                       
         if (OrderSymbol()!=Symb)continue;      
         if (OrderType()>1) continue;
         if (OrderType<=1)                     
            {
             Total++;                               
             if (Total>1)                           
               {
                Alert("Несколько рыночных ордеров. Эксперт не работает.");
                return;                             
               }
             Ticket=OrderTicket();                  
             Tip   =OrderType();                    
             Price =OrderOpenPrice();               
             SL    =OrderStopLoss();                
             TP    =OrderTakeProfit();              
             Lot   =OrderLots();                    
            }
        }

o bloco de fechamento também não parece levantar muitas questões, as condições se mostraram simplificadas:

while(true)                                  
     {
      if (Tip==0 && Cls_B==true)                
        {                                       
         Alert("Попытка закрыть Buy ",Ticket);
         RefreshRates();                        
         Ans=OrderClose(Ticket,Lot,Bid,2);      
         if (Ans==true)                         
           {
            Alert ("Закрыт ордер Buy ",Ticket);
            break;                              
           }
         return;                                
        }
 
      if (Tip==1 && Cls_S==true)                
        {                                       
         Alert("Попытка закрыть Sell ",Ticket);
         RefreshRates();                        
         Ans=OrderClose(Ticket,Lot,Ask,2);      
         if (Ans==true)                         
           {
            Alert ("Закрыт ордер Sell ",Ticket);
            break;                              // Выход из цикла закр
           }
         return;                                // Выход из start()
        }
      break;                                    // Выход из while
     }

seria muito apreciado.