Làm thế nào để thực hiện các chiến lược bằng ngôn ngữ M
Trong bài viết trước, chúng tôi đã giải thích tiền đề thực hiện chiến lược giao dịch từ các khía cạnh giới thiệu ngôn ngữ M, ngữ pháp cơ bản, phương pháp thực hiện mô hình và phân loại mô hình. Trong bài viết này, chúng tôi sẽ tiếp tục phần trước, từ các mô-đun và công nghệ chiến lược thường được sử dụng.
Hãy suy nghĩ về nó, làm thế nào để bạn xây dựng một robot với các mảnh Lego? Bạn không thể luôn luôn từ trên xuống hoặc từ dưới xuống, kết hợp từng mảnh. Những người có một chút ý thức thông thường biết rằng họ nên đặt đầu, cánh tay, chân, cánh, vv của họ với nhau, và sau đó kết hợp chúng thành một robot hoàn chỉnh. Điều tương tự cũng đúng với việc viết chương trình, viết các chức năng cần thiết vào mô-đun chiến lược duy nhất, và sau đó kết hợp các mô-đun chiến lược riêng lẻ này thành một chiến lược giao dịch hoàn chỉnh. Dưới đây tôi sẽ liệt kê một số mô-đun chiến lược phổ biến:
Sự gia tăng giai đoạn là tính toán tỷ lệ phần trăm của giá đóng cửa dòng K hiện tại so sánh với N giai đoạn trước của sự khác biệt giá đóng cửa.
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.
Giá cao mới được tính bằng cách xem đường K hiện tại có lớn hơn giá cao nhất trong N chu kỳ hay không. Ví dụ: tính toán đường K hiện tại có lớn hơn giá cao nhất 10 đường K mới nhất hay không có thể viết:
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.
Ví dụ: Nếu giá đóng cửa dòng K hiện tại là 1,5 lần giá đóng cửa của 10 dòng K trước đó, có nghĩa là trong 10 ngày, giá đã tăng 50%; và khối lượng giao dịch cũng tăng hơn 5 lần so với 10 dòng K trước đó. có thể viết:
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.
Thị trường sốc hẹp có nghĩa là giá được duy trì trong một phạm vi nhất định trong giai đoạn gần đây. Ví dụ: Nếu giá cao nhất trong 10 chu kỳ trừ giá thấp nhất trong 10 chu kỳ, kết quả chia cho giá đóng K-line hiện tại là nhỏ hơn 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.
Moving Average chỉ ra hướng dài và ngắn, đường K được hỗ trợ hoặc kháng cự bởi đường trung bình động 5,10,20,30,60, Moving Average chỉ ra thị trường bò hoặc thị trường gấu. có thể viết:
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.
Để có được vị trí của giá cao trước đây và vị trí của nó, bạn có thể sử dụng FMZ Quant API trực tiếp. có thể viết:
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.
Khoảng cách giá là trường hợp mà giá cao nhất và thấp nhất của hai đường K không kết nối. Nó bao gồm hai đường K, và khoảng cách giá là giá tham chiếu của các điểm hỗ trợ và áp lực trong chuyển động giá trong tương lai. Khi một khoảng cách giá xảy ra, có thể giả định rằng một sự tăng tốc dọc theo xu hướng với hướng ban đầu đã bắt đầu. có thể viết:
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
Trung bình động
Từ quan điểm thống kê, trung bình động là trung bình số học của giá hàng ngày, đó là quỹ đạo giá xu hướng. Hệ thống trung bình động là một công cụ kỹ thuật phổ biến được sử dụng bởi hầu hết các nhà phân tích. Từ quan điểm kỹ thuật, nó là một yếu tố ảnh hưởng đến giá tâm lý của các nhà phân tích kỹ thuật.
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.
Bollinger Bands cũng dựa trên nguyên tắc thống kê. Đường ray giữa được tính theo trung bình động N ngày, và đường ray trên và dưới được tính theo độ lệch chuẩn. Khi kênh BOLL bắt đầu thay đổi từ rộng sang hẹp, có nghĩa là giá sẽ dần trở lại mức trung bình. Khi kênh BOLL thay đổi từ hẹp đến rộng, có nghĩa là thị trường sẽ bắt đầu thay đổi. Nếu giá tăng qua đường ray trên, có nghĩa là sức mua được tăng lên. Nếu giá giảm qua đường ray dưới, nó cho thấy sức bán được tăng lên.
Trong số tất cả các chỉ số kỹ thuật, phương pháp tính toán Bollinger Bands là một trong những phương pháp phức tạp nhất, giới thiệu khái niệm lệch chuẩn trong thống kê, liên quan đến quỹ đạo giữa (MB ), quỹ đạo trên (UP ) và quỹ đạo dưới (DN). may mắn thay, bạn không cần phải biết chi tiết tính toán, bạn có thể sử dụng nó trực tiếp trên nền tảng FMZ Quant như sau:
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
Chỉ số MACD là một hoạt động làm mịn đôi bằng cách sử dụng trung bình động nhanh (kết hợp ngắn hạn) và chậm (kết hợp dài hạn) và tổng hợp và tách chúng. Chỉ số MACD được phát triển theo nguyên tắc trung bình động loại bỏ khuyết điểm mà trung bình động thường phát ra tín hiệu sai, và cũng giữ lại hiệu ứng của khía cạnh tốt khác. Do đó, chỉ số MACD có xu hướng và sự ổn định của trung bình động. Nó được sử dụng để nghiên cứu thời gian mua và bán cổ phiếu và dự đoán sự thay đổi giá cổ phiếu. Bạn có thể sử dụng nó như sau:
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.
Các mô-đun giao dịch trên đây là mô-đun chiến lược được sử dụng phổ biến trong việc phát triển các chiến lược giao dịch định lượng. Ngoài ra, còn có nhiều hơn thế nữa. Thông qua các ví dụ mô-đun trên, bạn cũng có thể thực hiện một số mô-đun giao dịch mà bạn thường sử dụng trong giao dịch chủ quan. Các phương pháp là như nhau. Tiếp theo, chúng tôi bắt đầu viết một chiến lược giao dịch trong ngày khả thi.
Trong thị trường giao ngay ngoại hối, có một chiến lược nổi tiếng được gọi là HANS123. logic của nó về cơ bản là đánh giá liệu giá phá vỡ thông qua giá cao nhất hoặc thấp nhất của số lượng K dòng sau khi mở thị trường
Sẵn sàng đi vào thị trường sau 30 phút mở cửa;
Đường sắt trên = 30 phút sau khi mở;
Đường sắt dưới = 30 phút sau khi mở;
Khi giá vượt quá giới hạn trên, mua và mở vị trí;
Khi giá giảm xuống dưới đường sắt dưới, người bán mở vị trí.
Chiến lược giao dịch trong ngày, đóng trước khi đóng;
// 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
Trên đây chúng tôi đã học được khái niệm mô-đun chiến lược. Thông qua một số trường hợp mô-đun chiến lược thường được sử dụng, chúng tôi đã có một ý tưởng chung về các công cụ lập trình FMZ Quant, có thể nói rằng việc học viết các mô-đun chiến lược và cải thiện suy nghĩ logic lập trình là một bước quan trọng trong giao dịch định lượng tiên tiến. Cuối cùng, chúng tôi đã sử dụng công cụ FMZ Quant để thực hiện chiến lược giao dịch theo chiến lược giao dịch Forex cổ điển.
Có lẽ vẫn còn một số người bối rối, chủ yếu là vì phần mã hóa. Đừng lo lắng, chúng tôi đã nghĩ về điều đó cho bạn. Trên nền tảng FMZ Quant, có một công cụ lập trình thậm chí còn dễ dàng hơn cho người mới bắt đầu. Đó là lập trình trực quan, hãy học nó sớm!
Cố gắng thực hiện một số mô-đun giao dịch mà bạn sử dụng thường xuyên nhất trong giao dịch chủ quan.
Cố gắng thực hiện thuật toán chỉ số KDJ bằng ngôn ngữ M trên nền tảng FMZ Quant.