Cách gửi tin nhắn từ MT4 tới Telegram Channel qua Telegram bot

Cách gửi tin nhắn từ MT4 tới Telegram Channel qua Telegram bot

Cách gửi tin nhắn từ MT4 tới Telegram Channel qua Telegram bot
nhớ ngày đầu mới code, chỉ vì quên gọi RefreshRates mà close all mãi k dc. Do lúc đó sàn còn instant order.
Để làm dc 1 con hàng phức tạp hơn khả năng của mình thì nên chẻ nhỏ công việc ra rồi dùng script viết từng đoạn nhỏ code và test.
Chứ ham viết 1 lần, gom thành 1 đống thì khỏi debug luôn
 
Mình mới tập code; hiện đang có ý định làm 1 đoạn EA quét và duplicate 1 lệnh mới (vào) thành 3 lệnh (thêm 02 lệnh nữa) để tiện việc quản lý lệnh (TP nhiều lần).
Các bác có kinh nghiệm mách giúp mình cách nào để đánh dấu 1 lệnh đã được xử lý (tức là đã thực hiện việc duplicate rồi) để k bị nhân lệnh nhiều lần với ạ. Hiện mình chưa xử lý được vấn đề này nên lệnh bị nhân bản nhiều lần ạ.
Thanks các bác!
 
Mình mới tập code; hiện đang có ý định làm 1 đoạn EA quét và duplicate 1 lệnh mới (vào) thành 3 lệnh (thêm 02 lệnh nữa) để tiện việc quản lý lệnh (TP nhiều lần).
Các bác có kinh nghiệm mách giúp mình cách nào để đánh dấu 1 lệnh đã được xử lý (tức là đã thực hiện việc duplicate rồi) để k bị nhân lệnh nhiều lần với ạ. Hiện mình chưa xử lý được vấn đề này nên lệnh bị nhân bản nhiều lần ạ.
Thanks các bác!
1. Tại sao phải quét 1 lệnh để mở hai lệnh kia trong khi có thể mở một lúc cả ba lệnh ? Xử lí ko tốt khi chương trình khởi động lại nó lại đúp đến vô cùng rất nguy hiểm
2. Nếu trường hợp bắt buộc phải làm thế thì tùy vào trường hợp:
2.1 Nếu lệnh đầu tiên do EA vào lệnh tự động thì nên mở sau khi xét kết quả của lệnh đầu tiên.
Vd: if( điều kiện mở lệnh)
{
If(ordersend(......) > 0) // Mở lệnh 1 ok
{
// Mở hai lệnh kia
}
}
2.2 Nếu lệnh đầu vào bằng tay thì phải xác định được nó và kiếm gì đó lưu lại số ticket của lệnh tay sau khi đúp rồi để không đúp tiếp.
 
Ah tưởng phức tạp, có phải là bạn vô lệnh 0.1 lot nếu thua (đã đóng lệnh) thì lệnh tiếp theo là 0.2 lot (đóng lệnh) thua, lên 0.4 (thua). Quay lại 0.1 hở.
Thế thì viết từng ý một: giả sử n = 3 (số lần lặp), volume = 0.1 (input),
sử dụng b = volume() cho lệnh order => done lệnh đầu.
1. Sử dụng Orderselect -> Dùng history mode. -> ra số lot + số tiền.
lúc này gọi số lot ghi được đó là a
2. Chọn hàm if nếu số lot trả về (a) = volume, số tiền < 0 => tăng lên b = 2*volume
3. Tương tự cho lần 3: số lot trả về (a) = 2*volume, số tiền <0 => b = 4*volume
4. Gọi lai last order (giả sử thua lần 3 là a = 4*volume)
5. Gán thêm điều kiện trả về 0.1 bằng cách if( a = 4*volume), b = volume
NOTE: Bạn tham khảo cái code gửi tn telegram để xem khống chế việc gọi last order nha :D
Thực ra đây là code viết thủ công cho size nhỏ. Nhưng đơn giản code cũng chỉ phục vụ trade, nên việc quan trọng là càng đơn giản, dễ đọc dễ sửa càng tốt.
Chúc bạn thành công. Ah mình không phải coder chuyên nghiệp, chỉ hiện thực hóa ý tưởng đơn giản thôi.

