int TF(int i) { switch(i) { case 1: return(PERIOD_M1); case 2: return(PERIOD_M5); case 3: return(PERIOD_M15); case 4: return(PERIOD_M30); case 5: return(PERIOD_H1); case 6: return(PERIOD_H4); case 7: return(PERIOD_D1); case 8: return(PERIOD_W1); case 9: return(PERIOD_MN1); } }
Isto não é possível porque o valor do período não é incrementado por um, tem de organizar o seu próprio índice de enumeração, como este
- www.mql5.com
Se ao menos fosse assim tão simples. Os valores não são distribuídos uniformemente. Digamos que PERÍODO_H1 é 60 e o próximo período PERÍODO_H2 é 120.
Há provavelmente duas funções que precisam de ser introduzidas: 1 - devolve o número de elementos da enumeração, 2 - devolve o elemento por número...
Há provavelmente duas funções que precisam de ser introduzidas: 1 - devolve o número de elementos da enumeração, 2 - devolve o elemento por número...
Se ao menos fosse assim tão simples. Os valores não são distribuídos uniformemente. Digamos que PERÍODO_H1 é 60 e o próximo período PERÍODO_H2 é 120.
A questão é que a enumeração é uma coisa pré-definida e todos os seus valores podem ser vistos,
É por isso que o respeitado Sergey1294 o aconselhou a descrever a tabela de conversão em chamada em série,
onde se o valor aumentar em 1, será chamado o próximo valor enumeral da lista.
ENUM_TIMEFRAMES GetPeriodEnumerator(uchar i);
Agora vamos estimar quantas enumerações existem e quantas funções do Enumerador devem existir (uma para cada enumeração).
Em geral, existe uma solução. Para cada enumeração, escrever uma função especial de Enumerador. Por exemplo, para Prazos: agora vamos estimar quantas enumerações existem no total e depois quantas funções do Enumerador devem existir (uma para cada enumeração).
ENUM_TIMEFRAMES GetPeriodEnumerator(uchar i) { switch(i) { case 0 return(PERIOD_M1); case 1 return(PERIOD_M2); case 2 return(PERIOD_M3); case 3 return(PERIOD_M4); case 4 return(PERIOD_M5); case 5 return(PERIOD_M6); case 6 return(PERIOD_M10); case 7 return(PERIOD_M12); case 8 return(PERIOD_M15); case 9 return(PERIOD_M20); case 10 return(PERIOD_M30); case 11 return(PERIOD_H1); case 12 return(PERIOD_H2); case 13 return(PERIOD_H3); case 14 return(PERIOD_H4); case 15 return(PERIOD_H6); case 16 return(PERIOD_H8); case 17 return(PERIOD_H12); case 18 return(PERIOD_D1); case 19 return(PERIOD_W1); case 20 return(PERIOD_MN1); } return(-1); }
Há um total de 21 períodos de tempo em MT5. A variante final terá o seguinte aspecto
- www.mql5.com
Em geral, há duas opções para a enumeração
Primeiro usando uma função, esqueci-me de colocar um cólon no meu último posto
ENUM_TIMEFRAMES GetPeriodEnumerator(uchar i) { switch(i) { case 0: return(PERIOD_M1); case 1: return(PERIOD_M2); case 2: return(PERIOD_M3); case 3: return(PERIOD_M4); case 4: return(PERIOD_M5); case 5: return(PERIOD_M6); case 6: return(PERIOD_M10); case 7: return(PERIOD_M12); case 8: return(PERIOD_M15); case 9: return(PERIOD_M20); case 10: return(PERIOD_M30); case 11: return(PERIOD_H1); case 12: return(PERIOD_H2); case 13: return(PERIOD_H3); case 14: return(PERIOD_H4); case 15: return(PERIOD_H6); case 16: return(PERIOD_H8); case 17: return(PERIOD_H12); case 18: return(PERIOD_D1); case 19: return(PERIOD_W1); case 20: return(PERIOD_MN1); } return(-1); }A segunda forma é utilizando uma matriz
ENUM_TIMEFRAMES GetPeriodEnumerator[21]= { PERIOD_M1, PERIOD_M2, PERIOD_M3, PERIOD_M4, PERIOD_M5, PERIOD_M6, PERIOD_M10, PERIOD_M12, PERIOD_M15, PERIOD_M20, PERIOD_M30, PERIOD_H1, PERIOD_H2, PERIOD_H3, PERIOD_H4, PERIOD_H6, PERIOD_H8, PERIOD_H12, PERIOD_D1, PERIOD_W1, PERIOD_MN1 };
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Digamos que temos uma enumeração. Como podemos obter todos os valores possíveis desta enumeração um a um, por exemplo, em loop?
ENUM_TIMEFRAMES tf1;
Isto é, tf1++ deve retornar sequencialmente PERÍODO_M1, PERÍODO_M2, PERÍODO_M5... Penso que isto não pode ser feito com as ferramentas linguísticas.