Strategi EMV Volatilitas Sederhana

Penulis:Kebaikan, Dibuat: 2020-07-01 10:39:17, Diperbarui: 2023-10-28 15:26:49

img

Ringkasan

Tidak seperti indikator teknis lainnya, Ease of Movement Value mencerminkan perubahan harga, volume, dan popularitas. Ini adalah teknologi yang menggabungkan perubahan harga dan volume. Ini mengukur perubahan harga dari volume satuan, Membentuk indikator volatilitas harga. Ketika pasar mengumpulkan popularitas dan transaksi aktif, itu memicu sinyal beli; ketika volume perdagangan rendah, dan energi pasar akan habis, itu memicu sinyal jual.

Simple volatility EMV dirancang sesuai dengan prinsip grafik volume yang sama dan grafik terkompresi. Konsep utamanya adalah: harga pasar akan mengkonsumsi banyak energi hanya ketika tren berbalik atau akan berbalik, dan kinerja eksternal adalah bahwa volume perdagangan menjadi lebih besar. Ketika harga naik, itu tidak akan mengkonsumsi terlalu banyak energi karena efek dorongan. Meskipun ide ini bertentangan dengan pandangan bahwa baik kuantitas maupun kenaikan harga, ia memiliki fitur uniknya sendiri.

Rumus perhitungan EMV

Langkah 1: Menghitung mov_mid

Di antara mereka, TH mewakili harga tertinggi hari itu, TL mewakili harga terendah hari itu, YH mewakili harga tertinggi hari sebelumnya, dan YL mewakili harga terendah hari sebelumnya.

img

Langkah 2: Perhitungkan rasio

Di antara mereka, TVOL mewakili volume perdagangan hari itu, TH mewakili harga tertinggi hari itu, dan TL mewakili harga terendah hari itu.

img

Langkah 3: Menghitung emv

img

Penggunaan EMV

Penulis EMV percaya bahwa kenaikan besar disertai dengan cepat habisnya energi, dan kenaikan seringkali tidak berlangsung terlalu lama; sebaliknya, volume moderat, yang dapat menghemat sejumlah energi, sering membuat kenaikan berlangsung lebih lama. Setelah tren naik terbentuk, volume perdagangan yang lebih sedikit dapat mendorong harga naik, dan nilai EMV akan meningkat. Setelah pasar penurunan terbentuk, itu sering disertai dengan penurunan tak terbatas atau kecil, dan nilai EMV akan menurun. Jika harga berada di pasar yang fluktuatif atau kenaikan harga dan penurunan disertai dengan volume yang besar, nilai EMV juga akan mendekati nol. Jadi Anda akan menemukan bahwa EMV berada di bawah sumbu nol di sebagian besar pasar, yang juga merupakan fitur utama dari indikator ini. Dari perspektif lain, nilai-nilai EMV mega-trends dapat menghasilkan keuntungan dan menghasilkan keuntungan yang cukup.

Penggunaan EMV cukup sederhana, hanya melihat apakah EMV melintasi sumbu nol. Ketika EMV di bawah 0, itu mewakili pasar yang lemah; ketika EMV di atas 0, itu mewakili pasar yang kuat. Ketika EMV berubah dari negatif menjadi positif, itu harus dibeli; ketika EMV berubah dari positif menjadi negatif, itu harus dijual. Karakteristiknya adalah bahwa ia tidak hanya dapat menghindari pasar kejutan di pasar, tetapi juga memasuki pasar pada saat pasar tren dimulai. Namun, karena EMV mencerminkan perubahan volume ketika harga berubah, itu hanya memiliki efek pada tren jangka menengah hingga panjang. Untuk siklus perdagangan jangka pendek atau relatif pendek, efek EMVs sangat buruk.

Pelaksanaan strategi

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

