• 大小: 4.66KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2024-05-06
  • 语言: Python
  • 标签: 量化  海龟  

资源简介

海龟量化策略.py 代码

资源截图

代码片段和文件信息

import numpy as np
import talib
import math

def getExtremem(arrayHighPriceResult arrayLowPriceResult):
    np_arrayHighPriceResult = np.array(arrayHighPriceResult[:-1])
    np_arrayLowPriceResult = np.array(arrayLowPriceResult[:-1])
    maxResult = np_arrayHighPriceResult.max()
    minResult = np_arrayLowPriceResult.min()
    return [maxResult minResult]
    
def getAtrAndUnit(atrArrayResult atrLengthResult portfolioValueResult):
    atr = atrArrayResult[atrLengthResult-1]
    unit = math.floor(portfolioValueResult * .01 / atr)
    return [atr unit]
    
def getStopPrice(firstOpenPriceResult units_hold_result atrResult):
    stopPrice =  firstOpenPriceResult - 2*atrResult + (units_hold_result-1)*0.5*atrResult
    return stopPrice


def init(context):
    context.tradedayNum = 0
    context.unit = 0
    context.atr = 0
    context.tradingSignal = ‘start‘ 
    context.preTradingSignal = ‘‘
    context.units_hold_max = 4
    context.units_hold = 0
    context.quantity = 0
    context.max_add = 0
    context.firstOpenPrice = 0
    context.s = ‘CSI300.INDX‘
    update_universe([context.s])
    context.openObserveTime = 55;
    context.closeObserveTime = 20;
    context.atrTime = 20;

def handle_bar(context bar_dict):
    portfolioValue = context.portfolio.portfolio_value
    highPrice = history(context.openObserveTime+1 ‘1d‘ ‘high‘)[context.s]
    lowPriceForAtr = history(context.openObserveTime+1 ‘1d‘ ‘low‘)[context.s]
    lowPriceForExtremem = history(context.closeObserveTime+1 ‘1d‘ ‘low‘)[context.s]
    closePrice = history(context.openObserveTime+2 ‘1d‘ ‘close‘)[context.s]
    closePriceForAtr = closePrice[:-1]
    
    atrArray = talib.ATR(highPrice.values lowPriceForAtr.values closePriceForAtr.values timeperiod=context.atrTime)
    
    maxx = getExtremem(highPrice.values lowPriceForExtremem.values)[0]
    minn = getExtremem(highPrice.values lowPriceForExtremem.values)[1]
    atr = atrArray[-2]
    

    if (context.tradingSignal != ‘start‘):
        if (context.units_hold != 0):
            context.max_add += 0.5 * getAtrAndUnit(atrArray atrArray.size portfolioValue)[0]
    else:
        context.max_add = bar_dict[context.s].last
        
    
    curPosition = context.portfolio.positions[context.s].quantity
    availableCash = context.portfolio.cash
    ma

评论

共有 条评论