시스템트레이딩

그리드 및 마틴게일 전략을 위한 바운스 숫자 이해하기
MetaTrader4
그리드 및 마틴게일 전략을 위한 바운스 숫자 이해하기

안녕하세요, 트레이더 여러분! 오늘은 그리드 및 마틴게일 전략에서의 로트 사이징과 거래 수에 대해 이야기해볼까 합니다. 이 두 가지는 전략의 성패에 매우 중요한 요소입니다. 우리는 항상 특정 심볼의 과거 데이터를 확인하며 가격이 어떤 범위에서 얼마나 많이 튀었는지를 살펴봅니다. 과연 가격이 두 개의 가격 범위 사이에서 몇 번 튕겼을까요? 이것을 제가 정의하는 바운스 숫자(Bounce Number)라고 합니다. 이는 시장에서의 심볼 히스토리를 통계적으로 분석하여 계산할 수 있습니다. 좀 더 명확하게 이해하기 위해 이미지 1을 살펴보죠. 이미지 1: 바운스 숫자의 정의, 목표 및 응용 위 이미지는 가격 움직임이 바운스 숫자 도구의 통계를 어떻게 생성하는지를 보여줍니다. 도구에 지연을 주기 위해 EA로 생성했으며, Sleep 함수를 사용했습니다. 이 기능은 도구 입력값에 설정된 높은 캔들 수로 인해 차트가 다운되는 것을 방지합니다. 또 다른 이미지(이미지 2)는 도구의 간단한 그래픽 구조와 각 객체의 의미를 보여줍니다. 이미지 2: 바운스 숫자 통계. 도구 사용법: 이미지 2를 기준으로 바운싱 채널 반 높이를 600포인트로 설정했다고 가정해봅시다. 이 심볼의 바운스 숫자는 1에서 6까지 총 6가지가 있습니다. 바운스 숫자 2는 가격이 바운스 채널의 중간(높이 2 * 600 = 1200포인트)에서 시작하여 위아래로 움직이며 한 번 빨간 선과 한 번 파란 선에 닿은 후 TP=1200포인트에 도달하는 것을 의미합니다. 바운스 숫자 5는 가격이 채널 중간점에서 시작하여 빨간 선에 2번, 파란 선에 3번 닿거나 그 반대로 3번 빨간 선, 2번 파란 선에 닿은 후 TP=1200포인트에 도달하는 것을 의미합니다. 다른 바운스 숫자도 이와 비슷하게 해석할 수 있습니다. 바운스 숫자 7은 없으며, 이는 빨간 선과 파란 선 사이에서 7번 튕긴 경우가 없다는 것을 의미합니다(1200포인트 거리 기준). 선택한 도구의 입력에서 더 많은 과거 데이터를 선택하면 7번 튕길 가능성이 높아집니다. 하지만 9020개의 총 항목 중에서 6번 튕길 확률은 22에 불과합니다. 도구의 입력값은 다음과 같습니다: - 최대 조회 캔들 수: 다른 스캐닝 도구와 마찬가지로 이 항목에 설정하는 숫자에 주의하세요. 메모리 크래시를 피하기 위해 급격히 늘리지 마세요. - 시간 프레임: 채널 경계에서 바운스를 찾고 TP선에 닿기 위해 사용할 캔들의 시간 프레임입니다. 얇은 채널의 경우 낮은 시간 프레임을 사용하는 것이 좋습니다. 무엇을 설정해야 할지 모르겠다면 M1 시간 프레임을 사용하는 것이 좋습니다. - 바운싱 채널 반 높이: 빨간 선과 파란 선 간의 거리입니다. 포인트 단위로 설정됩니다. - 차트 배경 색상 - 바 차트 색상 1 / 바 차트 색상 2: 통계 바를 좀 더 멋지게 만들기 위함입니다. - 셀 색상: - 바운스 숫자 셀 색상: - 로드 바 색상: 계산 중 이 로드 바는 사용자가 작업이 진행 중인지, 계산 속도가 어떤지를 알 수 있도록 도와줍니다. 추가된 버튼을 통해 역사적 캔들 수를 입력하고 시작할 수 있습니다.

2024.01.12
MetaTrader 5에서 연결 및 연결 해제 알림 사운드 설정하기
MetaTrader5
MetaTrader 5에서 연결 및 연결 해제 알림 사운드 설정하기

