나는 완전히 길을 잃었다

 

당신이 부르는 "EA"를 만들고 싶습니다. 계속해서 약어로 사용하는 것이 웃기긴 하지만, 제가 생각하는 한 그것은 "진화 알고리즘"의 약자입니다. 이것이 제 방법이 실제로 무엇인지입니다. 작동하는 경우. 스프레드가 충분히 낮은 경우에 그렇습니다. 울타리에 있어요.

어쨌든 프로그래밍 경험이 있습니다. 그리고 내가 본 것에서 MQL4는 C++와 거의 비슷하게 보입니다. 그러나 나는 몇 가지 중요한 세부 사항을 놓치고 있습니다. 나는 변수와 상수, 그리고 많은 다른 것들에 대해 이미 알고 있지만 작업하려면 일종의 기본 템플릿이 필요하고 몇 가지 개념적 사항이 약간 부족합니다. 누군가가 간단하지만 내가 필요한 모든 요소를 가지고 있고 각 부분이 하는 일을 설명하고 "아하, 이것이 내가 해야 할 일을 하는 방법입니다"라고 말할 수 있는 일종의 형편없는 예시 거래 로봇 프로그램을 게시할 수 있습니까?

기본적으로 내 프로그램이 내 컴퓨터의 RAM에 다음을 다운로드할 수 있기를 바랍니다(통화 거래 플랫폼을 통해 내 컴퓨터에 데이터 다운로드).

가장 최근의 것을 포함하여 프로그램 내에서 지정한 시간 증분 동안(스프레드 값이 다를 수 있으므로) 매수 및 매도 가격에 대한 고가, 저가, 시가, 종가 데이터 시간 간격이 무엇이든 간에 매분마다 또는 매 5분마다 또는 10분마다 등) 또는 가능하면 매 틱마다 - 가격이 변경될 때마다 - 둘 중 어느 것이든 완료되고 싶습니다. 마지막 항목이 완료된 이후의 시간을 나타내는 변수를 가질 수 있어야 합니다(따라서 10분마다인 경우 0에서 최대 10분까지 계산되는 모든 틱으로 업데이트되는 변수가 있을 수 있습니다. 10분, 데이터의 또 다른 업데이트가 있음), 또한 청산 시 계정의 총 가치를 다운로드하여 총 포지션 수와 포지션 크기 및 포지션 유형(예: USD/JPY)을 다운로드하고 싶습니다. 엔의 가치가 10000 또는 100000달러이지만 EUR/USD는 10000 또는 10000입니다. 0 EUROS 가치의 달러이지만 내 계정 가치는 달러로 표시되므로 포지션의 가변 로트 크기를 결정할 수 있어야 합니다. 현재 구매 및 판매 가격에서 프로그램은 물론 스프레드의 현재 가치를 얻기 위해 다른 하나에서 하나를 뺄 수 있습니다.

그런 다음 프로그램이 다음 작업을 수행할 수 있기를 바랍니다(통화 거래 플랫폼을 통해 내 컴퓨터에서 데이터 업로드)

시장가 주문 또는 지정가 주문을 통해 구매 또는 판매. 또한 지정가 주문을 넣었지만 통과했을 때의 가격인지, 내가 입력한 지정가 가격을 예상할 수 있는지, 아니면 더 좋을 수 있는지 알려주세요. 예를 들어 EUR/USD 구매 가격이 1.3500이고 지정가 주문이 1.3501이라고 가정하면 1.3501 또는 1.3500을 지불해야 합니까? 브로커가 거기에서 나를 속이기를 기대해야 합니까? 아니면 주문이 시스템에 들어올 때 가격이 1.3502 이상이면 발생하지 않는다는 점을 제외하고는 시장 주문을 넣는 것과 기능적으로 동일합니까?

마지막으로, 예제 프로그램이 다른 함수에 대한 함수 호출을 포함하기를 바랍니다. 전달된 데이터로 일종의 간단한 계산을 수행하고 일부 값을 반환하는 간단한 것입니다. MQL4에서와 같이 값에 의한 전달과 참조에 의한 전달이 모두 가능한 경우 각각의 예를 포함하십시오(주석 무엇을 하고 있는지 보여주기 위해) 샘플 프로그램에서.

