Coder cần coder - hỏi gì đáp nấy

Coder cần coder - hỏi gì đáp nấy

Coder cần coder - hỏi gì đáp nấy

theone3000

Active Member
305
177
Chào các bác, em đang tập tành viết 1 con indicator để dùng, nhưng có 1 số vấn đề cơ bản không biết tìm như thế nào, nên tạo topic này nhờ các bác chỉ giúp, bên cạnh đó các bác nào đang code nhưng bị vướng chỗ nào đó cũng có thể hỏi trong topic này, từ những vấn đề đơn giản cho đến phức tạp khi code.
Mình đang tạo Alert cho một sự kiện, khi nến vừa kết thúc thì indicator kiểm tra các điều kiện này và gọi Alert. Phần chữ đỏ chưa biết làm nhờ các bác chỉ giúp. Mình đang đặt trong void OnChartEvent, cứ mỗi lần click chuột là alert hiện ra, không đúng như mong muốn của mình
Ví dụ các điều kiện của mình như vầy:

c
if ((Open[1]-Close[1])>0.00005 )
{
Comment(DoubleToString((Open[1]-Close[1]),5));
Alert ( "Nen 1 do");

}
if ((Close[1]-Open[1])>0.00005 )
{
Comment(DoubleToString((Close[1]-Open[1]),5));
Alert ("Nen 1 xanh");
 

Giới thiệu sách Trading hay
Phương Pháp Thực Chiến Hiệu Suất Cao Của Nhà Quán Quân Giao Dịch Tài Chính

Sách hướng dẫn phương pháp giao dịch hiệu suất cao của tác giả Robert Miner, người đã từng nhiều lần vô địch và đạt thứ hạng cao tại các cuộc thi trading toàn thế giới
Chào các bác, em đang tập tành viết 1 con indicator để dùng, nhưng có 1 số vấn đề cơ bản không biết tìm như thế nào, nên tạo topic này nhờ các bác chỉ giúp, bên cạnh đó các bác nào đang code nhưng bị vướng chỗ nào đó cũng có thể hỏi trong topic này, từ những vấn đề đơn giản cho đến phức tạp khi code.
Mình đang tạo Alert cho một sự kiện, khi nến vừa kết thúc thì indicator kiểm tra các điều kiện này và gọi Alert. Phần chữ đỏ chưa biết làm nhờ các bác chỉ giúp. Mình đang đặt trong void OnChartEvent, cứ mỗi lần click chuột là alert hiện ra, không đúng như mong muốn của mình
Ví dụ các điều kiện của mình như vầy:

c
if ((Open[1]-Close[1])>0.00005 )
{
Comment(DoubleToString((Open[1]-Close[1]),5));
Alert ( "Nen 1 do");

}
if ((Close[1]-Open[1])>0.00005 )
{
Comment(DoubleToString((Close[1]-Open[1]),5));
Alert ("Nen 1 xanh");
Bạn sử dụng void này thay cho OnChartEvent nhé, có gì sai bạn ktra lại hén, do mình code EA thì xài cái này, chưa code indicator bao giờ:

void start()
{
return;
};
Còn để check nến, bạn sử đụng doạn này nhé:

Đầu tiên là lấy dữ liệu nến hiện tại:
double GiaOpenCurrent;
double GiaCloseCurrent;
double GiaOpenPrevious;
double GiaClosePrevious
GiaOpenCurrent=iOpen(Symbol(),timeframe,1);
GiaCloseCurrent=iClose(Symbol(),timeframe,1);
if (GiaOpenPrevious==0) GiaOpenPrevious=GiaOpenCurrent;
if (GiaClosePrevious==0) GiaOpenPrevious=GiaCloseCurrent;

if (GiaOpenCurrent!=GiaOpenPrevious || GiaCloseCurrent!=GiaOpenPrevious)
{

GiaOpenPrevious=GiaOpenCurrent;
GiaOpenPrevious=GiaCloseCurrent;
Đoạn code bạn muốn thực thi khi nến thay đổi ở đây nhé;
};

P/s: Mình có sửa lại tí nhé, nhầm xíu
 
Bạn làm 1 con EA như sau:


datetime LastAlertTime = -999999;
string AlertText ="";
void OnTick()
{

if (Open[1]>Close[1] )
{

AlertText= "Nen 1 do";
}
if (Close[1]>Open[1])
{

AlertText= "Nen 1 xanh";
}
if ( iTime(NULL,0,0) > LastAlertTime )
{


Alert(AlertText);
LastAlertTime = iTime(NULL,0,0);
}

}
 
Bạn sử dụng void này thay cho OnChartEvent nhé, có gì sai bạn ktra lại hén, do mình code EA thì xài cái này, chưa code indicator bao giờ:

void start()
{
return;
};
Còn để check nến, bạn sử đụng doạn này nhé:

Đầu tiên là lấy dữ liệu nến hiện tại:
double GiaOpenCurrent;
double GiaCloseCurrent;
double GiaOpenPrevious;
double GiaClosePrevious
GiaOpenCurrent=iOpen(Symbol(),timeframe,1);
GiaCloseCurrent=iClose(Symbol(),timeframe,1);
if (GiaOpenPrevious==0) GiaOpenPrevious=GiaOpenCurrent;
if (GiaClosePrevious==0) GiaOpenPrevious=GiaCloseCurrent;

if (GiaOpenCurrent!=GiaOpenPrevious || GiaCloseCurrent!=GiaOpenPrevious)
{

GiaOpenPrevious=GiaOpenCurrent;
GiaOpenPrevious=GiaCloseCurrent;
Đoạn code bạn muốn thực thi khi nến thay đổi ở đây nhé;
};

P/s: Mình có sửa lại tí nhé, nhầm xíu
Hàm void OnStart() chỉ dùng trong chạy script mà bác "The OnStart() function is the Start event handler, which is automatically generated only for running scripts." Nghĩa là khi click vào nó chỉ chạy 1 lần rồi thôi.
 
Bạn làm 1 con EA như sau:


datetime LastAlertTime = -999999;
string AlertText ="";
void OnTick()
{

if (Open[1]>Close[1] )
{

AlertText= "Nen 1 do";
}
if (Close[1]>Open[1])
{

AlertText= "Nen 1 xanh";
}
if ( iTime(NULL,0,0) > LastAlertTime )
{


Alert(AlertText);
LastAlertTime = iTime(NULL,0,0);
}

}
Bác có cách nào áp dụng cho indicator không, nếu dùng void OnTick() thì nó check liên tục khi tick thay đổi thì phải? Mình chỉ muốn khi nến kết thúc thì indicator mới kiểm tra các điều kiện và báo alert nếu điều kiện thỏa
 
Bác có cách nào áp dụng cho indicator không, nếu dùng void OnTick() thì nó check liên tục khi tick thay đổi thì phải? Mình chỉ muốn khi nến kết thúc thì indicator mới kiểm tra các điều kiện và báo alert nếu điều kiện thỏa
 
Hàm void OnStart() chỉ dùng trong chạy script mà bác "The OnStart() function is the Start event handler, which is automatically generated only for running scripts." Nghĩa là khi click vào nó chỉ chạy 1 lần rồi thôi.
k bạn :) vẫn chạy đc trong EA nhé, mình chạy bt chả có gì, nó quay vòng liên tục, k biết indicator thì nó ntn
 
k bạn :) vẫn chạy đc trong EA nhé, mình chạy bt chả có gì, nó quay vòng liên tục, k biết indicator thì nó ntn
mình để vào void OnStart() rồi, giờ nó alert liên tục không biết làm sao, để đơn giản mình vẫn để các điều kiện alrt như cũ, tập trung vào việc làm sao để nó chỉ alert khi xuất hiện nến mới thôi.
 

