English Русский 中文 Español Deutsch 日本語 Português Français Italiano Türkçe
올인 외환거래 전략

올인 외환거래 전략

MetaTrader 5트레이딩 시스템 | 11 10월 2021, 15:52
89 0
Гребенев Вячеслав
Гребенев Вячеслав

본 문서의 목적은 가장 단순한 매매 전략인 "올인" 게임 원칙을 구현하는 것입니다. 즉, 외환시장 로또를 구현하는 Expert Advisor를 만드는 것이죠. 로또 Expert Advisor의 본 목표는 가능한 제일 높은 확률로 초기 투자액을 늘리는 것입니다. 수익성, 즉 평균적으로 투자액을 부풀리는 것은 로또 Expert Advisor에서는 추구할 필요가 없습니다. 수천개의 티켓을 팔아버리는 일반적인 로또와는 또 다르게 로또 EA는 외환거래를 당첨으로 삼아 외환 로또를 이용합니다.ing.

 

들어가며

외환거래의 목표는 크게 3개로 나눌 수 있습니다. 벌자, 저축하자 그리고 불리자입니다. 각 그룹을 분리하여 생각해봅시다.

  1. 벌자. 이것은 외환시장에서 아주 기초적인 목표입니다. 이는 이런 느낌입니다: "자본이 있는데 이걸 시장에서 매매하는 것으로 늘리고 싶어. 내게 $100 달러를 하루만에 $101 달러로 만들어줄 Expert Advisor를 줘." 이런 타입에서는 자본의 평균적 상승이 보장되어야합니다. "벌이"는 수없이 많은 경쟁자들에 의해 해결되었습니다. 이러한 경쟁자들은 정보와 기술적 수단으로 완전 무장하고 있습니다. 따라서 완전 가망이 없는 것은 아니지만 몹시 어려운 편입니다. 연구에 따르면 교환비는 완전 랜덤과는 다릅니다. 자신만의 매매 전략을 찾는 것은 골드 러쉬 중에 황금을 찾는 것과 마찬가지입니다.

  2. 저축하자. 이런 식입니다. "$1,000달러가 있는데. 내년 휴가에 쓰고 싶어. 만약 은행에 넣으면 인플레이션으로 인해 약 10%를 잃게 되겠지. 내 돈을 저축해줄 Expert Advisor를 줘. 돈을 벌고 싶은건 아니지만 잃고 싶지도 않아." 실제로 이 문제는 한 화폐를 적절한 타이밍에 다른 화폐로 바꿨다가 또 다시 적절한 타이밍에 다시 원래 화폐로 바꾸는 문제입니다. 이러한 "저축" 타입의 목표일 경우 원금을 평균적으로 보전할 수 있는 것이 전제되어야합니다. 자본의 "보전"은 대부분의 시민들에 의해 해결되었습니다. 이는 다수의 시가 환전소와 다중 통화 은행 예금이 증명합니다. "저축" 역할은 수학적으로는 그렇게 세련되지 않습니다. 실수로 시장 진입점과 이탈점을 잘못 선택하더라도 평균 인플레이션율만큼은 성공적으로 회복할 수 있습니다.

  3. 불리자. 이 타입의 목표는 다음과 같습니다. "로또. 내게 $100이 있어. 내가 차를 사려면 백만 달러를 추가해야 돼. $100을 $1,000,000로 불려줄 Expert Advisor를 줘. 평균적으로야 돈을 잃는게 맞겠지. 당첨 확률은 100/1,000,000 미만일 것도 알지. 하지만 그것이 내가 바라는 바다."

    조금 덜 극단적인 예시를 들자면 이런 식이죠. "내게 $1,000이 있어. 파티를 벌이려면 $10,000이 있어야돼. $1,000으로 $10,000을 만들 Expert Advisor를 찾아다오. 0.9보다 높은 확률로 $1,000를 날려버릴 것도 알고 있지만 0.1보다 살짝 낮은 확률로 파티를 벌일 수 있겠지."

    다른 예시로는 이렇습니다. "내 전자 지갑에는 몇 센트가 있지. 이 돈으론 뭘 사거나 인출할 수 조차 없다. 이 작은 액수를 확률은 낮더라도 의미있는 액수로 키워줄 Expert Advisor를 줘."

    이런 타입의 목표에서는 자본의 평균적 손실은 보장되어있습니다. 그러나 받아들일만 하죠. 로또에 당첨될 확률은 당연하게도 가능한 최대로 높아야합니다. 외환시장에서 이러한 조건을 진지하게 고민하는 사람은 매우 적습니다. 그러나 현실에서 로또 티켓이 팔리는 수를 생각해보면 현실에서는 이런걸 진지하게 고려하는 사람이 많은 것은 사실입니다. 수학적으로, "불리기" 목표는 예전에 이미 해결되었습니다. 이 문서에서 우리는 이 타입의 Expert Advisor를 MQL5로 구현하는 방법에 대하여 알아볼 것입니다.

