python 完整的海龟策略_海龟策略btc现货版

本文介绍了一个基于Python的海龟交易策略应用于BTC现货的实现,包括开仓、加仓、止损止盈规则,并展示了1年的回测结果,年化收益率80%,最大回撤16%。策略基于原始的海龟交易系统,未进行过多优化,适用于回测和实盘交易的调整。
摘要由CSDN通过智能技术生成

海龟策略btc现货版

海龟策略btc现货版

Author: groot, Date: 2020-02-22 21:40:07

Tags:

看到平台上没有公开的python海龟策略,自己写个简单的抛个砖。

接近原版的海龟系统,没怎么优化,当做回测试验吧,也可以自己再优化下接实盘跑。

开仓:超过唐奇安上轨开仓

加仓:超过之前的价格的0.5ATR就加仓

止损止盈:跌破下轨或者跌破上次开仓价-2ATR就全部止盈

回测了1年数据,年化80%,最大回撤16%

现货资金利用率较低,改成合约版后收益会更高。

'''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)

更多内容

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值