또한 C++에서와 같이 일반적으로 하나 이상의 실제 파일(mql4 확장명을 가짐?)을 포함하는지 또는 일반적으로 하나의 단일 mql4 파일이고 거래 플랫폼에서 컴파일하는지 알려주십시오. 나는 그것을 위해 약간의 컴파일러가 필요하고 거래 플랫폼은 기계 코드 또는 컴파일러에 의해 생성된 무엇이든 사용합니까?

누군가 이 모든 요소를 포함하는 더미 프로그램을 만들기 위해 이 작업을 수행한다면 나에게도 매우 유용할 뿐만 아니라 내가 상상하는 다른 사람들에게도 유용할 것입니다. 이 작업을 수행하는 사람에게 미리 감사드립니다.

 
오, 더 나은 방법은 0에서 시작하여 최대 10분까지 계산되는 변수의 경우(또는 사용하는 시간에 관계없이) - 정규화되어야 합니다 - 시간 단위로 나누어짐 - 0과 1 사이에서 변하는 두 배가 되도록 스케일링 팩터에 문제가 있는 경우를 대비하여 말씀드립니다. 그렇게 하면 5분 차트, 10분 차트, 1분 차트에 적용될 수 있지만 시간 단위가 무엇이든 이 변수는 항상 0과 1 사이입니다.
 
인스턴스에서 mql4에 대해 알아야 할 모든 것을 제공하는 그러한 프로그램은 없습니다. 이미 일부 프로그래밍이 있으므로 예를 들어 ea와 같은 코드 기반 을 살펴보는 것이 좋습니다. 코드를 보고 배우는 것이 아니라 언어 설명을 보는 것이 싫다면 mql4_book 을 확인하십시오. 또한 쉽게 참조할 수 있도록 설명서 가 있습니다.
 
누가 써주실 수 있냐고 물었습니다. 언어의 기본 형식을 안다면 5분 정도 걸릴 것입니다. 제 글을 읽는 데 걸린 시간만큼 걸릴 것입니다. 그냥 프로그램을 작성하고 이러한 것들 각각의 예를 입력하고 그것을 올려. mql4 책을 보니 변수가 무엇인지 설명하는 것부터 함수에 대한 지식을 전제로 하는 것까지 나와 있고 필요한 것보다 단순한 것에서 준비된 것보다 더 많이 필요한 전환점을 찾으려고 졸리다 이해하기. 알다시피, 나는 누군가가 나를 위해 "경제 고문"을 써달라고 요청하는 것이 아니라 내가 사용하고 싶은 모든 지침이 들어있는 어리석은 것입니다. 내가 사용하고 싶은 정보와 입력하고 싶은 모든 명령을 내 컴퓨터의 변수에 다운로드하는 몇 가지 항목 - 지금 생각해보면 한도 및 시장가 주문을 사고팔 수 있을 뿐만 아니라 또한 기존 주문을 취소하는 것입니다. 결국 실행되지 않는 경우 낙오자 지정가 주문을 남겨두고 싶지 않습니다. 프로그램에서 해당 주문을 잊어버리기를 원하지 않습니다.
 
zortharg : 누군가가 하나를 쓸 수 있는지 묻고 있었습니다. 언어의 기본 형식을 안다면 5분 정도 걸릴 것입니다. 제 글을 읽는 데 걸린 시간만큼 걸릴 것입니다. 그냥 프로그램을 작성하고 이러한 것들 각각의 예를 입력하고 그것을 올려. mql4 책을 보니 변수가 무엇인지 설명하는 것부터 함수에 대한 지식을 전제로 하는 것까지 나와 있고 필요한 것보다 단순한 것에서 준비된 것보다 더 많이 필요한 전환점을 찾으려고 졸리다 이해하기. 알다시피, 나는 누군가가 나를 위해 "경제 고문"을 써달라고 요청하는 것이 아니라 내가 사용하고 싶은 모든 지침이 들어있는 어리석은 것입니다. 내가 사용하고 싶은 정보와 입력하고 싶은 모든 명령을 내 컴퓨터의 변수에 다운로드하는 몇 가지 항목 - 지금 생각해보면 한도 및 시장가 주문을 사고팔 수 있을 뿐만 아니라 또한 기존 주문을 취소하는 것입니다. 결국 실행되지 않는 경우 낙오자 지정가 주문을 남겨두고 싶지 않습니다. 프로그램에서 해당 주문을 잊어버리기를 원하지 않습니다.