이 분류에 "확률 게임 - 아드레날린을 원한다" 라던가 "쉬는 시간에 똑똑한 장난감을 가지고 놀고 싶다" 같은 재미있는건 포함하지는 않습니다.

따라서 문제를 정의합니다외환시장에 로또를 구현할 것입니다. 그를 통해 일정 확률로 자본을 몇 배로 불리거나, 파산하던가 둘 중 하나입니다. 자산을 평균적으로 증가시키는 것은 우리의 경우엔 필요 없습니다. 당첨 확률은 높으면 높을 수록 좋습니다. 당첨되는 경우 외환시장이 자금의 자금원으로서 필요합니다. 이 상황에서 외환시장은 모두가 액세스 가능한 랜덤 숫자 생성기로 사용되기도 합니다.

 

1. 알고리즘 아이디어

이 문제를 해결하기 위해서는 약간 뻔한 알고리즘이 사용됩니다.

  1. 랜덤 방향으로 시장에 진입합니다.
  2. 주어진 시간 T만큼 기다립니다.
  3. 시장을 이탈하여.
  4. 계좌를 확인함. 만약 로또가 당첨되거나 빈털털이가 된다면 매매를 중단하고, 아닌 경우 1번 단계로 돌아가서 반복합니다.

이 알고리즘은 환율은 순수한 랜덤 워크라고 가정합니다 (랜덤 워크와 트렌드 인디케이터 문서를 보십시오). 이 시장 모델은 분명히 잘못되었지만, 로또를 만들기에는 차고 남습니다. 물론, 더 적절한 시장 모델이 더 효율적인 알고리즘을 제공할 것입니다.

MQL5 언어로 Expert Advisor를 쓰기 전에, 먼저 알고리즘을 더 자세히 들여다봐야 합니다. 이하의 문제를 해결할 필요가 있습니다.

  1. 레버리지
  2. 베팅 사이즈
  3. 이익 실현과 손절매 레벨
  4. 기다리는 시간 T
  5. 화폐쌍 선택하기

 

2. 베팅과 레버리지

현재 50/50 확률이라고 예상하고 있으고 스프레드를 지불해야하는 만큼 딜 수를 최소화해야합니다. 매매를 시행할 때 마다 하나의 스프레드를 잃습니다. 따라서 최소 거래 수로 (로또에 당첨되거나 파산하는) 결과를 얻기 위해서는 레버리지 금액과 베팅 규모를 극대화해야 합니다.

보통은 브로커가 한 화폐쌍 딜에서 다룰 수 있는 최대 볼륨에 제한을 둡니다. 이로 인해서 당첨시 얻어지는 돈과 로또 결과가 나오기까지의 최소 시간에 제한이 걸리게 됩니다.

로또 결과가 나오기까지 얼마나 걸릴지 계산합니다. 딜 최대 볼륨이 5 랏이라고 가정해봅시다. 이는 매매용으로 $500,000를 가지고 있을 것이라는 의미입니다. 만약 매매가 "꽤 운이 좋았다면" $500,000 * 0.02 = $10,000을 벌 것입니다.

0.02 계수는 "이윤 달러 / 하루 중 달러 자본."으로 만들어집니다. 이 계수는 외환 시장용 실험용 상수입니다. 이 계수는 어떠한 타임프레임을 사용하건 간에 관계 없으며 (스프레드와 스왑 제외) 화폐쌍에도 구애받지 않습니다. 막대의 상대 평균 크기를 기반으로 측정되며, 이는 취한 선원 정리가 필요합니다 (밑의 최대 수확 인디케이터 그래프와 화폐쌍 선택하기 섹션을 참조하여주십시오). 이 계수는 개략적으로 측정되었습니다 ( 2-3 번 다를 수도 있습니다).

