Strategi EMV Volatiliti Mudah

Penulis:Kebaikan, Dicipta: 2020-07-01 10:39:17, Dikemas kini: 2023-10-28 15:26:49

img

Ringkasan

Tidak seperti penunjuk teknikal lain, Ease of Movement Value mencerminkan perubahan harga, jumlah, dan populariti. Ia adalah teknologi yang menggabungkan perubahan harga dan jumlah. Ia mengukur perubahan harga jumlah unit, Membentuk penunjuk turun naik harga. Apabila pasaran mengumpulkan populariti dan urus niaga aktif, ia meminta isyarat beli; apabila jumlah dagangan rendah, dan tenaga pasaran akan habis, ia meminta isyarat jual.

EMV volatiliti mudah direka mengikut prinsip carta jumlah yang sama dan carta terdesak. Konsep utamanya adalah: harga pasaran akan menggunakan banyak tenaga hanya apabila trend bertukar atau akan bertukar, dan prestasi luaran adalah bahawa jumlah dagangan menjadi lebih besar. Apabila harga meningkat, ia tidak akan menggunakan terlalu banyak tenaga kerana kesan pendorong. Walaupun idea ini bertentangan dengan pandangan bahawa kedua-dua kuantiti dan kenaikan harga, ia mempunyai ciri-ciri uniknya sendiri.

Formula pengiraan EMV

Langkah 1: Hitung 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: Hitung nisbah

Di antara mereka, TVOL mewakili jumlah dagangan pada hari itu, TH mewakili harga tertinggi pada hari itu, dan TL mewakili harga terendah pada hari itu.

img

Langkah 3: Hitung emv

img

Penggunaan EMV

Penulis EMV percaya bahawa kenaikan besar disertai dengan keletihan tenaga yang cepat, dan kenaikan sering tidak berlangsung terlalu lama; sebaliknya, jumlah sederhana, yang dapat menjimatkan sejumlah tenaga, sering membuat kenaikan berlangsung lebih lama. Sebaik sahaja trend menaik terbentuk, jumlah perdagangan yang kurang dapat mendorong harga naik, dan nilai EMV akan meningkat. Sebaik sahaja pasaran penurunan terbentuk, ia sering disertai dengan penurunan yang tidak berkesudahan atau kecil, dan nilai EMV akan menurun. Jika harga berada di pasaran yang tidak menentu atau harga naik dan turun disertai dengan jumlah yang besar, nilai EMV juga akan hampir sifar. Jadi anda akan mendapati bahawa EMV berada di bawah paksi sifar di kebanyakan pasaran, yang juga merupakan ciri utama penunjuk ini. Dari perspektif lain, nilai-nilai EMV mega-trend dan dapat menjana keuntungan yang mencukupi.

Penggunaan EMV agak mudah, hanya melihat sama ada EMV melintasi paksi sifar. Apabila EMV di bawah 0, ia mewakili pasaran yang lemah; apabila EMV di atas 0, ia mewakili pasaran yang kuat. Apabila EMV berubah dari negatif menjadi positif, ia harus dibeli; apabila EMV berubah dari positif menjadi negatif, ia harus dijual. Ciri-cirinya adalah bahawa ia tidak hanya dapat mengelakkan pasaran kejutan di pasaran, tetapi juga memasuki pasaran pada masa ketika pasaran trend bermula. Walau bagaimanapun, kerana EMV mencerminkan perubahan dalam jumlah apabila harga berubah, ia hanya mempunyai kesan pada trend jangka menengah hingga panjang. Untuk kitaran perdagangan jangka pendek atau agak pendek, kesan EMVs sangat lemah.

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.COMmenggunakan mod latihan putaran.mainfungsi danonTickfungsi.mainfungsi adalah fungsi kemasukan strategi, dan program akan menjalankan baris kod dengan baris darimainfungsi.mainfungsi, tulis awhilegelung dan berulang kali menjalankanonTickSemua kod teras strategi ditulis dalamonTick function.

Langkah 2: Dapatkan data kedudukan

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

Kerana dalam strategi ini, hanya bilangan kedudukan masa nyata digunakan, untuk memudahkan penyelenggaraan,get_positiondigunakan di sini untuk merangkumi jumlah kedudukan. Jika kedudukan semasa panjang, ia mengembalikan nombor positif, dan jika kedudukan semasa pendek, ia mengembalikan nombor 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 mesti terlebih dahulu melanggan kontrak perdagangan tertentu, menggunakanSetContractTypefungsi daripadaFMZ.COMJika anda ingin mengetahui maklumat lain mengenai kontrak, anda juga boleh menggunakan pembolehubah untuk menerima data ini.GetRecordsfungsi untuk mendapatkan data K-garis, kerana dikembalikan adalah array, jadi kita menggunakan pembolehubahbars_arruntuk menerimanya.

Langkah 4: Hitung 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 terkini untuk mengira nilai EMV, tetapi menggunakan garis K semasa yang agak tertinggal untuk mengeluarkan isyarat dan meletakkan garis K untuk mengeluarkan pesanan. Tujuan ini adalah untuk membuat backtest lebih dekat dengan perdagangan sebenar.

Langkah 5: Menempatkan 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 meletakkan pesanan, kita perlu menentukan dua data, satu adalah harga pesanan dan yang lain adalah status kedudukan semasa. harga meletakkan pesanan adalah sangat mudah, hanya menggunakan harga penutupan semasa untuk menambah atau mengurangkan harga perubahan minimum pelbagai.get_positionAkhirnya, kedudukan dibuka dan ditutup mengikut hubungan kedudukan antara EMV dan paksi sifar.

Ujian belakang strategi

Konfigurasi Backtest

img

Log Ujian 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 yang lengkap telah diterbitkan di dataran strategiFMZ.COMlaman web, dan ia boleh digunakan dengan mengklik Salin.https://www.fmz.com/strategy/213636

Ringkasnya

Melalui kursus kajian ini, kita dapat melihat bahawa EMV bertentangan dengan peniaga biasa, tetapi tidak tidak munasabah. Kerana EMV memperkenalkan data jumlah, ia lebih berkesan daripada penunjuk teknikal lain yang menggunakan pengiraan harga untuk mengetahui apa yang berada di sebalik harga. Setiap strategi mempunyai ciri yang berbeza. Hanya dengan memahami sepenuhnya kelebihan dan kekurangan strategi yang berbeza dan menghilangkan sampah dan mengekstrak intipati, kita boleh pergi lebih jauh dari kejayaan.


Berkaitan

Lebih lanjut