Setelah melihat bahwa tidak ada strategi untuk merayap di platform Python, saya menuliskan sebuah strategi yang sederhana untuk merayap. Pada saat ini, sistem yang lebih dekat dengan versi aslinya, tidak terlalu dioptimalkan, jika Anda melakukan uji coba kembali, Anda dapat mengoptimalkan diri Anda sendiri untuk menjalankan piringan.
Posisi terbuka: Lebih tinggi dari Dongjian Peningkatan: Lebih dari 0.5 ATR dari harga sebelumnya Stop Loss Stop: Semua stop jika turun dari jalur atau turun dari harga awal terakhir - 2ATR
Data 1 tahun diperbarui, 80% diperbarui, maksimum mundur 16%.
Dengan menggunakan uang tunai yang lebih rendah, Anda akan mendapatkan keuntungan yang lebih besar setelah Anda mengubahnya menjadi versi kontrak.
'''backtest start: 2019-01-01 00:00:00 end: 2020-03-02 00:00:00 period: 1d exchanges: [{"eid":"OKEX","currency":"BTC_USDT","stocks":0}] args: [["fresh_rete",24],["DC_range",20],["atrlength",14]] ''' import numpy as np import pandas as pd import datetime data = {'ordertime':[],'id':[],'price':[]} hisorder = pd.DataFrame(data) def turtle(): #声明全局变量 global hisorder acct = exchange.GetAccount() records=exchange.GetRecords(fresh_rete*60*60) ticker = exchange.GetTicker() portfolio_value = acct.Balance+acct.FrozenBalance+(acct.Stocks+acct.FrozenStocks)*records[-1]['Close'] atr = TA.ATR(records, atrlength)[-1] #计算得到unit大小 value = portfolio_value*trade_percent unit = min(round(value/atr,4),round(acct.Balance/(ticker['Last']+100),4)) #unit = round(value/atr,2) df = pd.DataFrame(records) current_price = records[-1]['Close'] last_price = 0 if len(hisorder)!=0: last_price = hisorder.iloc[-1]['price'] max_price = df[-DC_range:-2]['High'].max() min_price = df[-int(DC_range/2):-2]['Low'].min() opensign = len(hisorder)==0 and current_price > max_price addsign = len(hisorder)!=0 and current_price > last_price + 0.5*atr stopsign = len(hisorder)!=0 and current_price < min_price closesign = len(hisorder)!=0 and current_price < (last_price - 2*atr) # if _D(records[-1]['Time']/1000) == '2020-01-25 00:00:00': # Log("records[-1]",records[-1]) if opensign | addsign: if acct.Balance >= (ticker['Last']+10)*unit and unit >0: id = exchange.Buy(ticker['Last']+10,unit) orderinfo = exchange.GetOrder(id) data = {'ordertime':_D(records[-1]['Time']/1000),'id':id,'price':records[-1]['Close']} hisorder = hisorder.append(data,ignore_index=True) Log('买入后,最新账户信息:', exchange.GetAccount()) Log("opensign",opensign,"addsign",addsign) # else: # Log('余额已不足,请充值......', exchange.GetAccount()) if stopsign | closesign: exchange.Sell(-1, acct.Stocks+acct.FrozenStocks) data = {'ordertime':[],'id':[],'price':[]} hisorder = pd.DataFrame(data) Log('卖出后,最新账户信息:', exchange.GetAccount()) Log("stopsign",stopsign,"closesign",closesign) def main(): while True: turtle() Sleep(fresh_rete*60*60*1000)