anh ơi , em thử làm mà nó báo lỗi orderlots , không biết em sai hay thiếu phần nào mong anh chỉ giúp em với ạ , em cám ơn anh nhiều lắm .
em có để file test ở dưới mong anh xem qua với ạ . cảm ơn anh nhiều ạ .
//+---------------x2 lenh thua -----------------------------------+
double AdvancedMM()
{
double AdvancedMMLots = 0;
int SystemHistoryOrders=OrdersHistoryTotal();
for(int i=SystemHistoryOrders-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if(OrderMagicNumber()==MagicNumber) //|
{
if(OrderSymbol()==Symbol())
{
if(OrderProfit()>=0)
{
AdvancedMMLots = Lots;
break;
}
if
((OrderLots() = Lots) &&
(OrderProfit()<0))
{
AdvancedMMLots = NormalizeDouble(2* Lots(),2);
break;
}
if
((OrderLots() = 2 *Lots) &&
(OrderProfit()<0))
{
AdvancedMMLots = NormalizeDouble(2 *(2*Lots),2);
break;
}
if

((OrderLots() = (2 *(2*Lots))) &&
(OrderProfit()<0))
{
AdvancedMMLots = Lots;
break;
}

}
}
}
return (AdvancedMMLots);
}
 

Đính kèm

  • tssssss.mq4
    5.7 KB · Xem: 2
1. Tại sao phải quét 1 lệnh để mở hai lệnh kia trong khi có thể mở một lúc cả ba lệnh ? Xử lí ko tốt khi chương trình khởi động lại nó lại đúp đến vô cùng rất nguy hiểm
2. Nếu trường hợp bắt buộc phải làm thế thì tùy vào trường hợp:
2.1 Nếu lệnh đầu tiên do EA vào lệnh tự động thì nên mở sau khi xét kết quả của lệnh đầu tiên.
Vd: if( điều kiện mở lệnh)
{
If(ordersend(......) > 0) // Mở lệnh 1 ok
{
// Mở hai lệnh kia
}
}
2.2 Nếu lệnh đầu vào bằng tay thì phải xác định được nó và kiếm gì đó lưu lại số ticket của lệnh tay sau khi đúp rồi để không đúp tiếp.

Lệnh gốc vào bằng tay bác ơi; thay vì vào vol x3 thì chỉ vào vol 1 thôi; rồi clone thêm 02 lệnh nữa; SL đặt giống nhau, TP đặt khác để chốt TP1,2,3.
Mình đang đánh dấu bằng cách set magic number của 2 cái lệnh clone kia rồi so sánh với lệnh gốc; tuy nhiên có những lúc lệnh clone bị đóng thì lệnh gốc lại tiếp tục clone (coi như là mới); Vì thế mình đang muốn tìm cách nào để đánh dấu hợp lý hơn.
Bác có ý tưởng gì k chỉ giáo thêm với ạ.
Thanks!
 
Lệnh gốc vào bằng tay bác ơi; thay vì vào vol x3 thì chỉ vào vol 1 thôi; rồi clone thêm 02 lệnh nữa; SL đặt giống nhau, TP đặt khác để chốt TP1,2,3.
Mình đang đánh dấu bằng cách set magic number của 2 cái lệnh clone kia rồi so sánh với lệnh gốc; tuy nhiên có những lúc lệnh clone bị đóng thì lệnh gốc lại tiếp tục clone (coi như là mới); Vì thế mình đang muốn tìm cách nào để đánh dấu hợp lý hơn.
Bác có ý tưởng gì k chỉ giáo thêm với ạ.
Thanks!
C1: Cách tốt nhất: Tạo một giao diện, nhập các thông số vào bao nhiêu lệnh, volume,sl,tp1,2,3... Rồi chỉ việc ấn nút một cái là mở tất cả lệnh cùng một lúc.
C2: Lưu ticket của lệnh tay vào biến của chương trình dùng lệnh GlobalVariableSet hoặc lưu trữ trên file sau quét xong lần đầu và mở hai lệnh kia, các lần tiếp theo phải so sánh để ko đụng đến nó nữa.
C3: Mỗi lệnh tay tương ứng sẽ được vẽ một chartobject (line,arrow...) đặt tên cho nó trùng với ticket của lệnh tay và đặt thuộc tính ko chọn được (is_selectable) để khỏi xóa nhầm, khi quét tới lệnh tay mà trên chart có object có tên trùng ticket với nó (dùng hàm ObjectFind) thì ko đúp, ko có (tức mới mở) thì vẽ. Nếu lệnh tay ko còn nữa thì xóa cái object kia đi (ko xóa cũng ko sao :v)
 
