Kami menggunakan FMZ untuk membuat retargeting perdagangan dalam talian.

Penulis:Mengurangkan kuantiti -1., Dicipta: 2020-10-18 23:56:01, Dikemas kini:

Kembali ke tempat asal

Sebelum ini, saya telah mencari alat yang dapat mengulangi masa nyata, dan untuk beberapa waktu, vnpy berasa terlalu rumit untuk mengubahnya menjadi antara muka. Akhirnya, saya kembali ke dokumen dalam panduan baru FMZ. Kami telah melihat bahawa ia dapat mencapai fungsi yang kami mahukan, dan kami telah mengeluarkan satu gelombang, dan kami telah membincangkannya dengan anda selama enam bulan. Fmz mempunyai sedikit artikel yang sangat berguna untuk panduan pemula, tetapi ketika itu saya hanya bertanya melalui posting dan saya faham.

Pertama, pengguna boleh memilih masa permulaan dan akhir.我们用fmz做了在线的一个网格交易回测功能

Ini adalah satu perkara yang perlu diparameterkan:

我们用fmz做了在线的一个网格交易回测功能Saya rasa ia adalah satu cara yang tidak masuk akal, saya tidak tahu sama ada terdapat fungsi yang boleh dimulakan.

  self.grid_setting = {
            "min_price": min_price,
            "max_price": max_price,
            "grid_diff": grid_diff,
            "re_diff": grid_diff,
            "total_amount_B": total_amount_B
        }

Parameter konfigurasi grid: harga minimum, maksimum, selang pembahagian grid dan selang penyambungan semula.

Ini adalah parameter yang dikemukakan oleh pengguna.

Fungsi bus utama ialah

      def bus(self):
        params = gen_params(self.begin, self.end, self.currency, self.balance, self.stocks)
        task = VCtx(params)
        done = self.train()
        ret = task.Join(True)
        benefit_cal = self.cal_benefit(ret,done)
        result = {}
        result['done'] = done
        result['ret'] = benefit_cal
        return result
  • Dapatkan konfigurasi ulangan fmz dengan fungsi gen_params yang baru sahaja dibuat
  • Fungsi Latihan Berlari
  • Mengikut struktur data yang dikembalikan oleh fmz, mengira pulangan dan memaparkan rekod urus niaga

Panggilan task.Join ((() akan menamatkan tugas penjumlahan dan mengembalikan data bersih. Parameter Join tidak menyampaikan True yang mengembalikan hasil penjumlahan semula yang tidak dianalisis semula, dan tidak boleh memanggil lagi fungsi berkaitan dagangan atau pasaran selepas selesai.

Dengan dokumen, saya meneka apa yang akan dikembalikan oleh hasil strategi.

Kod yang digabungkan dengan fmz kembali data keuntungan dikira

    def cal_benefit(self,ret,done):
        #计算相隔多少天
        day_begin =  datetime.datetime.strptime(self.begin, '%Y-%m-%d %H:%M:%S')
        day_end =  datetime.datetime.strptime(self.end, '%Y-%m-%d %H:%M:%S')
        days = (day_end - day_begin).days
        begin = ret.iloc[0].net
        end = ret.iloc[-1].net
        fee = ret.iloc[-1].fee
        #计算一共多少次套利
        df = pd.DataFrame(done)
        #如果没有成交记录
        if len(done) == 0:
            benefit_cal = {}
            benefit_cal['benefit'] = 0
            benefit_cal['count'] = 0
            benefit_cal['fee'] = 0
            benefit_cal['benefit_p'] = 0
            return benefit_cal

        buy_count = len(df[df['type'] == 'buy'])
        sell_count = len(df[df['type'] == 'sell'])
        count = min(buy_count , sell_count)
        benefit = count * self.grid_diff * float(done[0]['amount'])
        benefit_cal = {}
        benefit_cal['benefit']= benefit
        benefit_cal['count']= count
        benefit_cal['fee']= fee
        print(benefit_cal)
        per = benefit / self.total_amount_B * 360 / days
        print(per)
        benefit_cal['benefit_p']= round( per , 4)
        return benefit_cal

Ya. Saya rasa agak keliru, tetapi saya akan memberitahu anda tentang idea grid kami:

### Mengambil idea untuk memeriksa senarai * Mula-mula initialize grid berdasarkan parameter pengguna * Penyenaraian pertama * Memeriksa keadaan urus niaga yang telah dipaparkan pada masa yang sesuai, dan memaparkan semula mengikut pesanan

            while True:
                Sleep(1000 * 60 * 5)
                if 'refreash_data_finish!' != mid.refreash_data():
                    continue
                # 初始化网格
                if not init_flag:
                    cur_price = mid.ticker['Last']
                    grid_list = grid.cal_grid_list(cur_price)
                    init_flag = True

                # 开始挂单
                if not place_flag:
                    grid.place_orders()
                    place_flag = True

                # 开始检查订单状态及时挂单
                grid.check_order_update()
                done = grid.done

Mungkin begitu, mungkin kelihatan agak pelik pada mulanya.

Fmz dalam 14 hari pada dasarnya dapat memenuhi masa tunggu pengguna di bahagian depan, semakin lama, sedikit lebih lambat, adalah alat yang baik untuk mengutip fmz sebagai antara muka, selamat satu!

Ya, kali ini kami kembali untuk mengiklankan perlumbaan perdagangan, pasukan kuantiti kekal kami mengadakan perlumbaan dagangan, bebas untuk mengambil bahagian. Jika anda memberikan API pertanyaan, anda boleh mendaftar untuk berjaya, sebagai perlumbaan dua minggu, hadiah kami juga bagus. Tinggalkan alamat hubungan fengye607.


Lebih lanjut

RumputAnda perlu mendapatkan transaksi secara langsung, dan kemudian meniru hasil penyesuaian. Ini akan menjadi sedikit masalah, jika hanya satu pasangan transaksi, anda boleh cuba menulis enjin penyesuaian sendiri, tidak rumit.