matrix corr_from_matrix=rates.CorrCoef(false); // falso significa que os vetores estão em cadeias de caracteres матрицы
Tem certeza de que não está nas colunas?
//--- obter preços de fechamento em um vetor if(close.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars)) { //--- inserir o vetor na matriz de séries temporais rates.Col(close, i);
Infelizmente, essa maneira simples de preencher a matriz tem uma falha grave: as barras de várias moedas não são sincronizadas.
Talvez faça sentido criar o método CopyRates padrão para matrizes também, a fim de obter dados corretos com a mesma facilidade.
vector::Deals( void* Filter );
Portanto, é necessário preencher a seção Estatísticas não apenas com métodos matemáticos, mas também com métodos financeiros: Ganho, MaxDD, PF etc.
Aqui está o método CopyRates e um exemplo dele
//+------------------------------------------------------------------+ //| Função de início do programa de script| //+------------------------------------------------------------------+ void OnStart() { //--- obter citações na matriz matrix matrix_rates; if(matrix_rates.CopyRates(Symbol(), PERIOD_CURRENT, COPY_RATES_OHLCT, 1, 10)) Print("matrix rates: \n", matrix_rates); else Print("matrix_rates.CopyRates failed. Error ", GetLastError()); //--- verificação MqlRates mql_rates[]; if(CopyRates(Symbol(), PERIOD_CURRENT, 1, 10, mql_rates)>0) { Print("mql_rates array:"); ArrayPrint(mql_rates); } else Print("CopyRates(Symbol(), PERIOD_CURRENT,1, 10, mql_rates). Error ", GetLastError()); //--- obter aspas no vetor = chamada inválida vector vector_rates; if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENT, COPY_RATES_OHLC, 1, 15)) Print("vector_rates COPY_RATES_OHLC: \n", vector_rates); else Print("vector_rates.CopyRates COPY_RATES_OHLC failed. Error ", GetLastError()); //--- obter os preços de fechamento em um vetor if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENT, COPY_RATES_CLOSE, 1, 15)) Print("vector_rates COPY_RATES_CLOSE: \n", vector_rates); else Print("vector_rates.CopyRates failed. Error ", GetLastError()); }; /* taxas de matriz: [[0.99686,0.99638,0.99588,0.99441,0.99464,0.99594,0.99698,0.99758,0.99581,0.9952800000000001] [0.99708,0.99643,0.99591,0.9955000000000001,0.99652,0.99795,0.99865,0.99764,0.99604,0.9957] [0.9961100000000001,0.99491,0.99426,0.99441,0.99448,0.99494,0.9964499999999999,0.99472,0.9936,0.9922] [0.99641,0.99588,0.99441,0.99464,0.99594,0.99697,0.99758,0.99581,0.9952800000000001,0.99259] [1662436800,1662440400,1662444000,1662447600,1662451200,1662454800,1662458400,1662462000,1662465600,1662469200]] mql_rates array: [time] [open] [high] [low] [close] [tick_volume] [spread] [real_volume] [0] 2022.09.06 04:00:00 0.99686 0.99708 0.99611 0.99641 44630 0 [1] 2022.09.06 05:00:00 0.99638 0.99643 0.99491 0.99588 45190 0 [2] 2022.09.06 06:00:00 0.99588 0.99591 0.99426 0.99441 30600 0 [3] 2022.09.06 07:00:00 0.99441 0.99550 0.99441 0.99464 38670 0 [4] 2022.09.06 08:00:00 0.99464 0.99652 0.99448 0.99594 52800 0 [5] 2022.09.06 09:00:00 0.99594 0.99795 0.99494 0.99697 72270 0 [6] 2022.09.06 10:00:00 0.99698 0.99865 0.99645 0.99758 101300 0 [7] 2022.09.06 11:00:00 0.99758 0.99764 0.99472 0.99581 70120 0 [8] 2022.09.06 12:00:00 0.99581 0.99604 0.99360 0.99528 61660 0 [9] 2022.09.06 13:00:00 0.99528 0.99570 0.99220 0.99259 69500 0 vector_rates.CopyRates COPY_RATES_OHLC falhou. Erro 4003 vector_rates COPY_RATES_CLOSE: [0.9931,0.99293,0.99417,0.99504,0.9968399999999999,0.99641,0.99588,0.99441,0.99464,0.99594,0.99697,0.99758,0.99581,0.9952800000000001,0.99259] */
- www.mql5.com
Aparentemente, não formulei bem o problema. Ao preencher a matriz para calcular a correlação de símbolos, pode acontecer que EURUSD[5].BarTime não corresponda a GBPUSD[5].BarTime. Isso é chamado de não sincronização de várias barras. Você precisa dedicar bastante tempo/esforço à preparação desses dados antes dos cálculos. Se isso pudesse ser resolvido com uma linha, seria ótimo.
O artigo afirma:
Над матрицами и векторами можно поэлементно производить математические операции — сложение, вычитание, умножение и деление. Для этого оба объекта должны быть одного и того же типа и должны иметь одинаковые размеры. Каждый член матрицы/вектора оперирует с соответствующим элементом второй матрицы/вектора.
A instrução contém o seguinte
| void matrix.FromBuffer(const int rows, const int cols, const scalar array[], const int count=-1, const int offset=0) | Cria uma matriz a partir de uma matriz unidimensional |
mas, na verdade, isso não funciona. Existe outra maneira de copiar uma matriz unidimensional em uma matriz?
- 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
Novo artigo Operações com Matrizes e Vetores em MQL5 foi publicado:
Matrizes e vetores foram introduzidos na MQL5 para operações eficientes com soluções matemáticas. Os novos tipos oferecem métodos integrados para a criação de código conciso e compreensível que se aproxima da notação matemática. Os arrays fornecem recursos extensos, mas há muitos casos em que as matrizes são muito mais eficientes.
Nos últimos anos, nós fizemos muito para introduzir tecnologias avançadas na linguagem MQL5:
A linguagem MQL5 continuará a se desenvolver, enquanto uma das direções prioritárias é o aprendizado de máquina. Temos grandes planos para um maior desenvolvimento. Portanto, fique conosco, apoie-nos e continue aprendendo conosco.
Autor: MetaQuotes