우리는 FMZ를 사용하여 온라인 네트워크 거래 재검토 기능을 만들었습니다.

저자:윈 퀀티메이션-1, 2020-10-18 23:56:01, 업데이트:

다시 시작

이전에는 실시간으로 재검토할 수 있는 도구를 찾고 있었는데, 잠시 동안은 vnpy를 연구하면서 인터페이스로 바꾸는 것이 너무 번거롭다고 느꼈다. 그리고 마침내 FMZ의 새로운 지침서 문서로 돌아갔습니다. 우리는 이 모든 것을 우리가 원하는 기능을 구현할 수 있다는 것을 발견했고, 6개월 동안 우리가 원하는 기능을 가지고 있는 것을 발견하고, 그것을 한 파동으로 꺼내서 여러분들과 토론했습니다. 그런데 fmz의 글은 너무 적어서 신인 가이드에서 유용하게 쓰여졌는데, 당시에는 포스팅을 통해 물어본 것만으로도 이해가 되었다.

첫 번째는 사용자가 시작시간과 종료시간을 선택할 수 있다는 것입니다.我们用fmz做了在线的一个网格交易回测功能

이 물건은 몇 가지 요소가 필요합니다.

我们用fmz做了在线的一个网格交易回测功能이 함수들이 초기화될 수 있는지 모르겠어요.

  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
        }

격자 구성 매개 변수: 최소, 최대 가격, 격자 분포 간격 및 재열열 간격.

이 모든 것은 사용자가 제출한 매개 변수입니다.

기본 버스 함수는

      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
  • 방금 gen_params 함수를 통해 fmz의 재검토 설정을 얻습니다.
  • 실행 훈련 함수
  • fmz가 반환하는 데이터 구조에 따라 수익률을 계산하고 거래 기록을 표시합니다.

task.Join ((() 를 호출하면 재검토 작업이 종료되고 순수 데이터를 반환합니다. Join 파라그램은 True를 전달하지 않습니다.

문서를 통해, 저는 전략적 결과로 돌아오는 것을 추측하고 있습니다.

fmz가 반환하는 수익 데이터에 추가된 코드 계산

    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

네. 조금 혼란스럽지만, 먼저 우리 네트워크에 대한 생각을 말씀드리겠습니다.

### 팝업 체크의 아이디어로 진행 * 먼저 사용자의 매개 변수에 따라 격자를 초기화합니다. * 처음 등록 * 매매명서에 따라 매매신청을 재매매할 수 있도록 매매신청의 성과를 점검합니다.

            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

이 글은 이쪽의 문서를 통해 공개되었습니다.

이 시간 공유하고 싶은 것은 FMZ의 14 일 동안의 반복 속도가 기본적으로 사용자가 프론트 엔드에서 기다리는 시간을 충족시킬 수 있다는 것을 표현하고 싶었습니다. 더 오래하면 조금 느려집니다.

네, 이번에도 거래 대회의 홍보를 위해 다시 돌아왔습니다. 우리의 永赢量化 팀은 거래 대회를 열고 무료로 참여합니다. 모든 사람들이 문의 API를 제공하면 등록이 성공할 수 있습니다.


더 많은 내용

초목당신은 실시간 거래 결과를 얻고, 다시 테스트 결과를 모방해야 합니다. 이것은 약간의 문제가 될 수 있습니다. 단 하나의 트랜잭션 짝만 있다면 직접 테스트 엔진을 쓸 수 있습니다.