만약 100일 동안 매매한다면, 일일 수익 $10,000은 100으로 곱해지는게 아니라 100의 루트값인 10으로 곱해져서 우리는 랜덤 워크를 이용하여 매매합니다. 그리고 100일 내의 어느 "꽤 운좋은" 매매에서 $100,000를 벌 것입니다. 그리고 400일 내의 어느 "꽤 운좋은" 매매에서 $200,000를 벌 것입니다. 만약 레버리지가 1:100였다면, 이는 초기 예치금이 $5,000 이상이었다는 것을 뜻합니다 ($500,000/100).

올인 모드로 100일 내에 초기 예치금을 20배 늘리고, 400일 내에 40배 늘립니다. 재수 없게도, 이만큼의 딜 총량과 예치금으로는 예치금을 충분히 빠르게 늘리지 못할 것입니다.

만약 초기 예치금이 너무 적고 베팅 최대 볼륨에 턱 없이 모자랄 경우, 성장 속도는 지수함수에 가깝게 훨씬 높아질 수 있습니다. 그러나 먼저 우리는 작은 예치금으로도 영업해주는 브로커를 먼저 찾아야하고, 매매 조건을 봐야 합니다.

최대 볼륨 제한을 뛰어넘기 위해선 여러 화폐쌍을 테스트해볼 수 있습니다. 만약 화폐쌍들이 독립적이라면 평균을 구할 것이고 성장 속도는 한 화폐쌍을 쓸 때 보다 낮아질 것입니다. 만약 화폐쌍들이 EURUSD 및 EURCHF처럼 서로 상관관계에 놓여 있다면, 이 한계를 뛰어넘을 수도 있습니다. 하지만 각 환율간의 상관 관계를 언제나 파악할 수 있는 것은 아닙니다.

따라서 우리는 로또가 초기 자본을 10배 늘려주게는 만들 수 있습니다. $100달러를 가지고는 전자 지갑이나 차에 관한 임무를 해결할 수는 없습니다. 적어도 MetaTrader 5 전략 테스터가 그걸 하게 해주진 않을 겁니다.

 

3. 이익 실현과 손절매 선택하기

랜덤 워크에 기반을 둔 이익 실현과 손절매는 매매의 빈도를 높일 뿐입니다. 이익실현과 손절매가 시작가에 가까우면 가까울수록 매매가 더욱 빈번하게 이루어집니다.. 이익 실현과 손절매는 랜덤 워크를 이용한 당첨 확률에는 직접적으로 영향 주지 않습니다. 이는 우리가 매매의 수를 최소화하고싶기에 이런 주문은 하지 않기 때문이죠.

현실에서는 손절매는 존재합니다. 스탑 아웃(Stop Out)이라고 불립니다. 50%에 트리거 되며, 매매는 강제 종료 됩니다. 스탑 아웃 후에도 예치금이 좀 남아있기때문에 조금 더 매매를 지속할 수 있다는 의미가 됩니다. 따라서 Expert Advisor는 스탑 아웃 상황에 대하여 경고해야합니다. 예치금은 최소 배팅액까지 줄어들어야하며, 이상적으로는 0이 되어야합니다.

이익 실현을 실행할 가치가 있어 보입니다. 아이디어는 실제 환율은 랜덤 워크가 아니라는 것입니다. 때때로 뉴스 이후에 비정상적으로 크게 폭등하기도 합니다. 이러한 비정상적인 폭등은 계단식이 아니라 첨탑식으로 치솟을 가능성이 더 높습니다. 다뤄봅시다.

1번 그림. EURUSD, M1의 날카로운 스파이크

1번 그림. EURUSD, M1의 날카로운 스파이크

알고리즘 상 이런 폭등에 반응하지 못할 수도 있습니다. 우리의 마지막 딜의 방향으로 스파이크가 일어나지 않았고, 우리가 그걸 놓쳤다면 오히려 좋은 편입니다. 비록 스탑 아웃이 일어날 수도 있겠지만요. 만약 우리 딜의 방향으로 일어났다면 어쩔 수 없이 완화해야합니다. 확인하기 위해선 이익 실현을 시도해야합니다.

이익 실현은 다양한 방법으로 배치될 수 있습니다. 직접, 두번째와 세번째 방법이 있습니다.