잘못 찾아오신 것 같아요.

우리는 이 포럼에서 다른 사람들을 위한 코드를 작성하지 않습니다.

우리는 당신이 자신의 코드를 작성하기를 기대합니다.

막히면 올바른 방향으로 안내해 드립니다.

누군가가 당신을 위해 코드를 작성해 주기를 원한다면 여기 로 가십시오.

그들은 mql4 및 mql5를 수행합니다.

 
zortharg :

[...]

글쎄, 이것은 며칠 내로 예정된 MT4에 대한 주요 업데이트를 논의하는 것으로부터 변경됩니다.


나는 당신이 부르는 "EA"를 만들고 싶습니다. 계속 약어로 쓰는게 웃기긴 하지만

배경에 따라 다릅니다. 좋든 나쁘든 MT4와 MQL4는 현재 전 세계 소매 FX 시장에서 거의 독점권을 갖고 있으며 "EA"라는 용어는 최소한 수십만 명의 사람들에게 의미가 있습니다.


그리고 내가 본 것에서 MQL4는 C++와 거의 동일하게 보입니다.

MQL4 언어에는 두 가지 버전이 있습니다. 지난 9년 동안 존재해 온 것은 클래스나 객체가 없기 때문에 C++보다 C에 가깝습니다. 반면에 포인터나 명시적 메모리 할당이 없습니다.

다음 주 월요일 라이브 릴리스 예정인 MT4 및 MQL4의 새 버전에는 클래스가 추가되지만 실제로 명시적인 메모리 할당 및 관리가 없습니다. C++와 비슷하거나 Javascript와 비슷하지만 오리 입력 및 람다 기능 등이 없는지 여부는 논쟁의 여지가 있습니다.


기본적으로 내 프로그램이 내 컴퓨터의 RAM에 다음 [...]을 다운로드할 수 있기를 바랍니다.

간단히 말해서 플랫폼은 자동으로 이 작업을 수행하며 표준 동작을 재정의할 수 있는 쉬운 방법이 없습니다. 외부 가격 데이터를 다운로드한 다음 MQL4(특히 새로운 확장 버전이 아닌 기존 MQL4) 내에서 조작하는 것은 좋지 않습니다.

현재 가격을 얻을 수 있으며 M1, M5, M15 등이지만 M3, H2 등은 제외하고 플랫폼이 제공하는 모든 기간에 대한 과거 가격을 쉽게 조작할 수 있습니다.


매수 및 매도 가격에 대한 고가, 저가, 시가 및 종가 데이터(스프레드 값이 다를 수 있기 때문에)

스프레드는 실제로 다양할 수 있지만 MT4 플랫폼의 매력적인 특징 중 하나는 역사적 입찰 가격만 제공한다는 것입니다. (현재 가격과 현재 스프레드는 분명히 사용 가능합니다.)


나는 또한 청산 시 계정의 총 가치를 다운로드하고 싶습니다 [...] 포지션의 총 수 및 크기 [...] 하지만 내 계정 가치는 달러로 표시됩니다

실제로 플랫폼은 이 데이터를 지속적으로 스트리밍합니다. 명시적인 "다운로드"가 없습니다. 예를 들어, MQL4 코드는 AccountEquity() 함수를 통해 계정의 현재 자산에 지속적으로 액세스할 수 있습니다. 오픈 포지션은 자동으로 귀하의 예금 통화로 보고됩니다.


예를 들어 EUR/USD 구매 가격이 1.3500이고 지정가 주문이 1.3501이라고 가정하면 1.3501 또는 1.3500을 지불해야 합니까?

