Forester #: É apenas uma comparação em termos de tempo. Em vez disso, você pode definir qualquer valor, aliás.
O tempo das sessões é obtido da corretora ou pode ser definido manualmente.
Eu estava falando do código interno, e não da chamada e do parâmetro de entrada.
datetime Sec = TimeSec(time); //segundo atual do dia
...
if(( Sec >= this.TradeTimeFrom[i][DayOfWeek] ) && ( Sec < this.TradeTimeTo[i][DayOfWeek] ))
Aqui, o Sec é definido no intervalo de 24 horas, mas não há limite entre “from” e “to”. Por exemplo, se for solicitado o horário das 3 da manhã e a sessão for negociada das 21h às 8h, deveria ser retornado “true”, mas a condição não será atendida e retornará “false”.
Eu estava falando do código interno, e não da chamada e do parâmetro de entrada.
Aqui, o Sec está definido no intervalo de 24 horas, mas não há limites de início e fim. Por exemplo, se for solicitada a hora das 3 da manhã e a sessão for negociada das 21h às 8h, deveria ser retornado true, mas a condição não será satisfeita e retornará false.
Isso pode ser definido com duas sessões: 21-24 e 0-8
É uma questão teórica ou as corretoras realmente têm intervalos “from-to” semelhantes?
Isso pode ser definido em duas sessões: 21-24 e 0-8
A pergunta é teórica ou o Centro de Dados realmente possui intervalos “from-to” semelhantes?
O que significa definir em duas sessões? — afinal, elas são obtidas nas configurações do MT5, e não definidas por nós. E no MT5, uma sessão = um registro. Em algumas corretoras (devido à distância geográfica do mercado), isso pode ocorrer. Nesse caso, o SymbolInfoSessionTrade retorna o horário “to” levando em conta dias adicionais (pelo menos era assim antes — não verifiquei agora), ou seja, a condição “from < to” sempre era mantida.
Stanislav Korotky #: O que significa definir duas sessões?
É possível definir as sessões individualmente para cada dia nos sunputs. O programa funcionará com base nelas. É conectado #define LoadSessionFromInputs // Leitura das sessões a partir dos inputs
Stanislav Korotky #: Nesse caso, o SymbolInfoSessionTrade retorna o horário “to” levando em conta os dias adicionais (pelo menos era assim antes — não verifiquei agora), ou seja, a condição“from < to” sempre era mantida.
Ou seja, 20h00 – 32h00?
Se houver um exemplo funcional da corretora, no qual seja possível testar, será possível adaptar a solução a esse exemplo e verificar. No momento, há uma solução simples: dividir a sessão em duas partes por conta própria, passando pela meia-noite. E é possível especificar em que dia — por exemplo, no sábado até as 8h — o saldo da sexta-feira, ou no domingo a partir das 20h — o início da segunda-feira.
No editor de símbolos personalizados, fiz o seguinte:
Configurei as sessões com transição para o dia seguinte para as opções mostradas na captura de tela, ou seja, das 20h às 8h. Alterei a função:
for (int i = 0; i < this.TradeSessions[DayOfWeek]; i++){//iteração pelas sessões deste dia da semanaif(( Sec >= this.TradeTimeFrom[i][DayOfWeek] )){ //a sessão começou — encontrar o fimif(Sec < this.TradeTimeTo[i][DayOfWeek]){//o fim ainda não chegou, lembre-se dissothis.NextTradeStop = (datetime)(day * 86400) + this.TradeTimeTo[i][DayOfWeek]; //hora de término da sessão atual; até esse momento, não é necessário verificar a próxima sessão = (início deste dia + hora da sessão) //Print("novo Stop ", this.NextTradeStop);returntrue;
}elseif (this.TradeTimeTo[i][DayOfWeek] < this.TradeTimeFrom[i][DayOfWeek]){// fim < início; por exemplo, 20h00-04h00 — passagem para o dia seguinte + 1 dia à horathis.NextTradeStop = (datetime)((day+1) * 86400) + this.TradeTimeTo[i][DayOfWeek]; //hora de término da sessão atual; até esse momento, não é necessário verificar a próxima sessão = (início deste dia + hora da sessão) //Print("novo Stop ", this.NextTradeStop);returntrue;
}
}
}
O código adicionado verifica se o horário de término é anterior ao horário de início da sessão e, em seguida, simplesmente adiciona 1 dia ao horário de término.
Testei com as seguintes sessões :
Dia: 1 Sessões de negociação: 1: 23:55-00:05 Dia: 2 Sessões de negociação: 1: 00:15-00:17
Primeira sessão com continuidade no dia seguinte:
29/06/2020 23:55:03 29/06/2020 23:55:03 2020.29/06/2020 23:55:09 29/06/2020 23:55:09 29/06/202029/06/2020 23:56:39 29/06/2020 23:56:39 2020.29/06/2020 23:57:01 29/06/2020 23:57:01 29/06/2020 23:59:59 29/06/202029/06/2020 23:59:59 30/06/2020 00:00:00 30/06/2020 00:00:00 2020.30 de junho de 2020, 00:00:08 30 de junho de 2020, 00:00:08 2020.30/06/2020 00:01:52 30/06/2020 00:01:52 30/06/2020 00:02:02 30/06/202030/06/2020 00:02:02 30/06/2020 00:02:30 30/06/2020 00:02:30 2020.30/06/2020 00:03:25 30/06/2020 00:03:25 30/06/202030/06/2020 00:03:31 30/06/2020 00:03:31
Segunda sessão, a habitual em um único dia: 30/06/2020 00:15:29 30/06/2020 00:15:29 30/06/2020 00:16:01 2020.30/06/2020 00:16:01 30/06/2020 00:16:09 30/06/2020 00:16:09
A primeira sessão será daqui a uma semana: 06/07/2020 23:55:01 06/07/2020 23:55:01 06/07/202006/07/2020 23:55:09 06/07/2020 23:55:09
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
É apenas uma comparação em termos de tempo.
Em vez disso, você pode definir qualquer valor, aliás.
O tempo das sessões é obtido da corretora ou pode ser definido manualmente.
Eu estava falando do código interno, e não da chamada e do parâmetro de entrada.
Aqui, o Sec é definido no intervalo de 24 horas, mas não há limite entre “from” e “to”. Por exemplo, se for solicitado o horário das 3 da manhã e a sessão for negociada das 21h às 8h, deveria ser retornado “true”, mas a condição não será atendida e retornará “false”.
Eu estava falando do código interno, e não da chamada e do parâmetro de entrada.
Aqui, o Sec está definido no intervalo de 24 horas, mas não há limites de início e fim. Por exemplo, se for solicitada a hora das 3 da manhã e a sessão for negociada das 21h às 8h, deveria ser retornado true, mas a condição não será satisfeita e retornará false.
Isso pode ser definido com duas sessões:
21-24 e 0-8
É uma questão teórica ou as corretoras realmente têm intervalos “from-to” semelhantes?
Isso pode ser definido em duas sessões:
21-24 e 0-8
A pergunta é teórica ou o Centro de Dados realmente possui intervalos “from-to” semelhantes?
O que significa definir duas sessões?
É possível definir as sessões individualmente para cada dia nos sunputs. O programa funcionará com base nelas.
É conectado
#define LoadSessionFromInputs // Leitura das sessões a partir dos inputs
Nesse caso, o SymbolInfoSessionTrade retorna o horário “to” levando em conta os dias adicionais (pelo menos era assim antes — não verifiquei agora), ou seja, a condição“from < to” sempre era mantida.
Ou seja, 20h00 – 32h00?
Se houver um exemplo funcional da corretora, no qual seja possível testar, será possível adaptar a solução a esse exemplo e verificar.
No momento, há uma solução simples: dividir a sessão em duas partes por conta própria, passando pela meia-noite. E é possível especificar em que dia — por exemplo, no sábado até as 8h — o saldo da sexta-feira, ou no domingo a partir das 20h — o início da segunda-feira.
Ou seja, das 20h às 32h?
Sim. Não há nenhum centro de dados pronto com esse tipo de servidor em vista. É preciso procurar em algum lugar na Nova Zelândia.
No editor de caracteres personalizados, fiz o seguinte:
No editor de símbolos personalizados, fiz o seguinte:
Alterei a função:
O código adicionado verifica se o horário de término é anterior ao horário de início da sessão e, em seguida, simplesmente adiciona 1 dia ao horário de término.
Testei com as seguintes sessões :
Dia: 1 Sessões de negociação: 1: 23:55-00:05
Dia: 2 Sessões de negociação: 1: 00:15-00:17
Primeira sessão com continuidade no dia seguinte:
29/06/2020 23:55:03 29/06/2020 23:55:03
2020.29/06/2020 23:55:09 29/06/2020 23:55:09
29/06/202029/06/2020 23:56:39 29/06/2020 23:56:39
2020.29/06/2020 23:57:01 29/06/2020 23:57:01
29/06/2020 23:59:59 29/06/202029/06/2020 23:59:59
30/06/2020 00:00:00 30/06/2020 00:00:00
2020.30 de junho de 2020, 00:00:08 30 de junho de 2020, 00:00:08
2020.30/06/2020 00:01:52 30/06/2020 00:01:52
30/06/2020 00:02:02 30/06/202030/06/2020 00:02:02
30/06/2020 00:02:30 30/06/2020 00:02:30
2020.30/06/2020 00:03:25 30/06/2020 00:03:25
30/06/202030/06/2020 00:03:31 30/06/2020 00:03:31
Segunda sessão, a habitual em um único dia:
30/06/2020 00:15:29 30/06/2020 00:15:29
30/06/2020 00:16:01 2020.30/06/2020 00:16:01
30/06/2020 00:16:09 30/06/2020 00:16:09
A primeira sessão será daqui a uma semana:
06/07/2020 23:55:01 06/07/2020 23:55:01
06/07/202006/07/2020 23:55:09 06/07/2020 23:55:09