3.3 M 언어로 전략을 구현하는 방법

저자:선함, 2019-06-25 12:08:47, 업데이트: 2023-11-11 17:01:30

img

M 언어로 전략을 구현하는 방법

요약

이전 기사에서, 우리는 M 언어의 도입, 기본 문법, 모델 실행 방법, 모델 분류의 측면에서 거래 전략을 실현하는 전제를 설명했습니다. 이 기사에서, 우리는 일반적으로 사용되는 전략 모듈 및 기술에서 이전 부분을 계속할 것입니다. 지표, 단계별로 실행 가능한 내일 양적 거래 전략을 달성하는 데 도움이됩니다.

전략 모듈

img

생각해보세요, 레고 조각으로 로봇을 어떻게 만들 수 있을까요? 항상 위에서 아래로, 혹은 아래에서 위로, 조각씩 조립할 수는 없습니다. 조금 상식을 가진 사람들은 머리, 팔, 다리, 날개 등을 조립하여 완전한 로봇으로 결합해야 한다는 것을 알고 있습니다. 프로그램 작성에도 마찬가지입니다. 필요한 기능을 단일 전략 모듈로 작성하고, 그 다음이 개별 전략 모듈을 통합하여 완전한 거래 전략으로 만듭니다. 아래에는 몇 가지 일반적인 전략 모듈을 나열합니다.

img

단계적 인 증가

스테이지 증가는 현재 K 라인 의 종료 가격의 비율을 종료 가격 차이의 이전 N 기간과 비교하여 계산합니다. 예를 들어: 최신 10 K 라인 스테이지 증가를 계산하면 다음과 같이 쓸 수 있습니다.

CLOSE_0:=CLOSE; //get the current K-line's closing price, and save the results to variable CLOSE_0. 
CLOSE_10:=REF(CLOSE,10); //get the pervious 10 K-lines' closing price, and save the results to variable CLOSE_10

(CLOSE_0-CLOSE_10)/CLOSE_10*100;//calculating the percentage of current K line's closing price compare with previous N periods of closing price's difference.

새로운 높은 가격

새로운 최고 가격은 현재 K 라인이 N 사이클의 최고 가격보다 크는지 여부에 의해 계산됩니다. 예를 들어: 현재 K 라인이 최신 10 K- 라인 최고 가격보다 크는지 여부를 계산하면 다음과 같이 쓸 수 있습니다.

HHV_10:=HHV(HIGH,10); //Get the highest price of latest 10 K-lines, which includes the current K-line.
HIGH>REF(HHV_10,1); //Judge whether the current K-line's highest price is greater than pervious K-lines' HHV_10 value.

대량 거래량 증가와 함께 가격 상승

예를 들어, 현재 K 라인의 종료 가격이 이전 10 K 라인의 종료 가격의 1.5 배인 경우, 즉 10 일 동안 가격이 50% 상승했으며 거래량은 이전 10 K 라인의 5 배 이상 증가했습니다. 이렇게 쓸 수 있습니다:

CLOSE_10:=REF(CLOSE,10); //get the 10th K-line closing price
IS_CLOSE:=CLOSE/CLOSE_10>1.5; //Judging whether the current K Line closing price is 1.5 times greater than the value of CLOSE_10 

VOL_MA_10:=MA(VOL,10); //get the latest 10 K-lines' average trading volume
IS_VOL:=VOL>VOL_MA_10*5; //Judging whether the current K-line's trading volume is 5 times greater than the value of VOL_MA_10

IS_CLOSE AND IS_VOL; //Judging whether the condition of IS_CLOSE and IS_VOL are both true.

가격 협소 쇼크 시장

좁은 쇼크 시장은 가격이 최근 기간 동안 특정 범위 내에서 유지된다는 것을 의미합니다. 예를 들어: 10 주기의 가장 높은 가격이 10 주기의 가장 낮은 가격을 빼면 현재 K-라인의 폐쇄 가격으로 나눈 결과는 0.05보다 작습니다.

HHV_10:=HHV(CLOSE,10); //Get the highest price in 10 cycles(including current K-line)
LLV_10:=LLV(CLOSE,10); //Get the lowest price in 10 cycles(including current K-line)

(HHV_10-LLV_10)/CLOSE<0.05; //Judging whether the difference between HHV_10 and LLV_10 divided by current k-line's closing price is less than 0.05.

이동 평균은 황소 시장을 나타냅니다.

이동 평균은 길고 짧은 방향을 나타냅니다. K 라인은 5,10,20,30,60 이동 평균 라인에 의해 지원되거나 저항됩니다. 이동 평균은 황소 시장 또는 곰 시장을 나타냅니다.