안녕하세요, 트레이더 여러분! 오늘은 MetaTrader 5에서 연결 및 연결 해제 시 알림 소리를 추가하는 방법에 대해 알아보겠습니다. 이 유틸리티는 매우 간단하게 소리 알림을 설정할 수 있는 예제입니다. 먼저, 사용할 사운드 파일을 준비해야 합니다. MQL5\Files\Sounds 폴더 안에 wav 형식의 사운드 파일을 추가하세요. 연결 성공 시 CONNECTED.wav, 연결 해제 시 DISCONNECTED.wav 파일을 사용하는 것이 좋습니다. 이제 아래의 코드를 복사하여 EA 유틸리티로 컴파일하세요. 첨부된 파일에는 #resource를 사용하면 업로드가 불가능하다는 주석이 포함되어 있습니다. //+------------------------------------------------------------------+ //|                               Connect_Disconnect_Sound_Alert.mq5 | //|                                Copyright 2024, Rajesh Kumar Nait | //|                  https://www.mql5.com/en/users/rajeshnait/seller | //+------------------------------------------------------------------+ #property copyright "Copyright 2024, Rajesh Kumar Nait" #property link      "https://www.mql5.com/en/users/rajeshnait/seller" #property version   "1.00" #include <Trade/TerminalInfo.mqh> bool     first             = true; bool     Now_IsConnected   = false; bool     Pre_IsConnected   = true; datetime Connect_Start = 0, Connect_Stop = 0; CTerminalInfo terminalInfo; //--- 사운드 파일 #resource "\\Files\\Sounds\\CONNECTED.wav" #resource "\\Files\\Sounds\\DISCONNECTED.wav" //+------------------------------------------------------------------+ //| Expert initialization function                                   | //+------------------------------------------------------------------+ int OnInit()   { //---       ResetLastError();       while ( !IsStopped() ) {          Pre_IsConnected = Now_IsConnected;          Now_IsConnected = terminalInfo.IsConnected();          if ( first ) {             Pre_IsConnected = !Now_IsConnected;          }          if ( Now_IsConnected != Pre_IsConnected ) {             if ( Now_IsConnected ) {                Connect_Start = TimeLocal();                if ( !first ) {                   if(!PlaySound("::Files\\Sounds\\DISCONNECTED.wav"))                      Print("Error: ",GetLastError());                }                if ( IsStopped() ) {                   break;                }                if(!PlaySound("::Files\\Sounds\\CONNECTED.wav"))                   Print("Error: ",GetLastError());             } else {                Connect_Stop = TimeLocal();                if ( !first ) {                   if(!PlaySound("::Files\\Sounds\\CONNECTED.wav"))                      Print("Error: ",GetLastError());                }                if ( IsStopped() ) {                   break;                }                if(!PlaySound("::Files\\Sounds\\DISCONNECTED.wav"))                   Print("Error: ",GetLastError());             }          }          first = false;          Sleep(1000);       } //---    return(INIT_SUCCEEDED);   } //+------------------------------------------------------------------+ 아래의 동영상을 통해 구체적인 설정 방법을 더욱 자세히 확인해 보세요!

2024.01.08
트레이더를 위한 MQL5 프로그래밍 - 고급 도구 소개
MetaTrader5
트레이더를 위한 MQL5 프로그래밍 - 고급 도구 소개

Part 7. 고급 MQL5 도구 MQL5 프로그래밍을 위한 트레이더의 제 7부에서는 MetaTrader 5를 위한 프로그램 개발에 유용한 MQL5 API의 고급 기능을 다룹니다. 여기에는 맞춤형 금융 기호, 내장 경제 캘린더 이벤트, 그리고 네트워킹, 데이터베이스, 암호화와 같은 범용 기술이 포함됩니다. 이 부분에서는 다른 MQL 프로그램과 연결할 수 있는 준비된 API를 제공하는 특별한 프로그램 유형인 라이브러리에 대해 설명합니다. 또한 소프트웨어 패키지 개발 가능성과 논리적으로 연결된 프로그램을 프로젝트로 결합하는 방법도 논의합니다. 마지막으로, Python을 포함한 다른 소프트웨어 환경과의 통합에 대해서도 소개합니다. 우리는 프로그램 코드에 포함될 수 있는 모든 유형의 파일인 리소스를 연구하는 것으로 시작할 것입니다. 리소스는 다음을 포함할 수 있습니다: 멀티미디어 요소 외부 프로그램의 "하드" 설정 컴파일된 형태의 다른 MQL5 프로그램 MQL5 개발 환경에서는 애플리케이션 데이터 배열, 이미지, 소리 및 글꼴을 소스 파일에 포함할 수 있어, 프로그램이 최종 사용자에게 독립적이고 편리한 제품이 됩니다. 특히 비트맵(BMP) 형식의 래스터 이미지를 사용하는 그래픽 리소스에 주목할 것입니다. 차트에 동적으로 생성, 편집 및 표시하는 방법을 배울 것입니다. 책의 마지막 부분에서는 MQL5에서의 OpenCL 통합에 대해 공부합니다. OpenCL은 멀티 프로세서 시스템에서 병렬 프로그래밍을 위한 개방형 표준으로, 그래픽 처리 장치(GPU)와 중앙 처리 장치(CPU)를 포함합니다. 알고리즘이 병렬화될 수 있을 경우, 신경망 훈련, 푸리에 변환, 방정식 시스템 해결과 같은 계산 집약적인 작업을 가속화할 수 있습니다. MQL 프로그램에서 OpenCL을 활용하려면 제조업체의 특별한 드라이버가 필요하며 OpenCL 버전 1.1 이상을 지원해야 합니다. 그래픽 카드의 존재는 필수적이지 않으며, 중앙 프로세서도 병렬 컴퓨팅에 사용할 수 있습니다.

