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
Nhật Ký Giao Dịch Thực Chiến của Phù Thủy Thị trường Tài Chính

Sách chia sẻ 05 tháng giao dịch thực tế trên thị trường tài chính, sử dụng Price Action và Mô hình Biểu đồ của Phù thủy trader Peter Brandt, người có gần 50 năm kinh nghiệm trading và đạt lợi nhuận bình quân 68% lợi nhuận mỗi năm
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

  • The Blade trong Kiến thức Trading - Kinh nghiệm Trading 70,301 Xem / 38 Trả lời
  • Mạc An trong Phân tích Forex - Vàng - Hàng hóa 1,651 Xem / 80 Trả lời
  • TraderViet News trong Chuyện bên lề 269 Xem / 1 Trả lời
  • DuongHuy trong Phân tích Forex - Vàng - Hàng hóa 453 Xem / 24 Trả lời
  • ngoi_sao_co_doc trong Phân tích Forex - Vàng - Hàng hóa 24,152 Xem / 83 Trả lời
  • Quíc Óp trong Phân tích Forex - Vàng - Hàng hóa 344 Xem / 3 Trả lời
  • Berkeley trong Phân tích Forex - Vàng - Hàng hóa 122 Xem / 2 Trả lời
  • LuTienSinh trong Phân tích Forex - Vàng - Hàng hóa 206 Xem / 3 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