Type/to search
1
Follow
6
Followers
우리는 fmz를 사용하여 온라인 그리드 트레이딩 백테스팅 기능을 수행했습니다.
FAQ
Created 2020-10-18 23:56:01  
 2
 5117

시작점으로 돌아가자

이전에는 실시간으로 재검토할 수 있는 도구를 찾고 있었는데, 한동안은 vnpy가 인터페이스로 바뀌는 것이 너무 힘들었다는 것을 연구했습니다.
이 문서는 fmz의 초보자 안내서에서 찾아볼 수 있습니다.
그리고 우리는 그 안에 우리가 원하는 기능을 발견하고, 그것을 꺼내서, 6개월 동안 그것에 대해 이야기했습니다.
그런데, fmz의 글은 너무 적어서 초보자 가이드가 너무 유용하게 쓰여졌는데, 그 당시에는 글을 통해 물어봤을 때만 알 수 있었다.

첫 번째는 사용자가 시작과 종료 시간을 직접 선택할 수 있다는 것입니다.
img

이 모든 것은 변수화되어야 합니다.

img
이 함수들을 초기화할 수 있는 방법이 없나봐요.

python
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 }

격자 구성 파라미트: 최소, 최대 가격, 격자의 분배 간격 및 재등장 간격.

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

bus 함수는

python
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가 반환하는 수익 데이터의 부속 코드 계산

python
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

이 글은 제가 좀 혼란스러워서, 우리 네트워크의 생각을 말씀드리겠습니다.

넥타이 점검을 통해

  • 먼저, 사용자들의 변수에 따라 그리드를 초기화합니다.
  • 처음 등록
  • 매매요소의 거래상황을 주기적으로 확인하고 매매요소에 따라 다시 매매요소를 확인한다.
python
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를 제공하면 등록할 수 있습니다. 2주간의 대회로, 우리의 상금을 획득하는 것도 좋습니다.

Related Recommendations
Comment
All comments (1)

    你是需要获取实时行情,然后模拟回测的结果。这样会有一些麻烦,如果只是单交易对可以试试自己写个回测引擎,也不复杂

    6 years ago
  • 1
Forums
PINE Language
Get the app
iPhone Download
© 2015 - ∞ INVENTOR PTE LTD (SG)