드미트리, 이게 뭐야? 기사가 참고서와 매크로 표 형식 인 이유는 무엇입니까?
그리고 코드 샘플은 어디에 있으며 프로그래머 아이디어의 본질은 어디에 있습니까?
원칙과 식별을 설명하는 장-불행히도 무슨 일이 일어나고 있는지 밝히지 않았습니다.
가능한 매크로 목록을 잊지 않기 위해 스스로 작성한 그런 인상입니다.
코드에서 일어나는 일의 목적을 모든 사람에게 설명해 주시겠습니까? (저는 애플리케이션에는 관심이없고 MQL 알고리즘 구성에만 관심이 있습니다).
에헴...
"프로그래머를 위한 프로그래머의 글"처럼 보입니다. 누가 (저자를 제외하고) 그것을 사용할지는 분명하지 않습니다. "mql5 배우기" 대 " eIntepretar 배우기".
그러나 수행 된 작업은 엄청나며 감탄할 만합니다.
드미트리, 이게 뭐야? 기사가 참고서와 매크로 표 형식 인 이유는 무엇입니까?
그리고 코드 샘플은 어디에 있으며 프로그래머 아이디어의 본질은 어디에 있습니까?
원칙과 식별을 설명하는 장-불행히도 무슨 일이 일어나고 있는지 밝히지 않았습니다.
가능한 매크로 목록을 잊지 않기 위해 스스로 작성한 그런 인상입니다.
코드에서 일어나는 일의 목적을 모든 사람에게 설명해 주시겠습니까? (저는 응용 프로그램에는 관심이없고 MQL 알고리즘 구성에만 관심이 있습니다).
참조 테이블이 3~4개 있습니다. 나머지는 주석이 있는 매크로입니다. 이 기사는 정보가 매우 풍부하므로 한 단어도 건너 뛰지 않고 읽어야하며 불분명 한 생각이 하나라도 있으면 다음 단계로 이동하지 마십시오 (물론 필요한 경우 원하는 경우). 한 번 읽는 것은 도움이 되지 않을 것입니다. 중심 아이디어를 골라 내려고하면 그렇게 크고 복잡하지 않습니다. 주문에 대한 모든 전략은 가능한 모든 단계의 상태로 분해되어야하지만 이것은 공식화되지 않은 개인적인 창의적인 과정입니다. 원한다면 공식화 할 수 있지만 많은 글이 될 것입니다.
프로그래머의 아이디어 ... 컴퓨터만큼이나 오래된 것으로, 철제 기계가 작동하는 인간 언어로 된 프로그램입니다.
코드 예제. 문자열 찾기() 및 문자열 하위 문자열() 함수. 일반적으로 PHP에서 문자열 함수를 공부하는 것이 유용 할 수 있습니다. 창의력을 실제로 확장 할 수 있습니다 ...
기사에 제시된 전체 정보를 다른 방식으로 넣으려고하면 5-10 배 더 많은 양이 될 수 있습니다 ...
코드에서 일어나는 일 .... 파일을 한 줄씩 읽고, 주석을 "#" 기호로 구분하고, 단계와 동작 필드를 "|" 기호로 나누고, 명령을 ";" 기호로 나눕니다. 그런 다음 비교 표현식에서 <, >, <=, <= 등의 하위 문자열을 찾습니다. 하위 문자열을 찾으면 그 색인을 기록하고 그 색인에 따라 표현식을 왼쪽과 오른쪽으로 나눕니다. 산술 표현식은 그대로 유지됩니다. 또는 -로 시작하면 한 문자를 들여쓰고 그 앞에 * 기호가 없는 + 또는 -를 찾습니다. 또는 -를 하위 문자열로 나누고 이 두 하위 문자열을 * 기호로 나눕니다. 그 후에는 인수가 네 개(표현식의 왼쪽에 하나 더 있음)가 있습니다. 이러한 인수는 명령어가 될 수 있습니다. 인수가 숫자 또는 끝에 p가 붙은 숫자, 사용자 변수 또는 사용자 변수인지 확인하고, 숫자라면 숫자로 바꿉니다. 그렇지 않으면 명령어입니다. 명령 자체와 인수는 기호(.
가장 흥미로운 것은 표현식 계산입니다. 구조가 있고, 각 구조에 값이 있는 5개의 구조가 있으며, 값 구조는 값이 직접 숫자인지 명령인지 여부를 지정합니다. 값이있는 각 구조에 대해 값을 계산하기 위해 함수가 호출됩니다. 값이 숫자인 경우 함수는 아무 작업도 수행하지 않으며, 명령어인 경우 적절한 함수가 호출됩니다(스위치를 통해 선택). 값을 입력하면 산술식이 계산되고, 구조에서 값에 대한 부호와 산술 연산이 지정됩니다.... 모든 것이 숫자 (인덱스)로만 지정되고 필요한 조치는 스위치를 통해 선택됩니다.
작업 해석의 바로 그 과정은 명령과 명령에 대해 수신 된 데이터의 식별자에 대한 중첩 된 두 가지 수준의 스위치입니다. 관심이 있으시면 OnTick() 함수에서 코드를 파헤쳐 보면 코드가 많지 않습니다. 가장 많은 양의 코드는 OnInit() 함수에서 제공되지만 거기에서 그렇게 흥미롭지는 않지만 누군가에게 더 편리하기 때문에 StringFind() 및 StrSubstr() 함수 만 수행 할 수 있습니다.
- www.mql5.com
간단한 TS를 프로그래밍하는 방법, 적어도 느리고 빠른 MA의 교차점에서 거래하는 방법에 대한 예가 필요합니다.
Khe... 먼저 기사 전문을 읽어야 합니다.
...전략의 시각적 디자이너가 되기 위해.....
좋은 생각이에요, 한 가지 문제는 해결되겠지만... 하지만 여전히 전략에 대해 생각하고, 분석하고, 단계별로 세분화해야 합니다.
에헴...
"프로그래머를 위한 프로그래머의 글"처럼 보입니다. 누가 (저자를 제외하고) 그것을 사용할지는 분명하지 않습니다. "mql5 배우기" 대 " eIntepretar 배우기".
그리고 수행 된 작업은 단순히 엄청나며 감탄할 만합니다.
글쎄, "미친 과학자"..... 위로 상으로 매우 상세하지는 않지만 그림과 함께 몇 가지 주문 전략에 대한 설명이 있습니다.... 누군가, 아마도 적어도 이것은 유용 할 것입니다 ...
Если постараться изложить весь объем информации представленный в статье как-то иначе, она бы могла поучиться раз в 5-10 объемней...
참고 표를 도크에 넣고 기사에 첨부하기만 하면 됩니다.
기사를 다시 읽었습니다. 기사의 내용을 이해하기 위해 직접 논문을 작성하기로 결정했습니다. 아마 이해에 가까워졌을 것입니다.
디미트리, 제가 틀렸다면 바로잡아 주세요.
따라서 전문가의 임무는 상태를 확인하는 것입니다. 전부 다요.
그리고 현재 상태 중 하나라도 관련이있는 경우 매크로가이 상태에 대해 규정하는대로 수행합니다.
작업은 모순을 만드는 것이 아니라 여러 매크로가 동일한 상태를 처리하도록하거나 두 매크로 간의 충돌을 방지하는 것입니다 (예 : 하나는 닫히고 두 번째는 즉시 열리고 "싸움"이있을 것입니다)
즉, 전문가의 임무는 지속적으로 루프에서 실행되고 지정된 모든 매크로 (파일에 작성한 내용 또는 다른 항목)를 확인하고 조건을 충족 할 때 규정 된 작업을 수행하는 것입니다.
예를 들어 간단한 전략(지표 전략도 포함)이 있다고 가정해 봅시다.
MA가 교차할 때 주문을 개시해야 합니다. 그런 다음 그것을 씁니다. 그리고 어떤 접두사에서 강제로 닫습니다.
이 경우 프로그래머가 하는 일입니다.
그는 세 가지 함수를 작성합니다 (귀하의 경우 매크로와 같은)
- 지표가 OK를주고 포즈가없는 경우 지표를 확인하고 주문을 여는 기능.
- 포즈가있는 경우 트롤링 기능
- 주문이 있고 이익이있는 경우 마감 기능
이 함수를 호출하는 순서는 무엇이든 될 수 있습니다. 예를 들어
OnTick()
{
OpenOrder()
TralPos()
CloseProfit()
}와 같이 체크 인에 배치하면 충분합니다.
즉, 함수는 그 자체로 독립적입니다.
이는 TralPos가 그 자체로 독립적이며 다른 두 함수의 존재가 어떤 식 으로든 작업에 영향을 미치지 않는다는 것을 의미합니다. 필요한 모든 검사(포즈 검색, 스톱 수정 등)가 그 안에서 수행됩니다.
마찬가지로 CloseProfit도 독립적입니다.
따라서 독립적이고 알고리즘의 원자 연산을 수행하는 수십 개의 함수를 작성했습니다.
그리고 매개변수가 있는 테스트 파일을 통해 설정하는 방법을 만들었으므로 다시 컴파일하지 않고도 함수(및 전문가 조언자)의 매개변수를 변경할 수 있습니다.
이와 같이요?
참조 표를 문서에 넣고 문서에 첨부하는 것도 가능할 것입니다.
취향의 문제이지만 기사 안에 있으면 잃어버리지 않을 것입니다.
기사를 다시 읽었습니다. 기사의 내용을 이해하기 위해 스스로 논문을 작성하기로 결정했고 아마 이해에 가까워졌을 것입니다.
디미트리, 제가 틀렸다면 바로잡아 주세요.
따라서 전문가의 임무는 상태를 확인하는 것입니다. 전부 다요. 하나하나씩요.
네. 각 틱마다 모든 단계의 관련성을 확인합니다.
그리고 현재 상태 중 하나라도 관련성이 있으면 매크로가이 상태에 대해 규정 한대로 수행합니다.
예. 하지만 약간의 뉘앙스가 있습니다. 시장가 주문이 수행되는 경우 반드시 시장가 주문이어야 하며 가장 먼저 수행되어야 합니다. 지정가 주문이 설정된 경우 전문가 어드바이저는 설정하기 전에 그 존재를 확인합니다.
여러 매크로가 동일한 상태를 처리하거나 두 개의 매크로가 충돌하지 않아야 합니다(예: 하나는 닫히고 두 번째는 즉시 열리고 "싸움"이 발생함).
충돌이 없어야 합니다. 그러나 더 편리하다면 동일한 단계에 대해 여러 개의 매크로가 있을 수 있습니다. 예를 들어, 한 단계는 시장가 포지션의 존재이며, 한쪽에는 지정가 주문이 있고 다른 쪽에는 스톱 주문이 있거나 한 줄에 스톱과 지정가 주문을 모두 작성할 수 있습니다.
즉, 전문가 조언자의 임무는 루프를 지속적으로 실행하고 지정된 모든 매크로 (파일 또는 다른 것에 작성한)를 확인하고 조건이 충족되면 규정 된 작업을 수행하는 것입니다.
예.
예를 들어 간단한 전략(보조지표 전략도 포함)이 있다고 가정해 봅시다.
MA가 교차할 때 주문을 개시해야 합니다. 그런 다음 그것을 씁니다. 그런 다음 일부 접두사에서 강제로 닫습니다.
맞습니다.
이 경우 프로그래머가 하는 일입니다.
그는 세 가지 함수 (귀하의 경우 매크로와 같은)를 작성합니다
- 지표를 확인하고 지표가 신호를 보냈고 포지션이없는 경우 주문을 여는 기능입니다.
이것은 한 단계입니다: 인디케이터 신호는 있지만 포지션이 없는 경우입니다.
- 포즈가 있는 경우 트롤의 기능.
이것은 별도의 단계로 기록할 수 있습니다. 위상 식별 - 시장 포지션의 존재. 해당 동작은 트롤 함수의 호출입니다.
- 주문이 있고 주문에 이익이 있는 경우 마감 기능.
세 번째 단계입니다. 포지션이 있고 그 수익이 지정된 값보다 큽니다. 작업은 포지션을 청산하는 것입니다.
이러한 함수를 호출하는 순서는 무엇이든 가능합니다. 예를 들어 OnTick의 체크에 배치하는 것으로 충분합니다.
그리고 메타프로그램이 있는 파일에서 줄을 다른 순서로 배치할 수 있습니다.
OnTick()
{
OpenOrder()
TralPos()
CloseProfit()
}
즉, 함수 자체는 독립적입니다.
메타프로그래밍이 있는 파일의 줄도 독립적인 것으로 나타났습니다.
즉, TralPos는 그 자체로 독립적이며 다른 두 함수의 존재가 그 작업에 영향을 미치지 않는다는 것을 의미합니다. 필요한 모든 검사가 그 안에서 수행됩니다(포즈 검색, 수정 중지 등).
메타프로그램의 한 줄도 자급자족합니다.
마찬가지로 CloseProfit은 자급자족합니다.
따라서 독립적이고 알고리즘의 원자적 연산을 수행하는 수십 개의 함수를 작성했습니다.
그리고 매개변수가 있는 테스트 파일을 통해 설정하는 방법을 만들었으므로 다시 컴파일하지 않고도 함수(및 전문가 조언자)의 매개변수를 변경할 수 있습니다.
이러한 함수는 결합할 수 있습니다. 위상은 시장 포지션의 존재 여부뿐만 아니라 다양한 변종, 액세스 명령 테이블의 명령으로 결정할 수 있습니다.
이렇게?
오해를 일으킬 수있는 한 가지. 기사에서 액션과 상태의 차이를 어떻게 든 모호하게 표현했습니다. 단계를 식별 할 때 시장 조치를 취해야하는 경우이를 조치라고해야합니다. 그리고 보류 주문을 설정해야 하는 경우에는 상태 설명이라고 부르는 것이 더 적절합니다. 페이즈는 주로 시장가 포지션의 코멘트로 식별되며, 이 페이즈는 액션(시장가 포지션 개시/청산) 또는 상태(일부 대기 주문의 존재)에 해당합니다. 시장가 주문인 경우 실행 후 다른 단계로 전환될 것으로 가정합니다. 주문을 올바르게 표시하는 것이 중요합니다. 그러나 한 단계에서는 시장 움직임과 주문 설정이 모두 있을 수 있습니다. 시장가 주문이 실패하면 그 이후의 모든 주문은 실행되지 않습니다. 그리고 성공하면 한 번의 틱으로 가능한 한 많은 것을 시도하는 경우 실행됩니다. 주문이 설정되지 않을 수도 있지만 시장가 조치가 완료된 경우, 즉 다른 단계로 전환된다는 점을 염두에 두어야 합니다.
새로운 기고글 매매 전략 다목적 엑스퍼트 어드바이저 가 게재되었습니다:
이 글은 대기 주문을 활용하는 전략 및 해당 전략 개발에 사용되는 Metalanguage, 그리고 그 Metalanguage를 기반으로 작동하는 다목적 엑스퍼트 어드바이저에 대한 설명입니다.
이 밖에 또 다른 분석이 필요한 경우도 있습니다. 현재 거래 상황 분석라는 건데요. 거래 포지션 형태에 대한 분석과 대기 주문이 있는 경우 모든 대기 주문에 대한 분석을 포함합니다. 이런 분석을 통해 포지션 및 주문 관련 결정을 내리는 것이죠. 예를 들어 포지션 청산이라든지, 손절매 이동, 대기 주문 설정 및 삭제 등 말입니다. 다시 말해 분석은 시장 활동, 즉 우리가 (혹은 엑스퍼트 어드바이저가) 만들어 낸 상황에 따른 액션 및 사용되는 전략의 규칙에 대해 연구하는 것입니다.
많이들 알고 계시는 추적 손절매도 어떻게 보면 아래의 두 번째 요소에 속한다고 볼 수 있죠. 다음을 생각해 볼까요? 설정 값보다 높은 수익을 창출하는 포지션이 오픈되어 있으나 손절매가 설정되어있지 않거나 현재 가격에서 설정된 거리보다 먼 곳에 위치하는 경우, 손절매 주문이 취소됩니다.
이때 추적 손절매는 눈길이 갈만한 동시에 꽤 간단한 기능이죠. 게다가 포지션 관리 기능이므로 완전히 다른 매매 전략 카테고리로 분류됩니다. 따라서 매매 전략은 다음의 세 가지 요소로 구성됩니다:
시장 분석 및 시장 분석 결과를 기반으로 하는 투자 행위.
시장 상황 분석 및 시장 상황 분석 결과를 기반으로 하는 투자 행위.
포지션 관리.
이 글은 대기 주문을 활용하는 전략(이하 매매 전략) 및 해당 전략 개발에 사용되는 Metalanguage, 그리고 그 Metalanguage를 기반으로 작동하는 다목적 도구(엑스퍼트 어드바이저)에 관한 글입니다.
작성자: Dmitry Fedoseev