FMZ.COMPertama, Anda perlu mendefinisikanmainFungsi danonTickFungsi.mainfungsi adalah fungsi entri dari strategi, dan program akan menjalankan baris kode baris darimainfungsi.mainfungsi, tulis awhileloop dan berulang kali menjalankanonTickSemua kode inti dari strategi ditulis dalamonTick function.

Langkah 2: Dapatkan data posisi

def 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: # Traverse the array of positions
             if i['ContractType'] =='IH000': # If the position symbol is equal to the subscription symbol
                 if i['Type']% 2 == 0: # if it is long position
                     position = i['Amount'] # Assign a positive number of positions
                 else:
                     position = -i['Amount'] # Assign the number of positions to be negative
     return position # return position quantity

Karena dalam strategi ini, hanya jumlah posisi real-time yang digunakan, untuk memfasilitasi pemeliharaan,get_positiondigunakan di sini untuk merangkum jumlah posisi. jika posisi saat ini panjang, mengembalikan angka positif, dan jika posisi saat ini pendek, mengembalikan angka negatif.

Langkah 3: Dapatkan data K-line

exchange.SetContractType('IH000') # Subscribe to futures variety
bars_arr = exchange.GetRecords() # Get K-line array
if len(bars_arr) <10: # If the number of K lines is less than 10
     return

Sebelum mendapatkan data K-line tertentu, Anda harus terlebih dahulu berlangganan kontrak perdagangan tertentu, menggunakanSetContractTypefungsi dariFMZ.COMJika Anda ingin tahu informasi lain tentang kontrak, Anda juga dapat menggunakan variabel untuk menerima data ini.GetRecordsfungsi untuk mendapatkan data K-line, karena dikembalikan adalah array, jadi kita menggunakan variabelbars_arruntuk menerimanya.

Langkah 4: Menghitung emv

bar1 = bars_arr[-2] # Get the previous K-line data
bar2 = bars_arr[-3] # get the previous K-line data
# Calculate the value of mov_mid
mov_mid = (bar1['High'] + bar1['Low']) / 2-(bar2['High'] + bar2['Low']) / 2
if bar1['High'] != bar1['Low']: # If the dividend is not 0
     # Calculate the value of ratio
     ratio = (bar1['Volume'] / 10000) / (bar1['High']-bar1['Low'])
else:
     ratio = 0
# If the value of ratio is greater than 0
if ratio> 0:
     emv = mov_mid / ratio
else:
     emv = 0

Di sini, kita tidak menggunakan harga terbaru untuk menghitung nilai EMV, tetapi menggunakan garis K arus yang relatif tertinggal untuk mengeluarkan sinyal dan menempatkan garis K untuk mengeluarkan pesanan. Tujuan dari ini adalah untuk membuat backtest lebih dekat dengan perdagangan nyata.

Langkah 5: Membuat pesanan

current_price = bars_arr[-1]['Close'] # latest price
position = get_position() # Get the latest position
if position> 0: # If you are holding long positions
    if emv <0: # If the current price is less than teeth
        exchange.SetDirection("closebuy") # Set the trading direction and type
        exchange.Sell(round(current_price-0.2, 2), 1) # close long position
if position <0: # If you are holding short positions
    if emv> 0: # If the current price is greater than the teeth
        exchange.SetDirection("closesell") # Set the trading direction and type
        exchange.Buy(round(current_price + 0.2, 2), 1) # close short position
if position == 0: # If there is no holding position
    if emv> 0: # If the current price is greater than the upper lip
        exchange.SetDirection("buy") # Set the trading direction and type
        exchange.Buy(round(current_price + 0.2, 2), 1) # open long position
    if emv <0: # if the current price is smaller than the chin
        exchange.SetDirection("sell") # Set the trading direction and type
        exchange.Sell(round(current_price-0.2, 2), 1) # open short position

