도움이 필요하다! 숙제가 풀리지 않아 철의 한계에 부딪혀 - 페이지 11

 
elugovoy :

Yurchik, 파일 처리, 압축 등으로 군더더기 없는 것을 의미했습니다. 순전히 SQL 및 로봇/표시기 논리로 작업합니다. 많은 데이터베이스로 작업했는데 MQL과 SQL을 친구로 만드는 것이 유일한 문제였습니다.)) 배열과 구조 없이 아름다운 솔루션을 만들었습니다.

일반적으로 나는 바퀴를 재발명하는 것이 아니라 최적의 수단을 사용하여 문제를 해결하는 것을 선호합니다.

Zhenya 네, 당신을 이해합니다 ...

이것은 내가 선호하는 것입니다

... 특히 기성품 전문 도구가 있으면 ... 아름답게 통합하는 것이 좋습니다

 

다음은 토론입니다! 참여해 주셔서 감사합니다!

나는 모두 함께 대답 할 것이고, 나는 아무것도 (그리고 누구라도) 놓치지 않으려 고 노력할 것입니다.

1. Перейти на  x64

터미널 버전을 지정하지 않았다는 것을 깨닫는 데는 그리 오랜 시간이 걸리지 않았습니다. 나는 4번째와 일하고 있고, 나는 아직 이 Expert Advisor를 5번째로 옮기지 않을 것이다. 불행히도 MT4는 32비트 입니다.

32비트 Windows 8/8.1에서 4GB 메모리 제한을 제거합니다. 도움이 되지 않습니다. 제 시스템은 이미 x64입니다.

2. 조각으로 자르기 / 조각으로 읽기 / 작은 블록 로드

작업 조건에 따라 작동하지 않습니다.

아래에서 더 자세한 정보를 제공하려고 노력할 것입니다. 아마도 이것이 문제를 더 잘 이해하는 데 도움이 될 것입니다.

3. 추가 메모리 구매 / 강력한 서버 또는 클라우드 임대 / 모든 것을 SSD로 이동

물론 여유 슬롯에 16GB의 메모리를 추가로 넣을 것이지만 이것은 선택 사항이 아닙니다.

이 볼륨은 제한이 없으며, 용량 확장은 문제의 특정 경우에만 해결됩니다.

알고리즘적으로 100% 짜낼 수 있다는 확신이 있는 경우에만 이 방법을 사용해야 한다고 생각합니다.

4. 데이터 압축

이것이 내가 지금 하고 있는 일이다.

텍스트 캐시(20GB)는 2배 축소되었으며 아마도 조금 더 줄어들 것입니다.
이것은 메모리의 데이터 양 문제를 해결하지 못하지만 다른 솔루션(RAM 디스크)에 더 가깝습니다.

나는 또한 바이너리 번역을 할 것이고, 그것은 읽기 속도를 높이고 볼륨을 줄일 것입니다.


http://www.nanex.net/historical.html 의 마스터가 어떻게 압축되는지는 명확하지 않습니다 . 그들의 데이터 구조는 상당히 중복됩니다.

5. 사용하기 전에 데이터를 압축/인코드하고 원하는 조각을 압축 해제/디코딩합니다.

옵션으로 허용됩니다.

그러나 시간이 오래 걸릴 것이라는 내용이 있습니다(여기서 프로세서에 대해 설명합니다).

6. 계산을 외부 프로그램 (Matlab/R/etc) 으로 전송

나는 원하지 않습니다. 많은 이유가 있습니다.

MT와 잘 통합된 환경이 아닌 한. 그러나 프로그램/환경을 연구하고/하거나 타사 개발자에게 솔루션을 주문하려면 여전히 시간이 필요합니다. 이것은 개발 단계에서 불편하고 비용이 많이 듭니다.

일반적으로 모든 장단점이 있는 샌드박스에 머물려고 합니다.


7. 인덱스 파일 생성 및 인덱스 작업

이것이 어떻게 도움이 될 수 있는지 모르겠습니다.

여전히 기본 파일에서 반복적으로 데이터를 가져와야 합니다(지속적으로 다시 읽기).


8. DB 활용