2023.12.16
MQL5 프로그래밍: 트레이더를 위한 자동 매매의 기초
MetaTrader5
MQL5 프로그래밍: 트레이더를 위한 자동 매매의 기초

6부. 자동 매매 시스템 개발 안녕하세요, 트레이더 여러분! 오늘은 "6부. 자동 매매 시스템 개발"에 대해 이야기해보려고 합니다. MQL5 언어의 핵심 요소를 살펴보며, 특히 금융 상품 사양과 거래 계좌 설정 같은 기본 개념부터 시작할 거예요. 이런 것들은 제대로 작동하는 EA(Expert Advisor)를 만들기 위한 필수 조건이죠. 그 다음에는 내장 함수와 데이터 구조, 로봇 특유의 이벤트, 그리고 전략 테스터에서의 EA 운영의 주요 측면에 대해 알아보겠습니다. 메타트레이더 5의 전략 테스터는 트레이딩 로봇 개발에서 중요한 역할을 합니다. 이 도구를 통해 금융 성과를 평가하고 거래 전략을 최적화할 수 있거든요. 테스터는 다양한 모드에서 디버깅을 위한 필수 도구를 제공하는데, 여기에는 바나 틱 기반의 시각적 테스트 모드가 포함됩니다. 모델링된 틱이나 실제 틱을 사용하여 테스트할 수 있으며, 시각적 창 없이 간단한 테스트도 가능합니다. 이전에 지표를 시각적 모드에서 테스트한 경험이 있으실 텐데, 지표에 대해서는 제한된 설정만 가능했죠. 하지만 EA를 개발하면서는 테스터의 모든 기능을 활용할 수 있습니다. 또한, 우리는 시장 데이터의 다양한 표현 방식인 Depth of Market과 그 소프트웨어 인터페이스에 대해서도 살펴보겠습니다. 메타트레이더 5는 금융 상품(심볼)을 분석하고 거래할 수 있는 기능을 제공합니다. 이들은 터미널의 모든 하위 시스템의 기초를 형성하죠. 사용자들은 브로커가 제공하는 심볼 목록에서 원하는 심볼을 선택하고, 이를 마켓 워치에서 모니터링할 수 있습니다. MQL5 API를 통해 모든 심볼의 특성을 조회하고 분석할 수 있으며, 마켓 워치에서 심볼을 추가하거나 제거하는 것도 가능합니다. 브로커가 제공하는 표준 심볼 외에도, 메타트레이더 5는 사용자 정의 심볼을 생성하고 임의의 데이터 소스에서 그 속성과 호가 이력을 로딩하거나, MQL5 프로그램을 사용하여 계산할 수 있도록 지원합니다.

2023.12.16
MQL5 프로그래밍으로 자동 매매 프로그램 만들기 - 제5부
MetaTrader5
MQL5 프로그래밍으로 자동 매매 프로그램 만들기 - 제5부

제5부. MQL5로 애플리케이션 프로그램 만들기 MQL5 프로그래밍으로 트레이더를 위한 책의 제5부에서는 알고리즘 트레이딩과 관련된 API에 대해 더 깊이 알아보겠습니다. 여기에는 금융 데이터 분석, 차트 시각화, 자동화, 사용자 상호작용 등이 포함됩니다. 우리는 MQL 프로그램 생성의 일반 원칙부터 시작하여 이벤트 유형, 기능 및 터미널의 모델에 대해 살펴볼 것입니다. 이후에는 시계열 접근, 차트 및 그래픽 객체 작업, 각 MQL 프로그램 유형의 생성 및 적용 원칙을 별도로 탐구할 것입니다. 메타트레이더 5 터미널은 다섯 가지 프로그램 유형을 지원합니다: 기술 지표, 자동 또는 반자동 트레이딩을 위한 Expert Advisor(EA), 일회성 작업을 수행하는 스크립트, 백그라운드 작업을 위한 서비스, 그리고 개별 기능 모듈을 위한 라이브러리입니다. 지표와 차트 작업에 대해 깊이 들어가며, Expert Advisor에도 적용할 수 있는 기술을 배우게 될 것입니다. Expert Advisor 개발은 책의 다음 부분에서 다룰 예정이며, 여기서는 주문의 자동 실행, 트레이딩 전략의 형식화, 그리고 과거 데이터를 활용한 테스트 및 최적화에 대해 다룰 것입니다. 우리는 기본 제공되는 지표를 사용하는 방법과 다른 지표를 기반으로 하거나 처음부터 우리의 맞춤형 애플리케이션을 만드는 방법을 배울 것입니다. 모든 컴파일된 프로그램은 메타트레이더 5의 내비게이터에 표시되며, EX5 라이브러리는 다른 프로그램에서 사용되지만 내비게이터에 별도로 표시되지 않습니다. 결과적으로 우리는 MQL5 언어의 기능과 알고리즘 트레이딩에서의 적용 가능성을 더 잘 이해하게 될 것입니다. 이를 통해 금융 데이터를 효과적으로 다루고 트레이딩 지표와 Expert Advisor를 생성할 수 있게 됩니다.

