
Subscribe to BTC
Share Dialog
Share Dialog
<100 subscribers
<100 subscribers
För att bygga ett handelssystem för myntspekulation måste du personligen lära dig en hel del dator- och finansiell kunskap. (1) Datainsamling
def prepare_data(codes=['000300.SH', '399006.SZ'], start_time="20100101", end_time="20211231"): df = load_data(codes, start_time, end_time)
df["rsi"] = ta.RSI(df.close, timeperiod=14)
df["to_buy"] = ""
df.loc[df["rsi"] <= 30, 'to_buy'] = True
df['to_buy'] = df['to_buy'].astype('bool')
df["to_sell"] = ""
df.loc[df["rsi"] >= 70, 'to_sell'] = True
df['to_sell'] = df['to_sell'].astype('bool')
return df
Steg 2: Ange en strategi Strategireglerna är mycket enkla.
Kontots ursprungliga värde är 100000, varje lager har samma vikt.
Köp enligt köpsignalen och sälj enligt säljsignalen i uppgifterna.
class SelectBySignal(object): def init(self, signal_buy='to_buy', signal_sell='to_sell'): super(SelectBySignal, self).init() self.signal_buy = signal_buy self.signal_sell = signal_sell
def __call__(self, context):
bar = context['bar'].copy()
acc = context['acc']
holding = acc.get_holding_instruments()
to_buy = list(bar[bar[self.signal_buy]].index)
to_sell = list(bar[bar[self.signal_sell]].index)
instruments = to_buy + holding
to_selected = []
for s in instruments:
if s not in to_sell:
to_selected.append(s)
context['selected'] = to_selected
n = len(to_selected)
if n > 0:
context['weights'] = {code:1/n for code in to_selected}
else:
context['weights'] = {}
return False
class Strategy: def init(self, algo=None): self.algo = algo self.acc = Account()
def algo_processor(self, context):
if self.algo(context) is True: #如果algo返回True,直接不运行,本次不调仓
return None
return context['weights']
def onbar(self, index, date, df_bar):
self.acc.update_bar(date, df_bar)
weights = self.algo_processor({'index': index, 'bar':df_bar, 'date':date, 'acc':self.acc})
if weights is not None:
self.acc.adjust_weights(date, weights)
Steg 3: Backtesting Backtesting baserat på ovanstående data och strategi
class Backtest: def init(self, df): self.df = df self.dates = self.df.index.unique() self.observers = []
def onbar(self, index, date):
df_bar = self.df.loc[date]
if type(df_bar) is pd.Series:
df_bar = df_bar.to_frame().T
df_bar.index = df_bar['code']
self.strategy.onbar(index, date, df_bar)
def run(self, s):
self.strategy = s
for index, date in enumerate(self.dates):
self.onbar(index, date)
return self.get_results()
def get_results(self):
s = self.strategy
df = s.acc.get_results_df()
return df
Steg 4: Analys Analysera strategins resultat och jämföra det med CSI 300-indexet.
def analysis(start, end, benchmarks=[]): equities = [] for benchmark in benchmarks: bench_df = load_from_file(benchmark)[start:end] se = (bench_df['rate'] + 1).cumprod() se.name = benchmark equities.append(se)
path = os.path.dirname(__file__)
filename = os.path.dirname(path)+'/results/first_test.csv'
if os.path.exists(filename):
df = pd.read_csv(filename)
df['date'] = df['date'].apply(lambda x: str(x))
df.index = df['date']
se = (df['rate'] + 1).cumprod()
se.name = 'strategy'
equities.append(se)
df_equities = pd.concat(equities, axis=1)
df_equities.dropna(inplace=True)
print(df_equities)
from performance import PerformanceUtils
df_ratios, df_corr, df_years = PerformanceUtils().calc_equity(df_equity=df_equities)
return df_equities, df_ratios, df_corr, df_years
Kör huvudfunktionen if name == 'main': date_start = "20100101" date_end = "20211231" df = prepare_data(codes=['000300.SH', '399006.SZ'], start_time=date_start, end_time=date_end)
algo = SelectBySignal(signal_buy='to_buy', signal_sell='to_sell')
s = Strategy(algo=algo)
b = Backtest(df=df)
df = b.run(s)
path = os.path.dirname(__file__)
df.to_csv(os.path.dirname(path) + '/results/first_test.csv')
df_equities, df_ratios, df_corr, df_years = analysis(start=date_start, end=date_end, benchmarks=['000300.SH'])
display(df_ratios)
fig = plt.figure(figsize=(8, 6))
ax1 = fig.add_subplot(2, 1, 1)
ax2 = fig.add_subplot(2, 1, 2)
df_equities.plot(ax=ax1)
if df_years is not None:
print(df_years)
df_years.T.plot(kind='bar', ax=ax2, use_index=True)
plt.show()
Det innehåll som presenteras ovan handlar endast om grunderna för kryptovalutor, vilket är relaterat till om vi kan tjäna pengar genom kryptovalutor. Kryptovalutor tjänar pengar inte bara genom vetenskapliga metoder för att öka inkomsterna, utan också genom att hitta sätt att spara pengar. Handläggningsavgifterna är små, men de får inte ignoreras. Jag har räknat ut att med frekventa transaktioner och långa handelstider kan avgifterna uppgå till mer än 10 000 U per år. Därefter kommer jag att presentera några vanliga sätt att minska avgifterna på stora handelsplattformar. (1) Sänka Binances avgifter Binance är för närvarande världens största växlingsplats för digitala valutor och du måste registrera dig på Binance om du vill spekulera i mynt. Transaktionsavgiften dras av från de erhållna tillgångarna. Om du till exempel köper Ethereum/USDT betalas avgiften i Ethereum. Om du säljer Ethereum/USDT betalas provisionen i USDT. Exempel. Du lägger en order på 10Ethereum till ett pris av 3 452,55 USD per aktie. Transaktionsavgift = 10Ethereum0,1 % = 0,01Ethereum Eller så lägger du en order för att sälja 10Ethereum till 3 452,55 USDT per aktie. Transaktionsavgift = (10Ethereum3,452.55USDT)*0.1% = 34.5255USDT Vad många inte vet är att Binance transaktionsavgift också kan minskas. Om du vill minska dina Binance-handelsavgifter måste du registrera dig via länken nedan eller använda inbjudningskoden "Q022W7SC". https://accounts.binance.com/sv/register?ref=Q022W7SC

