Описание:Продажа держателей валют при отклонении цены от MACDПринцип реализации:Начиная с текущего значения macd, выясните, насколько выше текущее значение macd, чтобы найти соответствующую цену закрытия k-линии, блокируя соответствующую цену k-линии до максимального значения в диапазоне k-линии текущего значения закрытия, и если текущая цена больше максимальной цены в регионе, то запускается продажа. Если максимальная длина сохранности Macd больше 15, выберите максимальное значение Macd. Проверка данных:
Объясните:Политика поддерживает только наличные деньги, может работать в нескольких валютах одновременно, исходный код только для справки.
'''backtest start: 2023-01-01 00:00:00 end: 2023-05-12 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Bitfinex","currency":"BTC_USD","stocks":10}] ''' # from matplotlib import pyplot as plt # plt.figure() class ExitTop(object): def __init__(self,index): self.index = index self.totestlist = [] # MACD数据 self.klist = [] # k线数据 self.toplus = [] self.tocpn = [] self.Sell = False # 获取k线及MACD数据 def GetRecord(self) -> bool: self.totestlist = [] self.klist = [] self.toplus = [] self.tocpn = [] records = exchanges[self.index].GetRecords() macd = TA.MACD(records, 12, 26, 9) # 判断DIF是否大于DEA if not macd[0][-2] > macd[1][-2] and macd[0][-3] < macd[1][-3] or not macd[0][-2] > macd[1][-2] and macd[0][-4] < macd[1][-4]: return False self.totestlist = macd[0][len(macd[0])-80:] # 封装k线数据 for get in range(len(records)): self.klist.append(records[get]["Close"]) self.klist = self.klist[len(self.klist)-80:] return True def mepath(self): if not self.GetRecord(): return False # 向前遍历发现最大值 maxsign = -1000000000000 for i in range(len(self.totestlist)-1,-1,-1): if self.totestlist[i] > maxsign: maxsign = self.totestlist[i] self.tocpn.append([1,i]) else: if len(self.tocpn) > 0: self.tocpn[-1][0] = self.tocpn[-1][0]+1 self.toplus.insert(0,maxsign) sign = False shorttime = [0,0] # 步长 , 索引 for i in range(len(self.tocpn)): if self.tocpn[i][0] > 15 and sign == False: shorttime = [self.tocpn[i][0],self.tocpn[i][1]] sign = True # 如果最大索引不是自己 if shorttime[1] < len(self.klist)-4: # 锁定区域内最高价格 are = max(self.klist[shorttime[1]:-4]) # 判断是否存在大于当前macd值,如果当前价格大于区域内最高价格 if self.totestlist[-2]+300 < self.totestlist[shorttime[1]] and self.klist[-2] >= are: return True return False return False def main(self): result = self.mepath() if result == True and self.Sell == False: exchanges[self.index].Sell(-1, num) self.Sell = True elif result == False: if self.Sell == True: self.Sell = False # plt.plot(self.totestlist) # plt.plot(self.toplus) # LogStatus(plt) def main(): transaction = [] for index in range(len(exchanges)): transaction.append(ExitTop(index)) while True: for tran in range(len(transaction)): transaction[tran].main() Sleep(1000*60)