전략 검색 자동화. - 페이지 3

 
Aliaksandr Hryshyn:

실제로 사소한 것들이 많이 있습니다.

저는 최소한의 노력으로 지표, 캔들스틱 등을 분석할 수 있는 다양한 가능성을 추가할 수 있도록 범용 시스템을 만들려고 노력하고 있습니다. 각 함수에는 어떤 데이터로 작업할 수 있고 어떤 데이터가 출력되는지에 대한 정보가 있습니다. 지표도 어떤 종류의 데이터를 제공하는지 설명합니다. 데이터는 {double}, {int,double}과 같이 단순하고 복잡한 유형으로 나뉘며, "가격", "차트상의 포지션", "직선"(채널 정의에 사용 가능) 등과 같은 카테고리로 나뉘고, "눈금 유형"으로 나뉩니다. "스케일 유형"(예: "상수"(전략 매개변수), "지수"(최소값과 최대값이 있음), "비율"(가격, 거래량 등 기준점이 하나만 있음) 등으로 분류합니다. 일관된 방식으로 전략을 수정해야하며, 그러한 뉘앙스가 있으며 한 곳의 수정은 다른 곳의 수정 조건에 영향을 미칠 수 있습니다.

맞습니다... 검색의 조합 수를 줄이고 위의 제한 (유형, 규모, 카테고리)을 사용하려면 지금은 충분하고 포인트 변경 (하나 / 몇 가지 기능 추가 / 제거)이 충분합니다.

"재조합도 자발적이지만 전체 기성 솔루션"-이 생각이 떠 올랐습니다), 그것이 어떻게 실현 될 수 있는지 상상하기 어렵습니다. 결합된 함수 그룹은 단일 함수보다 '외부 세계'와 더 많이 연결될 가능성이 높기 때문에 모든 것을 결합할 기회가 더 적을 것입니다. 알고리즘이 매우 복잡해지므로 더 나은 시기가 올 때까지 남겨두겠습니다)).

생각을 명확히 해보겠습니다. 변형의 수를 줄이고 하나의 변형이 다른 블록에 영향을 미치지 않도록 수정하는 것이 훨씬 더 보편적이어야 합니다. 비결은 동일한 작업을 다른 방법으로 달성 할 수 있으며 종종 어느 것이 더 나은지 미리 명확하지 않다는 것입니다. 예를 들어, 우리는 변환이라는 특정 범용 작업을 정의했습니다. 이 과매도를 각각 고유 한 방식으로 정의하는 약 12 개의 오실레이터가 있습니다. 오실레이터 스크립트에서 모든 보조지표 또는 모든 방법을 시도하도록 작업을 설정했다고 가정해 봅시다. 그런 다음 이러한 블록과 나머지 코드의 상호 작용을 표준화해야 합니다. 상호 작용 표준을 상단의 백분율로 선택했다고 가정해 보겠습니다. 제너레이터는 코드에 Oversold1이라는 블록 조각을 순차적으로 삽입하고, 이 특정 블록에서 테스트할 변수를 찾고, 볼킨 포워드를 실행하고, 테스트 결과를 기억합니다. 그런 다음 그는 원래 지표가 정수를 표시하고 0과 다른 부호를 사용하더라도 백분율을 제공하는 Oversold 2 블록이 이미 있는 새 버전의 Expert Advisor를 준비합니다. 테스트가 끝나면 그는 가장 성공적인 블록을 떠나 다른 작업으로 이동합니다.

동시에 많은 블록을 준비 할 필요는 없으며 2 ~ 3 개의 블록으로 충분합니다. 가장 중요한 것은 상호 작용을 설정하는 것입니다.

종속성도 마찬가지입니다. A, B, C가 있습니다. 먼저 A가 B보다 크면 C가 참이고, B가 A보다 크면 C가 참입니다.

그런 다음 더 복잡한 상호 작용으로 넘어갈 수 있습니다.

 

"옵션의 수를 줄이고 한 블록의 수정이 다른 블록에 영향을 미치지 않도록 하려면 훨씬 더 다양한 기능을 제공해야 합니다." => "상호작용 표준을 상단의 백분율로 선택했다고 가정해 봅시다." - 무슨 말인지 알겠습니다)). 여기에는 지표를 단일 보기로 가져오는 작업, 즉 전처리가 포함됩니다. 내 시스템에서는 모든 것이 너무 형식화되어 있고, 모든 것을 유지하고 싶고, 규모, 카테고리와 같은 것을 구현하기 위해 이미 작업 중이며, 이미 방법을 알아 냈으며, 실제로 일부 블록의 연결이 다른 위치의 블록 연결에 영향을 미칩니다. 지표의 표준화는 지표 자체에 대한 설명을 통해 진행되며 이에 따라 특정 블록이 자동으로 연결됩니다. 예를 들어 블록 중 하나는 다른 값에서 한 값의 백분율을 쉽게 계산할 수 있으며, 이러한 값 사이에만 연결이 있어야 제어 할 수 있습니다:

  1. Percent( Open[0] , Open[3] )
  2. Percent(Open[0], Alligator[3])
  3. Percent(Volume[0], Alligator[3])

첫 번째와 세 번째 옵션은 논리적으로 좋지만 3번은 의미가 없습니다.

예를 들어 Open[ Max_on_position(iAC,0,30) ] ]와 같이 인덱스도 계산됩니다.

 
Youri Tarshecki:

동시에 처음부터 너무 많은 블록을 준비 할 필요는 없으며 2 ~ 3 블록이면 충분합니다. 가장 중요한 것은 상호 작용을 설정하는 것입니다.

종속성도 마찬가지입니다. A, B, C가 있습니다. 먼저 A가 B보다 큰지, C가 참인지, B가 A보다 큰지 등을 확인합니다.

그런 다음 더 복잡한 상호 작용으로 넘어갈 수 있습니다.

이미 구현되어 있습니다.

다음과 같이 구현되어 있습니다:

  1. 기본 유형인 int, double, bool이 있습니다.
  2. 복합 유형은 기본 유형(추가 가능)에서 생성됩니다(예: (int,double) - 차트의 좌표, (x,b) - 선 방정식의 계수, (a,b,c,d) - 최대 4개의 값 지원).
  3. 인디케이터는 하나의 요소를 가진 복합 유형 집합으로 표시됩니다.
  4. 상수는 복잡한 유형으로 표시되며, 이는 최적화되는 전략 매개 변수입니다.
  5. 함수는 특정 복잡한 유형의 변수를 입력으로 받고, 그 수는 제한되지 않으며, 출력도 복잡한 유형입니다.
  6. 함수는이 데이터의 출처를 신경 쓰지 않으며, 가장 중요한 것은 유형의 대응이 있다는 것입니다.
  7. mql4에서 사용 가능한 모든 주문이 지원됩니다 (6 개).
  8. 전략은 한 가지 유형의 주문만 정의합니다(매수 또는 매도 또는 매수_스톱 또는...).
  9. 미체결 주문의 경우 그래프 상단에 4개의 노드가 있습니다: 시장 진입 조건, 종료 조건, tp 및 sl.
  10. 블록 (그래프의 함수 / 노드)은 지표, 상수, 다른 노드에서 입력 매개 변수를 가져올 수 있으며, 많은 다른 노드가 한 노드의 결과에서 데이터를 입력 매개 변수로 사용할 수 있으며 그래프에서주기를 허용하는 것이 불가능하다는 사실을 제외하고는 제한이 없습니다.
  11. 그런 다음 그래프는 순차 코드로 변환되고 이 코드는 실행을 위해 전문가 어드바이저로 전송되며 MQL에서 컴파일할 필요가 없습니다.
다음은 샘플 코드입니다:

#define
 symbol          GBPUSD;
period          60;
repeat_signal_skip      True;
stop_level              60;
trade           op_buy;
max_shift               13;
stack           4;
const           9;
cache           1;
#data
{True},{-1.26761795},{4.67108999},
{2.08088665},{-0.33782435},{22},
{1.63150050},{-11},{-0.22006371};
#program
 push    [0];
push    [1];
push    [2];
call    F_plus_d;
push    [3];
push    [4];
call    F_plus_d;
push    [5];
get     .Ichimoku_2;
call    F_plus_d;
push    [6];
call    F_minus_d;
save    [0];
push    [7];
get     .Open;
call    F_plus_d;
call    F_less;
load    [0];
push    [8];
#end

아직 모든 것이 완료된 것은 아니며 필요한 모든 정보가 코드에 포함되어 있지 않으며 유형 제어의 관점에서 코드가 올바르게 실행되며 무의미한 표현은 아직 고려되지 않습니다.

코드에는 간단한 유형만 사용됩니다.

 

전략은 HTTP 프로토콜을 통해 전송할 수 있다고 가정하면 MQL은 이러한 방식으로 전략을 수신 할 수 있습니다.

모든 것을 완전히 자동화하고, 전략을 검색하고, 전략 포트폴리오를 만들고, 전문가 고문에게 전송하는 등의 작업을 하고 싶습니다.

MQL의 시스템 일부는 90% 준비되어 있으며, 많은 전략(포지션 제어, 리스크, 오류 처리 등)을 다루고 있습니다.

아직 해야 할 일이 많이 남아 있습니다.

 
Yuriy Asaulenko:
전략을 찾는다면 이보다 더 쉬운 방법은 없습니다. 나머지는 잘 모르겠고 생각해 본 적도 없습니다. 하지만 모든 모델링은 MT가 아닌 특수한 환경에서는 더 쉽습니다. MT는 최종 제품이며 연구를 위해 만들어진 것이 아니며 그다지 적합하지 않습니다.
저도 동의합니다. 처음에는 Matlab에서 직접 아이디어를 모델링했습니다. 그래도 MT 테스터는 블랙박스입니다.
 
Aliaksandr Hryshyn:
다음은 무의미한 표현의 또 다른 예입니다: =높음>(열기-닫기), 역시 통과하지 못합니다.

왜 의미가 없는지 설명하세요. 실제로는 다음과 같이 작성합니다.

=High>MathAbs(Open-Close)

ю

 

Aliaksandr Hryshyn:

를 입력하면 그래프가 직렬 코드로 변환되고 이 코드는 실행을 위해 전문가 어드바이저로 전송되며, MQL에서 컴파일할 필요가 없습니다.


어떻게 설명해 주시겠어요?
 

항상 참을 반환합니다)).

(열기-닫기)는 항상 (높음)보다 작습니다.

 
Alexey Volchanskiy:

어떻게 설명해 주시겠어요?
방송과 공연 중 어느 쪽인가요?
 
Aliaksandr Hryshyn:

항상 참을 반환합니다)).

(열기-닫기)는 항상 (높음)보다 작습니다.

제동 ))))))))))