Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
int Weekday = TimeDayOfWeek(TimeLocal()); //Локальное время |
int Weekdays = TimeDayOfWeek(TimeCurrent()); //Серверное время |
while(IsExpertEnabled()) //До тех пор пока запушенно |
{if(Weekday!=0||Weekday!=6){Exp=true;if(Weekday==1){Info(4,Weekday,0);}} //Если не Сбб. Воск. то разрешено |
if(Weekdays==0||Weekdays==6) //Если Сбб. Воск. то не разрешено |
{
Exp=false;Info(5,Weekdays,0);
if(Weekdays==6){Sleep(86400000);} //Если суббота пауза 24 часа |
if(Weekdays==0){Sleep(3600000);} //Если воскресение пауза 1 час |
}
IsTradeAllowed
Retorna informações sobre a capacidade de negociar com Expert Advisors.
boolIsTradeAllowed();
A segunda forma desta chamada retorna informações sobre a capacidade de negociar por um símbolo especificado em um determinado momento.
boolIsTradeAllowed(
símbolo const string// símbolo
data/hora testada_ hora// hora
);
Parâmetros
símbolo
símbolo [em].
tempo_teste
[em] Tempo.
Valor retornado
Retorna verdadeiro se a EA for permitida a comercialização e o fio estiver livre, caso contrário, retorna falso.
Obrigado, é claro, mas é como dizem para entrar pelo olho de um lugar) Eu também posso colocar uma pausa no euro no servidor 5.0 permitirá isso, e então a cada ciclo de tempo tentar mudar a pausa, se o erro 132 então o mercado está fechado, se normal então o comércio está, mas na hora do comércio este servidor está inundando, eu gostaria de resolver o problema humanamente, não através de "loops", mas este é o MK dos desenvolvedores.
IsTradeAllowed
Retorna informações sobre a capacidade de negociar com Expert Advisors.
boolIsTradeAllowed();
A segunda forma desta chamada retorna informações sobre a capacidade de negociar por um símbolo especificado em um determinado momento.
boolIsTradeAllowed(
símbolo const string// símbolo
data/hora testada_ hora// hora
);
Parâmetros
símbolo
símbolo [em].
tempo_teste
[em] Tempo.
Valor retornado
Retorna verdadeiro se a EA for autorizada a negociar e o fio para realizar as negociações for livre, caso contrário, retorna falso.
Alexander, você está errado)
este funciona muito bem
este funciona muito bem
Obrigado pela dica, mas quando o mercado está aberto, não é correto tentar determinar a possibilidade de trabalhar com pedidos, mas funcionará.
De minha parte, meu raciocínio é o seguinte.
Se for necessário negociar com o símbolo atual, um sinal indireto de que o mercado está aberto é a chegada de novos carrapatos. Assim, o evento OnTick é suficiente e o assunto está encerrado.
Se precisarmos trabalhar com outros símbolos que não o atual, o fato da abertura de negócios no símbolo atual não garante que os negócios sejam executados em algum outro símbolo. Por exemplo, o Expert Advisor foi executado em EURUSD, o horário é 09:00 UTC, e queremos negociar ações americanas, cujo mercado só abrirá às 13:00 UTC. Portanto, a OnTick não vai ajudar. Precisaremos determinar se o mercado se abre por outros símbolos através de tentativas de enviar ordens ao servidor em certos intervalos. O envio de uma ordem uma vez por minuto não é de forma alguma um bombardeio ao servidor, mas uma abordagem bastante normal. O que há de errado com isso?
não tem carrapato, como me foi dito uma vez por servicedesk sobre este problema do dia da semana,
eles sugeriram uma solução como.
TimeDayOfWeek(TimeLocal());
embora não seja totalmente correto, porque o dia da semana pode não ser o mesmo que o dia do terminal.
Uma condição importante era não tentar abrir pedidos, embora eu tivesse recorrido a ela muitas vezes em outros projetos. Para ser honesto, me parece que este é o método mais fácil e mais confiável até agora.
Até agora encontrei a melhor maneira de fazer isto (mas ainda estou procurando, veja abaixo):
1) Determinar se a negociação é permitida "cara a cara" - segunda forma da função IsTradeAllowed() (mencionei-a acima). Se não, então não é permitido :)
2) Compare o tempo da última cotação usando SymbolInfoInteger(<símbolo>, SYMBOL_TIME) com o tempo de uma das sessões de negociação(SymbolInfoSessionTrade()), se o tempo da cotação cair em uma das faixas de sessão, então a negociação é permitida.
3) Verifique se o tempo da cotação não está muito "desatualizado": se há mais de xx minutos (compare SymbolInfoInteger(<symbol>, SYMBOL_TIME) e TimeCurrent(), então pensamos que a cotação está desatualizada e, portanto, não podemos negociar por ela (se eu estiver certo, foi cerca de três minutos)
A desvantagem desta abordagem é a seguinte: pode haver condições quando o comércio do símbolo é impossível, enquanto os carrapatos passam.
Eu não entrei no mecanismo; o desenvolvimento foi feito para um corretor e durante os testes eles ligaram tal modo - carrapatos vão, mas a negociação é impossível. Até agora, ainda não conseguimos superar esta variante.
É justo dizer que eu não encontrei isto no comércio real. Portanto, em condições "normais" a solução parece tolerável. Mas eu ainda estou procurando :)
P.S. Os passos 1 e 2 podem ser combinados (para transferir SymbolInfoInteger(<symbol>, SYMBOL_TIME) para a função IsTradeAllowed), mas eu ainda não fiz testes de tal variante e não vou dizer isso.