다음을 고려할 때 매우 유혹적인 옵션:

  • 확장성 및 휴대성(서버를 임대하거나 가까운 PC에 연결할 수 있음)
  • 그렇지 않으면 무릎에서 수동으로 수행해야 하는 많은 프로세스의 자동화 및 정교함;
  • 그리고 다른 굿즈.

그러나 단점도 있습니다.

  • 나를 위한 비교적 새로운 환경(밀접하게 작동하지 않고 기본 쿼리만);
  • 단일 클라이언트 시스템(독립 실행형 버전)에 설치의 복잡성;
  • 다른게 있을텐데..
일반적으로 다른 옵션이 작동하지 않으면 이 옵션으로 돌아갈 것입니다.


9. 새롭고 모호한 용어를 이해하고 테스트합니다.

이것은 미래를 위한 나 자신에 대한 메모 및/또는 저자에 대한 추가 정보 요청입니다.)

발견되지 않은 채로 남아 있음: 파일 매핑, 해시 기반 솔루션, B-트리.


10. 모든 캐시가 있는 터미널을 가상 RAM 디스크로 전송

지금까지 이것은 (인건비/결과 면에서) 가장 유망한 옵션입니다.

SoftPerfect에서 RAM 디스크를 설치하고 캐시 압축을 완료하고 파일을 지속적으로 읽기 위한 운을 다시 쓰고 성능을 확인합니다.

11. 작업을 올바르게 설정 =)

특히 배경 정보가 부족한 점을 감안할 때 매우 좋은 조언입니다.

약속한대로 더 자세히 알려드리도록 하겠습니다.

유사한 트랜잭션 시퀀스가 많이 있으며 각 시퀀스는 시간순으로 정렬됩니다.

다른 시퀀스의 트랜잭션은 시간이 지남에 따라 고르지 않게 분포되며 각 시퀀스에서 고유한 방식으로 분산됩니다. 거래는 다양합니다. 그러나 모든 것은 Date1에서 Date2까지의 간격에 있습니다.

작업은 M분 단위로 D1에서 D2로 이동하고(특히 모든 시퀀스의 트랜잭션 포인트별로) K 기준에 따라 다른 것보다 더 나은 시퀀스를 찾는 것입니다(별도 가장 좋은 순서를 찾고 기준에 따라 전체 세트를 정렬하고 상위 10개를 표시하지만 이것은 선택 사항이며 아직 필수는 아닙니다).

기준 K는 해당 시퀀스의 X 이전 트랜잭션을 기반으로 계산되며 계산에서 X 트랜잭션 각각에 대한 거의 모든 정보가 사용됩니다(예: 이익만 있으면 충분하지 않음).


결과에 영향을 미치는 기준(K), 트랜잭션 수(X) 및 기타 매개변수는 사용자가 변경합니다. 저것들. 알고리즘에 "하드와이어링"될 수 없습니다.

이 같은.

이론적으로 모든 시퀀스의 모든 트랜잭션에 대해 선형이 되도록 파일을 재구성할 수 있습니다.

그러나 모든 정보를 메모리에 저장하지 않고 이 작업을 수행하는 방법은 무엇입니까? 그런 다음 한 시퀀스의 거래가 전체 파일에 "번져" 있는 경우 기준을 다시 계산하는 방법은 무엇입니까?

이제 과제가 명확해지기를 바랍니다.

다시 한 번 참여, 토론, 질문, 링크 및 구체적인 답변에 깊은 감사를 드립니다.

TheXpert , Urain , sergeev , elugovoy , 익명 , 고기 , ALXIMIKS , IvanIvanov , 정수 , C-4 , 마케팅 담당자 , barabashkakvn , Silent , GT788 , papaklass , grizzly_v , artemiusgreat , Conender   섬기는 사람

고맙습니다!

 
komposter :

다음은 토론입니다! 참여해 주셔서 감사합니다!

....

다음을 고려하면 매우 유혹적인 옵션:

  • 확장성 및 휴대성(서버를 임대하거나 가까운 PC에 연결할 수 있음)
  • 그렇지 않으면 무릎에서 수동으로 수행해야 하는 많은 프로세스의 자동화 및 정교함;
  • 그리고 다른 굿즈.

그러나 다음과 같은 단점도 있습니다.

  • 나를 위한 비교적 새로운 환경(밀접하게 작동하지 않고 기본 쿼리만);
  • 단일 클라이언트 시스템(독립 실행형 버전)에 설치의 복잡성;
  • 다른게 있을텐데..