Đính kèm

  • 1.mq4
    1.9 KB · Xem: 3
mình để vào void OnStart() rồi, giờ nó alert liên tục không biết làm sao, để đơn giản mình vẫn để các điều kiện alrt như cũ, tập trung vào việc làm sao để nó chỉ alert khi xuất hiện nến mới thôi.
Èo, thì
mình để vào void OnStart() rồi, giờ nó alert liên tục không biết làm sao, để đơn giản mình vẫn để các điều kiện alrt như cũ, tập trung vào việc làm sao để nó chỉ alert khi xuất hiện nến mới thôi.
Bạn xài code của mình check cho khỏe nhé :) chứ mình k bao giờ xài lấy giờ cả
 
Èo, thì

Bạn xài code của mình check cho khỏe nhé :) chứ mình k bao giờ xài lấy giờ cả
Mình xài đoạn code của bác rồi nhưng nó vẫn alert liên tục
void OnStart()
{
double GiaOpenCurrent;
double GiaCloseCurrent;
double GiaOpenPrevious;
double GiaClosePrevious;
GiaOpenCurrent=iOpen(Symbol(),0,1);
GiaCloseCurrent=iClose(Symbol(),0,1);
if (GiaOpenPrevious==0) GiaOpenPrevious=GiaOpenCurrent;
if (GiaClosePrevious==0) GiaOpenPrevious=GiaCloseCurrent;
if (GiaOpenCurrent!=GiaOpenPrevious || GiaCloseCurrent!=GiaOpenPrevious)
{
GiaOpenPrevious=GiaOpenCurrent;
GiaOpenPrevious=GiaCloseCurrent;
}
if ((GiaOpenCurrent-GiaCloseCurrent)>0.00005 )
{
Comment(DoubleToString((GiaOpenCurrent-GiaCloseCurrent),5));
Alert ( "Nen 1 do");

}
if ((GiaCloseCurrent-GiaOpenCurrent)>0.00005 )
{
Comment(DoubleToString((GiaCloseCurrent-GiaOpenCurrent),5));
Alert ("Nen 1 xanh");

}
return;
}
 

Đính kèm

  • 3.mq4
    3 KB · Xem: 0
tham khao cai nay nhe

Mã:
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
  
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

   if(prev_calculated>0 && rates_total > prev_calculated) {
  
   if ((Open[1]-Close[1])>0.00005 )
   {
   Comment(DoubleToString((Open[1]-Close[1]),5));
   Alert ( "Nen 1 do");
  
   }
  
   if ((Close[1]-Open[1])>0.00005 )
   {
   Comment(DoubleToString((Close[1]-Open[1]),5));
   Alert ("Nen 1 xanh");
   }
  
   }
  
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 

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

  • Nhật Hoài trong Lập trình MQL - Expert Advisor - Indicator 160,736 Xem / 1,106 Trả lời
  • Mạc An trong Phân tích Forex - Vàng - Hàng hóa 819 Xem / 39 Trả lời
  • DuongHuy trong Phân tích Forex - Vàng - Hàng hóa 352 Xem / 23 Trả lời
  • haruking trong Kiến thức Trading - Kinh nghiệm Trading 31,512 Xem / 112 Trả lời
  • captainfx trong Chuyện bên lề 566 Xem / 3 Trả lời
  • DuongHuy trong Phân tích Bitcoin - Altcoins - Cryptocurrency 68,899 Xem / 107 Trả lời
  • Tín Phong trong Phân tích Chứng khoán Việt Nam 85,355 Xem / 279 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