Chỉ báo kỹ thuật Heiken-Ashi: Indicator này có thực sự hiệu quả? - VNGoldStreet

Thời gian: 7/25/23, 9:55 PM

VN Gold Street - Heiken Ashi là gì?. Cùng với mô hình nến Nhật thì nến Heiken Ashi cũng là một trong những phát minh vĩ đại của người Nhật. Tuy nhiên, nến Heiken Ashi không phải đồ thị giá mà nó được sử dụng như một loại chỉ báo giúp trader xác định xu hướng.


chi-bao-ky-thuat-heiken-ashi:-indicator-nay-co-thuc-su-hieu-qua-1690271088-VN-Goldstreet
Nến Heiken Ashi dịch ra tiếng Việt có nghĩa là thanh trung bình, nến trung bình. Nến Heiken Ashi được phát minh bởi Munehisa Honma vào năm 1970 và có hình dạng gần giống với nến Nhật.
Nến Heiken Ashi gồm 2 phần thân nến và râu nến (bóng nến), cung cấp 4 mức giá quan trọng: cao nhất, thấp nhất, giá mở cửa và giá đóng cửa. Tuy nhiên, các mức giá này được tính theo công thức phức tạp hơn so với nến Nhật, vì nó còn liên quan đến mức giá trung bình của các phiên giao dịch trước đó.

Tương tự như đường trung bình động MA thì nến Heiken Ashi giúp làm mượt giá, loại bỏ bớt tín hiệu nhiễu giúp trader dễ dàng nhận biết xu hướng trên biểu đồ giá.

Công thức tính các mức giá của nến Heiken Ashi:
Mức giá mở cửa (Open) của nến Heiken Ashi được tính bằng trung bình của 2 mức giá mở cửa và đóng cửa của cây nến trước (phiên giao dịch trước).
  • Giá mở cửa (Open) = (Open of Pre. Bar + Close of Pre. Bar)/2
Mức giá đóng cửa (Close) được tính bằng trung bình cộng của 4 mức giá: mở cửa, đóng cửa, cao nhất, thấp nhất trong phiên giao dịch hiện tại.
  • Giá đóng cửa (Close) = (Open + Close + High + Low)/4
Mức giá cao nhất (High) là giá trị lớn nhất của 3 mức giá mở cửa, đóng cửa, mức cao nhất trong phiên giao dịch. 
  • Giá cao nhất (High) =  Max (High, Open, Close)
Mức giá thấp nhất (Low) là giá trị nhỏ nhất trong các mức giá mở cửa, đóng cửa, giá thấp nhất trong phiên giao dịch. 
  • Giá thấp nhất (Low) = Min (Low, Open, Close)
Mình sẽ tạm viết với logic sau đây:
Nếu nến Heiken hiện tại Open > Close (Nến heiken đỏ): SELL tại giá hiện tại. Đóng tất cả nếu xuất hiện nến Heiken Xanh
Nếu nến Heiken hiện tại Open > Close (Nến heiken xanh): NUY tại giá hiện tại. Đóng tất cả nếu xuất hiện nến Heiken Đỏ

Code đầy đủ sử dụng Heiken-Ashi vào lệnh:
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <Trade\Trade.mqh>
CTrade         ExtTrade;

double         open;
double         high;
double         low;
double         close;

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {
  }
void OnTick()
  {
   long volume = iVolume(_Symbol,PERIOD_CURRENT,0);
   if(volume > 1)
      return;
   OpenSell();
   OpenBuy();
  }

bool GetSignal(int i, double &o, double &h, double &l, double &c)
  {
   double op[];
   double hi[];
   double lo[];
   double cl[];
   int handle = iCustom(_Symbol,PERIOD_CURRENT,"Examples\\Heiken_Ashi");
   CopyBuffer(handle,0,i,1,op);
   o = NormalizeDouble(op[0],_Digits);
   CopyBuffer(handle,1,i,1,hi);
   h = NormalizeDouble(hi[0],_Digits);
   CopyBuffer(handle,2,i,1,lo);
   l = NormalizeDouble(lo[0],_Digits);
   CopyBuffer(handle,3,i,1,cl);
   c = NormalizeDouble(cl[0],_Digits);
   return true;
  }

void OpenSell()
  {
   bool res = GetSignal(0,open,high,low,close);
   if(open > close)
     {
      CloseAllOrdersBySide(_Symbol,POSITION_TYPE_BUY);
      double price = SymbolInfoDouble(_Symbol,SYMBOL_BID);
      ExtTrade.PositionOpen(_Symbol,ORDER_TYPE_SELL,0.01,price,0,0,"");
      if(ExtTrade.ResultOrder() > 0)
        {
         Print("OrderSend Sucessfull");
        }
      else
         Print("OrderSend failed with error #",GetLastError());
     }
   return;
  }
void OpenBuy()
  {
   bool res = GetSignal(0,open,high,low,close);
   if(open < close)
     {
      CloseAllOrdersBySide(_Symbol,POSITION_TYPE_SELL);
      double price = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
      ExtTrade.PositionOpen(_Symbol,ORDER_TYPE_BUY,0.01,price,0,0,"");
      if(ExtTrade.ResultOrder() > 0)
        {
         Print("OrderSend Sucessfull");
        }
      else
         Print("OrderSend failed with error #",GetLastError());
     }
   return;
  }
void CloseAllOrdersBySide(string symbol, int side)
  {
   int i=0;
   while(i<PositionsTotal())
     {
      bool odsl = OrderSelect(PositionGetTicket(i));
      if(PositionGetString(POSITION_SYMBOL) == symbol && PositionGetInteger(POSITION_TYPE) == side)
        {
         ExtTrade.PositionClose(PositionGetTicket(i),3);
         i--;
        }
      i++;
     }
  }
//+------------------------------------------------------------------+

Nếu có bất kỳ thắc mắc nào vui lòng liên hệ Telegram: @gfvietvd


Tin tức liên quan