일반적으로 다른 옵션이 작동하지 않으면 이 옵션으로 돌아갈 것입니다.


우리가 SQL을 향해 간다면


  • 나를 위한 비교적 새로운 환경(밀접하게 작동하지 않고 기본 쿼리만);

이것은 개발 단계에서 상당히 느릴 수 있습니다.

이 옵션을 선택하면 저장 프로시저를 사용하여 모든 비즈니스 논리를 빌드하는 것이 좋습니다.

전문가는 서버에 요청을 보내고 완전히 준비된 결과를 얻는 두 가지 기능만 남겨둡니다.

서버의 모든 계산

  • 단일 클라이언트 시스템(독립 실행형 버전)에 설치의 복잡성;

사실, 인터넷에서 SQL 서버를 설치하는 방법에 대한 많은 설명을 찾을 수 있습니다.

( 예를 들어 ORACL,SYBASE + CENTOS ) ORACL,SYBASE,MS SQL+WINDOWS 별도 시스템

ORACL - 배우기 조금 더 어렵습니다 - 더 적은 전문가, 더 적은 문헌

MS SQL - 아마도 웹 및 기타 문헌에서 가장 많은 정보

특별한 어려움은 없을 것입니다 - 상점의 인터넷에 많은 설명이 있습니다 더 많은 책이 있습니다

매개 변수의 MSSQL 2012가 ORACL에 가까워졌습니다. 이미 2014가 있습니다.

SQL + LINUX 번들의 선택은 일반적으로 산업 운영에서 선택되며 LINUX에 대한 지식이 없으면 WINDOWS를 사용하는 것이 좋습니다.

 

komposter :

유사한 트랜잭션 시퀀스가 많이 있으며 각 시퀀스는 시간별로 정렬됩니다.

다른 순서의 트랜잭션은 시간이 지남에 따라 고르지 않게 분포되며 각 순서에서 고유한 방식으로 분산됩니다. 거래는 다양합니다. 그러나 모든 것은 Date1에서 Date2까지의 간격에 있습니다.

작업은 M분 단위로 D1에서 D2로 이동하고(특히 모든 시퀀스의 트랜잭션 포인트별로) K 기준에 따라 다른 것보다 더 나은 시퀀스를 찾는 것입니다(별도 가장 좋은 순서를 찾고 기준에 따라 전체 세트를 정렬하고 상위 10개를 표시하지만 이것은 선택 사항이며 아직 필수는 아닙니다.

기준 K는 해당 시퀀스의 X 이전 트랜잭션을 기반으로 계산되며 계산에서 X 트랜잭션 각각에 대한 거의 모든 정보가 사용됩니다(예: 이익만 있으면 충분하지 않음).


결과에 영향을 미치는 기준(K), 트랜잭션 수(X) 및 기타 매개변수는 사용자에 의해 변경됩니다. 저것들. 알고리즘에 "하드와이어"될 수 없습니다.

이 같은.

이론상 모든 시퀀스의 모든 트랜잭션에 대해 선형이 되도록 파일을 재구성할 수 있습니다.

그러나 모든 정보를 메모리에 저장하지 않고 이 작업을 수행하는 방법은 무엇입니까? 그런 다음 한 시퀀스의 거래가 전체 파일에 "번져" 있는 경우 기준을 다시 계산하는 방법은 무엇입니까?

이제 과제가 명확해지기를 바랍니다.

전통적으로 나는 아침에 브레이크를 밟습니다. :).

하나의 시퀀스가 메모리에 맞습니까? 아니면 이미 문제가 있습니까?

전자라면 사용자가 기준과 매개변수를 변경할 때 디스크에서 다중 읽기가 언제 발생합니까?

그렇다면 이동이 일부 알고리즘에 따라 진행되고 있습니까, 아니면 일부 주관적인 이유로 수동으로 진행됩니까?

 
Candid :

전통적으로 나는 아침에 브레이크를 밟습니다. :).

하나의 시퀀스가 메모리에 맞습니까? 아니면 이미 문제가 있습니까?

전자라면 사용자가 기준과 매개변수를 변경할 때 디스크에서 다중 읽기가 언제 발생합니까?

