[TOC]
Seperti kata pepatah, dunia ini akan berpisah selepas lama bersatu. juga akan melakukan sebaliknya selepas lama berpecah. Dan fenomena ini juga wujud di pasaran niaga hadapan. Tidak ada pelbagai yang hanya naik tetapi tidak jatuh. Tetapi bila naik dan bila jatuh, ia bergantung kepada kadar penyimpangan. Dalam artikel ini, kita akan menggunakan kadar penyimpangan untuk membina strategi perdagangan yang mudah.
Kadar penyimpangan BIAS adalah penunjuk teknikal yang berasal dari purata bergerak. Ia terutamanya dalam bentuk peratusan untuk mengukur tahap penyimpangan harga dari purata bergerak dalam turun naik. Jika purata bergerak adalah kos purata peniaga, kadar penyimpangan adalah kadar pulangan purata peniaga.
Asas teori kadar penyimpangan adalah analisis hati peniaga. Apabila harga lebih besar daripada kos purata pasaran, ini bermakna bahawa peniaga kedudukan panjang akan mempunyai idea untuk menyalurkan keuntungan, yang akan menyebabkan harga jatuh. Apabila harga kurang daripada kos purata pasaran, ini bermakna bahawa penjual pendek menguntungkan, dan idea untuk menyalurkan keuntungan akan menyebabkan harga meningkat.
Apabila harga menyimpang ke atas dari purata bergerak, kadar penyimpangan terlalu besar, dan terdapat kemungkinan tinggi bahawa harga akan jatuh pada masa akan datang.
Apabila harga menyimpang dari purata bergerak ke bawah, kadar penyimpangan terlalu kecil, dan terdapat kemungkinan tinggi bahawa harga akan meningkat pada masa akan datang.
Walaupun purata bergerak dikira dari harga, dari segi bentuk luaran, harga pasti akan bergerak lebih dekat dengan purata bergerak, atau harga akan sentiasa turun naik di sekitar purata bergerak.
Kadar penyimpangan = [ ((harga penutupan hari - harga purata hari N) / harga purata hari N] * 100%
Antara mereka, N adalah parameter purata bergerak, kerana tempoh N adalah berbeza, hasil pengiraan kadar penyimpangan juga berbeza. Secara umum, nilai N adalah: 6, 12, 24, 36, dan lain-lain. Dalam penggunaan sebenar, ia juga boleh diselaraskan secara dinamik mengikut pelbagai jenis. Walau bagaimanapun, pemilihan parameter sangat penting. Jika parameter terlalu kecil, kadar penyimpangan akan terlalu sensitif, jika parameter terlalu besar, kadar penyimpangan akan terlalu perlahan. Hasil pengiraan kadar penyimpangan adalah positif dan negatif. Semakin besar kadar penyimpangan positif, semakin besar keuntungan lembu dan semakin besar kebarangkalian pembetulan harga. Semakin besar kadar penyimpangan, semakin besar keuntungan pendek dan semakin besar kebarangkalian harga bangkit.
Oleh kerana kadar penyimpangan adalah satu lagi bentuk purata bergerak, maka kita juga boleh menyesuaikan strategi kadar penyimpangan berganda berdasarkan strategi purata bergerak berganda. Menghakimi dari hubungan kedudukan antara kadar penyimpangan jangka pendek dan kadar penyimpangan jangka panjang, keadaan pasaran semasa dinilai. Jika kadar penyimpangan jangka panjang lebih besar daripada kadar penyimpangan jangka pendek, ia sebenarnya mewakili purata bergerak jangka pendek ke atas melintasi purata bergerak jangka panjang, dan sebaliknya.
Langkah 1: Menulis kerangka strategi
# Strategy main function
def onTick():
pass
# Program entry
def main():
while True: # Enter infinite loop mode
onTick() # execution strategy main function
Sleep(1000) # sleep for 1 second
Platform FMZ menggunakan mod latihan putaran.main
fungsi danonTick
fungsi perlu ditakrifkan. fungsi utama adalah fungsi kemasukan strategi, dan program akan melaksanakan baris kod baris bermula dari fungsi utama. dalam fungsi utama, menuliswhile
gelung dan berulang kali menjalankanonTick
Semua kod teras strategi ditulis dalamonTick
function.
Langkah 2: Tentukan kedudukan maya
mp = 0
Kelebihan kedudukan maya adalah bahawa ia mudah untuk menulis, dan operasi berulang adalah cepat. Ia biasanya digunakan dalam persekitaran backtest. Ia dianggap bahawa setiap pesanan dipenuhi sepenuhnya, tetapi kedudukan sebenar biasanya digunakan dalam perdagangan sebenar. Oleh kerana kedudukan maya adalah untuk merekodkan keadaan selepas pembukaan dan penutupan, ia perlu ditakrifkan sebagai pembolehubah global.
Langkah 3: Dapatkan garis K
exchange.SetContractType('rb000') # Subscribe to futures varieties
bars_arr = exchange.GetRecords() # Get K-line array
if len(bars_arr) <long + 1: # If the number of K lines is too small
return
Menggunakan fungsi FMZSetContractType
, anda boleh melanggan kontrak indeks rebar dengan lulus dalam GetRecords
fungsi untuk mendapatkan data K-garis indeks rebar. kerana ia mengambil tempoh tertentu untuk mengira kadar penyimpangan, untuk mengelakkan kesilapan program, jika tidak ada cukup K garis, menggunakanif
kata-kata untuk penapis.
Langkah 4: Hitung kadar penyimpangan
close = bars_arr[-2]['Close'] # Get the closing price of the previous K line
ma1 = TA.MA(bars_arr, short)[-2] # Calculate the short-term moving average value of the previous K line
bias1 = (close-ma1) / ma1 * 100 # Calculate the short-term deviation rate value
ma2 = TA.MA(bars_arr, long)[-2] # Calculate the long-term average of the previous K line
bias2 = (close-ma2) / ma2 * 100 # Calculate the long-term deviation rate value
Menurut formula untuk mengira kadar penyimpangan, kita mula-mula mendapatkan harga penutupan. Dalam strategi ini, kita menggunakan harga penutupan K-line sebelumnya, yang bermaksud bahawa isyarat K-line semasa ditubuhkan dan K-line seterusnya adalah untuk meletakkan pesanan. Kemudian gunakan FMZ terbina dalamtalib
perpustakaan untuk mengira purata bergerak.TA.MA
. Fungsi ini menerima 2 parameter, iaitu: Array garis K dan tempoh purata bergerak.
Langkah 5: Menempatkan pesanan
global mp # global variables
current_price = bars_arr[-1]['Close'] # latest price
if mp> 0: # If you are holding long positions
if bias2 <= bias1: # If the long-term deviation rate is less than or equal to the short-term deviation rate
exchange.SetDirection("closebuy") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # Closing long positions
mp = 0 # reset virtual holding positions
if mp <0: # If you are holding short positions
if bias2 >= bias1: # If the long-term deviation rate is greater than or equal to the short-term deviation rate
exchange.SetDirection("closesell") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # closing short positions
mp = 0 # reset virtual holding positions
if mp == 0: # If there is no holding position
if bias2> bias1: # Long-term deviation rate is greater than short-term deviation rate
exchange.SetDirection("buy") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # open long positions
mp = 1 # reset virtual holding position
if bias2 <bias1: # The long-term deviation rate is less than the short-term deviation rate
exchange.SetDirection("sell") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # open short positions
mp = -1 # reset virtual holding position
# Backtest configuration
'''backtest
start: 2018-01-01 00:00:00
end: 2020-01-01 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
'''
# External parameters
short = 10
long = 50
# Global variables
mp = 0
# 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) <long + 1: # If the number of K lines is too small
return
# Calculate BIAS
close = bars_arr[-2]['Close'] # Get the closing price of the previous K line
ma1 = TA.MA(bars_arr, short)[-2] # Calculate the short-term moving average of the previous K line
bias1 = (close-ma1) / ma1 * 100 # Calculate the short-term deviation rate value
ma2 = TA.MA(bars_arr, long)[-2] # Calculate the long-term average of the previous K line
bias2 = (close-ma2) / ma2 * 100 # Calculate the long-term deviation rate value
# Placing Orders
global mp # global variables
current_price = bars_arr[-1]['Close'] # latest price
if mp> 0: # If you are holding long positions
if bias2 <= bias1: # If the long-term deviation rate is less than or equal to the short-term deviation rate
exchange.SetDirection("closebuy") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # closing long positions
mp = 0 # reset virtual holding position
if mp <0: # If you are holding short positions
if bias2 >= bias1: # If the long-term deviation rate is greater than or equal to the short-term deviation rate
exchange.SetDirection("closesell") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # closing short positions
mp = 0 # reset virtual holding position
if mp == 0: # If there is no holding position
if bias2> bias1: # Long-term deviation rate is greater than short-term deviation rate
exchange.SetDirection("buy") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # opening long positions
mp = 1 # reset virtual holding position
if bias2 <bias1: # The long-term deviation rate is less than the short-term deviation rate
exchange.SetDirection("sell") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # open short positions
mp = -1 # reset virtual holding position
# Program entry function
def main():
while True: # loop
onTick() # execution strategy main function
Sleep(1000) # sleep for 1 second
Strategi lengkap telah diterbitkan di laman web FMZ:https://www.fmz.com/strategy/215129
Konfigurasi Backtest
Laporan prestasi
Kurva dana
Kadar penyimpangan adalah alat perdagangan yang mudah dan berkesan yang boleh memberikan rujukan yang berkesan untuk peniaga. Dalam penggunaan sebenar, ia boleh digunakan dengan fleksibel dengan penunjuk band MACD dan Bollinger untuk benar-benar mencerminkan nilainya.