브로커에 따라 다르지만 전반적으로 플랫폼/브로커는 현재 BBO 이상에서 지정가 주문을 수락하지 않습니다. 나는 이것에 대한 예외를 즉시 생각할 수 없습니다.


C++에서와 같이 일반적으로 둘 이상의 실제 파일(mql4 확장명을 가짐?)을 포함하는 경우 또는 일반적으로 하나의 단일 mql4 파일인 경우

일반적으로 프로젝트는 하나의 .mq4 파일로만 구성될 수 있지만 #included .mqh 파일은 여러 개 있을 수 있습니다. 따라서 공통 코드 라이브러리를 갖고 프로젝트 간에 재사용할 수 있습니다. 할 수 없는 것은 pari passu에 존재하는 여러 .mq4 파일, 즉 동일한 프로젝트의 일부로 함께 컴파일되는 것입니다. MQL4의 기원이 C임에도 불구하고 일반적인 대형 프로젝트의 구조는 다릅니다. 하나의 .mq4 파일과 다양한 종류의 하나 이상의 라이브러리(미리 컴파일되거나 #포함됨)가 있습니다.


그런 다음 거래 플랫폼은 기계 코드 또는 컴파일러에서 생성한 모든 것을 사용합니다.

컴파일러는 기계어가 아닌 일종의 바이트 코드/p-코드/호출하고 싶은 대로 생성합니다. .mq4 파일을 명시적으로 컴파일하거나 소프트웨어의 필수 폴더에 넣으면 자동으로 컴파일되어 다음에 시작할 때 사용할 수 있습니다.


누군가가 이 모든 요소를 포함하는 더미 프로그램을 만들기 위해 이렇게 하면 나뿐만 아니라 다른 사람들에게도 유용할 것입니다.

좋은 시간이 아닙니다. 이 포럼의 모든 사람들은 9년 만에 처음으로 MQL4에 대한 진정으로 중요한 업데이트에 대해 논쟁하느라 너무 바빴습니다.

 
zortharg : 누군가가 하나를 쓸 수 있는지 묻고 있었습니다.
검색 , 코딩 배우기 , 또는 누군가 에게 지불 하는 세 가지 선택만 있습니다. 우리는 당신을 위해 그것을 코딩하지 않을 것입니다. 귀하의 시도( SRC 사용)와 문제의 특성을 게시 때 기꺼이 도와드리겠습니다.
 

나는 상업적 가치가 있는 것을 생산해 달라고 누구에게도 요구하지 않았습니다. 나는 누군가에게 "나를 위해 내 방법을 코딩해 달라"고 요구하는 것이 아닙니다. WHRoeder. 시작점이 필요합니다. "검색" 아래에 넣은 링크에서 무언가를 알아낼 수 있을지도 모르지만 "이것이 필요한 것입니다"라는 맨 뼈를 원합니다. 프로그램이 실제로 어떻게 생겼는지 모르겠습니다. 나는 그것에 엄격하게 필요한 것이 무엇인지 모릅니다. 참조 지점 없이 갑자기 직접 수행하려고 하면 무엇이 부족한지조차 알지 못하기 때문에 컴파일러 오류가 발생합니다. 그리고 작동해야 할 무언가를 만들면 초기화를 잘못하고 제대로 했는지조차 모를 것입니다. 좋아, 이건 어때? 간단한 예입니다. 실생활에서 하면 손해보는 것 : 대담함*(귀하의 계좌가치)*(지금 가격과 1단위 전 가격의 차이)/X의 포지션을 유지하는 전문 고문, 그리고 X는 1부터 시작하지만 시간 단위마다 X는 X=.9*X+.1*(현재 가격-1 시간 단위 전 가격)^2로 업데이트되며 대담함은 사용자 지정 매개변수입니다. 그리고 매수 또는 매도할 포지션을 결정하려면 이미 보유하고 있는 포지션도 결정해야 합니다. 그래서 그냥 멍청한 프로그램이지만 시작점으로 작업해야 하는 모든 요소가 거의 포함되어 있습니다.

