Orang-orang yang telah melakukan perdagangan keuangan mungkin akan memiliki pengalaman. Kadang-kadang fluktuasi harga adalah teratur, tetapi lebih sering menunjukkan keadaan tidak stabil dari berjalan acak. Ini adalah ketidakstabilan di mana risiko dan peluang pasar terletak. Ketidakstabilan juga berarti tidak dapat diprediksi, jadi bagaimana membuat pengembalian lebih stabil dalam lingkungan pasar yang tidak dapat diprediksi juga merupakan masalah bagi setiap pedagang. Artikel ini akan memperkenalkan strategi aturan perdagangan buaya, dengan harapan menginspirasi semua orang.
Garis buaya sebenarnya adalah tiga rata-rata bergerak khusus, yang sesuai dengan dagu garis biru, gigi garis merah, dan bibir atas garis hijau. dagu adalah rata-rata bergerak 13 periode dan bergerak 8 bar di masa depan. gigi adalah rata-rata bergerak 8 periode dan bergerak 5 bar di masa depan. bibir atas adalah rata-rata bergerak 5 periode dan bergerak 3 bar di masa depan.
Garis buaya adalah seperangkat metode analisis teknis yang diringkas berdasarkan geometri dan dinamika nonlinear. Ketika dagu buaya, gigi dan bibir atas tertutup atau terjerat, itu berarti buaya sedang tidur. Pada saat ini, kita biasanya tinggal di luar pasar sampai fragmen muncul, dan hanya berpartisipasi dalam pasar tren yang jelas.
Semakin lama buaya tidur, semakin laparnya saat bangun, jadi begitu ia bangun, ia akan membuka mulutnya lebar-lebar. Jika bibir atas berada di atas gigi dan gigi berada di atas dagu, itu menunjukkan bahwa pasar telah memasuki pasar banteng dan buaya akan makan daging sapi. Jika bibir atas berada di bawah gigi dan gigi berada di bawah dagu, itu menunjukkan bahwa pasar telah memasuki pasar beruang dan buaya akan makan daging beruang. Sampai penuh, maka ia akan menutup mulutnya lagi (tahan dan dapatkan keuntungan).
Bibir atas = REF(SMA(VAR1,5,1),3) Gigi = REF ((SMA ((VAR1,8,1),5) Chin = REF(SMA(VAR1,13,1)
Komposisi strategi buaya
# 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
FMZ menggunakan mode polling, satu adalah fungsi onTick, dan yang lainnya adalah fungsi utama, di mana fungsi onTick dijalankan dalam loop tak terbatas dalam fungsi utama.
import talib
import numpy as np
Fungsi SMA digunakan dalam strategi kami. SMA adalah rata-rata aritmatika. Ada fungsi SMA yang sudah siap di perpustakaan talib, jadi langsung impor perpustakaan talib Python dan kemudian panggil langsung. Karena saat memanggil fungsi ini, Anda perlu melewati parameter format numpy, jadi kita perlu menggunakan import untuk mengimpor dua perpustakaan Python ini di awal strategi.
# Convert the K-line array into an array of highest price, lowest price, and closing price, for conversion to numpy.array
def get_data(bars):
arr = []
for i in bars:
arr.append(i['Close'])
return arr
Di sini kita membuat fungsi get_data, tujuan dari fungsi ini adalah untuk memproses array K-line biasa menjadi data format numpy. parameter input adalah array K-line, dan hasil output adalah data diproses dalam format numpy.
# Get the number of positions
def get_position ():
# Get position
position = 0 # The number of assigned positions is 0
position_arr = _C (exchange.GetPosition) # Get array of positions
if len (position_arr)> 0: # If the position array length is greater than 0
for i in position_arr:
if i ['ContractType'] == 'rb000': # If the position symbol is equal to the subscription symbol
if i ['Type']% 2 == 0: # If it is long position
position = i ['Amount'] # Assigning a positive number of positions
else:
position = -i ['Amount'] # Assigning a negative number of positions
return position
Status posisi melibatkan logika strategi. sepuluh pelajaran pertama kami selalu menggunakan posisi virtual, tetapi dalam lingkungan perdagangan nyata yang terbaik adalah menggunakan fungsi GetPosition untuk mendapatkan informasi posisi nyata, termasuk: arah posisi, keuntungan posisi dan kerugian, jumlah posisi, dll.
exchange.SetContractType('rb000') # Subscribe the futures varieties
bars_arr = exchange.GetRecords() # Get K line array
if len(bars_arr) < 22: # If the number of K lines is less than 22
return
Sebelum memperoleh data, Anda harus terlebih dahulu menggunakan fungsi SetContractType untuk berlangganan varietas berjangka yang relevan. FMZ mendukung semua varietas berjangka komoditas Cina. Setelah berlangganan simbol berjangka, Anda dapat menggunakan fungsi GetRecords untuk mendapatkan data K-line, yang mengembalikan array.
np_arr = np.array (get_data (bars_arr)) # Convert closing price array
sma13 = talib.SMA (np_arr, 130) [-9] # chin
sma8 = talib.SMA (np_arr, 80) [-6] # teeth
sma5 = talib.SMA (np_arr, 50) [-4] # upper lip
current_price = bars_arr [-1] ['Close'] # latest price
Sebelum menghitung SMA menggunakan perpustakaan talib, Anda perlu menggunakan perpustakaan numpy untuk memproses array K-line biasa menjadi data numpy. Kemudian dapatkan dagu, gigi dan bibir atas garis buaya secara terpisah. Selain itu, parameter harga perlu diteruskan saat melakukan pesanan, sehingga kita dapat menggunakan harga penutupan dalam array K-line.
position = get_position ()
if position == 0: # If there is no position
if current_price> sma5: # If the current price is greater than the upper lip
exchange.SetDirection ("buy") # Set the trading direction and type
exchange.Buy (current_price + 1, 1) # open long position order
if current_price <sma13: # If the current price is less than the chin
exchange.SetDirection ("sell") # Set the trading direction and type
exchange.Sell (current_price-1, 1) # open short position order
if position> 0: # If you have long positions
if current_price <sma8: # If the current price is less than teeth
exchange.SetDirection ("closebuy") # Set the trading direction and type
exchange.Sell (current_price-1, 1) # close long position
if position <0: # If you have short position
if current_price> sma8: # If the current price is greater than the tooth
exchange.SetDirection ("closesell") # Set the trading direction and type
exchange.Buy (current_price + 1, 1) # close short position
Sebelum menempatkan order, Anda perlu mendapatkan posisi yang sebenarnya. Fungsi get_position yang kami tentukan sebelumnya akan mengembalikan jumlah posisi yang sebenarnya. Jika posisi saat ini panjang, akan mengembalikan angka positif. Jika posisi saat ini pendek, akan mengembalikan angka negatif. Jika tidak ada posisi, akan mengembalikan 0. Akhirnya, fungsi beli dan jual digunakan untuk menempatkan order sesuai dengan logika perdagangan di atas, tetapi sebelum ini, arah dan jenis perdagangan juga perlu ditetapkan.
'' 'backtest
start: 2019-01-01 00:00:00
end: 2020-01-01 00:00:00
period: 1h
exchanges: [{"eid": "Futures_CTP", "currency": "FUTURES"}]
'' '
import talib
import numpy as np
# Convert the K-line array into an array of highest price, lowest price, and closing price, used to convert to numpy.array type data
def get_data (bars):
arr = []
for i in bars:
arr.append (i ['Close'])
return arr
# Get the number of positions
def get_position ():
# Get position
position = 0 # The number of assigned positions is 0
position_arr = _C (exchange.GetPosition) # Get array of positions
if len (position_arr)> 0: # If the position array length is greater than 0
for i in position_arr:
if i ['ContractType'] == 'rb000': # If the position symbol is equal to the subscription symbol
if i ['Type']% 2 == 0: # If it is long
position = i ['Amount'] # Assign a positive number of positions
else:
position = -i ['Amount'] # Assign a negative number of positions
return position
# Strategy main function
def onTick ():
# retrieve data
exchange.SetContractType ('rb000') # Subscribe to futures varieties
bars_arr = exchange.GetRecords () # Get K line array
if len (bars_arr) <22: # If the number of K lines is less than 22
return
# Calculation
np_arr = np.array (get_data (bars_arr)) # Convert closing price array
sma13 = talib.SMA (np_arr, 130) [-9] # chin
sma8 = talib.SMA (np_arr, 80) [-6] # teeth
sma5 = talib.SMA (np_arr, 50) [-4] # upper lip
current_price = bars_arr [-1] ['Close'] # latest price
position = get_position ()
if position == 0: # If there is no position
if current_price> sma5: # If the current price is greater than the upper lip
exchange.SetDirection ("buy") # Set the trading direction and type
exchange.Buy (current_price + 1, 1) # open long position order
if current_price <sma13: # If the current price is less than the chin
exchange.SetDirection ("sell") # Set the trading direction and type
exchange.Sell (current_price-1, 1) # open short position order
if position> 0: # If you have long positions
if current_price <sma8: # If the current price is less than teeth
exchange.SetDirection ("closebuy") # Set the trading direction and type
exchange.Sell (current_price-1, 1) # close long position
if position <0: # If you have short positions
if current_price> sma8: # If the current price is greater than the tooth
exchange.SetDirection ("closesell") # Set the trading direction and type
exchange.Buy (current_price + 1, 1) # close short position
# Program main function
def main ():
while True: # loop
onTick () # execution strategy main function
Sleep (1000) # sleep for 1 second
Klik langsung link di bawah ini untuk menyalin strategi lengkap tanpa konfigurasi:https://www.fmz.com/strategy/199025
Akhir
Peran terbesar dari aturan perdagangan buaya adalah untuk membantu kita mempertahankan arah yang sama dengan pasar saat berdagang, terlepas dari bagaimana perubahan harga pasar saat ini, dan terus mendapatkan keuntungan sampai pasar konsolidasi muncul.