Giao dịch thuật toán Forex: Một câu chuyện thực tế cho các kỹ sư phần mềm!

Giao dịch thuật toán Forex: Một câu chuyện thực tế cho các kỹ sư phần mềm!

Giao dịch thuật toán Forex: Một câu chuyện thực tế cho các kỹ sư phần mềm!

Le Hue Truong

Editor
Trial mod
7,217
32,341
Rogelio Nicolas Mengual là một kỹ sư đa năng, tích cực và năng động với hơn 12 năm kinh nghiệm làm việc trong nhiều ngôn ngữ lập trình, khuôn khổ và nền tảng.

Anh thích tham gia những thử thách mới và không ngừng nỗ lực học hỏi những kỹ năng mới.

Giao-dich-thuat-toan-Forex-Mot-cau-chuyen-thuc-te-cho-cac-ky-su-phan-mem-TraderViet1.png

Sau đây là chia sẻ của nhà phát triển phần mềm Rogelio về trải nghiệm đầu tiên của anh ấy khi giao dịch Forex theo thuật toán nhé!

***

Như bạn có thể biết, thị trường Forex (ngoại hối) được sử dụng để giao dịch các cặp tiền tệ. Nhưng bạn có thể không biết rằng, đó là thị trường có tính thanh khoản cao nhất thế giới.

Vài năm trước, do sự tò mò của mình, tôi đã bước những bước đầu tiên vào thế giới giao dịch thuật toán Forex bằng cách tạo một tài khoản demo và chơi mô phỏng (với tiền giả) trên nền tảng giao dịch MetaTrader4.

Giao-dich-thuat-toan-Forex-Mot-cau-chuyen-thuc-te-cho-cac-ky-su-phan-mem-TraderViet2.png


Sau một tuần "giao dịch", tôi gần như đã tăng gấp đôi số tiền của mình. Được thúc đẩy bởi thành công khi tự mình giao dịch thuật toán, tôi quyết định sẽ tìm hiểu sâu hơn và cuối cùng, tôi đã đăng ký thành viên trên một số diễn đàn FX. Chẳng bao lâu, tôi đã dành hàng giờ để đọc về các hệ thống giao dịch theo thuật toán (các bộ quy tắc xác định xem bạn nên mua hay bán), các chỉ báo tuỳ chỉnh (custom indicator), tâm lý thị trường và nhiều thứ khác.

Khách hàng đầu tiên của tôi


Vào khoảng thời gian này, tình cờ, tôi nghe nói rằng có người đang cố gắng tìm kiếm một nhà phát triển phần mềm để tự động hoá một hệ thống giao dịch đơn giản. Chợt nhớ về những ngày tháng còn học đại học, tôi đã được học về lập trình trong Java (threads, semaphores, vv...). Tôi nghĩ, hệ thống tự động này không thể phức tạp hơn nhiều so với những gì tôi được học trong khoá học khoa học dữ liệu nâng cao, nên tôi đã mạnh dạn liên hệ về công việc và đăng ký tham gia.

Khách hàng muốn phần mềm giao dịch theo thuật toán được xây dựng bằng MQL4, một ngôn ngữ lập trình chức năng được sử dụng trên MT4.

Vai trò của nền tảng giao dịch (trong trường hợp này là MT4) là cung cấp kết nối với Forex broker. Sau đó, broker sẽ cung cấp một nền tảng với thông tin theo thời gian thực về thị trường và thực hiện các lệnh mua/bán của bạn. Đối với những độc giả chưa quen với giao dịch Forex, thì đây là thông tin được cung cấp bởi nguồn cấp dữ liệu:

Giao-dich-thuat-toan-Forex-Mot-cau-chuyen-thuc-te-cho-cac-ky-su-phan-mem-TraderViet3.png


Thông qua MT4, bạn có thể truy cập tất cả dữ liệu này với các chức năng nội bộ, có thể truy cập trong các khung thời gian khác nhau như: M1, M5, M15, M30, H1, H4, D1, W1, MN.

Sự chuyển động của giá hiện tại được gọi là một tick. Nói cách khác, một tick là sự thay đổi trong giá bid hoặc ask cho một cặp tiền tệ. Trong thời gian thị trường hoạt động tích cực, mỗi giây có thể biến động nhiều tick. Trong các phiên ít biến động, vài phút trôi qua mà chẳng nhúch nhích tick nào. Có thể nói, tick chính là nhịp tim của một robot thị trường tiền tệ.