직접 방법 - 현재 시가를 추적하고 과거 매매가와 비교합니다. 알고리즘을 쓰더라도 몹시 어려운 방법입니다. 실제로는 가격 변동 분포의 꼬리를 찾아서 잘라버릴 필요가 있습니다.

두번째 방법 - 현재 이윤을 추적하고 과거 딜의 이윤과 비교합니다. 만약 과거 매매의 평균 이윤보다 훨씬 높다면 이익을 실현합니다. 이 방법이 더 쉬우나 만약 Expert Advisor가 거기서 시작하면 과거 이력이 없습니다. 추가적으로 최소한의 매매만 시행하고싶기 때문에 매매 이력이 짧아질거란 의미기도 하기 때문입니다.

두번째 방법(변형) - 현재 이윤을 추적하고 예상 계산 이윤과 비교합니다. 만약 이윤이 예상 계산 이윤보다 클 경우 이익을 실현합니다. 예상 이윤은 가격 이력을 기준으로 산출할 수 있지만, 직접 방법만큼 어렵습니다.

세번째 방법 - 잔고/자본 비율을 추적해서 상수와 비교합니다 상수는 Expert Advisor 최적화중에 결정됩니다. 이러한 상수는 물론 거래 조건 - 레버리지, 최대 거래량 등에 따라 달라집니다. 또한 Expert Advisor는 일부 특정 거래 조건에 최적화되며, 이는 모든 브로커에게 거의 동일합니다. 조금 흔한 예시를 가져다 씁시다. 제일 큰 이유는 이 방법이 제일 단순하기 때문입니다.

  • 만약 자본이 잔고의 2(혹은 3)배 크다면 이익을 실현합니다.
  • 만약 자본이 잔고보다 $10,000 (혹은 $30,000) 만큼 많으면 이익을 실현합니다.

명시한 숫자들인 2, 3, 10000, 30000 ... 등은 최적화 뒤에 결정됩니다..

 

4. 기다리는 시간 T

만약 우리가 시장에 매우 자주 진입했다 이탈한다면(예: 매분), 요율은 거의 변하지 않을 것이고 이익은 너무 적을 것이지만, 우리는 여전히 고정된 스프레드를 지불해야 합니다. 아무리 이윤을 제대로 추측하더라도 총 스프레드가 모든 이윤을 엎어버릴 것입니다.

반면, 매매를 거의 하지 않는 경우(예: 1년에 한 번 또는 한 달에 한 번), 매매당 이윤에 비해 그 스프레드는 미미합니다. 그러나 꽤나 오랜 기간동안 매매해야합니다. 스왑으로 인해 포지션을 오래동안 개방해두는 것은 이윤에 부정적 영향을 미칩니다.

따라서 딜에는 최적화 빈도가 있습니다. 환율의 변동성과, 부동 스프레드를 위시한 매매 조건에 따라 다릅니다. 따라서 모든 딜의 최적화된 빈도를 미리 정확하게 계산하는 것은 불가능합니다.

그러나 측정하는 것은 가능합니다. 수학적으로 설명하거나 조사하는 일 없이 그냥 이하의 그래프를 드리겠습니다.

2번 그림. 하루 중 각기 다른 시간 T에 대해 매매할 때의 자본 확률 분포 함수의 경계와 중심

2번 그림. 하루 중 각기 다른 시간 T에 대해 매매할 때의 자본 확률 분포 함수의 경계와 중심

2번 그림의 그래프 상에서 가로축은 시간 T, 우리의 볼품없는 알고리즘의 매매 시점을 나타냅니다. 세로축은 EURUSD 화폐쌍에 대한 레버리지와 자본화 없이 매일 T분마다 거래함으로써 1달러의 자본에서 얼마나 많은 이익을 얻을 수 있는지를 보여줍니다. 수학적으로 말하자면, 이것들은 여러 시간 T에 대한 우리의 볼품없는 전략의 확률 분포의 경계입니다. 파란색 곡선 - 절대 추측의 경우, 빨간색 - 절대 추측의 경우, 주황색과 청록색의 경우 - "제법 성공적인/실패한 추측"의 경우입니다.