(2) Minskning av OKX-avgifterna OKX är en professionell handelsplattform för digitala valutor som är älskad av många användare, och dess transaktionsavgifter kan minskas. OKX delar in sina användare i två nivåer beroende på hur många transaktioner de gör: normala och professionella. Vanliga användare graderas enligt sina OKB-positioner, medan professionella användare graderas enligt sin handelsvolym och tillgångsstorlek. De olika nivåerna bestämmer handelsavgifterna för nästa handelsdag. Vid beräkning av avgiftsnivåerna, om mynthandelsvolymen, den totala handelsvolymen för leverans och eviga kontrakt (USDT-leveranskontrakt, myntbaserat leveranskontrakt, USDT-evigt kontrakt, myntbaserat evigt kontrakt), handelsvolymen för optionskontrakt och tillgångsvolymen uppfyller villkoren för olika avgiftsnivåer, kommer användarna att åtnjuta avgiftsrabatten på den högsta nivån. Första metoden: OKX har en officiell högsta sparränta på 20 %. Använd länken nedan för att registrera dig hos OKX och spara 20 % på avgifterna. https://www.ouyi.business/join/BTC1ETH Andra metoden: Öppna OKX webbplats och ange "BTC1ETH" i "Invitation Code" på registreringssidan för att se cashbackprocenten: 20 % längst ner. Var noga med att ange denna inbjudningskod, annars kan du inte få 20 % cashback. (3) Sänka FTX-avgifterna FTX är för närvarande en mycket snabbväxande, kontraktsspelare mer utbyte, måste du registrera FTX om du spelar kontraktet.Om du vill minska FTX transaktionsavgifter, måste du använda följande inbjudningslänk för att registrera dig. https://ftx.com/referrals#a=121031692 3, handelsvägen är lång, tillsammans med den framåt Vill du veta mer om hur du kan minska provisionen? telegram: btcethcool Vi har inrättat en community som är dedikerad till forskning om handel, lägg till telegramvänner för att dra in dig i communityt.
För att bygga ett handelssystem för myntspekulation måste du personligen lära dig en hel del dator- och finansiell kunskap. (1) Datainsamling
def prepare_data(codes=['000300.SH', '399006.SZ'], start_time="20100101", end_time="20211231"): df = load_data(codes, start_time, end_time)
df["rsi"] = ta.RSI(df.close, timeperiod=14)
df["to_buy"] = ""
df.loc[df["rsi"] <= 30, 'to_buy'] = True
df['to_buy'] = df['to_buy'].astype('bool')
df["to_sell"] = ""
df.loc[df["rsi"] >= 70, 'to_sell'] = True
df['to_sell'] = df['to_sell'].astype('bool')
return df
Steg 2: Ange en strategi Strategireglerna är mycket enkla.
Kontots ursprungliga värde är 100000, varje lager har samma vikt.
Köp enligt köpsignalen och sälj enligt säljsignalen i uppgifterna.
class SelectBySignal(object): def init(self, signal_buy='to_buy', signal_sell='to_sell'): super(SelectBySignal, self).init() self.signal_buy = signal_buy self.signal_sell = signal_sell
def __call__(self, context):
bar = context['bar'].copy()
acc = context['acc']
holding = acc.get_holding_instruments()
to_buy = list(bar[bar[self.signal_buy]].index)
to_sell = list(bar[bar[self.signal_sell]].index)
instruments = to_buy + holding
to_selected = []
for s in instruments:
if s not in to_sell:
to_selected.append(s)
context['selected'] = to_selected
n = len(to_selected)
if n > 0:
context['weights'] = {code:1/n for code in to_selected}
else:
context['weights'] = {}
return False
class Strategy: def init(self, algo=None): self.algo = algo self.acc = Account()
def algo_processor(self, context):
if self.algo(context) is True: #如果algo返回True,直接不运行,本次不调仓
return None
return context['weights']
def onbar(self, index, date, df_bar):
self.acc.update_bar(date, df_bar)
weights = self.algo_processor({'index': index, 'bar':df_bar, 'date':date, 'acc':self.acc})
if weights is not None:
self.acc.adjust_weights(date, weights)
Steg 3: Backtesting Backtesting baserat på ovanstående data och strategi
class Backtest: def init(self, df): self.df = df self.dates = self.df.index.unique() self.observers = []
def onbar(self, index, date):
df_bar = self.df.loc[date]
if type(df_bar) is pd.Series:
df_bar = df_bar.to_frame().T
df_bar.index = df_bar['code']
self.strategy.onbar(index, date, df_bar)
def run(self, s):
self.strategy = s
for index, date in enumerate(self.dates):
self.onbar(index, date)
return self.get_results()
def get_results(self):
s = self.strategy
df = s.acc.get_results_df()
return df
Steg 4: Analys Analysera strategins resultat och jämföra det med CSI 300-indexet.
def analysis(start, end, benchmarks=[]): equities = [] for benchmark in benchmarks: bench_df = load_from_file(benchmark)[start:end] se = (bench_df['rate'] + 1).cumprod() se.name = benchmark equities.append(se)
path = os.path.dirname(__file__)
filename = os.path.dirname(path)+'/results/first_test.csv'
if os.path.exists(filename):
df = pd.read_csv(filename)
df['date'] = df['date'].apply(lambda x: str(x))
df.index = df['date']
se = (df['rate'] + 1).cumprod()
se.name = 'strategy'
equities.append(se)
df_equities = pd.concat(equities, axis=1)
df_equities.dropna(inplace=True)
print(df_equities)
from performance import PerformanceUtils
df_ratios, df_corr, df_years = PerformanceUtils().calc_equity(df_equity=df_equities)
return df_equities, df_ratios, df_corr, df_years
Kör huvudfunktionen if name == 'main': date_start = "20100101" date_end = "20211231" df = prepare_data(codes=['000300.SH', '399006.SZ'], start_time=date_start, end_time=date_end)
algo = SelectBySignal(signal_buy='to_buy', signal_sell='to_sell')
s = Strategy(algo=algo)
b = Backtest(df=df)
df = b.run(s)
path = os.path.dirname(__file__)
df.to_csv(os.path.dirname(path) + '/results/first_test.csv')
df_equities, df_ratios, df_corr, df_years = analysis(start=date_start, end=date_end, benchmarks=['000300.SH'])
display(df_ratios)
fig = plt.figure(figsize=(8, 6))
ax1 = fig.add_subplot(2, 1, 1)
ax2 = fig.add_subplot(2, 1, 2)
df_equities.plot(ax=ax1)
if df_years is not None:
print(df_years)
df_years.T.plot(kind='bar', ax=ax2, use_index=True)
plt.show()
Det innehåll som presenteras ovan handlar endast om grunderna för kryptovalutor, vilket är relaterat till om vi kan tjäna pengar genom kryptovalutor. Kryptovalutor tjänar pengar inte bara genom vetenskapliga metoder för att öka inkomsterna, utan också genom att hitta sätt att spara pengar. Handläggningsavgifterna är små, men de får inte ignoreras. Jag har räknat ut att med frekventa transaktioner och långa handelstider kan avgifterna uppgå till mer än 10 000 U per år. Därefter kommer jag att presentera några vanliga sätt att minska avgifterna på stora handelsplattformar. (1) Sänka Binances avgifter Binance är för närvarande världens största växlingsplats för digitala valutor och du måste registrera dig på Binance om du vill spekulera i mynt. Transaktionsavgiften dras av från de erhållna tillgångarna. Om du till exempel köper Ethereum/USDT betalas avgiften i Ethereum. Om du säljer Ethereum/USDT betalas provisionen i USDT. Exempel. Du lägger en order på 10Ethereum till ett pris av 3 452,55 USD per aktie. Transaktionsavgift = 10Ethereum0,1 % = 0,01Ethereum Eller så lägger du en order för att sälja 10Ethereum till 3 452,55 USDT per aktie. Transaktionsavgift = (10Ethereum3,452.55USDT)*0.1% = 34.5255USDT Vad många inte vet är att Binance transaktionsavgift också kan minskas. Om du vill minska dina Binance-handelsavgifter måste du registrera dig via länken nedan eller använda inbjudningskoden "Q022W7SC". https://accounts.binance.com/sv/register?ref=Q022W7SC