C1: Cách tốt nhất: Tạo một giao diện, nhập các thông số vào bao nhiêu lệnh, volume,sl,tp1,2,3... Rồi chỉ việc ấn nút một cái là mở tất cả lệnh cùng một lúc.
C2: Lưu ticket của lệnh tay vào biến của chương trình dùng lệnh GlobalVariableSet hoặc lưu trữ trên file sau quét xong lần đầu và mở hai lệnh kia, các lần tiếp theo phải so sánh để ko đụng đến nó nữa.
C3: Mỗi lệnh tay tương ứng sẽ được vẽ một chartobject (line,arrow...) đặt tên cho nó trùng với ticket của lệnh tay và đặt thuộc tính ko chọn được (is_selectable) để khỏi xóa nhầm, khi quét tới lệnh tay mà trên chart có object có tên trùng ticket với nó (dùng hàm ObjectFind) thì ko đúp, ko có (tức mới mở) thì vẽ. Nếu lệnh tay ko còn nữa thì xóa cái object kia đi (ko xóa cũng ko sao :v)
Thanks bác đã khai sáng, để tôi nghiên cứu làm theo cách 2 hoặc 3 (newbie hãy còn đang tập đánh vần bác ạ).
 
MT5 cần phải học code của MQL5 á bác. Nghe nói cũng vậy à. Bác thử copy folder telegram vào include và bác thử tạo 1 EA mới ở MQL5 và copy code mình vô rồi compile thử coi. Mình nhớ hồi trước mình có thử thì okie đó bác. Tại mình trade trên MT4 thôi à.
Vâng, cảm ơn bác ạ. Mình không chạy ea nào, mà đang chạy copy trade từ signal trên mql5 về tài khoản mình và muốn cập nhật liên tục hoạt động của nó.
 
thanks bác. đúng cái mình đang cần. bác làm thế này nhiều ae code thuê thất nghiệp lắm. :)). mình tìm trên mạng thấy toàn bán code này ko ah.
 
Vâng, cảm ơn bác ạ. Mình không chạy ea nào, mà đang chạy copy trade từ signal trên mql5 về tài khoản mình và muốn cập nhật liên tục hoạt động của nó.
Thì bạn phải nhúng con EA đó vào 1 cái chart bất kỳ, thì khi lệnh nó được khớp trên tài khoản của bạn nó mới báo về cho bạn...
 
Thua rồi bác ơi, em làm đi làm lại vẫn bị lỗi
upload_2021-10-25_22-45-49.png
 
Thua rồi bác ơi, em làm đi làm lại vẫn bị lỗi
View attachment 244614
Mình thấy có nhiều bác làm theo hướng dẫn mà vẫn bị lỗi, mình thấy có 3 vấn đề quan trọng bác quên làm theo:
1. Tạo cái telegram channel private - Phải là private, không thì phải sửa lại code trong file include telegram và compile lại file SendSignalToTelegram
2. Add con bot vào cái channel private đó và nhớ active nó.
3. Đặt cái địa chỉ website ở phần mềm MT4 là cái link của website telegram như mình đã nói ở các topic trên.
Nếu không được thì có thể contact mình qua telegram/zalo qua sdt 0973748547.
Lưu ý: Mình đã share free thì chịu khó đọc và làm theo hướng dẫn đã nha.
 
Nếu làm mọi cách theo hướng dẫn mà vẫn lỗi thì chắc còn mỗi đường cài lại win vì con này ko chạy trên Win 7 :D
Mình vẫn xài tốt trên win 7 nha bác :D
Code này MT4 gửi 1 cú pháp tới website của telegram và con bot telegram nó đọc và chuyển lên telegram app thôi nha.
 
Đã tìm ra lỗi, chỉnh sửa lại file trong telegram.mqh theo chỉ dẫn của dân mạng. Thanks chủ thớt làm con EA quá tiện này. ..............Hello!, I managed to do since they also work on private channels, everything is on the Telegram.mqh, there is a part in the file where the "@" are located, what I did was replaced by "-", and at the time of placing the name of the channel with the variable InpChannelName there place the following "-10014749xxxxx", the token of the channel with the bot
 

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

  • ngoi_sao_co_doc trong Phân tích Forex - Vàng - Hàng hóa 24,484 Xem / 87 Trả lời
  • Quíc Óp trong Phân tích Forex - Vàng - Hàng hóa 320 Xem / 19 Trả lời
  • Mạc An trong Phân tích Forex - Vàng - Hàng hóa 838 Xem / 39 Trả lời
  • TraderViet Crypto trong Chuyện bên lề 241 Xem / 2 Trả lời
  • DuongHuy trong Phân tích Forex - Vàng - Hàng hóa 385 Xem / 31 Trả lời
  • Bianas trong Phân tích Forex - Vàng - Hàng hóa 126 Xem / 3 Trả lời
  • Huan2051 trong Phân tích Forex - Vàng - Hàng hóa 294,749 Xem / 1,397 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