2023.12.16
트레이더를 위한 MQL5 프로그래밍: 메타트레이더 5의 기본 API
MetaTrader5
트레이더를 위한 MQL5 프로그래밍: 메타트레이더 5의 기본 API

4부. MQL5의 기본 API 이전 섹션에서 MQL5 프로그래밍 언어의 기초, 문법, 사용 규칙 및 주요 개념에 대해 알아보았습니다. 하지만 실제 데이터 처리 및 자동 거래 프로그램을 작성하려면 메타트레이더 5 터미널과 상호 작용하기 위한 다양한 내장 함수를 활용해야 합니다. "4부. MQL5의 기본 API"에서는 내장 함수(MQL5 API)를 마스터하는 데 집중하고, 점진적으로 전문 하위 시스템으로 깊이 들어갈 것입니다. 모든 MQL5 프로그램은 풍부한 기술과 기능을 활용할 수 있으므로, 대부분의 프로그램에서 사용 가능한 가장 간단하고 유용한 함수부터 시작하는 것이 유리합니다. 주요 주제로는 배열 작업, 문자열 처리, 파일 상호작용, 데이터 변환 및 사용자 상호작용 함수 등을 다룰 것입니다. 또한 수학 함수와 프로그램 환경 관리에 대해서도 탐구할 예정입니다. 다른 프로그래밍 언어와는 달리, MQL5 API의 내장 함수를 사용하기 위해 추가적인 전처리기 지시어를 필요로 하지 않습니다. 모든 MQL5 API 함수의 이름은 전역 컨텍스트(namespace)에서 사용할 수 있으며, 언제든지 무조건 접근 가능합니다. 또한 클래스 메서드 이름이나 사용자 정의 네임스페이스와 같은 서로 다른 프로그램 컨텍스트에서 유사한 이름을 사용하는 가능성에 대해서도 논의할 것입니다. 이 경우, 중첩 타입, 네임스페이스 및 컨텍스트 연산자 '::'에 대한 섹션에서 논의한 대로 글로벌 함수를 호출하기 위해 컨텍스트 해상도 연산자를 사용해야 합니다. 프로그래밍은 다양한 데이터 타입과의 작업을 요구하는 경우가 많습니다. 이전 섹션에서 우리는 내장 데이터 타입의 명시적 및 암시적 변환 메커니즘을 이미 살펴보았습니다. 그러나 다양한 이유로 인해 항상 적합하지 않을 수 있습니다. 서로 다른 타입 간의 보다 세밀한 데이터 변환을 제공하기 위해 MQL5 API에는 변환 함수 세트가 포함되어 있습니다. 특히 문자열과 숫자, 날짜 및 시간, 색상, 구조체 및 열거형과 같은 다른 타입 간의 변환 함수에 주목해야 합니다.

2023.12.15
MQL5에서 객체 지향 프로그래밍 배우기 - 트레이더를 위한 실전 가이드
MetaTrader5
MQL5에서 객체 지향 프로그래밍 배우기 - 트레이더를 위한 실전 가이드

3부. MQL5의 객체 지향 프로그래밍 "3부. MQL5의 객체 지향 프로그래밍"에서는 MQL5 언어의 객체 지향 프로그래밍(OOP) 세계에 깊이 들어갑니다. 소프트웨어 개발은 여러 개체를 관리하는 복잡성과 관련이 있으며, 프로그래밍의 편리함과 생산성, 품질을 향상시키기 위해 고급 기술이 필요합니다. OOP 기술은 프로그래머가 MQL5 도구를 사용하여 정의한 사용자 정의 타입의 변수인 객체 개념을 기반으로 합니다. 사용자 정의 타입을 생성하면 객체를 모델링할 수 있어 프로그램 작성 및 유지 관리가 용이해집니다. 이번 부분에서는 클래스, 구조체, 유니온 등 새로운 타입을 정의하는 다양한 방법을 살펴봅니다. 이러한 사용자 정의 타입은 데이터와 알고리즘을 결합하여 애플리케이션 객체의 상태와 동작을 설명할 수 있습니다. 저자는 "분할 정복" 원칙에 대해 설명하며, 객체가 각각 작은 논리적 작업을 해결하는 미니 프로그램이라고 강조합니다. 이러한 객체들을 통합하여 단일 시스템으로 만들고 임의의 복잡성을 가진 제품과 서비스를 생성할 수 있습니다. MQL5의 기능을 학습하는 데 도움을 주기 위해, "MQL5의 객체 지향 프로그래밍" 부분에서는 OOP의 원칙과 함께 실용적인 구현 예제를 소개합니다. 또한 템플릿, 인터페이스, 네임스페이스에 대해서도 다루어 MQL5 프로그램 개발에서 OOP의 유연성과 강력함을 보여줍니다.

2023.12.15
트레이더를 위한 MQL5 프로그래밍 – 개발 환경 소개
MetaTrader5
트레이더를 위한 MQL5 프로그래밍 – 개발 환경 소개

