Perguntas de um "boneco" - página 56

 
Interesting:

Em contraste com o manipulador de carraças, o temporizador será executado após um certo período de tempo, definido pelo período.

No processamento com temporizador pesado, é claro que é melhor desactivá-lo por um tempo por escorregamento ou primeiro tique (há muitas variantes), mas se o processamento com temporizador não for muito pesado e o período for suficientemente longo, o temporizador pode ser desactivado.

Também no processamento do temporizador pode fornecer uma verificação sobre se é ou não um dia útil.

Se necessário, pode agendar cálculos pesados para o fim-de-semana (por exemplo, auto-optimizaçãoda EA) e executar este processo a partir do temporizador. No final dos cálculos (ou no início dos cálculos), o temporizador pode ser correctamente desactivado.

Quanto aos testes no testador usando a função OnTimer() da EA multi-divisas. Suponhamos que o temporizador é ajustado a intervalos de 10 segundos. Será que vai fazer tic-tac durante todos os fins-de-semana do período de testes? Penso que era isso que Vladimir queria dizer. Assim, se indicarmos ao temporizador que o sábado e o domingo são ignorados, os testes serão muito mais rápidos.
 
tol64:
Quanto aos testes no testador através da função OnTimer() do Expert Advisor multi-moeda. Suponhamos que o temporizador é ajustado a um intervalo de 10 segundos. Vai fazer tic-tac todos os fins-de-semana durante o período de testes? Penso que era isso que Vladimir queria dizer. Assim, se indicarmos ao temporizador que o sábado e o domingo são ignorados, os testes serão muito mais rápidos.

1. Tentei desligar o temporizador aos fins-de-semana quando os cálculos não eram muito complicados, não senti grande diferença (embora houvesse diferenças, claro), agora decidi não desligar o temporizador por enquanto.

2. Sim, se o temporizador estiver definido, não faz diferença no testador ou no modo normal de disparo ocorrerá até que o temporizador seja desligado. Se estamos a falar de um testador, então com um intervalo de 10 segundos, ele tropeçará durante todo o período de teste - a cada 10 segundos.

Ao parar o temporizador durante o fim-de-semana, há várias soluções:

а. Encerrar o temporizador com a escrita do estado a uma variável. Ao primeiro tique pela ferramenta principal (ou por um sinal de "espião") o temporizador pode ser reiniciado. Este método tem desvantagens relacionadas com a probabilidade de carrapato ou atraso de carrapato no mercado ilíquido. A falta de ligação ao servidor comercial também pode ser causada por uma falta de ligação ao servidor comercial.

б. Travões deslizantes, durante um certo período de tempo. O bom é que o período é especificado com precisão, o mau é que neste método, não só o temporizador, mas todo o Expert Advisor ficará inactivo até à X hora.

Embora, todas as posições e ordens serão processadas no testador.

в. É possível realizar uma pausa, aumentando o período de temporização. É conveniente saber com antecedência quando o temporizador tem de "acordar" e o trabalho do perito não é interrompido. Desconfortável pelo facto de ter de manter um registo do temporizador em estado de funcionamento ou em modo de espera.

в. Dividir o enchimento do temporizador em dois grupos, o primeiro é executado o tempo todo (por exemplo, determinando o estado de ligação), e o segundo de acordo com as condições (dias úteis, ligação presente, negociação é permitida, etc.).

 
Interesting:


Se necessário, cálculos pesados podem ser programados para o fim-de-semana (por exemplo, auto-optimizaçãoda EA) e executar este processo a partir do temporizador. No final (ou no início) dos cálculos, o temporizador pode ser correctamente desactivado.

Olá! Tive uma ideia semelhante ontem, mas não tive tempo de escrever um post com perguntas sobre o assunto:

1.Será possível fazer isto? Como isto pode parecer no código, particularmente nas operações de abertura e fecho, ou apenas a sua localização e cálculos-cálculos, isto é, no fim-de-semana no temporizador vai para uma função definida, que rebobina ciclicamente a história, e determina os melhores parâmetros... Para isto não são necessários tiquetaques em linha, e a função irá apenas rodar no ciclo...

2. há em qualquer parte do mundo para ler sobre o assunto, em qualquer ramo?

3.Se aplicado ao campeonato, não será carregado no carro? Esta é provavelmente uma questão para os organizadores.

 
MetaDriver:
Em seguida, calcular tudo no Expert Advisor num prazo adequado, e imprimir o resultado em OnTester(). Não é necessário negociar. Tem algum problema?

Muito obrigado

Tenho outra pergunta, como é quefecho uma posição por tempo, se o preço não chegou nem a tomar nem a parar de perder?

Li as bibliotecas sobre como trabalhar com encomendas... Liguei-o... O programa está a jurar que não tem tal procedimento...

Assim, a minha pergunta é que tipo de código deve ser para fechar a encomenda após um certo tempo (por exemplo 1 dia)

 

AccountInfoDouble(ACCOUNT_BALANCE) != AccountInfoDouble(ACCOUNT_EQUITY)