MA_5:=MA(CLOSE,5);  //get the moving average of 5 cycle closing price.
MA_10:=MA(CLOSE,10);//get the moving average of 10 cycle closing price.
MA_20:=MA(CLOSE,20);//get the moving average of 20 cycle closing price.
MA_30:=MA(CLOSE,30);//get the moving average of 30 cycle closing price.

MA_5>MA_10 AND MA_10>MA_20 AND MA_20>MA_30; //determine wether the MA_5 is greater than MA_10, and MA_10 is greater than MA_20, and MA_20 is greater than MA_30.

이전 높은 가격과 그 위치

이전 높은 가격의 위치와 위치를 얻기 위해, 당신은 FMZ 퀀트 API를 직접 사용할 수 있습니다.

HHV_20:=HHV(HIGH,20); //get the highest price of 20 cycle(including current K line)
HHVBARS_20:=HHVBARS(HIGH,20); //get the number of cycles from the highest price in 20 cycles to current K line
HHV_60_40:REF(HHV_20,40); //get the highest price between 60 cycles and 40 cycles.

가격 격차 점프

가격 격차는 두 K 라인의 가장 높고 가장 낮은 가격이 연결되어 있지 않은 경우입니다. 두 K 라인으로 구성되며 가격 격차는 미래의 가격 움직임의 지원 및 압력 포인트의 참조 가격입니다. 가격 격차가 발생하면 원래 방향과 함께 트렌드를 따라 가속화가 시작되었다고 가정 할 수 있습니다.

HHV_1:=REF(H,1); //get the pervious K line's highest price
LLV_1:=REF(L,1); //get the pervious K line's lowest price
HH:=L>HHV_1; //judging wether the current K line's lowest price is greater than pervious K line's highest price (jump up)
LL:=H<LLV_1; //judging wether the current K line's highest price is greater than pervious K line's lowest price (jump down)
HHH:=L/REF(H,1)>1.001; //adding additional condition, the bigger of the price gap, the stronger the signal (jump up)  
LLL:=H/REF(L.1)<0.999; //adding additional condition, the bigger of the price gap, the stronger the signal (jump down)  
JUMP_UP:HH AND HHH; //judging the overall condition, whether it is a jump up
JUMP_DOWN:LL AND LLL; //judging the overall condition, whether it is a jump down

공통 기술 지표

이동평균

img

통계적 관점에서, 이동 평균은 트렌딩 가격 궤도인 일일 가격의 수학적 평균이다. 이동 평균 시스템은 대부분의 분석가들이 사용하는 일반적인 기술적 도구이다. 기술적 관점에서, 그것은 기술 분석가의 심리적 가격에 영향을 미치는 요인이다. 사고 거래의 의사 결정 요인은 기술 분석가들에게 좋은 참조 도구이다. FMZ 퀀트 툴은 아래와 같이 다양한 유형의 이동 평균을 지원한다:

MA_DEMO:MA(CLOSE,5);   // get the moving average of 5 cycle
MA_DEMO:EMA(CLOSE,15); // get the smooth moving average of 15 cycle
MA_DEMO:EMA2(CLOSE,10);// get the linear weighted moving average of 10 cycle
MA_DEMO:EMAWH(CLOSE,50); // get the exponentially weighted moving average of 50 cycle
MA_DEMO:DMA(CLOSE,100);  // get the dynamic moving average of 100 cycle
MA_DEMO:SMA(CLOSE,10,3); // get the fixed weight of 3 moving average of closing price in 10 cycle
MA_DEMO:ADMA(CLOSE,9,2,30); // get the fast-line 2 and slow-line 30 Kaufman moving average of closing price in 9 cycle.

볼링거 밴드

img

볼링거 대역은 또한 통계 원리에 기초한다. 중간 레일은 N 일 이동 평균에 따라 계산되며 상부와 하부 레일은 표준 편차에 따라 계산된다. BOLL 채널이 폭에서 좁아지기 시작하면 가격이 점차 평균으로 돌아간다. BOLL 채널이 좁아지기 시작하면 시장이 변하기 시작한다. 가격이 상부 레일을 넘어서면 구매력이 향상된다는 것을 의미한다. 가격이 하부 레일을 넘어서면 판매력이 향상된다는 것을 나타낸다.

모든 기술 지표들 중에서 볼링거 밴드 계산 방법은 가장 복잡한 방법 중 하나이며, 중앙 궤도 (MB ), 상위 궤도 (UP ), 하위 궤도 (DN) 를 포함하는 통계에 표준편차의 개념을 소개합니다. 다행히 계산 세부 사항을 알아야 할 필요가 없습니다.