1부: MQL5 소개 및 개발 환경 이번 포스팅에서는 "MQL5와 개발 환경 소개"라는 책의 첫 번째 부분을 통해 MQL5 언어와 개발 환경의 기초에 대해 알아보겠습니다. MQL4(메타트레이더 4 언어)에 비해 MQL5에서 새롭게 도입된 기능 중 하나는 객체 지향 프로그래밍(OOP)을 지원한다는 점입니다. 이로 인해 C++와 유사해졌죠. 이미 일부 OOP 기능이 MQL4로 이전되었지만, 프로그래밍에 익숙하지 않은 사용자에게는 OOP가 다소 어려울 수 있습니다. 이 책의 목적은 이러한 접근 방식을 이해하기 쉽게 만드는 것입니다. MQL5 프로그래밍의 모든 측면을 다루고 모든 과정을 상세히 설명하는 보조 자료로 활용될 수 있습니다. 개발자는 객체 지향 및 절차 지향 프로그래밍 스타일 중에서 선택하거나 두 가지를 조합할 수 있습니다. 이미 프로그래밍 경험이 있는 분들은 기초 부분을 건너뛰셔도 괜찮습니다. C++ 프로그래머라면 MQL5를 더 쉽게 마스터할 수 있지만, 언어 차이에 주의하여 실수를 피하는 것이 중요합니다. MQL5를 사용하면 데이터의 그래픽적 표시를 위한 지표, 거래 자동화를 위한 EA(Expert Advisor), 일회성 작업을 위한 스크립트, 백그라운드 작업을 위한 서비스 등 다양한 프로그램을 만들 수 있습니다. 메타트레이더 5의 독특한 점은 클라이언트 터미널에서 전체 거래 시스템을 관리할 수 있다는 것입니다. 여기서 MQL5 프로그램이 실행되고 거래 서버로 명령을 전송합니다. MQL5 애플리케이션은 서버에 설치되지 않습니다. 1부에서는 프로그램을 편집하고 컴파일하며 실행하는 방법, 다양한 데이터 타입, 변수, 표현식, 배열, 디버깅 및 출력에 대해 설명합니다.

2023.12.15
MetaTrader 5에서 손글씨 숫자를 인식하는 EA 활용하기
MetaTrader5
MetaTrader 5에서 손글씨 숫자를 인식하는 EA 활용하기

손글씨 숫자를 인식하는 전문가 조언기(EA) 소개 MNIST 데이터베이스는 60,000개의 훈련 이미지와 10,000개의 테스트 이미지로 구성되어 있습니다. 이 이미지는 원래의 NIST 세트에서 가져온 20x20 픽셀의 흑백 샘플을 '재혼합'하여 생성된 것으로, 미국 인구조사국에서 제공된 자료와 미국 고등학생들로부터 수집된 샘플들로 보완되었습니다. 샘플은 28x28 픽셀 크기로 정규화되었으며, 그레이스케일 수준을 도입하기 위해 안티 앨리어싱 처리가 이루어졌습니다. 훈련된 손글씨 숫자 인식 모델인 mnist.onnx는 모델 제오(Model Zoo)에서 Github를 통해 다운로드할 수 있습니다 (opset 8). 관심이 있는 분들은 opset 1을 제외한 다른 모델들을 다운로드하고 테스트해볼 수 있습니다. 최근 ONNX 런타임에서 지원되지 않는 모델이기 때문입니다. 흥미롭게도, 출력 벡터는 일반적인 분류 모델에서 사용되는 Softmax 활성화 함수로 처리되지 않았습니다. 하지만 이는 문제가 되지 않습니다. 우리는 이를 쉽게 구현할 수 있습니다. int PredictNumber(void) {   static matrixf image(28,28);   static vectorf result(10);   PrepareMatrix(image);   if(!OnnxRun(ExtModel,ONNX_DEFAULT,image,result))     {      Print("OnnxRun error ",GetLastError());      return(-1);     }   result.Activation(result,AF_SOFTMAX);   int predict=int(result.ArgMax());   if(result[predict]<0.8)      Print(result);      Print("value ",predict," predicted with probability ",result[predict]);   return(predict);} 마우스를 사용해 특별한 그리드에 숫자를 그린 후, 왼쪽 마우스 버튼을 누른 채로 CLASSIFY 버튼을 눌러 그려진 숫자를 인식해 보세요. 인식된 숫자의 확률이 0.8 미만이라면, 각 클래스에 대한 확률 벡터가 로그에 출력됩니다. 예를 들어, 빈 입력 필드를 분류해보세요. [0.095331445,0.10048489,0.10673151,0.10274081,0.087865397,0.11471312,0.094342403,0.094900772,0.10847695,0.09441267] value 5 predicted with probability 0.11471312493085861 흥미롭게도, 숫자 9의 인식 정확도가 눈에 띄게 낮습니다. 왼쪽으로 기울어진 숫자는 더 정확하게 인식됩니다.

2023.11.23
현재 수익 기반의 수익 실현 전략 - MetaTrader 4 활용하기
MetaTrader4
현재 수익 기반의 수익 실현 전략 - MetaTrader 4 활용하기