Khi bạn đặt lệnh thông qua một nền tảng như vậy, bạn sẽ mua hoặc bán một khối lượng nhất định của một loại tiền tệ nhất định. Bạn cũng có thể đặt giới hạn dừng lỗ và chốt lời cho mình. Giới hạn dừng lỗ là số pip tối đa mà bạn có thể chấp nhận đánh mất trước khi từ bỏ một giao dịch. Còn giới hạn chốt lời là số pip mà bạn sẽ bỏ túi khi giá di chuyển theo hướng có lợi cho bạn.

Các đặc điểm giao dịch theo thuật toán của khách hàng rất đơn giản: họ muốn có một robot Forex dựa trên hai chỉ báo. Về cơ bản, các chỉ báo rất hữu ích khi cố gắng xác định trạng thái thị trường và đưa ra quyết định giao dịch, vì chúng dựa trên dữ liệu trong quá khứ. Nhiều chỉ báo được tích hợp sẵn trong MT4. Tuy nhiên, các chỉ báo mà khách hàng của tôi quan tâm lại đến từ một hệ thống giao dịch tuỳ chỉnh.

Họ muốn trade mỗi khi hai trong số các chỉ báo tuỳ chỉnh này giao nhau và chỉ tạo thành một góc nhất định.

Giao-dich-thuat-toan-Forex-Mot-cau-chuyen-thuc-te-cho-cac-ky-su-phan-mem-TraderViet4.png


Thực hành


Tôi đã xắn tay áo lên, biết rằng các chương trình MQL4 có cấu trúc như sau:
  • [Preprocessor Directives]
  • [External Parameters]
  • [Global Variables]
  • [Init Function]
  • [Deinit Function]
  • [Start Function]
  • [Custom Functions]
Start Function là trung tâm của mọi chương trình MQL4 vì nó được thực thi mỗi khi thị trường di chuyển (hàm này sẽ thực thi một lần trên mỗi tick). Điều này được áp dụng trên bất kể khung thời gian bạn đang sử dụng.

