M 언어를 시작하는 방법
M 언어는 무엇입니까? M 언어라고 불리는 것은 초기 주식 거래 기술 지표에서 확장되는 프로그래밍 함수의 집합입니다. 알고리즘을 단일 함수로 포괄하면 사용자가 전략 논리를 구현하기 위해
그것은 프로그래밍 효율성을 크게 향상시키는 "작은 문법, 큰 함수"의 구축 모드를 채택합니다. 다른 언어로 100 개 이상의 문장의 전략 작성은 M 언어로 몇 줄로만 컴파일 할 수 있습니다. FMZ 퀀트 도구와 함께 금융 통계 함수 라이브러리와 데이터 구조는 또한 복잡한 거래 논리를 지원 할 수 있습니다.
이 섹션의 핵심 지식을 빠르게 이해하도록 돕기 위해 FMZ Quant M 언어를 소개하기 전에 먼저 이 섹션의 명사 개념에 대한 사전 이해를 해 봅시다. 우리는 여전히 장기 50 일 이동 평균과 단기 10 일 이동 평균을 기본 사례로 사용하고 이전 장에서 언급 된 완전한 전략 사례를 검토합니다.
오픈 롱 포지션: 현재 포지션이 없는 경우, 종료 가격은 단기 이동 평균보다 높고, 종료 가격은 장기 이동 평균보다 높고, 단기 이동 평균은 장기 이동 평균보다 높고, 장기 이동 평균은 상승하고 있습니다.
오픈 쇼트 포지션: 현재 포지션이 없으며, 종료 가격은 단기 이동 평균보다 낮고, 종료 가격은 장기 이동 평균보다 낮고, 단기 이동 평균은 장기 이동 평균보다 낮고, 장기 이동 평균은 하락하고 있습니다.
긴 포지션을 닫습니다: 현재 긴 포지션을 보유하고 있으며, 폐쇄 가격은 장기 이동 평균보다 낮거나, 단기 이동 평균은 장기 이동 평균보다 낮거나, 장기 이동 평균이 떨어지고 있습니다.
클로즈 쇼트 포지션: 현재 쇼트 포지션을 보유하고, 종료 가격이 장기 이동 평균보다 높거나, 단기 이동 평균이 장기 이동 평균보다 높거나, 장기 이동 평균이 상승하는 경우
M 언어로 쓰면, 이렇게 됩니다.
MA10:=MA(CLOSE,10); // Get the 10-cycle moving average of the latest K-line and save the result in variable MA10
MA50:=MA(CLOSE,50); // Get the 50-cycle moving average of the latest K-line and save the result in variable MA50
MA10_1:=REF(MA10,1); //Get the 10-cycle moving average of the pervious K line and save the result to variable MA10_1
MA50_1:=REF(MA50,1); //Get the 50-cycle moving average of the pervious K line and save the result to variable MA50_1
MA10_2:=REF(MA10,2); //Get the 10-cycle moving average of the latest K line and save the result to variable MA10_2
MA50_2:=REF(MA50,2); //Get the 50-cycle moving average of the latest K line and save the result to variable MA50_2
MA50_ISUP:=MA50>MA50_1 AND MA50_1>MA50_2; //Determine whether the current 50-line moving average of the K line is rising
MA50_ISDOWN:=MA50<MA50_1 AND MA50_1<MA50_2; //Determine whether the current 50-line moving average of the K line is falling
CLOSE>MA10 AND CLOSE>MA50 AND MA10>MA50 AND MA50_ISUP,BK; //open long position
CLOSE<MA10 AND CLOSE<MA50 AND MA10<MA50 AND MA50_ISUP,SK; //open short position
CLOSE<MA50 OR MA10<MA50,SP;//close long position
CLOSE>MA50 OR MA10>MA50,BP;//close short position
완전한 거래 전략을 작성하려면: 데이터 획득, 데이터 계산, 논리 계산 및 주문을 배치해야합니다. 위에서 보여준 바와 같이, 전체 코드에서 기본 데이터를 얻기 위해 하나의 API 만 사용됩니다. 첫 번째와 두 번째 줄의 " CLOSE "입니다. 그 다음 첫 번째에서 아홉 번째 줄은 데이터 계산 부분입니다. 11부터 14 줄은 논리 계산 및 주문을 배치하는 부분입니다.
참고로 MA10, MA50, MA10_1, MA50_1, MA10_2, MA50_2는 변수이며, 첫부터 아홉 번째 줄의 " := "은 할당 표시이며, 할당 표시의 오른쪽에 있는 데이터는 할당 표시의 왼쪽에 있는 변수에 할당됩니다.
기본 데이터 (개시 가격, 최고 가격, 최저 가격, 종료 가격, 부피) 는 양적 거래의 필수적인 부분입니다. 전략에서 최신 기본 데이터를 얻기 위해서는 FMZ Quant의 API를 호출 할 필요가 있습니다. 역사적 가격의 기본 데이터를 얻고 싶다면 "REF"를 사용할 수 있습니다. 예를 들어: REF (CLOSE, 1) 는 어제의 종료 가격을 얻는 것입니다.
변수는 변경할 수 있다. 변수의 이름은 코드 이름으로 이해될 수 있다. 그 이름은 영어 문자, 숫자, 줄에 의해 지원된다. 그러나 길이는 31 문자 내에서 제어되어야 한다. 변수 이름은 다른 하나와 반복될 수 없으며, 매개 변수 이름과 중복될 수 없으며, 함수 이름 (API) 과 반복될 수 없으며, 각 문서는 반점으로 끝나는 것이 좋다. " // " 이후 댓글을 작성한다. 아래와 같이:
INT:=2; //Integer type
FLOAT:=3.1; //Floating point
ISTRUE:=CLOSE>OPEN; //Boolean type
변수 할당은 할당 기호의 오른쪽에 있는 값이 왼쪽에 있는 변수에 주어지는 것을 의미합니다. 값이 차트나 디스플레이의 위치에 표시되는지 여부를 제어할 수 있는 네 가지 유형의 할당이 있습니다. 그것들은 " ": ", " := ", " ^^ ", "... ", 아래의 코드 댓글은 그 의미를 상세히 설명합니다.
CC1: C; //Assign the closing price to the variable CC1 and display it in the sub-chart
CC2:=C; //Assign the closing price to variable CC2, but not display in the status bar and chart
CC3^^C; //Assign the closing price to the variable CC3 and display it in the main chart
CC4..0; //Assign the closing price to the variable CC4 and display it in the status bar, but not in the chart
M 언어에는 여러 가지 데이터 유형이 있으며, 가장 일반적인 것은 숫자 유형, 문자열 유형 및 부울 유형입니다. 숫자 유형은 정수, 소수, 양수 및 음수 등을 포함한 숫자입니다. 예를 들어: 1, 2, 3, 1.1234, 2.23456...; 문자열 유형은 텍스트, 중국어, 영어로 이해할 수 있습니다. 숫자 또한 문자열이 될 수 있습니다. 예를 들어:
이름에서 알 수 있듯이 관계 연산자는 두 값의 관계를 비교하는 데 사용되는 연산자입니다. 그들은 아래와 같이 같거나, 크거나, 적거나, 크거나, 같거나, 적거나, 같거나, 같지 않습니다.
CLOSE = OPEN; //when closing price equals to opening price, return 1 (true), otherwise return 0 (false)
CLOSE > OPEN; //when closing price greater than opening price, return 1 (true), otherwise return 0 (false)
CLOSE < OPEN; //when closing price less than opening price, return 1 (true), otherwise return 0 (false)
CLOSE >= OPEN; //when closing price greater than or equal to opening price, return 1 (true), otherwise return 0 (false)
CLOSE <= OPEN; //when closing price less than or equal to opening price, return 1 (true), otherwise return 0 (false)
CLOSE <> OPEN; //when closing price is not equal to opening price, return 1 (true), otherwise return 0 (false)
논리 연산은 툴러 타입의 별도의 명령어를 전체로 결합할 수 있으며, 가장 일반적으로 사용되는 것은 "AND" 및 "OR"입니다. 두 개의 툴러 타입 값이 있다고 가정하자면,
AA:=2>1; //return true
BB:=4>3; //return true
CC:=6>5; //return true
DD:=1>2; //return false
주의를 주시기 바랍니다.
"AND"는 모든 조건이
"OR"는 모든 조건에서, 조건 중 하나가
"AND"는 "&&"로 쓰일 수 있고 "OR"는 "ᄇ"로 쓰일 수 있습니다.
M 언어에서 사용되는 수학적 연산자 ("+
AA:=1+1; //the result is 2
BB:=2-1; //the result is 1
CC:=2*1; //the result is 2
DD:=2/1; //the result is 2
만약 100*(10-1)/(10+5) 표현식이 있다면, 프로그램에서 먼저 계산되는 단계는 무엇일까요?
1, 같은 작동 수준이라면 일반적으로 왼쪽에서 오른쪽으로 계산됩니다.
2, 덧셈과
M 언어의 경우도 마찬가지입니다. 아래와 같이:
100*(10-1)/(10+5) //the result is 60
1>2 AND (2>3 OR 3<5) //the result is false
1>2 AND 2>3 OR 3<5 //the result is true
FMZ 퀀트 툴의 M 언어에는 종료 가격 모드와 실시간 가격 모드 두 가지 프로그램 실행 모드가 있습니다. 종료 가격 모드는 현재 K-라인 신호가 설정되면 다음 K-라인에 명령을 내리는 것을 의미합니다. 현재 k-라인 신호가 설정되면 실시간 모드가 즉시 실행됩니다.
이 함수는 두 번째 주기의 위와 하루 주기의 아래에 있으며, 네 자릿수 형태로 표시됩니다: HHMM (1450 - 14: 50). 참고: 시간 함수를 세션 끝에서 포지션을 닫는 조건으로 사용하면 개점 포지션 조건이 해당 시간 제한에 따라 권장됩니다. 아래와 같이:
CLOSE>OPEN && TIME<1450,BK; //if it is a positive k-line and the time is less than 14:50, opening position.
TIME>=1450,CLOSEOUT; //if the time is beyond 14:50, closing all position.
M 언어의 모델 분류에는 필터링이 아닌 모델과 필터링 모델이 두 가지 유형이 있습니다. 이것은 실제로 매우 잘 이해됩니다: 필터링이 아닌 모델은 위치를 추가하고 줄이기 위해 사용할 수 있는 연속적인 열기 또는 닫기 신호를 허용합니다. 필터링 모델은 연속적인 열기 또는 닫기 신호를 허용하지 않습니다. 즉, 열기 신호가 나타나면 닫기 신호가 나타나기 전까지 다음 열기 신호가 필터링됩니다. 필터링이 아닌 모델의 순서는: 오픈 포지션 - 클로즈 포지션 - 오픈 포지션 - 클로즈 포지션 - 오픈 포지션...
위의 내용은 M 언어의 빠른 시작의 내용입니다. 이제 당신은 이제 자신의 거래 전략을 프로그래밍 할 수 있습니다. 더 복잡한 하나를 작성해야하는 경우 FMZ Quant 플랫폼의 M 언어 API 문서를 참조하거나 직접 공식 고객 서비스를 문의하여 작성할 수 있습니다.
내일 거래는 또한 인기있는 거래 모드입니다. 이 방법은 하루종일 포지션을 보유하지 않습니다. 따라서 시장 변동성의 낮은 위험에 노출됩니다. 불리한 시장 조건이 발생하면 시간에 조정 할 수 있습니다. 다음 섹션에서는 실행 가능한 내일 거래 전략을 작성하도록 안내합니다.