서론 대부분의 자동매매 프로그램, 즉 EA는 매수 가격으로부터의 핍 거리 기준으로 수익 실현을 합니다. 하지만 EA Perceptron에서 사용하는 코드는 현재 수익을 기반으로 합니다. 이런 방식은 여러 개의 포지션을 열어두고 있는 경우에도 매수 마법 번호를 기준으로 총 현재 수익을 쉽게 관리할 수 있게 해줍니다. 여러 개의 봇 인스턴스 또는 서로 다른 EA를 동시에 사용하는 경우 특히 유용하죠. 제 친구 추가하시고 최신 소식도 받아보세요! 이 코드를 사용하면 핍을 기준으로 한 수익 실현에서 발생할 수 있는 여러 문제를 해결할 수 있습니다. 예를 들어, 핍 기반의 수익 실현은 브로커의 슬리피지에 따라 변동할 수 있어 수익이 제한될 수 있습니다. 현재 수익을 기준으로 하는 코드를 사용하면 이러한 문제를 피하고 거래에 대한 더 많은 제어를 할 수 있습니다. 현재 수익을 기반으로 한 수익 실현 설정 방법에 대해 더 알고 싶다면, EA SwingBot의 코드를 참고하실 수 있습니다. … 총 주문 수 계산하기 같은 마법 번호를 가진 모든 열려 있는 주문의 총 수를 계산하는 코드부터 시작해볼까요? 마법 번호는 트레이더나 EA가 주문에 부여하는 고유 식별자입니다. 이 코드는 변수 total_orders를 0으로 초기화하고, for 루프를 사용하여 모든 열려 있는 주문을 순회하며 각 주문을 OrderSelect() 함수로 선택합니다. 주문을 성공적으로 선택하면 total_orders 변수를 1 증가시킵니다. //-----------------    int total_orders = 0;    for(int i = 0; i < OrdersTotal(); i++)      {       if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))         {          if(OrderMagicNumber() == MagicNumber)          {          total_orders++;         }         }      } … 현재 수익 계산하기 코드는 두 개의 변수를 초기화합니다: ProfittoMinimo와 Profit. ProfittoMinimo는 이 수준에서 수익 실현을 활성화하는 데 사용되며, 값은 계좌의 통화로 표현됩니다. Profit 변수는 같은 마법 번호를 가진 모든 열린 포지션의 현재 수익을 누적하는 데 사용됩니다. 변수 StopLoss는 손절매 용도로 사용됩니다. 코드는 OrdersTotal() 함수를 사용하여 모든 열린 포지션을 반복하는 for 루프를 사용합니다. 각 열린 포지션에 대해, 해당 주문을 OrderSelect() 함수로 선택합니다. 주문이 성공적으로 선택되었고 같은 마법 번호를 가진 경우, 해당 주문의 수익을 Profit 변수에 추가합니다.       double ProfittoMinimo = 3; // 목표 수익       double Profit = 0; // 현재 수익              for(int i=0; i<OrdersTotal(); i++)         {          if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))            {             if(OrderMagicNumber() == MagicNumber) // 여러 EA의 경우, MagicNumber 필터를 제거하여 총 주문에 대한 기능을 유지할 수 있습니다.               {                Profit += OrderProfit();               }            }         } 최소 수익은 외부 변수로 설정하고 EA 옵션에서 구성할 수 있습니다: … 수익 도달 시 포지션 닫기 코드는 OrdersTotal() 함수를 사용하여 모든 열린 주문을 반복하는 for 루프를 사용합니다. 루프는 마지막 주문에서 시작하여 첫 번째 주문까지 거슬러 올라갑니다. 각 주문에 대해, 해당 거래를 OrderSelect() 함수로 선택합니다. 선택된 거래가 현재 차트와 같은 기호를 가지고 있고, OP_BUY 타입이며 코드에 지정된 동일한 마법 번호를 가진 경우, 해당 거래의 Profit이 ProfittoMinimo보다 크거나 같은지 확인합니다. 그렇다면 OrderClose() 함수를 사용하여 매도 가격으로 거래를 종료하고, 매수 주문이 종료되었다는 메시지를 출력합니다. 유사하게, 선택된 거래가 현재 차트와 같은 기호를 가지고 있고, OP_SELL 타입이며 코드에 지정된 동일한 마법 번호를 가진 경우, 해당 거래의 Profit이 ProfittoMinimo보다 크거나 같은지 확인합니다. 그렇다면 OrderClose() 함수를 사용하여 매수 가격으로 거래를 종료하고, 매도 주문이 종료되었다는 메시지를 출력합니다.       for(int e = OrdersTotal() - 1; e >= 0; e--)         {          if(OrderSelect(e, SELECT_BY_POS, MODE_TRADES))            {             if(OrderSymbol() == Symbol() && OrderType() == OP_BUY && OrderMagicNumber() == MagicNumber) // 주문은 현재 주문의 MagicNumber와 일치할 때만 수정됩니다.               {                if(Profit >= ProfittoMinimo)                  {                   OrderClose(OrderTicket(), OrderLots(), ND(OrderClosePrice()), 3); // 매도 가격                  Print("매수 주문이 종료되었습니다", Profit, " - 최소 손절매: ",MarketInfo(Symbol(), MODE_STOPLEVEL));                }           }             if(OrderSymbol() == Symbol() && OrderType() == OP_SELL && OrderMagicNumber() == MagicNumber)               {                if(Profit >= ProfittoMinimo)                  {                   OrderClose(OrderTicket(), OrderLots(), ND(OrderClosePrice()), 3); // 매수 가격                   Print("매도 주문이 종료되었습니다", Profit, " - 최소 손절매: ",MarketInfo(Symbol(), MODE_STOPLEVEL));                  }               }         } … 결론 이 코드는 수익 실현을 기반으로 한 모든 포지션 종료 전략에 유용할 수 있으며, 현재 수익 증가를 기반으로 한 트레일링 스톱과 결합할 수도 있습니다. 또한, 여러 엑스퍼트 어드바이저를 사용할 경우에도 유용합니다. MagicNumber에 대한 if 조건을 제외하면, 모든 활성 EA로부터 열린 모든 포지션을 동시에 관리할 수 있는 일반적인 수익 실현 수준을 설정할 수 있습니다.