예를 들어, 매일 1달러의 자본을 들고 매분(M1) 시장에 진입하거나 이탈할 경우 최대 0.5달러의 이득을 올리거나, 최대 1.3달러의 손실을 볼 수 있습니다. 아마 거의 확실하게 $0.3를 잃었을 것입니다. 장중 1440건의 매매를 할 수 있고, 매매 당 $0.0002의 스프레드를 지불합니다. 일간 모든 매매의 총 스프레드는 $0.288가 됩니다. EURUSD M1 막대의 평균 사이즈는 $0.00056입니다. 절대 추측을 통한 당첨은 $0.00056 * 1440 = $0.8064. 당첨값에서 스프레드를 뺍니다. $0.8064 - $0.288 = 1달러에서 매일 $0.51 이윤을 얻습니다. 포인트 (М1, 0.51) 를 그래프 상에 그립니다.

우리는 "꽤나 운좋은" 예상, 즉 주황색 곡선에 집중할 것입니다. 더 큰 스케일에서 그려봅시다.

3번 그림. 각기 다른 시간 T에서 충분히 추측한 매매 전략으로 올린 이윤

3번 그림. 각기 다른 시간 T에서 충분히 추측한 매매 전략으로 올린 이윤

3번 그림을 보면, 30분마다 거래하는 것보다 더 자주 거래하는 것은 수익성이 없다는 것을 알 수 있습니다. 스프레드가 모든 이익을 집어삼키고 있습니다. 우리의 최적 매매 시간 T는 1시간에서 1주 사이에 펼쳐집니다. 지금은 그만하도록 하죠. 추후 EA가 마무리되면 최적화를 이용하여 최적의 시간을 지정하겠습니다. 50/50보다 비율을 더 잘 예측하는 매매 아이디어를 가진 사람이 있다면 볼품없는 알고리즘을 개선할 수 있습니다. 최적 시간과 최적 베팅도 마찬가지로 감소합니다.

시간 T를 선택함으로써 우리가 작업할 차트의 시간대를 선택하게 되었습니다. 엄밀하게 말해서, T가 주어졌을 때, 어떠한 시간대건 선택할 수 있습니다. EA도 같은 방식으로 작동하겠지만, 잘못된 타임프레임에 맞춰 그림을 그리면 별로일 것입니다.

 

5. 화폐쌍 선택하기

모든 화폐쌍이 랜덤 워크라고 이미 전제해두었기 때문에, 막대의 평균 상대 크기가 제일 큰 것의 환율을 선택해야합니다. 그렇게 하면 작은 수의 매매를 통해 목표를 달성합니다 (당첨되거나 파산하거나).

화폐쌍을 선택하기 위해서 쓸 수 있는 모든 화폐쌍의 환율을 체크하고 각각에 대해 막대의 평균 상대 사이즈를 확인해야합니다 이걸 일일히 수동으로 할 수야 없기 때문에, 최대 수확 인디케이터(Maximal Yield Indicator) - YieldClose를 사용할 것입니다.mq5.

4번 그림. 최대 수확 인디케이터

