Chiến lược
Một số người tin rằng việc mở thị trường vào buổi sáng là thời điểm thị trường có sự phân kỳ lớn nhất. Sau khoảng 30 phút, thị trường đã tiêu hóa đầy đủ tất cả các loại thông tin qua đêm, và xu hướng giá sẽ có xu hướng hợp lý và trở lại bình thường. Nói cách khác: xu hướng thị trường trong 30 phút đầu tiên về cơ bản tạo thành mô hình giao dịch tổng thể ngày hôm nay.
Các điểm cao và thấp tương đối được tạo ra tại thời điểm này tạo thành các điểm cao và thấp hiệu quả trong Lý thuyết Dow, và chiến lược HANS123 là logic giao dịch được thiết lập bởi điều này. Trong thị trường tương lai trong nước, thị trường mở lúc 09:00 sáng, và lúc 09:30 bạn có thể đánh giá liệu nó có dài hay ngắn ngày hôm nay. Khi giá vượt qua điểm cao lên, giá sẽ dễ dàng tiếp tục tăng; khi giá vượt qua điểm thấp xuống, giá sẽ dễ dàng tiếp tục giảm.
Mặc dù chiến lược đột phá có thể đi vào thị trường ngay khi xu hướng được hình thành. Nhưng lợi thế này cũng là một thanh kiếm hai lưỡi. Do sự gia nhập nhạy cảm, đột phá giá đã thất bại. Vì vậy, cần thiết phải thiết lập dừng lỗ. Đồng thời, để đạt được chiến lược logic của chiến thắng và thua lỗ, phải thiết lập lợi nhuận.
Mở theo lượt:fmz.comwebsite> Login > Dashboard > Strategy Library > New Strategy > Nhấp vào menu thả xuống ở góc trên bên phải để chọn ngôn ngữ Python và bắt đầu viết chiến lược.
# Strategy main function
def onTick():
pass
# Program entry
def main():
while True: # enter infinite loop mode
onTick() # execute strategy main function
Sleep(1000) # Sleep for 1 second
Viết một khuôn khổ chiến lược, điều này đã được học trong chương trước, một làonTick
chức năng, và một làmain
chức năng, trong đóonTick
chức năng được thực hiện trong một vòng lặp vô tận trongmain
function.
up_line = 0 # upper rail
down_line = 0 # lower rail
trade_count = 0 # Number of transactions on the day
Vì các đường ray trên và dưới chỉ được đếm vào lúc 09:30, và không có thống kê được thực hiện trong phần còn lại của thời gian, chúng ta cần phải viết hai biến này bên ngoài vòng lặp.trade_count
Trước khi sử dụng hai biến toàn cầu này trong chức năng chính củaonTick
chiến lược, bạn cần phải sử dụngglobal
từ khóa để tham khảo.
exchange.SetContractType("rb888") # Subscribe to futures varieties
bar_arr = _C(exchange.GetRecords, PERIOD_M1) # Get 1-minute K line array
current_close = bar_arr[-1]['Close'] # Get the latest price
if len(bar_arr) <50: # If less than 50 k line bars
return # Return to continue waiting for data
Để thu thập dữ liệu, trước tiên sử dụngSetContractType
chức năng trong nền tảng FMZ API để đăng ký các loại tương lai, và sau đó sử dụng cácGetRecords
Bạn cũng có thể đi vào K-line mảng xác địnhPERIOD_M11
phút khi sử dụngGetRecords
function.
Bước tiếp theo là lấy giá mới nhất, được sử dụng để xác định mối quan hệ vị trí giữa giá hiện tại và đường ray trên và dưới. Đồng thời, khi đặt lệnh bằng chức năng Mua hoặc Bán, bạn cần phải truyền vào giá đã chỉ định. Ngoài ra, đừng quên lọc số lượng thanh đường k, bởi vì nếu số lượng thanh đường k quá ít, sẽ có một lỗi không thể tính toán được.
def current_time():
current_time = bar_arr[-1]['Time'] # Get current K-line timestamp
time_local = time.localtime(current_time / 1000) # Processing timestamp
hour = time.strftime("%H", time_local) # Format the timestamp and get the hour
minute = time.strftime("%M", time_local) # Format the timestamp and get the minute
if len(minute) == 1:
minute = "0" + minute
return int(hour + minute)
Khi tính toán các đường ray trên và dưới và đặt lệnh, cần phải đánh giá xem thời gian hiện tại có phù hợp với thời gian giao dịch được chỉ định bởi chúng tôi không, vì vậy để tạo điều kiện cho việc đánh giá, chúng tôi cần phải xử lý các giờ và phút cụ thể của dòng K hiện tại.
global up_line, down_line, trade_count # Introduce global variables
current_time = current_time() # processing time
if current_time == 930: # If the latest K-line time is 09:30
up_line = TA.Highest(bar_arr, 30,'High') + count # The highest price of the first 30 k line bars
down_line = TA.Lowest(bar_arr, 30,'Low')-count # The lowest price of the first 30 ke line bars
trade_count = 0 # Reset the number of transactions to 0
position_arr = _C(exchange.GetPosition) # Get position array
if len(position_arr) > 0: # If the position array length is greater than 0
position_arr = position_arr[0] # Get position dictionary data
if position_arr['ContractType'] =='rb888': # If the position symbol is equal to the subscription symbol
if position_arr['Type']% 2 == 0: # If it is a long position
position = position_arr['Amount'] # The number of assigned positions is a positive number
else:
position = -position_arr['Amount'] # Assign a negative number of positions
profit = position_arr['Profit'] # Get position profit and loss
else:
position = 0 # The number of assigned positions is 0
profit = 0 # Assign position profit and loss to 0
Tình trạng vị trí liên quan đến chiến lược logic. mười bài học đầu tiên của chúng tôi luôn luôn sử dụng vị trí nắm giữ ảo, nhưng trong một môi trường giao dịch thực sự, nó là tốt nhất để sử dụng cácGetPosition
chức năng để có được thông tin về vị trí thực, bao gồm: hướng vị trí, lợi nhuận và lỗ vị trí, số lượng vị trí, v.v.
# If it is close to market closing or reach taking profit and stopping loss
if current_time > 1450 or profit > stop * 3 or profit < -stop:
if position > 0: # If holding a long position
exchange.SetDirection("closebuy") # Set transaction direction and type
exchange.Sell(current_close-1, 1) # Close long order
elif position <0: # If holding an empty order
exchange.SetDirection("closesell") # Set transaction direction and type
exchange.Buy(current_close + 1, 1) # Close short order
# If there is no current position, and it is less than the specified number of transactions, and within the specified trading time
if position == 0 and trade_count < 2 and 930 < current_time < 1450:
if current_close > up_line: # If the price is greater than the upper line
exchange.SetDirection("buy") # Set transaction direction and type
exchange.Buy(current_close + 1, 1) # Open long order
trade_count = trade_count + 1 # Increase the number of transactions
elif current_close < down_line: # If the price is less than the lower line
exchange.SetDirection("sell") # Set transaction direction and type
exchange.Sell(current_close-1, 1) # Open a short order
trade_count = trade_count + 1 # Increase the number of transactions
Để tránh các lỗi logic trong chiến lược, tốt nhất là viết logic vị trí đóng trước logic vị trí mở. Trong chiến lược này, khi mở một vị trí, trước tiên xác định trạng thái vị trí hiện tại, liệu nó có nằm trong thời gian giao dịch được chỉ định hay không, và sau đó xác định mối quan hệ giữa giá hiện tại và đường ray trên và dưới. Để đóng một vị trí, trước tiên xác định xem nó có gần đóng thị trường hay không, hoặc liệu nó đã đạt đến các điều kiện lấy lợi nhuận và dừng lỗ.
HANS123 là một chiến lược giao dịch tự động rất điển hình và rất hiệu quả. Nguyên tắc cơ bản của nó là phá vỡ giá cao nhất hoặc thấp nhất của thị trường trước đó trong một khoảng thời gian nhất định. Hệ thống có thể được áp dụng cho hầu hết các sản phẩm ngoại hối có lợi nhuận ổn định. Đây cũng là một chế độ giao dịch nhập cảnh sớm, với công nghệ lọc thích hợp, hoặc có thể cải thiện tỷ lệ thắng của nó.
Nhấp để sao chép mã nguồn chiến lược đầy đủhttps://www.fmz.com/strategy/179805backtest không cấu hình
Trên đây là nguyên tắc và phân tích mã của chiến lược HANS123. Trên thực tế, chiến lược HANS123 cung cấp một thời gian tốt hơn để vào thị trường. Bạn cũng có thể cải thiện thời gian thoát theo sự hiểu biết của bạn về thị trường và sự hiểu biết về giao dịch, hoặc theo sự biến động của đa dạng Để tối ưu hóa các thông số như lấy lợi nhuận và dừng lỗ để đạt được kết quả tốt hơn.