diff --git a/vn.trader/ctaAlgo/ctaPolicy.py b/vn.trader/ctaAlgo/ctaPolicy.py new file mode 100644 index 00000000..e75b1628 --- /dev/null +++ b/vn.trader/ctaAlgo/ctaPolicy.py @@ -0,0 +1,65 @@ +# encoding: UTF-8 + +from ctaBase import * +from vtConstant import * + + +DEBUGCTALOG = True + +class CtaPolicy(object): + """CTA的策略规则类 + 包括: + 1、风险评估 + 2、最低止损位置 + 3、保本止损位置 + 4、跟随止损/止盈位置 + 5、是否加仓等 + + R1,Big Range/Renko + R2,Small Range/Renko + """ + + def __init__(self, r1Period=EMPTY_STRING, r2Period=EMPTY_STRING): + + self.openR1Period = r1Period # 开仓周期Mode + self.openR2Period = r2Period # 开仓周期Mode + + self.entryPrice = EMPTY_FLOAT # 开仓价格 + self.lastPeriodBasePrice = EMPTY_FLOAT # 上一个周期内的最近高价/低价(看R2 Rsi的高点和低点) + self.entryTime = None + + self.riskLevel = EMPTY_INT # 风险评分,1、低;2、中;3、高 + + self.cancelInNextBar = False + + self.addPos = False # 是否加仓 + self.addPosOnPips = EMPTY_INT # 价格超过开仓价多少点时加仓 + self.addPosOnRtnPercent = EMPTY_FLOAT # 价格回撤比例时加仓 + self.addPosOnRsiRtnWithPips = EMPTY_INT # 价格超过开仓价,并且低位RSI反转(多:RSI低位折返,空:RSI高位折返) + self.addPosOnKdjRtnWithPips = EMPTY_INT # 价格超过开仓价,并且低位Kdj反转(多:Kdj低位折返,空:Kdj高位折返) + + self.exitOnStopPrice = EMPTY_FLOAT # 固定止损价格。 这个规则最优先匹配,作为最大亏损线。 + self.exitOnWinPrice = EMPTY_FLOAT # 固定止盈价格。 + + self.exitOnProtectedPrice = EMPTY_FLOAT # 保本价格。 + self.exitOnLastRtnPips = EMPTY_INT # 盈利后,最后开仓价的回调点数。 使用时,pips* minDiff + self.exitOnTopRtnPips = EMPTY_INT # 盈利后,最高盈利的回撤点数。 使用时,pips * minDiff + + self.exitOnR2RsiRtn = False # First RSI Return + self.exitOnR2EmaCrossed = False # EMA(inputEma1Len) Cross Above、 Under + self.exitOnR2KamaCrossed = False # AMA(inputAma1Len) Cross Above、 Under + self.exitOnR2KamaRtn = False # 盈利后,Kama[-1] vs Kama[-2] + + self.exitOnR1RsiRtn = False # First RSI Return + self.exitOnR1EmaCrossed = False # EMA(inputEma1Len) Cross Above、 Under + self.exitOnR1KamaCrossed = False # AMA(inputAma1Len) Cross Above、 Under + self.exitOnR1KamaRtn = False # 盈利后,Kama[-1] vs Kama[-2] + + self.exitOnR1PeriodChanged = False # R1 Period Changed, if True,openR1Period != periodMode + self.exitOnR2PeriodChanged = False # R2 Period Changed, if True,openR2Period != periodMode + + self.exitOnR1PeriodModes = [] # 可以与exitOnR1PeriodChanged ,指定的立场周期;进入后,激活 exitOnR2RsiRtn + + + +