Orang yang telah melakukan perdagangan kewangan mungkin mempunyai pengalaman. Kadang-kadang turun naik harga adalah biasa, tetapi lebih kerap ia menunjukkan keadaan tidak stabil berjalan secara rawak. Ini adalah ketidakstabilan yang mana risiko dan peluang pasaran terletak. Ketidakstabilan juga bermakna tidak dapat diramalkan, jadi bagaimana untuk membuat pulangan lebih stabil dalam persekitaran pasaran yang tidak dapat diramalkan juga merupakan masalah bagi setiap peniaga.
Garis buaya sebenarnya adalah tiga purata bergerak khas, yang sepadan dengan dagu garis biru, gigi garis merah, dan bibir atas garis hijau. dagu adalah purata bergerak 13 tempoh dan bergerak 8 bar ke masa depan. gigi adalah purata bergerak 8 tempoh dan bergerak 5 bar ke masa depan. bibir atas adalah purata bergerak 5 tempoh dan bergerak 3 bar ke masa depan.
Garis buaya adalah satu set kaedah analisis teknikal yang disimpulkan berdasarkan geometri dan dinamik bukan linear. Apabila dagu, gigi dan bibir atas buaya ditutup atau terjerat, ini bermakna buaya sedang tidur. Pada masa ini, kita biasanya tinggal di luar pasaran sehingga serpihan muncul, dan hanya mengambil bahagian dalam pasaran trend yang jelas.
Apabila seekor buaya tidur lebih lama, ia akan lebih lapar apabila ia bangun, jadi apabila ia bangun, ia akan membuka mulutnya dengan lebar. Jika bibir atas berada di atas gigi dan gigi berada di atas dagu, ia menunjukkan bahawa pasaran telah memasuki pasaran lembu dan buaya akan makan daging lembu. Jika bibir atas berada di bawah gigi dan gigi berada di bawah dagu, ia menunjukkan bahawa pasaran telah memasuki pasaran beruang dan buaya akan makan daging beruang. Sehingga ia penuh, ia akan menutup mulutnya lagi (tahan dan membuat 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 mod pengundian, satu adalah fungsi onTick, dan yang lain adalah fungsi utama, di mana fungsi onTick dijalankan dalam gelung tanpa akhir dalam fungsi utama.
import talib
import numpy as np
Fungsi SMA digunakan dalam strategi kami. SMA adalah purata aritmatika. Terdapat fungsi SMA siap sedia di perpustakaan talib, jadi langsung import perpustakaan talib Python dan kemudian memanggilnya secara langsung. Kerana ketika memanggil fungsi ini, anda perlu lulus parameter format numpy, jadi kita perlu menggunakan import untuk mengimport dua perpustakaan Python ini pada 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 mencipta fungsi get_data, tujuan fungsi ini adalah untuk memproses susunan K-garis biasa ke dalam data format numpy. parameter input adalah susunan K-garis, dan hasil output adalah data yang 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 kedudukan melibatkan logik strategi. Sepuluh pelajaran pertama kami sentiasa menggunakan kedudukan maya, tetapi dalam persekitaran perdagangan sebenar adalah yang terbaik untuk menggunakan fungsi GetPosition untuk mendapatkan maklumat kedudukan sebenar, termasuk: arah kedudukan, keuntungan dan kerugian kedudukan, bilangan kedudukan, 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 mesti terlebih dahulu menggunakan fungsi SetContractType untuk melanggan pelbagai niaga hadapan yang berkaitan. FMZ menyokong semua jenis niaga hadapan komoditi Cina. Selepas melanggan simbol niaga hadapan, anda boleh 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 mengira SMA menggunakan perpustakaan talib, anda perlu menggunakan perpustakaan numpy untuk memproses array K-line biasa ke dalam data numpy. Kemudian dapatkan dagu, gigi dan bibir atas garis buaya secara berasingan. Di samping itu, parameter harga perlu diteruskan ketika meletakkan pesanan, jadi kita boleh 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 meletakkan pesanan, anda perlu mendapatkan kedudukan sebenar. Fungsi get_position yang kita tentukan sebelumnya akan mengembalikan bilangan sebenar kedudukan. Jika kedudukan semasa panjang, ia akan mengembalikan nombor positif. Jika kedudukan semasa pendek, ia akan mengembalikan nombor negatif. Jika tidak ada kedudukan, kembali 0. Akhirnya, fungsi beli dan jual digunakan untuk meletakkan pesanan mengikut logik 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 terus pada pautan di bawah untuk menyalin strategi lengkap tanpa konfigurasi:https://www.fmz.com/strategy/199025
Akhir
Peranan terbesar peraturan perdagangan buaya adalah untuk membantu kita mengekalkan arah yang sama dengan pasaran semasa berdagang, tidak kira bagaimana perubahan harga pasaran semasa, dan terus mendapat keuntungan sehingga pasaran penyatuan muncul.