4번 그림. 최대 수확 인디케이터 - YieldClose.mq5 (EURUSD, D1. 10 막대 분의 평균 산출. 이 인디케이터는 2-3 시간의 범위 내에서 변동합니다.

이 문서를 작성한 후에야 우연히 MetaTrader 5 표준 배포판에 포함된 변동성 인디케이터(Perry Kaufman의 저서Smarter Trading: Improving Performance in Changing Markets에서 나온 카우프만 변동성 )이 최대 수확 인디케이터와 같다는 것을 알게 되었습니다. 때때로 무언가가 잘 와닿지 않을 때에는 아예 처음부터 직접 만들어보는 것이 방법입니다. 그렇죠, 표준 세트 인디케이터 그리고 Expert Advisor 수백개를 이해하기가 쉬운 일은 결코 아닙니다! 안타깝게도 이 시점에서는 딱 이거다 정해진 것이 없습니다.

단일 화폐쌍의 막대의 평균 상대 사이즈는 2,3 타임 안에서 오가는 것으로 드러났습니다. 이 2,3타임 안에서는 막대 평균 상대 사이즈는 모든 화폐쌍에서 같습니다. 실제로는 최대 수확 인디케이터는 매매 활동을 보여줍니다.

시장에 진입할 때, 우리는 모든 화폐쌍 중에서 거래 활동이 가장 높은 화폐쌍, 다시 말해 인디케이터로 표시된 최대 가치를 가진 화폐쌍을 선택해야 합니다. 덤이지만, 또한 활동이 많은 낮에는 매매하고 밤에는 기다리는 것이 좋습니다. 낮에만 매매하면 로또가 터질 확률이 높아지지만, 대신 Expert Advisor를 가동시켜야하는 시간이 거의 2배로 늘어납니다. 더 높은 확률, 더 짧은 시간, 어느쪽이 나은지는 사용자가 결정하기 나름입니다..

위에서 말씀드린 바와 같이, 실상 언제나 매매하실 수야 있지만, 그렇게하면 당첨 확률이 낮아질 것입니다. 그렇다고는 해도 확률을 높이자고 몇 년 동안 매매할 수는 없는 노릇입니다. "매매 시간/당첨 확률" 비율은 문제 정의 시점에서 좀 더 부연되어야하지만, 이게 이렇게 어려울 줄 누가 알았겠습니까?

이는 Expert Advisor를 작성할 때의 요구 조건을 적는 것이 얼마나 어려운지를 알려주는 흔한 예시 중의 하나입니다. 지금까지 EA를 복잡하게 만드맂 않기 위하여 연속적인 단일 화폐쌍 매매이고 잘 알려진 EURUSD 쌍을 들여다 보았습니다.

동시에 인디케이터의 흥미로운 속성 두가지를 들여다 보았습니다.

  1. 5번 그림에서처럼, H1 타임프레임에서 인디케이터는 매매 활동의 일일 오실레이션 (변동성)을 보여줍니다.
  2. 인디케이터 최대값들은 6번 그림에서처럼 트렌드/플랫의 끝/시작에 대응합니다.

5번 그림. 일일 활동 오실레이션

5번 그림. 최대 수확(Maximal Yield) 인디케이터는 매매 활동의 일일 변동을 보여줍니다 (EURCHF, H1, 10개 막대의 평균값)

트렌드/플랫의 시작/끝에 대응되는 최대 수확 지표 최대값들

6번 그림. 트렌드/플랫의 시작/끝에 대응되는 최대 수확 지표 최대값들 (USDCAD, M5, 10개 막대 평균)

미래 사용을 위한 아이디어: 지표(시장 활동)가 평균 가치 이상으로 증가하기 시작하면 수익성 있는 위치를 닫고 수익성이 없는 위치를 그대로 두면 시장이 변화하고 있다. 지표가 평균 이하로 떨어진다면 수익성 있는 포지션을 남겨두고 수익성이 없는 포지션을 청산합니다. 한동안은 그대로 갈 것입니다. 그러나 이 아이디어는 별도의 연구가 필요합니다.

잘 개발된 알고리즘을 MQL5 언어로 구현하려면 기술적 기술이 필요합니다. 해설이 첨부된 EA 코드는 이 문서의 첨부파일에 있습니다 (lottery.mq5).

 

6. Expert Advisor 최적화

EA를 전략 테스터에서 이용 가능한 특수 매매 조건에 맞춰 최적화해야합니다. 해당 조건은 이하와 같습니다. 초기 예치금 - $5,000, 레버리지 - 1:100, 일자 - 1 년, 당첨 금액 - $100,000, 최대 베팅 - 5 랏, 현재 화폐쌍 - EURUSD, 손절 레벨 - 50%.

MetaTrader 5 클라이언트 터미널에서 제시된 Expert Advisor 최적화는 우리에겐 맞지 않습니다. 물론 최적화 과정에서 로또 당첨 확률을 최대한 상승시킬 필요가 있습니다. 이 목표를 달성하기 위하여 EA를 1000건의 매매 이력에 실행시키고 당첨/미당첨 비율을 계산해야합니다. EA를 매매 이력의 한 부분에 사용해봤자 의미가 없습니다. 어차피 당첨이나 손실 중 하나의 결과는 정해져 있고, 잔고는 $0이거나 $100,000 인 것도 이미 알려져 있습니다.

1000개의 매매 이력 대해 일일히 EA를 수동 작업하는 것은 지루하기 때문에 우리는 다른 방법을 선택할 것입니다. 시장 진입 방향을 결정하기 위해 EA는 랜덤 매수/판매 시퀀스를 생성하는 랜덤 번호 생성기를 사용합니다. 매매 이력 중 한 부분에 1000개의 각기 다른 매수/매도 시퀀스로 EA를 작동시켜봅시다. 물론 1000개의 각기 다른 매매 이력과 같진 않겠지만 매우 비슷할 것입니다.

시간 T를 비롯한 일부 패러미터를 최적화하려면 각 T마다 1000 번의 각기 다른 매수/매도 시퀀스를 실행하고 당첨 확률을 구합니다.. 이를 위해서는, 두 패러미터 (시간 T, 당첨 티켓의 수)에 의한 저속 컴플릿 알고리즘(Slow complete algorithm) 을 선택하십시오.

최적화 결과를 엑셀로 출력한 후 그래프를 그립니다.:

7번 그림. T 시간에 따른 로또 당첨 확률. 가로축 - 일반적인 전략 타임아웃, 즉. 매매 한번에 걸리는 시간 세로축 - 주어진 시간 T에서의 당첨확률.

7번 그림. T 시간에 따른 로또 당첨 확률. 가로축 - 일반적인 전략 타임아웃, 즉. 매매 한번에 걸리는 시간 세로축 - 주어진 시간 T에서의 당첨확률.

7번 그림에서 나타나듯, 최적 시간 T를 결정합니다. 당첨 확률이 제일 높은건 개략적으로 T = 350 000 초 일 때 입니다. 이 그래프는 3번 그림에서 수행한 이론적 예측과 거의 비슷하게 흘러갑니다. T 값이 작으면 당첨 확률은 거의 0입니다. 그래프의 형태는 매매 이력의 기간과 길이에 달려있습니다. 이 그래프는 언제나 500 000 초 가량 떨어집니다.

이익 실현의 최적 값을 찾으려면 잔고와 자본 그래프를 관찰하여 자본이 크게 발생하는 타이밍에만 이익 실현을 시도해야 합니다. 최대 잔고를 이용한 이익 실현 상수의 최적화는 의미가 없습니다. 커다란 자본 증식은 아주 드물게만 일어나고, 어쩌면 EA 가동중 단 한번만 발생할 수도, 혹은 그보다 더 드물게 일어날 수도 있습니다.. 만약 최대 잔고를 기준으로 최적화를 하게 되멸 그냥 주어진 이 이력에 맞춰 조정될 뿐입니다.

 

7. Expert Advisor 체크하기

EA의 질을 판단하기 위해 10,000 번의 매수/매도 시퀀스를 가지고 시험해볼 것입니다. 최적화 결과 테이블을 엑셀로 켜신 후 당첨/미당첨 비율을 계산하고 그려보십시오.

측정 결과, 우리의 Expert Advisor가 로또에 당첨될 확률은 0.045 이며 이론상 한계는 0.05입니다 ($100,000 이상 버는 경우). Expert Advisor는 0.88의 확률로 로또에 당첨되지 않습니다 ($150 미만으로 범). 나머지 0.075 확률은 $150에서 $100,000 사이의 잔액 값에 해당합니다. 0.1 확률으로 Expert Advisor는 초기 투자액인 $5000보다 많은 자본을 얻게 됩니다 .

8번 그림. 매매 수에 따른 당첨과 미당첨의 확률

8번 그림. 로또의 시간 가로 축 - 매매 수. 세로축 - 주어진 매매 수에서 대박이 터질 확률.

8번 그림은 매매 수에 따라 승패 확률을 나타내는 곡선을 나타냅니다. 파란색 곡선 - 일반 사례의 매매 수, 빨간색 곡선 - 당첨 시 매매 수. 종합하면 로또는 20번 매매하는 과정에서 패배하게 됩니다 (2달, 1 매매 = 350,000 초) 로또 과정은 6 달이나 그 이상 걸릴 수 있습니다 (60-70번 매매). 당첨은 보통 3개월에서 5개월 사이에 터질 가능성이 제일 높습니다(30-50번 매매, 붉은 곡선).

 

마치며

지금까지 특정 매매 조건 하에 맞춰진 로또형 Expert Advisor를 만들어 보았습니다. EA를 가장 단순하게 만들었습니다. 이 로또형 Expert Advisor의 장단점은 명료합니다.

장점:

  • 혼자서 로또를 즐길 수 있음. 수백만장이나 로또 티켓을 팔 필요가 없음.
  • 로또 티켓 가격 (초기 투자금)을 선택하고 이길 수 있음.
  • 이길 가능성은 이미 알려져있고 이론 한계에 가까움..
  • 외환시장 과거 이력을 통해 공짜로 결과를 확인할 수 있음.

단점.

  • 로또 결과를 보기까지 몇 달이나 걸려, 매우 오래 걸림. 매매 조건에 따라선 시간 제약이 있음.
  • "티켓 가격"/"당첨" 확률이 낮음 - 1:10 정도
  • 초기 투자량이 커야함.

개발자의 최선의 노력에도 불구하고 사소한 알고리즘이라도 구현하려면 사소한 독창성, 수학 지식 및 MQL5 언어가 필요합니다. 어찌됐건 개발자들의 노력 덕분에 구현은 충분히 가능했습니다.

MetaQuotes 소프트웨어 사를 통해 러시아어가 번역됨.
원본 기고글: https://www.mql5.com/ru/articles/336

파일 첨부됨 |
lottery.mq5 (8.99 KB)
yieldclose.mq5 (3.01 KB)
EA 트리를 이용하여 MQL5 Expert Advisor 뚝딱 만들기: 1부 EA 트리를 이용하여 MQL5 Expert Advisor 뚝딱 만들기: 1부
EA Tree는 최초의 드래그 앤 드랍 MetaTrader MQL5 Expert Advisor 생성기입니다. 매우 사용하기 편리한 GUI를 이용하여 복잡한 MQL5도 만들 수 있습니다. EA 트리에서는 박스들을 서로 연결하는 것으로 Expert Advisor를 만들 수 있습니다. 각 박스에는 MQL5 함수, 기술 인디케이터, 커스텀 인디케이터, 혹은 값이 들어있을 수 있습니다. "박스 트리"를 이용하여 EA 트리는 Expert Advisor MQL5 코드를 생성합니다.
내가 어째서 걱정을 멈추고 자가학습형 Expert Advisor를 만들었는가 내가 어째서 걱정을 멈추고 자가학습형 Expert Advisor를 만들었는가
1년 조금 더 전에 joo는 자신의 글 "Genetic Algorithms - It's Easy!"에서 MQL5에서 유전 알고리즘을 구현할 도구를 주었습니다. 그 도구를 활용하여 우리는 한계 조건에 맞춰 자신의 패러미터를 스스로 유전적으로 수정하는 Expert Advisor를 만들어 볼 것입니다...
MQL5-RPC. MQL5에서의 원격 프로시져 호출(Remote Procedure Call): 재미와 돈을 위한 웹 서비스 접속과 XML-RPC ATC 분석기 MQL5-RPC. MQL5에서의 원격 프로시져 호출(Remote Procedure Call): 재미와 돈을 위한 웹 서비스 접속과 XML-RPC ATC 분석기
본 문서에서는 MQL5에서 원격 프로시져 호출(Remote Procedure Call)을 활성화시켜주는 MQL5-RPC 프레임워크에 대해 알아볼 것입니다. 우선 XML-RPC 기초로 시작하여, MQL5 구현을 짚고, 그 뒤엔 실용 예제 두개를 다뤄볼 것입니다. 첫 예제는 간단한 외부 웹 서비스를 이용하는 것이고 두번째 예제는 간단한 XML-RPC ATC 2011 분석기 서비스 클라이언트입니다. 만약 리얼타임으로 ATC 2011의 각기 다른 통계 자료를 구현하고 분석하는지 보고싶으시다면 이 문서는 바로 당신을 위한 것입니다.
MetaTrader 5 플랫폼에 새로운 UI 언어 추가하기 MetaTrader 5 플랫폼에 새로운 UI 언어 추가하기
MetaTrader 5 플랫폼의 사용자 인터페이스는 여러 언어로 번역되었습니다. 만약 당신이 사용하는 언어로는 번역되지 않았더라도 실망하기엔 이릅니다. MetaQuotes Software Corp.이 제공하는 MetaTrader 5 멀티랭귀지 팩 유틸리티를 이용하여 쉽게 번역할 수 있기 때문이죠. 심지어 공짜입니다. 본 문서에서는 MetaTrader 5 플랫폼에 새로운 사용자 인터페이스 언어를 추가하는 예시에 대해서 보여드릴 것입니다.