무료 EA 프로그래밍 E - 코스.
EA를 작성하는 방법을 배우는 데 관심이있는 사람은 무료 E-Course - Your Own Automatic Trading Robot에 무료 전자 코스가 있습니다.
희망은 누군가를 돕습니다.
나는 Forex를 처음 사용합니다 - MetaTrader Programming & gt; 멀티 차트 차트 소프트웨어 (범위 막대가 있어야 함) 및 쉬운 언어 코드를 & gt; 대화 형 중개인 데모 계좌.
이 모든 것을하는 것이 더 쉽고 저렴하고 좋은 방법일까요?
한 곳에서 다루고 싶습니다.
2. 차트 기능의 거래와 함께 범위 막대 차트.
3. 내 코드의 기계적 거래에 편리한 쉬운 언어.
5. 플랫폼의 서버에 전략을 배치하여 책상에서 벗어나면 문제가되지 않을 수 있습니다.
Forex ea programming tutorial
코딩 비디오 코스.
mql4 비디오 강좌.
MQL4 외환 metatrader 프로그래밍 코딩 비디오 코스를 찾는 상인은 초심자를 10 명의 간단한 비디오 수업으로 EA 개발자로 전환시킬 수 있도록 설계된 Steve Flemming의 MQL4 10 비디오 교육 과정을보아야합니다.
Steve의 코스는 트레이더를위한 MetaQuotes Language 4를 가르쳐서 트레이딩 전략을 완벽하게 기능하는 전문 컨설턴트 EA 또는 외환 로봇으로 번역하도록 설계되었습니다.
Steve는 MetaQuotes Language 4 (MQL4)에서만 10 명 이상의 전문 프로그래머로 15 년 이상 근무 해 왔습니다. 스티브는 또한 개인 수업을지도하지만 처음으로이 비디오 자습서를 대중에게 제공하기로 결정했습니다.
Traders Programming Tutorial을위한 MetaQuotes 언어 4 (MQL4).
* 수업 1 : 변수 * 수업 2 : 연산자 및 표현 * 수업 3 : 조건문 * 수업 4 : 함수 * 수업 5 : 모든 것을한데 모으기 첫 번째 EA 구축 6 단원 : 객체 * 단원 7 : 배열 * 단원 8 : 전역 변수 및 iCustom * 단원 9 : 파일 처리 * 단원 10 : 오류 처리 및 디버깅
기초부터 시작하십시오 - Metatrader First를 다운로드하십시오.
기본 Metatrader Terminal에있는 경우 MetaEditor를 열고 조언 작성 마법사를 사용하여 자신 만의 Expert Advisor를 만들 수 있습니다.
MetaEditor의 도움말 메뉴 아래에 표시된대로 아래 지침을 복사했습니다.
MetaEditor를 사용하여 Expert Advisor 만들기.
클라이언트 터미널의 가장 강력한 기능 중 하나는 자신 만의 MQL4 프로그램을 만드는 것입니다. 따라서 무역 아이디어를 확인하고 수익성 높은 전략을 개발할 수 있습니다.
새로운 Expert Advisor를 작성하려면 다음을 수행하십시오.
클라이언트 터미널의 "네비게이터"창을 마우스 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴에서 "새 전문가 만들기"항목을 선택하십시오.
MetaEditor에서 "파일 -> 새로 만들기"메뉴 항목을 선택하거나 툴바에서 새 전문가 버튼을 클릭하십시오. Advisor 작성 마법사가 나타납니다. 작업의 첫 번째 단계에서는 관리자의 유형을 지정하거나 관리자를 작성하기위한 템플리트를 선택해야합니다. 그런 다음 "다음"버튼을 클릭하고 지시 사항을 따르십시오.
다음 단계를 위해 선택;
목록 선택에서 전문가 조언자.
Expert Advisor 만들기 - 프로그램 만들기.
클라이언트 터미널의 가장 강력한 기능 중 하나는 자신 만의 Expert Advisor를 만드는 것입니다. 그들은 당신이 무역 아이디어를 확인하고 수익성있는 전략을 개발할 수 있도록 도와줍니다.
Expert Advisor를 만들려면 매개 변수를 지정해야합니다.
전문가 고문 (파일) 이름입니다.
저자의 이메일 또는 웹 사이트 주소.
입력 매개 변수 (이름, 유형 및 초기 값)
필요한 모든 전문가 매개 변수를 지정한 후 전문가 생성을 시작하려면 "마침"버튼을 클릭하십시오.
생성 결과는 함수 및 매개 변수 선언이있는 전문가 고문 프로그램 소스 코드가됩니다.
fm : 기능 W 내용 세트는 기본 템플리트 "expert. mqt"에 따라 다 (니다. 템플릿에 대한 자세한 내용은 템플릿 파일 형식 섹션을 참조하십시오.
훌륭한 예가 기사에 나와 있습니다. "초보자를위한 MQL5의 전문 고문 작성에 대한 단계별 안내서"로 이동하십시오.
외환 브로커.
FOREX 옵션.
교육적인.
관리.
자동 거래 시스템이 작동하지 않는다고 누가 말했습니까? brainyforex 로봇 테스트 페이지를 확인하십시오.
Expert Advisor Studio라는 전문 어드바이저 빌더 테스트를 확인하십시오.
Forex 거래는 실질적인 손실 위험이 있습니다. 면책 조항을 읽으십시오.
(C) Copyright 2009 - 2017 Brainyforex. 판권 소유.
MetaTrader 4의 전문가 고문 - MQL4 초보자 용 자습서 파트 21.
이 튜토리얼에서는 MQL4 및 # 8211에 새로운 유형의 프로그램을 소개합니다. 전문가 고문.
본질적으로, 전문가 고문 (EA & # 8217;)이 당신의 Forex 로봇입니다. 전문가 조언자와 스크립트 사이에는 몇 가지 중요한 차이점이 있습니다. 이 자습서에서는이를 설명합니다.
또한 첫 번째 테스트 EA를 만들고 MetaTrader 4 거래 터미널에서 어떻게 작동하는지 살펴 보겠습니다.
비디오 아래 소스 코드. 중요 : 더 이상 스크립트가 아닙니다. & # 8211; 지금은 전문가의 조언자이므로 MetaEditor 마법사를 사용할 때 관련 옵션을 선택해야합니다.
외환 트레이딩 아카데미로 시작하십시오.
나는 Forex Trader, Data Scientist, Entrepreneur, Online Coach입니다. 그것들은 나의 주요 직업이다. 나는 2007 년부터 Forex Trading에 뛰어 들었고, 그들이 말한대로, 나는 선과 악 그리고 못생긴 것을 보았다. 나는 GFC에서 살아 남았고 그 과정에서 많은 것을 배웠다. 오늘 나는 너와 내 지식과 통찰력을 나누고 싶다.
카테고리.
알고리즘 트레이딩 (1) 코스 : 초보자를위한 외환 트레이닝 코스 (6) 코스 : 초보자를위한 MQL4 코스 (48) 코스 : 초보자를위한 전략 테스터 (11) 외환 스터디 (14) 외환 전략 (61) 초보자를위한 외환 트레이딩 (66) Forex VPS (1) 기본 분석 (2) 인터뷰 (1) MQL4 (2) 기술 분석 (7) 분류되지 않은 (24)
최근 게시물.
인기 태그.
외환 트레이딩 아카데미로 시작하십시오.
Forexboat Pty Ltd (ABN : 29 609 855 414)는 호주 금융 서비스 라이센스 (AFSL no. 435746)를 보유한 HLK Group Pty Ltd (ACN : 161 284 500)의 Corporate Authorized Representatives (AR 번호 001238951)입니다. 이 웹 사이트에 포함 된 모든 정보 또는 조언은 본질 상 일반적이며 개인적 또는 투자에 대한 조언이 아닙니다. 우리는 그러한 정보의 사용 또는 의존으로 인해 직접 또는 간접적으로 발생할 수있는 이익 손실을 포함하여 어떠한 손실이나 손해에 대해서도 책임을지지 않습니다. 금융 상품을 구입하기 전에 독립적 인 재정 자문을 받아야합니다. 모든 유가 증권 및 금융 상품 또는 금융 상품 거래에는 위험이 관련됩니다. 과거 성과 결과가 반드시 미래 결과를 나타내는 것은 아님을 기억하십시오.
이 사이트의 정보는 전 세계적으로 접근 할 수 있지만 그러한 배포 또는 사용이 현지 법률 또는 규정에 위배되는 모든 국가 또는 관할 지역의 거주자를 대상으로하지 않습니다. Forexboat Pty Ltd는 National Futures Association (NFA & # 8221;) 및 Commodity Futures Trading Commission (CFTC)과 같은 미국 규제 기관에 등록되어 있지 않으므로이 웹 사이트에 제공된 제품 및 서비스는 미국 거주자를위한 것입니다.
단순 전문가 고문.
이 섹션에서는 간단한 거래 전문가 고문을 만드는 원칙에 대해 설명합니다.
예비 논증.
거래 전문 고문을 프로그램하기 전에 미래 프로그램의 일반 원칙을 정의해야합니다. 규칙을 작성하는 엄격한 프로그램이 없습니다. 그러나 일단 프로그램을 만들면 프로그래머는 일반적으로이를 향상시킵니다. 미래에 프로그램을 쉽게 이해할 수 있으려면, 잘 생각되고 이해하기 쉬운 계획에 따라 만들어야합니다 (다른 프로그래머가 프로그램을 더 향상 시키려면 특히 중요합니다). 가장 편리한 프로그램은 계산 블록을 담당하는 기능 블록으로 구성된 프로그램입니다. Trading Expert Advisor의 알고리즘을 만들려면 운영 프로그램에서 수행해야하는 작업을 분석해 봅시다.
거래 주문 형성에서 가장 중요한 데이터 중 하나는 클라이언트 단말기에 이미 존재하는 주문에 대한 정보입니다. 일부 거래 전략에서는 단일 단방향 주문 만 허용합니다. 일반적으로 거래 전략이 허용하는 경우 여러 개의 주문이 동시에 단말기에서 열릴 수 있지만 그 수는 합리적으로 제한되어야합니다. 어떤 전략을 사용할 때, 현 상황을 고려하여 무역 결정을 내려야한다. 프로그램에서 거래 결정이 내려지기 전에 이미 열렸거나 거래 된 거래 주문을 알아야합니다. 우선 프로그램은 실행될 첫 번째 명령 중 하나 인 주문 계산 블록을 포함해야합니다.
EA 실행 중 거래 결정이 이루어져야하며, 그 이행은 거래 운영의 실행으로 이어진다. 거래 주문 형성을 담당하는 코드 부분은 별도의 블록으로 작성하는 것이 더 낫습니다. Expert Advisor는 새로운 보류 또는 시장 주문을 열거 나 기존 주문을 닫거나 수정하거나 아무런 조치도 수행하지 않기위한 거래 요청을 할 수 있습니다. EA는 또한 사용자의 욕구에 따라 주문 가격을 계산해야합니다.
무역 결정은 무역 기준에 근거한 프로그램으로 결정되어야한다. 전체 프로그램의 성공은 프로그램의 무역 기준을 탐지하는 정확성에 달려 있습니다. 무역 기준을 계산할 때 프로그램은 유용 할 수있는 모든 정보를 고려할 수 있습니다. 예를 들어, 전문가 조언자는 기술 지표 값, 중요한 보도 자료의 시간, 현재 시간, 일부 가격 수준의 가치 등을 분석 할 수 있습니다. 편의를 위해 거래 기준 계산을 담당하는 프로그램 부분은 별도로 작성해야합니다 블록.
거래 전문가는 반드시 오류 처리 블록을 포함해야합니다. 무역 운영의 실행에서 발생할 수있는 오류를 분석하면 한쪽에서 거래 요청을 반복 할 수 있고 다른 한편으로는 가능한 충돌 상황을 사용자에게 알릴 수 있습니다.
간단한 전문가 고문의 구조.
아래는 몇 가지 기능 블록을 기반으로 구성된 간단한 Expert Advisor의 구조적 구성입니다. 각 블록에서 특정 분리 된 계산 부분을 기반으로합니다.
그림 109. 간단한 Expert Advisor의 구조도.
다음 EA 개발 단계에는 아직 프로그램 코드가 없습니다. 동시에 프로그램의 알고리즘은 상당 부분 형성됩니다. 제공되는 체계의 기반 위에 구축 된 EA가 어떻게 작동 할 것인가는 단순히 체계를 살펴보고 블록 이름과 관계 배열 (제어 전달)을 중심으로 쉽게 이해할 수 있습니다.
프로그램 시작 후 제어는 예비 처리 블록으로 넘어갑니다. 이 블록에서 일부 일반 매개 변수를 분석 할 수 있습니다. 예를 들어, 창에 막대가 충분하지 않은 경우 (기술 지표의 매개 변수를 계산하는 데 필요한 막대) EA는 적절하게 작동하지 못합니다. 그러한 경우 EA는 사전에 사용자에게이를 알려주고 해지 사유를보고해야합니다. 일반 성격의 금기 사항이없는 경우 통제는 주문 회계 블록으로 전달됩니다.
회계 명령 블록에서 보안 (EA가 첨부 된 창까지)을 위해 클라이언트 터미널에있는 주문의 수와 품질이 감지됩니다. 이 블록에서 다른 유가 증권 주문은 제거해야합니다. 프로그래밍 된 거래 전략이 시장 주문만을 사용해야하고 (보류중인 주문을 사용하지 않는 경우) 보류중인 주문의 존재 사실을 감지해야합니다. 전략이 하나의 시장 질서 만 인정하고 실제로 여러 가지 주문이있는 경우이 사실도 알려 져야합니다. (이 계획에서) 주문 계산 블록의 임무는 현재 거래 상황이 예상 거래 상황, 즉 EA가 적절하게 운영 할 수있는 상황인지 여부를 정의하는 데 있습니다. 상황이 일치하면 EA의 작업을 계속하기 위해 제어가 다음 블록으로 전달되어야합니다. 그렇지 않은 경우 EA의 작업을 종료해야하며이 사실을 사용자에게보고해야합니다.
단말기에 주문이 없거나 기존 주문의 수와 품질이 기대 한 것과 일치하는 경우, 거래 기준을 정의하는 블록으로 제어가 넘어갑니다. 이 블록에서 거래 결정을 내리는 데 필요한 모든 기준, 즉 주문을 열고 닫고 수정하는 기준이 계산됩니다. 추가 통제는 마감 오더 블록으로 전달됩니다.
제시된 계획에서 주문 마감 블록이 주문 시작 블록보다 먼저 실행되는 이유를 쉽게 이해할 수 있습니다. 기존 주문 (닫기 또는 수정)을 처리 한 다음에 만 새 주문을 처리하는 것이 항상 더 합리적입니다. 일반적으로 가능한 한 적은 양의 주문을 원한다는 안내를받는 것이 옳습니다. 이 블록을 실행하는 동안 닫는 기준이 활성화 된 모든 주문을 닫아야합니다.
필요한 모든 주문이 닫히면 통제가 새로운 주문 크기 계산 블록으로 전달됩니다. 주문량을 계산하기위한 알고리즘이 많이 있습니다. 가장 단순한 것은 일정하고 고정 된 로트 크기를 사용하는 것입니다. 테스트 전략을 위해 프로그램에서이 알고리즘을 사용하는 것이 편리합니다. 주문 크기를 정의하는 가장 보편적 인 방법은 사용 가능한 여백의 양 (예 : 30-40 %)에 따라 로트 수를 설정하는 것입니다. 여유 여유가 충분하지 않으면 프로그램은 사용자에게 이유를 알리는 작업을 종료합니다.
신규 주문을 시작하기위한 로트 수가 정의 된 후, 통제가 주문 시작 블록으로 전달됩니다. 이전에 계산 된 기준 중 특정 유형의 주문을 열어야 할 필요성을 지적한 경우 주문을 열기위한 거래 요청이이 블록에 형성됩니다.
Expert Advisor에서 블록 분석 오류도 있습니다. 무역 작업이 실패하면 제어 (이 경우에만)가 오류 처리 블록으로 전달됩니다. 서버 또는 클라이언트 터미널에 의해 리턴 된 오류가 중요하지 않은 경우, 한 번 더 트랜잭션 조작을 시도합니다. 중요한 오류가 반환 된 경우 (예 : 계정이 차단 된 경우) EA는 작업을 종료해야합니다. MQL4에는 프로그램이 보안 창에서 EA의 작업을 종료 할 가능성이 없음을 기억하십시오 (스크립트와 별개로 특수 기능 참조). 프로그램 방식으로 수행 할 수있는 작업은 start ()의 종료입니다. 새로운 tick에서 함수 start ()를 새로 시작하면 거래를 금지하는 특정 변수 플래그 (이 경우에는 중대 오류의 결과로 사용 가능)의 값을 분석하고 해당 변수의 종료를 제어 할 수 있습니다. 특수 기능 작동; 따라서 새로운 교역 요청의 형성은 허용되지 않는다. 제안 된 체계에서 플래그 값은 예비 처리 블록에서 분석됩니다.
무역 전략.
시장 가격은 끊임없이 움직이고 있습니다. 어느 시점에서든 시장 상황은 강한 단 향성 가격 변동 (상승 또는 하강) 또는 특정 평균과의 편차가 적은 편평한 가격 변동으로 조건 적으로 특성화 될 수 있습니다. 이러한 시장 특성은 명확한 기준이 없기 때문에 조건부입니다. 추세 또는 편차를 식별 할 수 있습니다. 예를 들어 편평한 경향이나 추세로 추적 할 수없는 강한 편차를 가진 긴 횡 방향 운동. 일반적으로 시장은 주로 측면 이동 상태이며 추세는 일반적으로 시간의 15-20 %를 차지한다고 가정합니다.
그림 110. 시장이 평평하고 추세다.
모든 거래 전략 또한 전통적으로 두 가지 주요 그룹으로 나눌 수 있습니다. 첫 번째 그룹에는 평평한 전략이 포함됩니다. 이러한 전략의 주된 아이디어는 분명한 가격이 이전 위치로 돌아와야하므로 주문이 마지막 가격 움직임과 반대 방향으로 열리는 이유입니다. 두 번째 그룹 전략은 주문이 소금 가격 움직임과 같은 방향으로 열리는 추세 전략입니다. 더 복잡한 (결합 된) 전략이 있습니다. 이러한 전략은 시장을 특징 짓는 여러 가지 요소를 고려합니다. 결과적으로 거래는 평평하고 트렌드로 실행될 수 있습니다. 이 전략이나 전략에 따라 기술적으로 거래를 구현하는 것이 어렵지 않습니다. MQL4에는 필요한 모든 수단이 포함되어 있습니다. 한 번 자신의 전략을 창안하는 주요 작업은 거래 기준을 찾는 것입니다.
거래 기준.
이 예에서는 트렌드 전문가 어드바이저, 즉 가격 이동 방향으로 주문을 열 수있는 전문가 어드바이저를 구성하려고 시도합니다. 그래서, 우리는 다양한 기술 지표 중에서 경향 추세를 감지하는 지표를 찾아야합니다. 거래 조건을 검색하는 가장 간단한 방법 중 하나는 평균 기간이 다른 MA의 조합을 분석하는 것입니다. 그림 111과 그림 112는 서로 다른 시장 부분에서 서로 다른 두 가지 MA (11과 31의 평균 기간 포함)의 위치를 보여줍니다. 작은 평균 기간 (빨간색 선)을 가진 평균은 가격 차트에 더 가깝고 뒤틀리고 움직일 수 있습니다. 더 큰 평균 기간 (파란 선)을 가진 이동 평균은 더 불활성이고, 더 큰 지연이 있고 시장 가격에서 더 멀리 놓입니다. 평균 기간이 다른 MA가 교차하고 MA 교차점을 읽는 기준으로 사용할 수 있는지 여부를 결정하려고합니다.
그림 111. 가격 이동 방향이 바뀔 때 MA (11)과 MA (31) 교차.
그림 111에서 우리는 MA 교차점에서 가격 이동 방향의 개시 주문이 정당화되는 시장 부분을 보았습니다. 지점 A에서 빨간색 선은 시장 가격이 오랫동안 계속 성장한 후에 파란색 선을 아래에서 위쪽으로 가로 지릅니다. 더 역방향 MA 교차는 가격 이동 방향이 변경되었음을 나타냅니다. A 지점에서 구매 주문서를 열고 B 지점에서 주문을 종료하면 A 가격과 B 가격의 차이에 비례하여 수익을 얻습니다.
그림 112. 가격 이동 방향이 바뀔 때 MA (11)과 MA (31)의 교차.
동시에 MA가 교차 할 때 시장에 다른 순간들이 있지만 이것이 가격 상승이나 하락을 가져 오지는 않습니다 (그림 112). 이 순간에 교차점에서 열리는 주문은 손실로 이어질 것입니다. Sell가 A에서 개설되어 B에서 종결된다면 그러한 거래는 손실을 가져올 것입니다. B에서 열었고 C에서 닫힌 구매 주문에 대해서도 마찬가지입니다.
MA 교차를 기반으로 구현 된 전체 전략의 성공은 트렌드와 플랫으로 특징 지어 질 수있는 부품의 수에 달려 있습니다. 편평한 곳에서 종종 MA 교차는 모든 추세 전략을 방해하는 규칙적인 이벤트입니다. 수많은 거짓 신호는 원칙적으로 손실로 이어집니다. 이것이 다른 평균 기간을 가진 MA의 사인 - 가 추세를 증명하는 다른 징후와 결합하여 거래 전략을 수립하는 데 사용될 수있는 이유입니다. 이 예제에서는 (간단한 Expert Advisor를 구성하기 위해)이 기호를 사용하지 않아야합니다.
우리는 또 다른 사인을 사용할 것입니다. 시장의 가격 변화 특성을 시각적으로 분석 한 결과, 짧은 움직임의 결과로 한 방향의 가격 상승 또는 하락이 자주 나타나는 것으로 나타났습니다. 다시 말해, 짧은 기간 내에 강한 운동이 일어난다면, 우리는 중기에 지속될 것으로 기대할 수 있습니다.
그림 113. 강한 가격 움직임은 추세 발전으로 이어질 수 있습니다.
그림 113은 강한 움직임이 같은 방향으로 가격 변화가 지속 된 시장시기를 보여준다. "강한 움직임" 평균 기간이 다른 MA의 차이를 사용할 수 있습니다. 운동이 강할수록, MA의 지연이 더 크며, MA의 평균 기간이 더 짧으며, 평균화의 작은 기간이 더 길다. 더욱이, 더 많은 수익을 가진 강한 불연속 가격 이동이 MA들간에 큰 차이를 가져 오지는 않는다. 즉, 수많은 거짓 신호가 나타나지 않는다. 예를 들어, 더 많은 수익을 내면서 가격을 50 점 늘리면 (그림 113의 중앙에 있음) MA의 차이가 20 점 증가했습니다. 동시에 A 지점에서 실제로 강한 움직임 (대개 상당한 수정이 수반되지 않음)은 25-30 점까지 차이가 증가하게되었습니다.
예를 들어 A에서와 같이 MA 간의 차이가 일정 값에 도달했을 때 구매 주문서가 열리면 미리 주문 된 Stop Order 값에 도달하면 주문이 수익성이 높습니다. 이 값을 전문가 조언자의 거래 기준으로 사용합시다.
주문 수.
이 예에서는 오직 하나의 시장 질서 만 존재한다고 인정하는 Expert Advisor를 분석하고 계류중인 주문은 제공되지 않습니다. 이러한 접근법은이 특정 예에서뿐만 아니라 모든 전략의 기초로 사용될 수 있습니다.
보류중인 주문은 일반적으로 개발자가 미래의 가격 변동을 높은 확률로 예측할 수있는 확실한 기준을 가지고있을 때 사용됩니다. 그러한 기준이 없으면 보류중인 주문을 사용할 필요가 없습니다.
한 가지 보안에 대해 여러 가지 반대 주문이 열리는 상황도 합리적인 것으로 간주 될 수 없습니다. 경제적 측면에서 볼 때 반대 주문은 무의미한 것으로 간주됩니다. 특히 주문 가격이 동등한 경우 특히 그렇습니다 (주문 마감 및 삭제 참조). 그런 경우에는 다른 주문으로 한 주문을 종료하고 특정 방향으로 한 시장 주문을 열기위한 신호를 기다려야합니다.
거래 기준의 관계.
이 위치에서 거래 기준간에 어떤 관계가 가능한지 명확 해집니다. 그림 114는 각 기준이 중요 (유효) 할 때 거래 기준 상관 관계의 3 가지 변형을 보여준다. 조치 (개회 및 폐회 시장 명령)는 다음 그림에서 시계 방향으로 진행됩니다.
그림 114. 주문 개폐 기준 상관 관계 (a와 b - correct, c - incorrect).
올바르게 형성된 거래 기준의 가장 인기있는 변형은 변종 a입니다. 개설 후 시장 주문은 그 종결을 요구하는 기준이 내려 질 때까지 계속됩니다. 그 후 주문을 열지 않으면 일시 중지가 발생합니다. 또한 시장 주문 판매를 개설 할 수 있습니다. 구매 주문서를 여는 조건보다 (정확하게 구성된 기준에 따라) 판매 주문을 닫기위한 조건이 먼저 발생합니다. 그러나 거래 조건에 따라 구매 주문을 다시 열 수 있습니다. 그러나이 변형에 따르면, 반대 방향으로 공개 시장 질서가 존재하는 경우 시장 질서를 열 수 없습니다.
유사한 기준 상관 관계가 변형 b에 있습니다. 차이점은 모든 시장 질서를 개방하는 기준은 동시에 반대 질서를 종결시키는 기준이된다는 것입니다. 변형 a와 같은이 변형은 하나의 보안에 동시에 터미널에서 열리는 여러 주문을 허용하지 않습니다.
조건 상관 관계 변형이 잘못되었습니다. 이 변형에 따르면 시장 질서의 개방은 반대 명령이 아직 닫히지 않았을 때 허용되는데, 이는 무의미하다. 이 변종이 부분적으로 정당화 될 수있는 드문 경우가있을 수 있습니다. 강한 가격 변동 이후 작은 수정에서 발생하는 손실을 보상하기 위해 반대 주문을 열 수 있습니다. 이 경우 반대 주문은 이미 존재하는 것보다 작거나 같은 값으로 열 수 있으며, 수정이 끝나면 닫힐 수 있습니다. 그러한 전술은 "주"(main) 트렌드 방향으로 열리는 주문.
일반적인 경우 여러 개의 일방향 명령도 가능합니다. 이는 이전에 체결 된 주문서가 Stop 주문에 의해 보호되고 같은 방향으로 가격 개발을 가리키는 기준이 다시 한번 트리거 될 때 정당화 될 수 있습니다. 그러나 이러한 전략을 수립 할 때 개발자는 급격한 가격 변동이 발생할 경우 첫 번째 가격 터치시 일부 중개인이 중단 주문을 실행할 수 없음을 완전히 인식해야합니다. 손실은 일방적 시장 주문의 총 가치에 비례합니다.
이 예에서는 거래 기준 상관 관계의 변형 b를 사용합니다. 모든 열린 시장 명령은 정지 명령 또는 반대 방향 트리거 (여기에서는 Buy를 닫는 기준은 Sell를 여는 것과 동시에 발생하고 반대의 경우도 마찬가지 임)로 주문을 열면 종료됩니다.
열린 주문의 크기.
모든 거래 전략에서 주문 크기는 합리적으로 제한되어야합니다. 간단한 경우 고정 주문 크기가 전문가 고문관에서 사용됩니다. EA 작동이 시작되기 전에 사용자는 향후 주문의 크기를 임의로 설정하고 일정 기간 동안 그대로 유지할 수 있습니다. 또한 잔액이 변경되면 사용자는 열린 주문의 로트 번호에 대해 새로운 값을 설정할 수 있습니다.
주문 규모가 너무 작 으면 예측할 수없는 시장 변화로 운영에 대한 확신이 높아 지지만 성공의 경우 이익은 그다지 크지 않을 것입니다. 주문 크기가 너무 크면 큰 이익을 얻을 수 있지만 EA는 너무 위험합니다. 일반적으로 미결 주문의 크기가 설정되므로 여백 요구 사항이 잔액 또는 여유 금액의 2 ~ 35 %를 초과하지 않습니다 (단, 주문서가 열리기 전에 한 번 주문서, 잔액 및 여유 금액 만 허용하는 경우). 평등하다).
이 예에서는 두 변종이 모두 구현됩니다. 사용자는 주문 값을 직접 나타내거나 여유 마진에서 백분율로 값을 설정할 수 있습니다.
프로그래밍 세부 사항.
이전 인수에 기초하여 작성된 간단한 추세 Expert Advisor tradingexpert. mq4는 다음과 같습니다.
변수 설명.
프로그램 추정의 또 다른 기준은 가독성입니다. 프로그램은 다른 프로그래머가 쉽게 읽을 수있는 경우 제대로 작성된 것으로 간주되므로 전략을 특징 짓는 모든 주요 프로그램 부분과 주된 순간을 주석 처리해야합니다. 이것은 또한 프로그램 시작시 모든 변수를 선언하고 주석을다는 것이 좋습니다.
블록 1-2에서 외부 및 전역 변수가 설명됩니다.
규칙에 따르면 외부 변수와 전역 변수는 처음 사용하기 전에 열어야합니다 (변수 유형 참조). 이것이 프로그램 헤드 부분에서 선언 된 이유입니다. 함수 start ()의 모든 지역 변수는 함수 헤더 바로 뒤에있는 상위 함수 부분 (블록 2-3)에서 수집되고 설명됩니다. 지역 변수 선언 규칙은이를 요구하지 않지만 금지하지는 않습니다. 프로그래머가 프로그램을 읽을 때 변수의 의미를 이해하는데 어려움을 겪는다면, 그는 상위 프로그램 부분을 참조하고 변수의 의미와 유형을 찾을 수 있습니다. 그것은 프로그래밍 연습에 매우 편리합니다.
예비 처리 블록.
이 예에서 전처리는 두 부분으로 구성됩니다 (블록 3-4). 보안 창에 막대가 충분하지 않으면 프로그램이 작업을 종료합니다. 그러한 경우에 기준을 계산하는데 필요한 이동 평균의 값을 정확하게 (블록 5-6에서) 검출하는 것은 불가능하다. 여기에 변수 Work의 값이 분석됩니다. 일반적인 EA 연산에서 변수 값은 항상 '참'(초기화 중에 한 번 설정 됨)입니다. 프로그램 연산에 중대한 오류가 발생하면이 변수에 'false'가 할당되고 start () 연산이 끝납니다. 이 값은 앞으로 변경되지 않으므로 다음 코드가 실행되지 않습니다. 이 경우 프로그램 운영을 중단하고 중대한 오류의 원인을 찾아야합니다 (필요한 경우 거래 센터에 연락해야 함). 상황이 해결되면 프로그램을 다시 시작할 수 있습니다. 즉 EA를 보안 창에 연결할 수 있습니다.
회계 명령.
설명 된 Expert Advisor는 하나의 시장 주문으로 만 작업 할 수 있습니다. orders accounting 블록 (블록 4-5)의 작업은 열린 주문의 특성을 정의하는 것입니다. 'for for'주문을 진행하는 루프에서 첫 번째 (int i = 1)부터 마지막 주문 (i & amp; OrdersTotal ())까지 모든 기존 시장 및 보류중인 주문이 확인됩니다. 각 사이클 반복에서 다음 순서는 함수 OrderSelect ()에 의해 선택됩니다. 선택은 미결 된 주문 및 보류중인 주문의 출처 (SELECT_BY_POS)로 이루어집니다.
선택이 성공적으로 수행되면 (즉, 단말기에 주문이 하나 더 있음), EA가 운영되는 보안을 위해 주문이 열렸는지 여부, 주문이 시장인지 보류 중인지에 관계없이이 주문 및 상황을 분석해야합니다 ; 그것은 또한 주문을 계산할 때 고려되어야합니다. 줄에 :
다른 보안을 위해 열리는 모든 주문이 제거됩니다. '계속'연산자는 반복을 중지하고 이러한 주문의 특성은 처리되지 않습니다. 그러나 주문이 보안을 위해 열리면 EA가 첨부 된 창에 추가로 분석됩니다.
OrderType ()이 1보다 큰 값을 반환하면 (거래 유형 참조) 선택한 주문이 보류 중입니다. 그러나 보류중인 주문을 관리하는이 전문 고문은 제공되지 않습니다. 충돌 상황이 발생 했으므로 start ()의 실행을 종료해야 함을 의미합니다. 이 경우 작업 종료에 대한 메시지가 나온 후 start () 실행은 연산자 'return'에 의해 중지됩니다.
마지막 검사에서 분석 된 주문이 시장 주문이라면 증권 주문의 총수가 계산되고 분석됩니다. 그러한 주문 중 첫 번째로 필요한 모든 특성이 정의됩니다. 다음 반복에서 주문 카운터 (총 변수)가 두 번째 시장 질서를 찾으면 EA는 하나 이상의 시장 질서를 관리 할 수 없기 때문에 상황도 충돌로 간주됩니다. 이 경우 해당 메시지를 표시 한 후 start () 실행이 중지됩니다.
주문 회계 블록 실행 결과 (모든 검사가 성공한 경우) Total 변수는 시장 주문이 없으면 0 값을 유지하고, 보안을 위해 시장 주문이 있으면 값 1을 얻습니다. 후자의 경우 주문 특성 (번호, 유형, 개시 가격, 정지 레벨 및 주문 값)과 일치하여 설정된 일부 변수도 해당 값을 가져옵니다.
거래 기준 계산.
분석 된 예에서 거래 기준의 정의 (블록 5-6)는 이동 평균과 평균 기간이 다른 기간의 차이를 기준으로 계산됩니다. 허용 된 기준에 따르면, 주기가 짧은 MA의 현재 값이 더 큰주기의 MA 값보다 크고 그 값의 차이가 특정 값보다 큰 경우 차트는 불스 제어됩니다. 곰 운동에서 마침표가 작은 마리아는 마침표가 큰 마침표보다 낮으며 그 차이도 특정 임계 값보다 큽니다.
블록에서 평균 기간 Period_MA_1 및 Period_MA_2를 갖는 MA의 시작 값이 계산됩니다. 거래 기준의 중요성은 해당 변수의 가치를 통해 표현됩니다. 변수 Opn_B 및 Opn_S는 구매 및 판매 오더 열기, Cls_В 및 Cls_S 변수를 닫는 기준을 나타냅니다. 예를 들어, Buy를 여는 기준이 트리거되지 않은 경우 Opn_B의 값은 'false'로 남습니다 (변수 초기화시 설정 됨). 트리거 된 경우 Opn_B는 'true'값을 가져옵니다. 이 경우 Sell를 닫는 기준은 Buy를 여는 기준과 일치하며, Sell를 여는 기준은 Buy를 닫는 기준과 일치합니다.
주문 종료.
이 전문가 어드바이저는 보안을 위해 열리는 하나의 시장 주문 (EA가 부착 된 창)을 통해서만 운영 될 예정입니다. 프로그램 통제가 주문 마감 블록으로 넘어가는 순간에 현재 보안 주문이 없거나 하나의 시장 주문 만 있다는 사실을 알 수 있습니다. 그래서 블록을 닫는 주문의 코드가 작성되어 하나의 주문 만 성공적으로 닫힐 수 있습니다.
이 블록은 무한 루프 'while'을 기반으로하며, 본문은 두 개의 유사한 부분으로 구성됩니다. 하나는 구매 주문을 종료하고 다른 하나는 판매 주문을 종료하기위한 것입니다. 여기서 'While'은 무역 운영 실패의 경우 다시 반복 될 수 있다는 목적으로 사용됩니다.
첫 번째 연산자의 머리글에서 'if'조건을 계산하여 구매 주문을 계산합니다 (판매 주문은 비슷한 방식으로 마감 됨). 이전에 개설 된 주문의 유형이 구매 (거래 유형 참조)에 해당하고 구매 마감에 대한 서명이 관련이있는 경우 거래가 'if'운영자에게 전달되어 폐쇄 요청이 이루어집니다. OrderClose () 함수의 주문 마감 가격으로 주문 유형에 해당하는 양면 견적의 가치가 표시됩니다 (거래를 수행하기위한 요구 사항 및 제한 사항 참조). 무역 거래가 성공적으로 수행되면 주문 마감에 대한 메시지가 표시된 후 현재 'while'반복이 중지되고 주문 마감 블록의 실행이 끝난 것입니다. 그러나 연산이 실패하면 Fun_Error () 오류 처리를위한 사용자 정의 함수가 호출됩니다 (블록 10-11).
오류 처리.
Fun_Error ()의 전달 된 매개 변수로 GetLastError ()에 의해 계산 된 마지막 오류 코드가 사용됩니다. 오류 코드에 따라 Fun_Error ()는 오류가 위험하지 않고 작업을 반복 할 수 있으면 1을 반환하고 오류가 심각하면 0을 반환합니다. 중대한 오류는 프로그램 실행을 계속할 수있는 (예 : 일반적인 오류) 것과 그 후에는 모든 무역 작업의 실행을 중지해야하는 (예 : 차단 된 계정) 두 가지 유형으로 나뉩니다.
실패한 거래 조작 후 사용자 정의 함수가 1을 리턴하면 현재 'while'반복이 종료되고 다음 반복 중에 조작을 실행하려고 다른 시도가 - 순서를 닫습니다. 함수가 0을 반환하면 현재 start () 실행이 중지됩니다. 다음 틱에서 클라이언트 단말기가 다시 시작하고 주문 마감 조건이 유지되면 주문을 다시 시도합니다.
오류 처리 중 다음 프로그램 실행이 무의미한 것으로 밝혀지면 (예 : 이전 클라이언트 터미널 버전에서 프로그램이 작동 함) 특수 기능 start ()의 실행은 다음과 같은 사전 처리 블록에서 종료됩니다. 변수 Work의 값을 분석합니다.
신규 주문에 대한 많은 금액 계산.
로트 양은 두 가지 변형 중 하나를 따르는 사용자 설정에 따라 계산할 수 있습니다. 첫 번째 변형은 사용자가 설정 한 특정 상수 값입니다. According to the second variant the amount of lots is calculated on the basis of a sum equal to a certain percentage (set by a user) of a free margin.
At the beginning of the block of defining the amount of lots for new orders (block 7-8) necessary values of some variables are calculated - minimal allowed amount of lots and step of lot change set up by a broker, free margin and price of one lot for the security.
In this example the following is provided. If a user has set up a certain non-zero value of the external variable Lts, for example 0.5, it is accepted as the amount of lots Lts when a trade request to open an order is formed. If 0 is assigned to Lts, the number of lots Lts is defined on the basis of the variable Prots (percentage), free margin and conditions set up by a broker.
After Lts is calculated, a check is conducted. If this value is lower than the minimal allowed value, the minimal allowed value is accepted. but if free margin is not enough, after a corresponding message the start() execution is terminated.
Opening Orders.
The block of opening orders (block 8-9) like the bloke of opening orders is an infinite loop 'while'. In the header of the first operator 'if' conditions for opening a Buy order are calculated: if there are no orders for the security (variable Total is equal to 0) and the sign for opening a Buy order is relevant (Opn_B is true ), control is passed to 'if' operator body for opening an order. In such a case after rates are refreshed prices for stop levels are calculated.
Values of stop levels are initially set by a user in external variables StopLoss and TakeProfit. In a general case a user can set values for this parameters smaller that a broker allows. Besides a broker may change the minimal allowed distance at any moment (it is an often case at strong market movements, for example, before important news release). That's why before each order opening stop levels must be calculate taking into account values set bu a user and the minimal allowed value set up by a broker.
For calculating stop levels the user-defined function New_Stop() is used; as a passed parameter the stop level value set by a user is used. In New_Stop() first the current minimal allowed distance is calculated. If the value set by a user corresponds to a broker's requirements, this value is returned. If it is smaller than the allowed value, the value allowed by a broker is used. Prices of stop requests are calculated from the corresponding two-sided quote (see Requirements and Limitations in Making Trades).
A trade request to open an order is formed using the function OrderSend(). For the calculation of order opening price and prices of stop requests the two-sided quote values corresponding to the order type are used. If a trade operation was successful (i. e. a server returned the number of an opened order) after a message about a successful order opening is shown. start() execution is finished. If an order was not opened and the client terminal returned an error, the error is processed according to the algorithm described earlier.
Some Code Peculiarities.
The analyzed Expert Advisor code is oriented to the implementation of a certain strategy. Note, some program lines contain variables and calculations that would be changed, if the strategy were changed.
For example, according to the accepted strategy the Expert Advisor is developed to work only with one order. This allowed to use the variable Ticket both for the identification of a closing order number (in block of closing 6-7) and for the identification of a success of a trade operation execution when opening an order (in the block of opening 8-9). In this case such a solution is acceptable. However, if we take the analyzed code as the basis for the implementation of another strategy (for example allow opposite orders) we will have to introduce one or several variables to be able to recognize numbers of opened orders and identify the success of trade operations.
In further strategy modifications we will have to change come program lines containing part of logics contained in the source strategy. Namely in the order accounting block we will not have to terminate the program operation if there are several open orders for a security. Besides, conditions for opening and closing orders will alslo change. This will entail the code changing in blocks of opening and closing orders.
Comments
Post a Comment