그렇다면 이동이 일부 알고리즘에 따라 진행되고 있습니까, 아니면 일부 주관적인 이유로 수동으로 진행됩니까?

백만 시퀀스.

그리고 각각에 원하는 날짜가 있는 지점이 있고 이전 이력이 분석됩니다.

그리고 가장 좋은 시퀀스가 선택됩니다.

그리고 "역사"의 다음 지점으로의 전환이 있습니다.

 
최종 사용자를 DBMS 설치와 혼동하지 않으려면 몇 가지(약 12가지) 일반적인 K 기준(예: 보수적 거래, 공격적 거래 등)을 종합하는 옵션이 있다고 생각합니다. ) 실제로 알고리즘으로 꿰매고 모든 시퀀스에 대해 한 번 계산하여 시간이 지남에 따라 선택한 표시기를 변경한 다음 1차원 벡터로 작업합니다.
 
marketeer :
최종 사용자를 DBMS 설치와 혼동하지 않으려면 몇 가지(약 12가지) 일반적인 K 기준(예: 보수적 거래, 공격적 거래 등)을 종합하는 옵션이 있다고 생각합니다. ) 실제로 알고리즘으로 꿰매고 모든 시퀀스에 대해 한 번 계산하여 시간이 지남에 따라 선택한 표시기를 변경한 다음 1차원 벡터로 작업합니다.

2가지 기준만 있다고 합시다.

그러나 기준을 조정하는 여러 매개변수가 있으며 각각 다른 값을 가질 수 있습니다.

각 매개변수의 여러 값을 취하는 것이 매우 거칠더라도 1차원 벡터가 아니라 3차원 또는 4차원 배열을 얻게 됩니다.

그렇다면 확실히 메모리가 충분하지 않습니다 =)

 
komposter :

백만 시퀀스.

그리고 각각에 원하는 날짜가 있는 지점이 있고 이전 이력이 분석됩니다.

그리고 가장 좋은 시퀀스가 선택됩니다.

그리고 "역사"의 다음 지점으로의 전환이 있습니다.

전체 시퀀스가 메모리에 로드됩니다. 그런 다음 "필요한 날짜와 이전 이력이 분석되는 지점이 있습니다." 기준 값은 최고 성취도와 비교됩니다. 더 나은 경우 기준이 기억되고 최상의 순서에 대해 알아야 할 사항이 있습니다. 그런 다음 처리된 시퀀스 대신 다음 시퀀스가 로드됩니다. 그래서 백만 번.

파일은 순차적으로 한 번만 읽습니다.

뭐가 문제 야?

 
Candid :

전체 시퀀스가 메모리에 로드됩니다. 그런 다음 "필요한 날짜와 이전 이력이 분석되는 지점이 있습니다." 기준 값은 최고 성취도와 비교됩니다. 더 나은 경우 기준이 기억되고 최상의 순서에 대해 알아야 할 사항이 있습니다. 그런 다음 처리된 시퀀스 대신 다음 시퀀스가 로드됩니다. 그래서 백만 번.

파일은 순차적으로 한 번만 읽습니다.

뭐가 문제 야?

그런거야.

그리고 나서 "필요한 날짜"가 선택된 시퀀스에서 트랜잭션의 종료 시점으로 이동하고 알고리즘이 반복됩니다.

그래서 백만 번 더 =)

 
komposter :

그런거야.

그리고 나서 "필요한 날짜"가 선택된 시퀀스에서 트랜잭션의 종료 시점으로 이동하고 알고리즘이 반복됩니다.

그래서 백만 번 더 =)

그러나 시퀀스는 서로 독립적입니까? 그렇다면 한 번 로드된 시퀀스의 날짜에 대해 한 번에 주기를 만드는 것이 불가능한 이유는 무엇입니까? 그런데 여기에서는 효과적인 순환 알고리즘으로 전환하는 것이 가능할 수도 있지만 이것은 운이 좋은 것입니다. 백만 x 백만 차원이 유지되고 파일을 한 번 읽습니다.

물론 일반적으로 다음 반복에서 단계 수가 동일하게 유지되는(즉, 계산이 진행됨에 따라 검색 영역이 좁아지지 않는) 문제는 특별히 강건해 보이지 않습니다. 그러나 이것은 물론 주관적입니다.