TradingViet - Robot giao dịch (hay còn gọi là Expert Advisor - EA) sử dụng chỉ báo RSI (Relative Strength Index) và Stochastic Oscillator là một công cụ tự động hóa quá trình giao dịch trên thị trường tài chính, thường là thị trường ngoại hối (Forex). Trong bài viết này, chúng ta sẽ giới thiệu về robot giao dịch này và cách mà nó hoạt động.
- Chỉ báo RSI (Relative Strength Index): Đây là một chỉ báo kỹ thuật được phát triển bởi Welles Wilder, nó đo lường sự mạnh hoặc yếu của một cặp tiền tệ bằng cách so sánh lực mua và bán trên thị trường. RSI có giá trị từ 0 đến 100 và thường được sử dụng để xác định mức độ quá mua hoặc quá bán của một cặp tiền tệ
- Chỉ báo Stochastic Oscillator: Đây là một chỉ báo kỹ thuật khác được phát triển bởi George Lane, nó đo lường vị thế của một cặp tiền tệ so với mức giá trung bình của nó trong một khoảng thời gian nhất định. Stochastic Oscillator cũng có giá trị từ 0 đến 100 và thường được sử dụng để xác định điểm vào và điểm ra của một giao dịch.
Kết quả thu được khá tốt khi giải quyết được các vấn đề nhiễu trong khung nhỏ và điểm vào ra lệnh hợp lý. Năm 2023 với nhiều biến động mạnh mẽ:
Các bạn quan tâm vui lòng liên hệ:
Telegram: https://t.me/gfvietvd
Group Telegram: https://t.me/+i5QV6KNR4d9mOTY1
Robot giao dịch sử dụng RSI và Stochastic Oscillator thường sẽ có các tính năng như sau:
- Tích hợp đầy đủ các cặp tiền tệ và các khung thời gian: Robot này thường sẽ được thiết kế để giao dịch trên nhiều cặp tiền tệ và khung thời gian khác nhau.
- Tính năng tùy chỉnh: Người dùng có thể tùy chỉnh các cài đặt của robot để phù hợp với chiến lược giao dịch của họ.
- Tính năng tự động giao dịch: Robot này thường sẽ có khả năng tự động giao dịch dựa trên các tín hiệu từ RSI và Stochastic Oscillator.
- Tính năng bảo vệ vốn: Robot này thường sẽ có các cơ chế bảo vệ vốn để giảm rủi ro khi giao dịch.
- Tính năng ghi lại lịch sử giao dịch: Robot này thường sẽ có khả năng ghi lại lịch sử giao dịch để người dùng có thể theo dõi hiệu suất của nó.
Các nhà giao dịch có thể tùy chỉnh robot này để phù hợp với chiến lược giao dịch của họ và sử dụng nó như một công cụ hỗ trợ để tìm kiếm cơ hội giao dịch trong thị trường tài chính. Tuy nhiên, họ cũng cần phải hiểu rằng không có robot nào là hoàn hảo và luôn mang lại lợi nhuận, và rủi ro luôn tồn tại khi giao dịch trên thị trường tài chính.
Mình đã code một robot giao dịch sử dụng 2 chỉ báo này như sau:
input string input_value_setting = "---Input Value---";
input int inp_value_aa = 10; //Value aa
input int inp_value_bb = 120; //Value bb
input int inp_value_cc = 89; //Value cc
input double inp_volume_0 = 0.06;
input double inp_volume_1 = 0.11;
input double inp_volume_2 = 0.11;
input double inp_volume_3 = 0.05;
input double inp_volume_4 = 0.1;
input double inp_volume_5 = 0.11;
input double inp_volume_6 = 0.05;
input double inp_volume_7 = 0.04;
input double inp_volume_8 = 0.04;
input double inp_volume_9 = 0.01;
input double inp_volume_10 = 0.04;
input double inp_volume_11 = 0.02;
input double inp_volume_12 = 0.01;
input double inp_volume_13 = 0.01;
input string input_RSI = "---Input RSI---";
input int inp_rsi_period = 14;
input ENUM_APPLIED_PRICE inp_rsi_applied_price = PRICE_CLOSE;
input double inp_rsi_high = 69.7;
input double inp_rsi_low = 30.3;
input string input_stoch_rsi = "---Input StochRSI---";
input int inp_stoch_rsi_k = 3;
input int inp_stoch_rsi_d = 3;
input int inp_stoch_rsi_period_stoch = 14;
input int inp_stoch_rsi_period_rsi = 14;
input ENUM_APPLIED_PRICE inp_stoch_rsi_applied_price= PRICE_CLOSE;
input double inp_stoch_rsi_high = 80;
input double inp_stoch_rsi_low = 20;
input string input_bb = "---Input BolingerBand---";
input int inp_bb_period = 20;
input int inp_bb_deviation = 2;
input int inp_bb_shift = 0;
input ENUM_APPLIED_PRICE inp_bb_applied_price = PRICE_CLOSE;
input bool inp_bb_using = false;
bool CheckOverBuyRSI()
{
double rsiValue = GetRSIValue(1);
if(rsiValue <= inp_rsi_high)
return false;
return true;
}
bool CheckOverSellRSI()
{
double rsiValue = GetRSIValue(1);
if(rsiValue >= inp_rsi_low)
return false;
return true;
}
bool CheckOverBuyStochRSI()
{
double stockRSIValue_K = GetStockRSI(1,0);
double stockRSIValue_D = GetStockRSI(1,1);
if(stockRSIValue_K <= inp_stoch_rsi_high)
return false;
return true;
}
bool CheckOverSellStochRSI()
{
double stockRSIValue_K = GetStockRSI(1,0);
double stockRSIValue_D = GetStockRSI(1,1);
if(stockRSIValue_K >= inp_stoch_rsi_low)
return false;
return true;
}
void OpenSell()
{
if(iVolume(_Symbol,PERIOD_CURRENT,0) > 1)
return;
if(!CheckForSellOrder())
return;
last_price = Bid;
string comment = StringFormat("%s_%d",_Symbol,PeriodSeconds(PERIOD_CURRENT));
int ticket = OrderSend(_Symbol,OP_SELL,inp_volume_0,Bid,3,0,0,comment,12345678,0,clrRed);
if(ticket<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
void OpenBuy()
{
if(iVolume(_Symbol,PERIOD_CURRENT,0) > 1)
return;
if(!CheckForBuyOrder())
return;
last_price = Ask;
string comment = StringFormat("%s_%d",_Symbol,PeriodSeconds(PERIOD_CURRENT));
int ticket = OrderSend(_Symbol,OP_BUY,inp_volume_0,Ask,3,0,0,comment,12345678,0,clrRed);
if(ticket<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully");
}
void CloseAllOrders()
{
condition_1 = false;
int total = OrdersTotal();
int i=0;
while(i<total)
{
bool ost = OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
string comment = StringFormat("%s_%d",_Symbol,PeriodSeconds(PERIOD_CURRENT));
if(OrderComment() == comment)
{
bool odc = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,0);
if(!odc)
{
Print("Error in OrderClose. Error code=",GetLastError());
}
else
i--;
}
i++;
}
}