(2) Minskning av OKX-avgifterna OKX är en professionell handelsplattform för digitala valutor som är älskad av många användare, och dess transaktionsavgifter kan minskas. OKX delar in sina användare i två nivåer beroende på hur många transaktioner de gör: normala och professionella. Vanliga användare graderas enligt sina OKB-positioner, medan professionella användare graderas enligt sin handelsvolym och tillgångsstorlek. De olika nivåerna bestämmer handelsavgifterna för nästa handelsdag. Vid beräkning av avgiftsnivåerna, om mynthandelsvolymen, den totala handelsvolymen för leverans och eviga kontrakt (USDT-leveranskontrakt, myntbaserat leveranskontrakt, USDT-evigt kontrakt, myntbaserat evigt kontrakt), handelsvolymen för optionskontrakt och tillgångsvolymen uppfyller villkoren för olika avgiftsnivåer, kommer användarna att åtnjuta avgiftsrabatten på den högsta nivån. Första metoden: OKX har en officiell högsta sparränta på 20 %. Använd länken nedan för att registrera dig hos OKX och spara 20 % på avgifterna. https://www.ouyi.business/join/BTC1ETH Andra metoden: Öppna OKX webbplats och ange "BTC1ETH" i "Invitation Code" på registreringssidan för att se cashbackprocenten: 20 % längst ner. Var noga med att ange denna inbjudningskod, annars kan du inte få 20 % cashback. (3) Sänka FTX-avgifterna FTX är för närvarande en mycket snabbväxande, kontraktsspelare mer utbyte, måste du registrera FTX om du spelar kontraktet.Om du vill minska FTX transaktionsavgifter, måste du använda följande inbjudningslänk för att registrera dig. https://ftx.com/referrals#a=121031692 3, handelsvägen är lång, tillsammans med den framåt Vill du veta mer om hur du kan minska provisionen? telegram: btcethcool Vi har inrättat en community som är dedikerad till forskning om handel, lägg till telegramvänner för att dra in dig i communityt.
No activity yet