gchrmt4 감사합니다. 제 질문에 많은 답변을 해주셨습니다. 그러나 "플랫폼이 제공하는 모든 기간 동안 역사적 가격을 쉽게 조작할 수 있습니다"라고 말할 때 어떻게 해야 합니까? 주어진 시간에 가격을 반환하는 AccountEquity()와 유사한 함수 가 있습니까? 그리고 시간 단위 전과 시가/저가 고가 종가를 지정하고 어떤 유형의 시간 단위를 사용합니까? 시간 단위의 유형은 적용한 차트 유형에 따라 결정됩니까? 즉, 1분 차트에 적용하면 1시간 단위 전은 1분 전을 의미하지만, 5분 차트에 적용하면 1시간 단위 전은 5분 전을 의미하거나 타임 스텝이 어렵다. 차트에 적용되지 않고 프로그램 자체에 코딩되어 있습니까? 그리고 현재 스프레드, 어떻게 액세스합니까? 이러한 것들이 "스트리밍"이고 쉽게 액세스할 수 있지만 어떻게 액세스할 수 있습니까?

어떤 도움을 주시면 감사하겠습니다.

 
zortharg :
주어진 시간에 가격을 반환하는 AccountEquity()와 유사한 함수가 있습니까? 그리고 시간 단위 전과 시가/저가 고가 종가를 지정하고 어떤 유형의 시간 단위를 사용합니까? 시간 단위의 유형은 적용한 차트 유형에 따라 결정됩니까? 즉, 1분 차트에 적용하면 1시간 단위 전은 1분 전을 의미하지만, 5분 차트에 적용하면 1시간 단위 전은 5분 전을 의미하거나 타임 스텝이 어렵다. 차트에 적용되지 않고 프로그램 자체에 코딩되어 있습니까? 그리고 현재 스프레드, 어떻게 액세스합니까? 이러한 것들이 "스트리밍"이고 쉽게 액세스할 수 있지만 어떻게 액세스할 수 있습니까?

어떤 도움을 주시면 감사하겠습니다.

시계열 함수 의 전체 제품군이 있습니다. 예를 들어, iHigh("USDJPY", PERIOD_H1, 2)는 USDJPY H1 막대 2 막대의 고가를 제공합니다(현재 진행 막대가 #0인 경우). 시간을 막대 인덱스로 변환하는 기능이 있습니다.

현재 스프레드는 여러 가지 방법으로 사용할 수 있습니다. 가장 간단한 것은 Ask - Bid(코드가 실행 중인 차트의 기호에 대한 스프레드를 제공함)입니다. 현재 차트에 대한 다른 기호의 스프레드는 다른 경로를 통해 사용할 수 있으며 MarketInfo("symbol", MODE_ASK) - MarketInfo("symbol", MODE_BID) 또는 MarketInfo("symbol", MODE_SPREAD와 같은 다른 용어로 표현됩니다. )

 

@zortharg

여기에 문서라는 것이 있습니다(부분적으로 사용되지 않음): docs.mql4.com/

및 여기(곧 제공될 예정이며 부분적으로 적용되지 않음): mql5.com/en/docs


그곳에서 당신이 알고 싶었던 모든 것을 찾을 수 있습니다. 또한 터미널 자체에 예제가 있습니다. 스크립트, 전문 고문 및 지표의 예. 또한 DLL을 가져와 MQL 이상의 작업을 수행할 수 있습니다.

거기에서 얻을 수 있다면 준비가 된 것이고, 그렇지 않다면 음...


 

귀하의 요청을 이해합니다. 시작하는 작업 예제는 매우 유용합니다.

https://www.mql5.com/en/code

또한 인터넷 검색에서 배울 수 있는 전문 고문의 무료 소스를 찾을 수 있습니다.

간단한 작업을 수행하는 코드를 찾고 함수로 그룹화하고 코드를 간단하고 읽기 쉽게 유지하십시오.

start() {

   SearchOrders();
   DetectEnvironment();      
   UpdateIndicators();
   RiskAssessment();
   CalcVolume();
   if ( EnterSignal() ) OpenOrder();
   if ( ExitSignal() ) CloseOrder();
   TrailingStop();
   DisplayInfos();

}