Strategi
Beberapa orang percaya bahwa pembukaan pasar di pagi hari adalah saat pasar memiliki divergensi terbesar. Setelah sekitar 30 menit, pasar telah sepenuhnya mencerna semua jenis informasi semalam, dan tren harga akan cenderung rasional dan kembali normal. Dengan kata lain: tren pasar dalam 30 menit pertama atau lebih pada dasarnya merupakan pola perdagangan keseluruhan hari ini.
Nilai tinggi dan rendah relatif yang dihasilkan pada saat ini membentuk titik tinggi dan rendah yang efektif dalam
Meskipun strategi terobosan dapat memasuki pasar segera setelah tren terbentuk. Tetapi keuntungan ini juga merupakan pedang bermata dua. Sebagai akibat dari masuk yang sensitif, terobosan harga gagal. Jadi perlu untuk mengatur stop loss. Pada saat yang sama, untuk mencapai logika strategi menang dan kalah, mengambil keuntungan harus ditetapkan.
Buka pada gilirannya:fmz.comwebsite> Login > Dashboard > Strategy Library > New Strategy > Klik menu drop-down di sudut kanan atas untuk memilih bahasa Python dan mulai menulis strategi. Perhatikan komentar dalam kode di bawah ini.
# 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
Menulis kerangka strategi, ini telah dipelajari dalam bab sebelumnya, salah satunya adalahonTick
fungsi, dan yang lain adalahmain
fungsi, di manaonTick
fungsi dijalankan dalam loop tak berujung dimain
function.
up_line = 0 # upper rail
down_line = 0 # lower rail
trade_count = 0 # Number of transactions on the day
Karena rel atas dan bawah hanya dihitung pada pukul 09:30, dan tidak ada statistik yang dilakukan di sisa waktu, kita perlu menulis dua variabel ini di luar loop.trade_count
variabel juga ditulis di luar loop. Sebelum menggunakan dua variabel global ini dalam fungsi utama darionTick
strategi, Anda perlu menggunakanglobal
kata kunci untuk referensi.
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
Untuk mendapatkan data, pertama-tama gunakanSetContractType
fungsi di platform FMZ API untuk berlangganan varietas berjangka, dan kemudian menggunakanGetRecords
Anda juga dapat melewati dalam K-line array menentukanPERIOD_M11
menit saat menggunakanGetRecords
function.
Langkah selanjutnya adalah untuk mendapatkan harga terbaru, yang digunakan untuk menentukan hubungan posisi antara harga saat ini dan rel atas dan bawah. Pada saat yang sama, ketika menempatkan pesanan menggunakan fungsi Beli atau Jual, Anda perlu melewati harga yang ditentukan. Selain itu, jangan lupa untuk menyaring jumlah k garis bar, karena jika jumlah k garis bar terlalu sedikit, akan ada kesalahan yang tidak dapat dihitung.
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)
Ketika menghitung rel atas dan bawah dan menempatkan pesanan, perlu untuk menilai apakah waktu saat ini memenuhi waktu perdagangan yang ditentukan oleh kami, sehingga untuk memfasilitasi penilaian, kita perlu berurusan dengan jam dan menit tertentu dari K-line saat ini.
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
Status posisi melibatkan logika strategi. sepuluh pelajaran pertama kami selalu menggunakan posisi virtual memegang, tetapi dalam lingkungan perdagangan yang nyata, yang terbaik untuk menggunakanGetPosition
fungsi untuk memperoleh informasi posisi nyata, termasuk: arah posisi, keuntungan dan kerugian posisi, jumlah posisi, dll.
# 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
Untuk menghindari kesalahan logika dalam strategi, yang terbaik adalah menulis logika posisi penutupan sebelum logika posisi pembukaan. Dalam strategi ini, ketika membuka posisi, pertama-tama tentukan status posisi saat ini, apakah dalam waktu perdagangan yang ditentukan, dan kemudian tentukan hubungan antara harga saat ini dan rel atas dan bawah.
HANS123 adalah strategi perdagangan otomatis yang sangat khas dan sangat efektif. Prinsip dasarnya adalah untuk menembus harga tertinggi atau terendah dari pasar sebelumnya dalam jangka waktu tertentu. Sistem ini dapat diterapkan pada hampir semua produk valuta asing dengan profitabilitas yang stabil. Ini juga merupakan mode perdagangan awal, dengan teknologi penyaringan yang tepat, atau dapat meningkatkan peluang menang.
Klik untuk menyalin kode sumber strategi lengkaphttps://www.fmz.com/strategy/179805backtest tanpa konfigurasi
Di atas adalah prinsip dan analisis kode dari strategi HANS123. sebenarnya, strategi HANS123 menyediakan waktu yang lebih baik untuk memasuki pasar. Anda juga dapat meningkatkan waktu keluar sesuai dengan pemahaman Anda tentang pasar dan pemahaman transaksi, atau sesuai dengan volatilitas dari berbagai Untuk mengoptimalkan parameter seperti mengambil keuntungan dan menghentikan kerugian untuk mencapai hasil yang lebih baik.