Sebelum menempatkan order, kita perlu menentukan dua data, satu adalah harga order dan yang lainnya adalah status posisi saat ini. harga menempatkan order sangat sederhana, hanya menggunakan harga penutupan saat ini untuk menambahkan atau mengurangi harga perubahan minimum dari berbagai. karena kita telah menggunakanget_positionfungsi untuk merangkum posisi, kita bisa memanggilnya langsung di sini. akhirnya, posisi dibuka dan ditutup sesuai dengan hubungan posisi antara EMV dan sumbu nol.

Strategi backtest

Konfigurasi Backtest

img

Log uji balik

img img

Kurva modal

img

Strategi Lengkap

# Backtest configuration
'''backtest
start: 2019-01-01 00:00:00
end: 2020-01-01 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
'''


def 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: # Traverse the array of positions
             if i['ContractType'] =='IH000': # If the position symbol is equal to the subscription symbol
                 if i['Type']% 2 == 0: # if it is long position
                     position = i['Amount'] # Assign a positive number of positions
                 else:
                     position = -i['Amount'] # Assign the number of positions to be negative
     return position # return position quantity


# Strategy main function
def onTick():
     # retrieve data
     exchange.SetContractType('IH000') # Subscribe to futures
     bars_arr = exchange.GetRecords() # Get K-line array
     if len(bars_arr) <10: # If the number of K lines is less than 10
         return

     # Calculate emv
     bar1 = bars_arr[-2] # Get the previous K-line data
     bar2 = bars_arr[-3] # get the previous K-line data
     # Calculate the value of mov_mid
     mov_mid = (bar1['High'] + bar1['Low']) / 2-(bar2['High'] + bar2['Low']) / 2
     if bar1['High'] != bar1['Low']: # If the dividend is not 0
          # Calculate the value of ratio
          ratio = (bar1['Volume'] / 10000) / (bar1['High']-bar1['Low'])
     else:
          ratio = 0
     # If the value of ratio is greater than 0
     if ratio> 0:
          emv = mov_mid / ratio
     else:
          emv = 0

     # Placing orders
     current_price = bars_arr[-1]['Close'] # latest price
     position = get_position() # Get the latest position
     if position> 0: # If you are holding long positions
          if emv <0: # If the current price is less than teeth
               exchange.SetDirection("closebuy") # Set the trading direction and type
               exchange.Sell(round(current_price-0.2, 2), 1) # close long position
     if position <0: # If you are holding short positions
          if emv> 0: # If the current price is greater than the teeth
               exchange.SetDirection("closesell") # Set the trading direction and type
               exchange.Buy(round(current_price + 0.2, 2), 1) # close short position
     if position == 0: # If there is no holding position
          if emv> 0: # If the current price is greater than the upper lip
               exchange.SetDirection("buy") # Set the trading direction and type
               exchange.Buy(round(current_price + 0.2, 2), 1) # open long position
     if emv <0: # if the current price is smaller than the chin
               exchange.SetDirection("sell") # Set the trading direction and type
               exchange.Sell(round(current_price-0.2, 2), 1) # open short position

# Program entry
def main():
     while True: # Enter infinite loop mode
         onTick() # execution strategy main function
         Sleep(1000) # sleep for 1 second

Strategi lengkap telah dipublikasikan di alun-alun strategiFMZ.COMsitus web, dan dapat digunakan dengan mengklik Salin.https://www.fmz.com/strategy/213636

Untuk meringkas

Melalui kursus studi ini, kita dapat melihat bahwa EMV bertentangan dengan pedagang biasa, tetapi itu tidak tidak masuk akal. Karena EMV memperkenalkan data volume, itu lebih efektif daripada indikator teknis lain yang menggunakan perhitungan harga untuk mengetahui apa yang ada di balik harga. Setiap strategi memiliki karakteristik yang berbeda. Hanya dengan memahami sepenuhnya keuntungan dan kerugian dari berbagai strategi dan menghilangkan sampah dan mengekstraksi intinya, kita dapat melangkah lebih jauh dari kesuksesan.


Berkaitan

Lebih banyak