é assim que tenho de verificar se uma troca está aberta...

OrderTotal ()!=0 não funciona )))) falha muito interessante )

 
papaklass:
Existe PosirionTotal() para posições. EncomendasTotal() apenas para Encomendas pendentes.

se ( PositionsTotal() == 1 )

a mesma coisa ... nenhuma reacção

// abre normalmente

se ( TimeActivation ( 1 )

{

se ( _1_operação == 1 && Comprar ( 0.10 ) == 1 ) { Dormir (600000); }

se ( _1_operação == -1 && Venda ( 0.10 ) == 1 ) { Dormir (600000); }

}

// não pode fechar antes de tomar ou parar

se ( TimeActivation ( 2 )

{

se ( PosiçõesTotal() == 1 ) /// NÃO TRABALHADO)))

{

se ( _1_operação == 1 && Venda ( 0.10 ) == 1 ) { Dormir (600000); }

se ( _1_operação == -1 && Comprar ( 0.10 ) == 1 ) { Dormir (600000); }

}

}

 
BaTTLeBLooM:

Muito obrigado

Portanto, pergunte, que código deve ser aproximadamente, para fechar a encomenda após um certo tempo ( por exemplo 1 dia )

Por favor.

Aproximadamente assim: poupa-se o tempo de abertura numa variável. Acrescentar-lhe imediatamente o período de tempo desejado (por exemplo 1 dia = 60*60*24).

Depois, a cada tick (ou hora), controlar se a hora actual é mais longa do que a hora de controlo. Se for - fecha-se // se (TimeCurrent() > MyControlTime) FecharMinhaPosição();

Документация по MQL5: Дата и время / TimeCurrent
Документация по MQL5: Дата и время / TimeCurrent
  • www.mql5.com
Дата и время / TimeCurrent - Документация по MQL5
 
BaTTLeBLooM:

se ( PositionsTotal() == 1 )

a mesma coisa ... nenhuma reacção

// abre normalmente

se ( TimeActivation ( 1 )

{

se ( _1_operação == 1 && Comprar ( 0.10 ) == 1 ) { Dormir (600000); }

se ( _1_operação == -1 && Venda ( 0.10 ) == 1 ) { Dormir (600000); }

}

// não pode fechar antes de tomar ou parar

se ( TimeActivation ( 2 )

{

se ( PosiçõesTotal() == 1 ) /// NÃO TRABALHADO)))

{

se ( _1_operação == 1 && Venda ( 0.10 ) == 1 ) { Dormir (600000); }

se ( _1_operação == -1 && Comprar ( 0.10 ) == 1 ) { Dormir (600000); }

}

}

Na verdade, não é claro o que escreveu aqui, mas PositionTotal() claramente não tem nada a ver com isto.

Colocar Print() antes de verificar, =1 ?

Print("PositionsTotal=",PositionsTotal());
if ( PositionsTotal() == 1 ) /// НЕ ХРЕНА НЕ РАБОТАЕТ )))
 
tol64:

Konstantin Gruzdev sugeriu um método interessante com "espiões" e "agentes" no seu artigo. )) Mas o seu "agente" ex-Painel de Controlo de Espiões MCM não quer trabalhar para mim.

Vou agora dar uma vista de olhos à variante apresentada no artigo. Até agora, vários peritos em espiões, funciona muito bem.

MetaDriver:

Penso que esta tecnologia não funcionará no testador.

Funciona.

 
MetaDriver:

Por favor.

Aproximadamente desta forma: é necessário armazenar o tempo de abertura numa variável. Acrescentar-lhe imediatamente o intervalo de tempo necessário (por exemplo 1 dia = 60*60*24).

Depois, a cada tick (ou hora), monitorizar se a hora actual é maior do que a hora de controlo. Se for - fecha-se // se (TimeCurrent() > MyControlTime) FecharMinhaPosição();

Dentro de uma variável é uma opção, mas se precisar de um fecho mais fiável, mesmo depois de reiniciar o terminal/conselheiro, pode usar um medjic para identificar a encomenda e verificar a hora da sua abertura.

//закрывает ордера с заданным меджиком по прошествию определенного периода(в сек)
void closeOrderByTime(int magic,int period) {
        MqlTradeRequest request;
        MqlTradeResult tradeResult;
        MqlTradeCheckResult checkResult;
        ulong ticket = -1;
        int cnt = OrdersTotal();
        for (int i=cnt-1; i>=0; i--) {  
                ticket = OrderGetTicket(i);
                if (OrderGetInteger(ORDER_MAGIC) == magic && ticket>0 && TimeCurrent() > OrderGetInteger(ORDER_TIME_SETUP)+period) {
                        request.action = TRADE_ACTION_REMOVE;
                        request.order = ticket;
                        if(OrderCheck(request,checkResult) ) {
                                OrderSend(request, tradeResult);
                        } else {
                                MessageBox("Ошибка");
                        }
                }
        }
}