2023.10.27
더블 볼린저 밴드 전략: 메타트레이더 4에서 활용하기
MetaTrader4
더블 볼린저 밴드 전략: 메타트레이더 4에서 활용하기

1. 개요 더블 볼린저 밴드 전략은 외환 시장에서 진입과 청산을 필터링하기 위해 두 개의 볼린저 밴드를 활용하는 방법입니다. 이 전략은 가격이 3σ(3 표준 편차)를 넘어설 때 매수(매도) 거래에 들어가는 것을 목표로 합니다. 또한, 거래 결정을 내릴 때 2σ(2 표준 편차) 볼린저 밴드의 수준도 고려합니다. 기본 파라미터: 2σ 볼린저 밴드 (20,2) : 단순 이동 평균 (20)과 표준 편차 수치 (2). 3σ 볼린저 밴드 (20,3): 단순 이동 평균 (20)과 표준 편차 수치 (3). 입력 파라미터 2. 매수 진입 다음의 두 가지 조건이 충족될 때 매수 주문을 엽니다: 조건 1: 매도 호가가 3σ 상단 볼린저 밴드 (BB3UP)를 넘을 때. 조건 2: 조건 1이 충족되면 현재 가격이 2σ 상단 볼린저 밴드 (BB2UP)와 2σ 하단 볼린저 밴드 (BB2LO) 사이에 있는지 확인합니다. 3. 매도 진입 다음의 두 가지 조건이 충족될 때 매도 주문을 엽니다: - 조건 1: 매수 호가가 3σ 하단 볼린저 밴드 (BB3LO) 아래로 내려갈 때. - 조건 2: 조건 1이 충족되면 현재 가격이 2σ 하단 볼린저 밴드 (BB2LO)와 2σ 상단 볼린저 밴드 (BB2UP) 사이에 있는지 확인합니다. 4. 청산 주문 OCO 형식의 주문을 사용하여 손절매와 이익 실현을 N 핍으로 설정합니다. ※N: 설정 입력 파라미터입니다.

2023.10.02
마틴게일 돌파 전략으로 Forex 시장에서 수익 올리기
MetaTrader4
마틴게일 돌파 전략으로 Forex 시장에서 수익 올리기

안녕하세요, 트레이더 여러분! 오늘은 Forex 시장에서 효과적으로 거래할 수 있는 마틴게일 돌파 전략에 대해 소개해 드리려고 합니다. 이 전략은 돌파 매매 기법과 마틴게일 자금 관리 시스템을 결합하여 최적의 거래 성과를 이끌어냅니다. 입력 파라미터: TakeProfPoints: 각 거래에 대한 이익 실현 수준을 포인트로 설정할 수 있는 파라미터입니다. BalancePercentageAvailable: 거래에 사용할 계좌 잔고의 비율을 설정합니다. TP_Percentage_of_Balance: 각 거래의 이익 실현을 위해 사용할 계좌 잔고의 비율을 결정합니다. SL_Percentage_of_Balance: 거래에 할당할 손실 제한 비율을 설정합니다. Start_The_Recovery: 회복 프로세스에서 중요한 역할을 하며, 회복 조치를 언제 어떻게 활성화할지를 제어합니다. TP_Points_Multiplier: 이익 실현 포인트의 배수를 설정하여 유연한 이익 실현 전략을 가능하게 합니다. MagicNumber: 이 EA 고유의 식별자로, 자신의 거래를 독립적으로 관리할 수 있도록 합니다. 전략 하이라이트: 돌파 매매: 이 EA는 시장에서 가격이 주요 수준을 넘어설 때의 돌파 기회를 식별하는 데 특화되어 있습니다. 동적 로트 크기 설정: 로트 크기는 계좌 잔고와 위험 선호도에 따라 동적으로 조정되며, 마틴게일 자금 관리 원칙을 따릅니다. 손실 회복: 이 EA에는 필요시 거래 파라미터를 적응적으로 수정하여 손실을 회복하는 강력한 회복 메커니즘이 포함되어 있습니다. 이 EA에서 가장 중요한 기능 중 하나는 CalcLotWithTP() 함수입니다. 이 함수는 3개의 입력 파라미터(이익 실현, 시작 가격, 종료 가격)를 가지고 있으며, 시작 가격에서 진입하여 종료 가격에서 나갈 때 목표 이익을 달성하기 위한 거래량을 계산합니다. 코드 내의 모든 부분에는 주석이 달려 있어, 이해하기 쉽게 되어 있습니다. 또한, 이 내용을 설명하는 유튜브 영상도 만들었습니다:

2023.09.26
MT5를 위한 브레이크아웃 마틴 게일 시스템 트레이딩
MetaTrader5
MT5를 위한 브레이크아웃 마틴 게일 시스템 트레이딩

안녕하세요, 트레이더 여러분! 오늘은 외환 시장에서 활용할 수 있는 '마틴 게일 브레이크아웃' 전략을 소개해드릴게요. 이 EA(시스템 트레이딩)는 브레이크아웃 방식과 마틴 게일 자금 관리 요소를 결합해 트레이딩 성과를 최적화하는 데 도움을 줍니다. 입력 파라미터: TakeProfPoints: 각 거래에 대해 설정할 수 있는 이익 실현 레벨(포인트 단위)입니다. BalancePercentageAvailable: 거래에 사용할 계좌 잔고의 퍼센트를 지정합니다. TP_Percentage_of_Balance: 각 거래에서 이익 실현에 사용할 계좌 잔고의 퍼센트를 결정합니다. SL_Percentage_of_Balance: 거래의 손실 제한을 위해 할당할 계좌 잔고의 퍼센트를 설정합니다. Start_The_Recovery: 회복 과정에서 중요한 역할을 하며, 회복 조치를 언제 어떻게 활성화할지 제어합니다. TP_Points_Multiplier: 이익 실현 포인트에 대한 배수로, 유연한 이익 실현 전략을 가능하게 합니다. MagicNumber: 이 EA만의 고유 식별자로, 독립적으로 거래를 관리할 수 있게 해줍니다. 전략 하이라이트: 브레이크아웃 트레이딩: 이 EA는 가격이 주요 레벨을 돌파할 때의 브레이크아웃 기회를 식별하는 데 특화되어 있습니다. 동적 로트 사이징: 마틴 게일 자금 관리 원칙에 따라 계좌 잔고와 위험 선호도에 따라 로트 사이즈가 동적으로 조정됩니다. 손실 회복: 이 EA는 손실을 회복하기 위해 필요에 따라 거래 파라미터를 조정하는 강력한 회복 메커니즘을 포함하고 있습니다. 이 EA에서 사용되는 주요 함수는 CalcLotWithTP()입니다. 이 함수는 3개의 입력 파라미터인 Takeprofit, Startprice, Endprice를 가지고 있으며, 거래가 Startprice에서 진입하고 Endprice에서 종료할 때 이익 목표를 달성하기 위한 거래량을 계산합니다. 코드 내 모든 부분은 주석으로 설명되어 있어 이해하기 쉽게 되어 있습니다.

2023.09.26
메타트레이더 5에서 심볼 채우기 정책 결정하기
MetaTrader5
메타트레이더 5에서 심볼 채우기 정책 결정하기

안녕하세요, 트레이더 여러분! 오늘은 메타트레이더 5에서 심볼의 채우기 정책을 결정하는 방법에 대해 이야기해보려고 해요. 이 과정은 특히 트레이딩 결정을 내리는 데 중요한 요소가 되죠. 먼저, 우리가 다룰 심볼을 입력해야 해요. 이것은 우리가 채우기 정책을 결정하려는 금융 상품의 심볼을 의미합니다. 채우기 정책 유형 얻기 (filling): 이 함수는 SymbolInfoInteger를 사용하여 제공된 심볼에 대한 채우기 정책 정보를 가져옵니다. 이 정보는 숫자 값으로 filling이라는 변수에 저장됩니다. 채우기 정책 비교: 다음으로, 이 숫자 값(filling)을 여러 사전 정의된 상수와 비교하는 단계입니다. 여기에는 '채우거나 죽이기' (SYMBOL_FILLING_FOK), '즉시 또는 취소' (SYMBOL_FILLING_IOC), '반환' (SYMBOL_FILLING_RETURN) 같은 다양한 채우기 정책이 포함됩니다. 채우기 정책 유형 반환: 마지막으로, 비교 결과를 바탕으로 채우기 정책 유형을 결정합니다. 만약 '채우거나 죽이기'와 일치하면 ORDER_FILLING_FOK를 반환하고, '즉시 또는 취소'와 일치하면 ORDER_FILLING_IOC를 반환합니다. 두 가지 모두에 해당하지 않으면 ORDER_FILLING_RETURN을 반환하게 됩니다. 정리하자면, 이 함수는 메타트레이더 5에서 심볼의 채우기 정책을 조회하고 반환할 수 있게 도와줍니다. 이렇게 하면 특정 금융 상품의 채우기 정책에 따라 트레이딩 결정을 내리는 데 유용하죠.

2023.09.26
처음 이전 3 4 5 6 7 8 9 10 11 12 13 다음 마지막