Để giải quyết vấn đề này, tôi đã buộc hàm thực thi một lần trên mỗi đơn vị thời gian:
int start()
{ if(currentTimeStamp == Time[0]) return (0);

currentTimeStamp = Time[0];

...
[TBODY] [/TBODY]
Nhận các giá trị của các indicator:
// Loading the custom indicator
extern string indName = "SonicR Solid Dragon-Trend (White)";
double dragon_min;
double dragon_max;
double dragon;
double trend;
int start()
{

// Updating the variables that hold indicator values
actInfoIndicadores();

….
string actInfoIndicadores()
{
dragon_max=iCustom(NULL, 0, indName, 0, 1);
dragon_min=iCustom(NULL, 0, indName, 1, 1);
dragon=iCustom(NULL, 0, indName, 4, 1);
trend=iCustom(NULL, 0, indName, 5, 1);
}
[TBODY] [/TBODY]
Logic quyết định, bao gồm giao điểm của các chỉ báo và góc giao cắt của chúng:
int start()
{

if(ticket==0)
{
if (dragon_min > trend && (ordAbierta== "OP_SELL" || primeraOP == true) && anguloCorrecto("BUY") == true && DiffPrecioActual("BUY")== true ) {
primeraOP = false;
abrirOrden("OP_BUY", false);
}
if (dragon_max < trend && (ordAbierta== "OP_BUY" || primeraOP == true) && anguloCorrecto("SELL") == true && DiffPrecioActual("SELL")== true ) {
primeraOP = false;
abrirOrden("OP_SELL", false);
}
}
else
{
if(OrderSelect(ticket,SELECT_BY_TICKET)==true)
{
datetime ctm=OrderCloseTime();
if (ctm>0) {
ticket=0;
return(0);
}
}
else
Print("OrderSelect failed error code is",GetLastError());

if (ordAbierta == "OP_BUY" && dragon_min <= trend ) cerrarOrden(false);
else if (ordAbierta == "OP_SELL" && dragon_max >= trend ) cerrarOrden(false);
}
}
[TBODY] [/TBODY]

Gửi lệnh:
void abrirOrden(string tipoOrden, bool log)
{
RefreshRates();
double volumen = AccountBalance() * point;
double pip = point * pipAPer;
double ticket = 0;
while( ticket <= 0)
{ if (tipoOrden == "OP_BUY") ticket=OrderSend(simbolo, OP_BUY, volumen, Ask, 3, 0/*Bid - (point * 100)*/, Ask + (point * 50), "Orden Buy" , 16384, 0, Green);
if (tipoOrden == "OP_SELL") ticket=OrderSend(simbolo, OP_SELL, volumen, Bid, 3, 0/*Ask + (point * 100)*/, Bid - (point * 50), "Orden Sell", 16385, 0, Red);
if (ticket<=0) Print("Error abriendo orden de ", tipoOrden , " : ", ErrorDescription( GetLastError() ) );
} ordAbierta = tipoOrden;

if (log==true) mostrarOrden();
}
[TBODY] [/TBODY]

Nếu quan tâm, bạn có thể tìm đọc code hoàn chỉnh, có thể chạy được trên GitHub.

Backtesting


Khi tôi đã xây dựng hệ thống giao dịch theo thuật toán của mình, tôi muốn biết:
  1. Liệu nó có hoạt động phù hợp hay không và;
  2. Liệu chiến lược giao dịch Forex mà nó sử dụng có tốt hay không?
Backtesting là quá trình kiểm tra một hệ thống cụ thể (tự động hoặc không) theo các điều kiện thị trường trong quá khứ. Nói cách khác, bạn sẽ kiểm tra hệ thống của mình bằng cách sử dụng quá khứ làm proxy cho hiện tại.

MT4 đi kèm với một công cụ hỗ trợ backtest một chiến lược giao dịch Forex (ngày nay, còn có nhiều công cụ chuyên nghiệp hơn cung cấp nhiều chức năng hơn).

Sau khi so sánh hành động của chương trình với các mức giá trước đây, bạn sẽ biết rõ liệu chương trình có đang hoạt động chính xác hay không.

Tuy nhiên, các chỉ báo mà khách hàng đã chọn, cùng với logic quyết định, KHÔNG mang lại lợi nhuận


Từ việc backtesting, tôi đã kiểm tra tỷ lệ sinh lời của robot FX trong một số khoảng thời gian ngẫu nhiên.

Dưới đây là kết quả sau khi chạy chương trình qua cửa sổ M15 cho 164 hoạt động:

Giao-dich-thuat-toan-Forex-Mot-cau-chuyen-thuc-te-cho-cac-ky-su-phan-mem-TraderViet5.png


Lưu ý rằng, số dư tài khoản của chúng ta (đường màu xanh lam) đã kết thúc ở dưới mốc khởi điểm.

Tuy nhiên, việc kết luận một hệ thống "có lãi" hoặc "không có lãi" không phải lúc nào cũng chính xác. Thông thường, các hệ thống có (hoặc không có) lợi nhuận trong một khoảng thời gian dựa trên "tâm trạng" của thị trường, có thể tuân theo một số mô hình biểu đồ:

Giao-dich-thuat-toan-Forex-Mot-cau-chuyen-thuc-te-cho-cac-ky-su-phan-mem-TraderViet6.png


Tối ưu hoá các tham số, và sự dối trá của nó


Mặc dù backtesting khiến tôi cảnh giác về tính hữu dụng của robot FX này, nhưng tôi đã bị hấp dẫn khi bắt đầu tìm hiểu các thông số bên ngoài của nó và nhận thấy sự khác biệt lớn trong tỷ lệ sinh lời tổng thể. Khoa học đặc biệt này được gọi là "Tối ưu hoá các tham số".

Tôi đã thực hiện một số thử nghiệm sơ bộ để thử và suy ra tầm quan trọng của các thông số bên ngoài đối với tỷ lệ sinh lời, và đưa ra kết quả như sau:

Giao-dich-thuat-toan-Forex-Mot-cau-chuyen-thuc-te-cho-cac-ky-su-phan-mem-TraderViet7.png


Hay thu gọn bớt là như thế này:

Giao-dich-thuat-toan-Forex-Mot-cau-chuyen-thuc-te-cho-cac-ky-su-phan-mem-TraderViet8.png


Giao-dich-thuat-toan-Forex-Mot-cau-chuyen-thuc-te-cho-cac-ky-su-phan-mem-TraderViet9.png


Bạn có thể nghĩ (như tôi từng nghĩ) rằng bạn nên sử dụng Tham số A. Nhưng quyết định không đơn giản như vẻ ngoài của nó. Cụ thể, hãy lưu ý đến tính không thể đoán trước của Tham số A: đối với các giá trị lỗi nhỏ, lợi nhuận của nó thay đổi đáng kể. Hay nói cách khác, Tham số A rất có thể dự đoán quá mức các kết quả trong tương lai vì bất kỳ sự không chắc chắn hay thay đổi nào cũng sẽ dẫn đến hiệu suất kém hơn.

Nhưng quả thật, tương lai không hề chắc chắn! Và do đó, lợi nhuận của Tham số A cũng không chắc chắn. Trên thực tế, sự lựa chọn tốt nhất là dựa vào "sự không thể đoán trước". Thông thường, một tham số có lợi nhuận tối đa thấp hơn nhưng lại có khả năng dự đoán cao hơn (tức là ít biến động hơn) sẽ được ưu tiên hơn một tham số có lợi nhuận cao, nhưng khả năng dự đoán kém.

Điều duy nhất bạn có thể chắc chắn là bạn không biết trước tương lai của thị trường và việc nghĩ rằng bạn biết thị trường sẽ hoạt động như thế nào dựa trên dữ liệu trong quá khứ là một sai lầm. Đôi khi, bạn phải thừa nhận "sự khôn lường" này trong các dự đoán Forex của mình.

Điều này không nhất thiết có nghĩa là chúng ta nên sử dụng Tham số B, bởi vì ngay cả với lợi nhuận thấp hơn, Tham số A cũng hoạt động tốt hơn Tham số B; điều này chỉ để bạn thấy rằng việc Tối ưu hoá các tham số có thể dẫn đến việc phóng đại các kết quả có thể xảy ra trong tương lai khi thực hiện backtesting.

Cân nhắc giao dịch thuật toán Forex


Kể từ trải nghiệm giao dịch Forex theo thuật toán đầu tiên đó, tôi đã xây dựng một số hệ thống giao dịch tự động cho khách hàng và tôi có thể nói với bạn rằng, luôn có chỗ để khám phá và thực hiện phân tích ngoại hối sâu hơn.

Ví dụ, gần đây, tôi đã xây dựng một hệ thống dựa trên việc tìm kiếm cái gọi là chuyển động của "Big Fish", tức là, thay đổi số pip cực lớn trong các đơn vị thời gian rất rất nhỏ. Đây là bộ môn khoa học làm tôi mê mẩn.

Xây dựng hệ thống mô phỏng FX của riêng bạn là một lựa chọn tuyệt vời để tìm hiểu thêm về giao dịch thị trường Forex. Chẳng hạn, bạn có thể cố gắng giải mã phân phối xác suất của các thay đổi giá dưới dạng hàm biến động trên một thị trường (giả sử là EUR/USD) và có thể tạo mô hình mô phỏng Monte Carlo bằng cách sử dụng phân phối theo trạng thái biến động, sử dụng bất kỳ độ chính xác nào mà bạn muốn. Tôi sẽ để đây như một bài thực hành cho những độc gải nào quan tâm.

Thế giới Forex đối khi có thể choáng ngợp, nhưng tôi hy vọng rằng bài viết này đã cung cấp cho bạn một số điều thú vị về cách bắt đầu xây dựng chiến lược giao dịch của riêng bạn.

Nguồn: topal
Đừng quên THẢ TIM, SHARE VÀ COMMENT để ủng hộ mình nhiều hơn nữa nhé!! Nice day cả nhà ;););)
 

