기고글 토론 "MQL5에서 행렬 및 벡터 연산" - 페이지 2

 
Rashid Umarov #:
기사를 읽어보세요 .

이 기사는 다차원 배열을 복사하지만 1차원 배열이 필요합니다!

 
안녕하세요. 지표를 공부하고 싶은데 어디서부터 시작해야 할지 모르겠습니다.
 

나는 왜 당신이 단지 도울 수없는 이유를 이해하지 못하고 예를 보여줄 수 없습니다-그것이 기사 토론의 목적입니다-슬프다.

일반적으로 나는 벡터를 통해서만 배열을 전달한 다음 행렬에 나사로 고정하는 것이 가능하다고 결정했지만 지금까지는 구부리는 방법 (벡터에서 마치 변형하는 것처럼 지정된 수의 열로 행렬을 만들 수 있습니까?)에 도달하지 못했고 가능하다는 사실이 아니기 때문에 충돌이 발생했습니다.

2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      Access violation at 0x0000000140D77E04 write to 0x00000002CBD3617E
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)         crash -->  0000000140 D77E04 6644896473 FE      mov        [rbx+rsi*2-0x2], r12w
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)                    0000000140 D77E0A 83 F8FE            cmp        eax, 0xfe
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)                    0000000140 D77E0D 751 C              jnz        0x140d77e2b
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)                    0000000140 D77E0F 4 C3BF7            cmp        r14, rdi
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)                    0000000140 D77E12 751 B              jnz        0x140d77e2f
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)                    0000000140 D77E14 443865 F0          cmp        [rbp-0x10], r12b
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)                    0000000140 D77E18 7478              jz         0x140d77e92
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      00: 0x0000000140D77E04
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      01: 0x00000001403246C7
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      02: 0x0000000140BCBBC8
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      03: 0x0000000140BCBA81
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      04: 0x0000000140BCB78B
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      05: 0x0000000140BB848B
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      06: 0x0000000140BBA5D1
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      07: 0x0000000140BBA491
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      08: 0x00000000040E06D0
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      

물론 코드를 첨부하고 있습니다.

//+------------------------------------------------------------------+
//|Test_Matrix_02.mq5 |
//|저작권 2022, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 기능|
//+------------------------------------------------------------------+
void OnStart()
  {
   matrix target;
   int count=1000;
   target.Init(count, 1);
   vector V_Target;//벡터를 사용하여 타깃이 있는 배열을 가져와 행렬로 전송합니다.
   int arr_Target[];
   ArrayResize(arr_Target,count);
   int T_Rand=0;//우리는 무작위로
   for(int i=0; i<count; i++)
     {
     T_Rand=rand();
     if(T_Rand>32767/2)arr_Target[i]=1;
     else arr_Target[i]=0;
     }
   V_Target.Assign(arr_Target);
   if(!target.Col(V_Target,0))
   return ;
   Print("data after Col(V_Target) \n", target);
   
  }
//+------------------------------------------------------------------+
 

알렉세이, 모든 것이 잘 작동합니다. 다음은 약간 수정한 스크립트입니다:

//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 기능|
//+------------------------------------------------------------------+
void OnStart()
  {
   const int count = 20;
   ::MathSrand(1);
//--- 배열
   int target_arr[];
   ::ArrayResize(target_arr, count);
   for(int i = 0; i < count; i++)
     {
      int T_Rand = ::MathRand();
      if(T_Rand > 32767 / 2)
         target_arr[i] = 1;
      else
         target_arr[i] = 0;
     }
//--- 벡터
   vector target_vc;
   target_vc.Assign(target_arr);
//--- 매트릭스
   matrix target_mx(count, 1);
   if(!target_mx.Col(target_vc, 0))
      return;
   ::Print("data after Col(target_vc) \n", target_mx);
   int rows, cols;
   rows = 4;
   cols = 5;
   if(!target_mx.Reshape(rows, cols))
      return;
   ::Print("data after Reshape \n", target_mx);
  }
//+------------------------------------------------------------------+


Log:

2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)        data after Col(target_vc) 
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)        [[0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)        data after Reshape 
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)        [[0,1,0,1,1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0,0,1,1,1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0,1,1,1,0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0,0,0,0,0]]
 
Denis Kirichenko #:

알렉세이, 모든 것이 잘 작동합니다. 다음은 약간 수정한 스크립트입니다:


Log:

고마워요. 예, 인쇄물의 /n이 충돌을 일으킨다는 것은 알고 있지만 ":"가 무엇을 의미하는지 모르겠습니다.

매트릭스 전송에 대해 알려주셔서 감사합니다. 오늘 아침에 읽었지만 시도해 보지는 않았습니다. 그러나 여전히 많은 메모리가 소비되는 것으로 나타났습니다. 1 차원 배열로 데이터를 수집 한 다음 벡터에 넣은 다음 매트릭스에 넣어야한다고 가정하면 이미 3 개의 반복 된 엔티티가 좋지 않습니다. 1차원 배열을 행렬로 바로 옮길 수 없는 이유는 무엇일까요?

 

이해할 수 없습니다:

1. 행렬을 배열로 전송하는 방법

2. 행렬에서 특정 값을 읽는 방법과 행과 열을 표시하여 작성하는 방법

나는 그 기사를 두 번 이상 읽었습니다-아마도 그 안에있는 문구를 이해하지 못할 수도 있지만 여기에 사실이 있습니다-질문이 있습니다.

 
Aleksey Vyazmikin #:

감사합니다. 예, 인쇄물의 /n이 충돌을 일으킨다는 것을 알고 있지만 ":"가 무엇을 의미하는지 모르겠습니다.

매트릭스 전송에 감사드립니다. 오늘 아침에 읽었지만 시도해 보지 않았습니다. 그러나 여전히 많은 메모리가 소비되는 것으로 나타났습니다. 1 차원 배열로 데이터를 수집 한 다음 벡터에 넣은 다음 매트릭스에 넣어야한다고 가정하면 이미 3 개의 반복 된 엔티티가 좋지 않습니다. 1차원 배열을 행렬로 바로 옮길 수 없는 이유는 무엇일까요?

모르겠어요, 개발자가 더 잘 알 것 같아요.... 그리고 왜 "배열-벡터-행렬"체인을 우회하여 데이터를 행렬로 즉시 수집 할 수 없습니까? ))

 
Denis Kirichenko #:

글쎄요, 개발자가 더 잘 알고 있을지도 모르겠네요.... "배열-벡터-행렬" 체인을 우회하여 데이터를 행렬로 수집할 수 없는 이유는 무엇인가요? ))

지금까지 행렬을 셀로 직접 채우는 방법과 행렬에서 읽는 방법을 이해하지 못합니다.

일반적으로 bin 파일에서 배열로 데이터를 읽었습니다-샘플입니다-행렬과 마찬가지로 작업하고 싶었고 처음에는 파일에서 행렬을 읽을 기회가 있었다고 생각하지만 이제는 지침에서 그러한 기회가 보이지 않습니다.

Документация по MQL5: Методы матриц и векторов
Документация по MQL5: Методы матриц и векторов
  • www.mql5.com
Методы матриц и векторов - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Aleksey Vyazmikin #:

지금까지는 행렬을 셀 단위로 직접 채우는 방법과 행렬에서 읽는 방법을 이해하지 못했습니다.

OpenCL의 행렬 곱셈에 대한 예제를 참조하세요.

 
또는 MatrixSetValues 문서를 검색하면 모든 것이 명확하게 나와 있습니다.