[TOC]
Seperti kata pepatah, dunia ini akan terpisah setelah lama bersatu. juga akan melakukan sebaliknya setelah lama pliting. Dan fenomena ini juga ada di pasar berjangka. Tidak ada variasi yang hanya naik tetapi tidak jatuh. Tapi kapan naik dan kapan jatuh, itu tergantung pada tingkat penyimpangan. Dalam artikel ini, kita akan menggunakan tingkat penyimpangan untuk membangun strategi perdagangan yang sederhana.
Bias adalah indikator teknis yang berasal dari rata-rata bergerak. Hal ini terutama dalam bentuk persentase untuk mengukur tingkat penyimpangan harga dari rata-rata bergerak dalam fluktuasi. Jika rata-rata bergerak adalah biaya rata-rata trader, tingkat penyimpangan adalah rata-rata tingkat pengembalian trader.
Dasar teoritis dari tingkat deviasi adalah analisis hati trader. Ketika harga lebih besar dari biaya rata-rata pasar, itu berarti bahwa pedagang posisi panjang akan memiliki gagasan untuk menguangkan keuntungan, yang akan menyebabkan harga turun. Ketika harga lebih rendah dari biaya rata-rata pasar, itu berarti bahwa penjual pendek menguntungkan, dan gagasan untuk menguangkan keuntungan akan menyebabkan harga naik.
Ketika harga menyimpang ke atas dari rata-rata bergerak, tingkat penyimpangan terlalu besar, dan ada kemungkinan tinggi bahwa harga akan turun di masa depan.
Ketika harga menyimpang dari rata-rata bergerak ke bawah, tingkat penyimpangan terlalu kecil, dan ada kemungkinan tinggi bahwa harga akan naik di masa depan.
Meskipun rata-rata bergerak dihitung dari harga, dalam hal bentuk eksternal, harga pasti akan bergerak lebih dekat ke rata-rata bergerak, atau harga akan selalu berfluktuasi di sekitar rata-rata bergerak.
Tingkat penyimpangan = [ ((harga penutupan hari - harga rata-rata hari N) / harga rata-rata hari N] * 100%
Di antara mereka, N adalah parameter rata-rata bergerak, karena periode N berbeda, hasil perhitungan tingkat penyimpangan juga berbeda. Secara umum, nilai N adalah: 6, 12, 24, 36, dll. Dalam penggunaan yang sebenarnya, juga dapat disesuaikan secara dinamis sesuai dengan berbagai varietas. Namun, pemilihan parameter sangat penting. Jika parameter terlalu kecil, tingkat penyimpangan akan terlalu sensitif, jika parameter terlalu besar, tingkat penyimpangan akan terlalu lambat. Hasil perhitungan tingkat penyimpangan positif dan negatif. Semakin besar tingkat penyimpangan positif, semakin besar keuntungan bulls dan semakin besar kemungkinan koreksi harga. Semakin besar tingkat penyimpangan, semakin besar keuntungan pendek dan semakin besar kemungkinan harga rebound.
Karena tingkat penyimpangan adalah bentuk lain dari rata-rata bergerak, maka kita juga dapat menyesuaikan strategi tingkat penyimpangan ganda berdasarkan strategi rata-rata bergerak ganda. Berdasarkan hubungan posisi antara tingkat penyimpangan jangka pendek dan tingkat penyimpangan jangka panjang, keadaan pasar saat ini dinilai. Jika tingkat penyimpangan jangka panjang lebih besar dari tingkat penyimpangan jangka pendek, itu sebenarnya mewakili rata-rata bergerak jangka pendek ke atas melintasi rata-rata 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 mengadopsi mode pelatihan rotasi.main
Fungsi danonTick
fungsi harus didefinisikan. Fungsi utama adalah fungsi entri dari strategi, dan program akan mengeksekusi baris kode baris dimulai dari fungsi utama.while
loop dan berulang kali menjalankanonTick
Semua kode inti dari strategi ditulis dalamonTick
function.
Langkah 2: Mendefinisikan posisi virtual
mp = 0
Keuntungan dari posisi virtual adalah bahwa itu mudah untuk menulis, dan operasi iteratif cepat. Hal ini umumnya digunakan dalam lingkungan backtest. Diasumsikan bahwa setiap pesanan sepenuhnya diisi, tetapi posisi sebenarnya biasanya digunakan dalam perdagangan yang sebenarnya. Karena posisi virtual adalah untuk merekam keadaan setelah pembukaan dan penutupan, itu perlu didefinisikan sebagai variabel 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 dapat berlangganan kontrak indeks rebar dengan melewati GetRecords
fungsi untuk mendapatkan data K-line dari indeks rebar. Karena dibutuhkan periode tertentu untuk menghitung tingkat penyimpangan, untuk menghindari kesalahan program, jika tidak ada cukup K garis, menggunakanif
pernyataan untuk menyaring.
Langkah 4: Menghitung tingkat 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 rumus untuk menghitung tingkat deviasi, kita pertama mendapatkan harga penutupan. dalam strategi ini, kita menggunakan harga penutupan K-line sebelumnya, yang berarti bahwa sinyal K-line saat ini ditetapkan dan K-line berikutnya adalah untuk menempatkan pesanan. kemudian gunakan FMZ built-intalib
perpustakaan untuk menghitung rata-rata bergerak. misalnya rata-rata bergerak adalah:TA.MA
Fungsi ini menerima 2 parameter, yaitu: K array garis dan periode rata-rata bergerak.
Tahap 5: Membuat 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 dipublikasikan di situs web FMZ:https://www.fmz.com/strategy/215129
Konfigurasi Backtest
Laporan kinerja
Kurva dana
Tingkat deviasi adalah alat perdagangan yang sederhana dan efektif yang dapat memberikan referensi yang efektif bagi pedagang. Dalam penggunaan yang sebenarnya, dapat diterapkan secara fleksibel dengan indikator MACD dan Bollinger Band untuk benar-benar mencerminkan nilainya.