python海龟交易策略_在聚宽平台上编写海龟交易法则

import jqdata

import math

import numpy as np

import pandas as pd

from collections import deque

def initialize(context):

set_option('use_real_price', True)

set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')

g.security = '000060.XSHE'

set_benchmark(g.security)

g.in_day = 20

g.out_day = 10

g.today_units = 0

g.current_units = 0

g.N=deque(maxlen=19)

g.current_N = 0

g.last_buy_price = 0

price = attribute_history(g.security, g.N.maxlen*2+1, '1d', ('high', 'low', 'close'))

for i in range(g.N.maxlen+1, g.N.maxlen*2+1):

li = []

for j in range(i-19,i+1):

a = price['high'][j]-price['low'][j]

b = abs(price['high'][j]-price['close'][j-1])

c = abs(price['low'][j]-price['close'][j-1])

li.append(max(a,b,c))

current_N = np.array(li).mean()

g.N.append(current_N)

def before_trading_start(context):

g.current_N = cal_N()

g.today_units = 0

def handle_data(context, data):

dt = context.current_dt

current_price = data[g.security].price #上一分钟价格

value = context.portfolio.total_value

cash = context.portfolio.available_cash

unit = math.floor(value * 0.01 / g.current_N)

if g.current_units == 0:

buy(current_price, cash, unit)

else:

if stop_loss(current_price):

return

if sell(current_price):

return

addin(current_price, cash, unit)

def cal_N():

# if len(g.N) < g.N.maxlen:

# price = attribute_history(g.security, g.N.maxlen+2, '1d', ('high', 'low', 'close'))

# li = []

# for i in range(1, g.N.maxlen+2):

# a = price['high'][i]-price['low'][i]

# b = abs(price['high'][i]-price['close'][i-1])

# c = abs(price['low'][i]-price['close'][i-1])

# li.append(max(a,b,c))

# current_N = np.array(li).mean()

# else:

price = attribute_history(g.security, 2, '1d', ('high', 'low', 'close'))

a = price['high'][1]-price['low'][1]

b = abs(price['high'][1]-price['close'][0])

c = abs(price['low'][1]-price['close'][0])

current_N = (max(a,b,c) + np.array(g.N).sum())/(g.N.maxlen+1)

g.N.append(current_N)

return current_N

def buy(current_price, cash, unit):

price = attribute_history(g.security, g.in_day, '1d', ('close',))

if current_price > max(price['close']):

shares = cash / current_price

if shares >= unit:

print("buying %d" % unit)

o = order(g.security, unit)

g.last_buy_price = o.price

g.current_units += 1

g.today_units += 1

return True

return False

def addin(current_price, cash, unit):

if current_price >= g.last_buy_price + 0.5 * g.current_N:

shares = cash / current_price

if shares >= unit:

print("adding %d" % unit)

o = order(g.security, unit)

g.last_buy_price = o.price

g.current_units += 1

g.today_units += 1

return True

return False

def sell(current_price):

price = attribute_history(g.security, g.out_day, '1d', ('close',))

if current_price < min(price['close']):

print("selling")

order_target(g.security, 0)

g.current_units = g.today_units

return True

return False

def stop_loss(current_price):

if current_price < g.last_buy_price - 2 * g.current_N:

print("stop loss")

order_target(g.security, 0)

g.current_units = g.today_units

return True

return False

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值