Giới thiệu sách Trading hay
Phương Pháp VPA - Kỹ Thuật Nhận Diện Dòng Tiền Thông Minh bằng Hành Động Giá kết hợp Khối Lượng Giao Dịch

Phương pháp VPA - Volume Price Analysis - là phương pháp Price Action hướng dẫn ĐỌC GIÁ / NẾN kết hợp với KHỐI LƯỢNG GIAO DỊCH để tìm ra hướng đi của DÒNG TIỀN THÔNG MINH
Chỉnh sửa lần cuối:
Mình cũng nghĩ như mọi người thị trường là ngẫu nhiên, mình đã thử nhiều chiến thuật, tối ưu nhiều tham số, và nó chỉ đúng trong khoảng thời gian nhất định rồi sau đó thua sạch.
 
MT4 áp đặt một số điều kiện vào thị trường nên không thể nói thị trường biến động hoàn toàn ngẫu nhiên !:D Một hệ thống giao dịch khách quan đều có thể xây dựng thuật toán để giao dịch ! ( tôi nghĩ vậy , rất tiếc là tôi không biết gì về lập trình nên không thể chứng minh suy nghĩ của mình :oops: .)
 

BÌNH LUẬN MỚI NHẤT

  • Mạc An trong Phân tích Forex - Vàng - Hàng hóa 938 Xem / 70 Trả lời
  • Quíc Óp trong Phân tích Forex - Vàng - Hàng hóa 214 Xem / 14 Trả lời
  • DuongHuy trong Phân tích Forex - Vàng - Hàng hóa 246 Xem / 22 Trả lời
  • AdBlock Detected

    We get it, advertisements are annoying!

    Sure, ad-blocking software does a great job at blocking ads, but it also blocks useful features of our website. For the best site experience please disable your AdBlocker.

    Back
    Bên trên