MID:MA(CLOSE,100); //calculating moving average of 100 cycle, call it Bollinger Bands middle trajectory   
TMP2:=STD(CLOSE,100); //calculating standard deviation of closing price of 100 cycle.
TOP:MID+2*TMP2; //calculating middle trajectory plus 2 times of standard deviation, call it upper trajectory
BOTTOM:MID-2*TMP2; //calculating middle trajectory plus 2 times of standard deviation, call it lower trajectory

MACD 지표

img

MACD 지표는 빠른 (단기) 및 느린 (장기) 이동 평균과 그 집계 및 분리를 사용하는 이중 평형 작업입니다. 이동 평균의 원칙에 따라 개발 된 MACD는 이동 평균이 종종 잘못된 신호를 방출한다는 결함을 제거하고 다른 좋은 측면의 효과를 유지합니다. 따라서 MACD 지표는 이동 평균의 추세와 안정성을 가지고 있습니다. 주식 구매 및 판매의 시기를 연구하고 주식 가격 변화를 예측하는 데 사용되었습니다. 다음과 같이 사용할 수 있습니다.

DIFF:EMA(CLOSE,10)-EMA(CLOSE,50); //First calculating the difference between short-term moving average and long-term moving average.
DEA:EMA(DIFF,10); //Then calculating average of the difference.

위는 양적 거래 전략의 개발에서 일반적으로 사용되는 전략 모듈입니다. 또한, 그보다 훨씬 더 있습니다. 위의 모듈 예를 통해, 당신은 또한 주관적 거래에서 가장 자주 사용하는 여러 거래 모듈을 구현할 수 있습니다. 방법은 동일합니다. 다음으로, 우리는 실행 가능한 내일 거래 전략을 쓰기 시작했습니다.

전략 작성

외환 현금 시장에서, HANS123라는 잘 알려진 전략이 있습니다. 그것의 논리는 기본적으로 시장 개장 후 K 라인의 수의 가장 높은 가격 또는 가장 낮은 가격을 통해 가격을 깨는지 판단합니다.

전략 논리

  • 오픈 후 30분 후에 시장에 진입할 준비가 되어 있습니다.

  • 열기 후 상단 레일 = 30분 높이;

  • 하부 레일 = 열기 후 30분 후

  • 가격이 상한을 넘으면 구매하고 포지션을 열고,

  • 가격이 하부 레일 아래로 떨어지면 판매자가 포지션을 개척합니다.

  • 내일 거래 전략, 종료 전에 종료;

전략 코드

// Data Calculation
Q:=BARSLAST(DATA<>REF(DATA,1))+1; //Calculating the number of period from 
the first K line of the current trading day to current k line, and assign the results to N 
HH:=VALUEWHEN(TIME=0930,HHV(H,Q)); //when time is 9:30, get the highest price of N cycles, and assign the results to HH
LL:=VALUEWHEN(TIME=0930,LLV(L,Q)); //When time is 9:30, get the lowest price of N cycles, and assign the results to LL

//Placing Orders
TIME>0930 AND TIME<1445 AND C>HH,BK; //If the time is greater than 9:30 and lesser than 14:45, and the closing price is greater than HH, opening long position.
TIME>0930 AND TIME<1445 AND C<LL,SK; //If the time is greater than 9:30 and lesser than 14:45, and the closing price is lesser than LL, opening short position.
TIME>=1445,CLOSEOUT; //If the time is greater or equal to 14:45, close all position.

//Filtering the signals
AUTOFILTER;  //opening the filtering the signals mechanism

요약하면

위에서 우리는 전략 모듈의 개념을 배웠습니다. 여러 일반적으로 사용되는 전략 모듈 사례를 통해 우리는 FMZ 퀀트 프로그래밍 도구에 대한 일반적인 아이디어를 얻었습니다. 전략 모듈을 작성하고 프로그래밍 논리 사고를 향상시키는 것을 배우는 것이 고급 양적 거래의 핵심 단계라고 할 수 있습니다. 마지막으로 FMZ 퀀트 도구를 사용하여 고전적인 외환 거래 전략에 따라 거래 전략을 구현했습니다.

다음 섹션에 대한 알림

아마도 일부 사람들에게는 여전히 약간의 혼란이 있습니다. 주로 코딩 부분 때문입니다. 걱정하지 마십시오, 우리는 이미 당신을 위해 그것을 생각했습니다. FMZ 퀀트 플랫폼에서, 초보자을위한 또 다른 더 쉬운 프로그래밍 도구가 있습니다. 그것은 시각 프로그래밍입니다, 빨리 배우자!

학교 밖 운동

  1. 주관적인 거래에서 가장 자주 사용하는 몇 가지 거래 모듈을 구현하려고 노력하십시오.

  2. FMZ 퀀트 플랫폼에서 M 언어를 사용하여 KDJ 인덱스 알고리즘을 구현하려고 노력하십시오.


더 많은