TradingView Alerts cho MT4 MT5 + biến động động

Tác giả:ChaoZhang, Ngày: 2022-05-24 16:59:00
Tags:SMAMT4MT5

Một vài ngày trước đây TradingView đã phát hành một tính năng rất mạnh mẽ của các giá trị động từ PineScript bây giờ được phép được truyền trong các cảnh báo. Và nhờ vào TradingConnector, chúng có thể được thực hiện ngay lập tức trong nền tảng MT4 hoặc MT5 của bất kỳ nhà môi giới nào trên thế giới. Vì vậy, vâng - TradingConnector cũng hoạt động với chỉ số và hàng hóa.

Khái niệm của chiến lược EURUSD 6h này rất đơn giản - nó dựa trên các giao dịch chéo Stochastic với stop-loss được đặt dưới điểm pivot gần đây nhất. Việc đặt stop-loss với độ chính xác phẫu thuật là hoàn toàn có thể nhờ vào việc cho phép các giá trị động trong cảnh báo. TradingConnector cũng đã được nâng cấp để tận dụng các giá trị động này và bây giờ nó cho phép thực hiện giao dịch với lệnh stop-loss, take-profit cũng như lệnh dừng và giới hạn được tính toán trước.

Một tính năng mới của TradingConnector, là đóng các vị trí chỉ một phần - miễn là nhà môi giới cho phép nó, tất nhiên. Một vị trí cần có trade_id được chỉ định khi nhập, được đề cập trong các cảnh báo tiếp theo với đóng một phần. Các thông số kỹ thuật chi tiết về cú pháp cảnh báo và chức năng có thể được tìm thấy tại trang web TradingConnector. Cách bao gồm các biến động động trong tin nhắn cảnh báo có thể được nhìn thấy ở cuối kịch bản trong các cuộc gọi alertcondition (().

Chiến lược cũng tính đến hoa hồng.

Slippage được cố ý để lại ở mức 0. Do thời gian giao hàng ngắn hơn 1 giây của TradingConnector, slippage hầu như không tồn tại. Điều này có thể đạt được đặc biệt nếu bạn đang sử dụng máy chủ VPS, được lưu trữ trong cùng trung tâm dữ liệu với máy chủ môi giới của bạn. Tôi đang sử dụng thiết lập như vậy, nó có thể thực hiện được.

Chiến lược này là NON-REPAINTING và sử dụng NO TRAILING-STOP hoặc bất kỳ tính năng nào khác được biết là bị lỗi trong backtester TradingView. Nó có làm cho chiến lược này không bị đạn và đảm bảo thành công 100% không? Chết tiệt không! Hãy nhớ quy tắc số 1 của backtesting - bất kể kịch bản có lợi nhuận và đẹp như thế nào, nó chỉ kể về quá khứ. Không có sự đảm bảo nào về chiến lược tương tự sẽ có kết quả tương tự trong tương lai.

Để biến kịch bản này thành nghiên cứu để có thể tạo cảnh báo, hãy làm 2 điều:

  1. bình luận chiến lược dòng ở đầu và không bình luận nghiên cứu dòng
  2. dòng 54-59 và dòng 62-65. Sau đó thêm kịch bản vào biểu đồ và cấu hình cảnh báo.

Kịch bản này chỉ được tạo ra cho mục đích giáo dục.

Chắc chắn đây không phải là lời khuyên tài chính. Bất cứ ai sử dụng kịch bản này hoặc bất kỳ phần nào của nó theo bất kỳ cách nào, phải nhận thức được những rủi ro cao liên quan đến giao dịch.

Cảm ơn @LucF và @a.tesla2018 đã giúp tôi sửa mã :)

backtest

img


/*backtest
start: 2022-04-23 00:00:00
end: 2022-05-22 23:59:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Peter_O

//@version=5
strategy(title='TradingView Alerts to MT4 MT5 Strategy example', commission_type=strategy.commission.cash_per_order, commission_value=0.00003, overlay=false, default_qty_value=100000, initial_capital=1000)
//study(title="TradingView Alerts to MT4 MT5 Strategy example")  //uncomment this line and comment previous one to make it a study producing alerts
//
// This script was created for educational purposes only.
// It is showing how to use dynamic variables in TradingView alerts.
// And how to execute them in Forex, indices and commodities markets

TakeProfitDistance = input(400)
TakePartialProfitDistance = input(150)

// **** Entries logic **** {
periodK = input.int(13, title='K', minval=1)
periodD = input.int(3, title='D', minval=1)
smoothK = input.int(4, title='Smooth', minval=1)
k = ta.sma(ta.stoch(close, high, low, periodK), smoothK)
d = ta.sma(k, periodD)
plot(k, title='%K', color=color.new(color.blue, 0))
plot(d, title='%D', color=color.new(color.orange, 0))
h0 = hline(80)
h1 = hline(20)
fill(h0, h1, color=color.new(color.purple, 75))

GoLong = ta.crossover(k, d) and k < 80
GoShort = ta.crossunder(k, d) and k > 20
// } End of entries logic

// **** Pivot-points and stop-loss logic **** {
piv_high = ta.pivothigh(high, 1, 1)
piv_low = ta.pivotlow(low, 1, 1)
var float stoploss_long = low
var float stoploss_short = high

pl = ta.valuewhen(piv_low, piv_low, 0)
ph = ta.valuewhen(piv_high, piv_high, 0)

if GoLong
    stoploss_long := low < pl ? low : pl
    stoploss_long
if GoShort
    stoploss_short := high > ph ? high : ph
    stoploss_short
// } End of Pivot-points and stop-loss logic

strategy.entry('Long', strategy.long, when=GoLong)
strategy.exit('XPartLong', from_entry='Long', qty_percent=50, profit=TakePartialProfitDistance)
strategy.exit('XLong', from_entry='Long', stop=stoploss_long, profit=TakeProfitDistance)
strategy.entry('Short', strategy.short, when=GoShort)
strategy.exit('XPartShort', from_entry='Short', qty_percent=50, profit=TakePartialProfitDistance)
strategy.exit('XShort', from_entry='Short', stop=stoploss_short, profit=TakeProfitDistance)

if GoLong
    alertsyntax_golong = 'long slprice=' + str.tostring(stoploss_long) + ' tp1=' + str.tostring(TakePartialProfitDistance) + ' part1=0.5 tp=' + str.tostring(TakeProfitDistance)
    alert(message=alertsyntax_golong, freq=alert.freq_once_per_bar_close)
if GoShort
    alertsyntax_goshort = 'short slprice=' + str.tostring(stoploss_short) + ' tp1=' + str.tostring(TakePartialProfitDistance) + ' part1=0.5 tp=' + str.tostring(TakeProfitDistance)
    alert(message=alertsyntax_goshort, freq=alert.freq_once_per_bar_close)


if GoLong
    strategy.entry("Enter Long", strategy.long)
else if GoShort
    strategy.entry("Enter Short", strategy.short)

Có liên quan

Thêm nữa