Strategi
Beberapa orang percaya bahawa pembukaan pasaran pada waktu pagi adalah masa di mana pasaran mempunyai perbezaan terbesar. Selepas kira-kira 30 minit, pasaran telah sepenuhnya mencerna semua jenis maklumat semalaman, dan trend harga akan cenderung rasional dan kembali normal. Dengan kata lain: trend pasaran dalam 30 minit pertama atau lebih pada dasarnya membentuk corak perdagangan keseluruhan hari ini.
Titik tinggi dan rendah relatif yang dihasilkan pada masa ini membentuk titik tinggi dan rendah yang berkesan dalam
Walaupun strategi terobosan boleh memasuki pasaran sebaik sahaja trend terbentuk. Tetapi kelebihan ini juga merupakan pedang bermata dua. Akibat daripada kemasukan sensitif, terobosan harga gagal. Oleh itu, perlu menetapkan stop loss. Pada masa yang sama, untuk mencapai logik strategi menang dan kalah, mengambil keuntungan mesti ditetapkan.
Buka pada gilirannya:fmz.comlaman web> Login > Dashboard > Strategy Library > New Strategy > Klik menu drop-down di sudut kanan atas untuk memilih bahasa Python dan mula menulis strategi. Perhatikan komen dalam kod di bawah.
# 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, satu adalahonTick
fungsi, dan yang lain adalahmain
fungsi, di manaonTick
fungsi dijalankan dalam gelung tanpa akhir dalammain
function.
up_line = 0 # upper rail
down_line = 0 # lower rail
trade_count = 0 # Number of transactions on the day
Oleh kerana rel atas dan bawah hanya dikira pada waktu 09:30, dan tidak ada statistik yang dilakukan pada masa yang lain, kita perlu menulis kedua-dua pembolehubah di luar gelung.trade_count
sebelum menggunakan kedua-dua pembolehubah global dalam fungsi utamaonTick
strategi, anda perlu menggunakanglobal
kata kunci untuk rujukan.
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, mula-mula gunakanSetContractType
fungsi dalam platform FMZ API untuk melanggan pelbagai niaga hadapan, dan kemudian menggunakanGetRecords
Anda juga boleh lulus dalam susunan K-garis yang menentukanPERIOD_M11
minit apabila menggunakanGetRecords
function.
Langkah seterusnya adalah untuk mendapatkan harga terkini, yang digunakan untuk menentukan hubungan kedudukan antara harga semasa dan rel atas dan bawah. Pada masa yang sama, apabila meletakkan pesanan menggunakan fungsi Beli atau Jual, anda perlu lulus dalam harga yang ditentukan. Di samping itu, jangan lupa untuk menapis bilangan bar garisan k, kerana jika bilangan bar garisan k terlalu sedikit, akan ada kesilapan yang tidak dapat dikira.
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)
Apabila mengira rel atas dan bawah dan meletakkan pesanan, adalah perlu untuk menilai sama ada masa semasa memenuhi masa dagangan yang ditentukan oleh kami, jadi untuk memudahkan penghakiman, kita perlu menangani jam dan minit khusus K-line semasa.
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 kedudukan melibatkan logik strategi. sepuluh pelajaran pertama kami sentiasa menggunakan kedudukan memegang maya, tetapi dalam persekitaran perdagangan sebenar, ia adalah yang terbaik untuk menggunakanGetPosition
fungsi untuk mendapatkan maklumat kedudukan sebenar, termasuk: arah kedudukan, keuntungan dan kerugian kedudukan, bilangan kedudukan, 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 mengelakkan kesilapan logik dalam strategi, adalah lebih baik untuk menulis logik kedudukan penutupan sebelum logik kedudukan pembukaan. Dalam strategi ini, apabila membuka kedudukan, terlebih dahulu tentukan status kedudukan semasa, sama ada ia berada dalam masa dagangan yang ditentukan, dan kemudian tentukan hubungan antara harga semasa dan rel atas dan bawah. Untuk menutup kedudukan adalah untuk menentukan terlebih dahulu sama ada ia dekat dengan penutupan pasaran, atau sama ada ia telah mencapai keadaan mengambil keuntungan dan menghentikan kerugian.
HANS123 adalah strategi perdagangan automatik yang sangat tipikal dan sangat berkesan. Prinsip asasnya adalah untuk menembusi harga tertinggi atau terendah pasaran sebelumnya dalam jangka masa tertentu. Sistem ini boleh digunakan untuk hampir semua produk pertukaran asing dengan keuntungan yang stabil. Ini juga mod perdagangan awal, dengan teknologi penapisan yang sesuai, atau dapat meningkatkan peluang menang.
Klik untuk menyalin kod sumber strategi lengkaphttps://www.fmz.com/strategy/179805backtest tanpa konfigurasi
Ini adalah prinsip dan analisis kod strategi HANS123. Sebenarnya, strategi HANS123 menyediakan masa yang lebih baik untuk memasuki pasaran. Anda juga boleh meningkatkan masa keluar mengikut pemahaman anda tentang pasaran dan pemahaman mengenai urus niaga, atau mengikut turun naik pelbagai Untuk mengoptimumkan parameter seperti mengambil keuntungan dan menghentikan kerugian untuk mencapai hasil yang lebih baik.