
首先,我们需要导入easytrader库和相关的模块,并创建一个use函数用于选择券商。这里使用的是新浪模拟交易平台。
下面是一个用easytrader库实现的红三兵的一个简单交易策略示例。
import easytrader
import time
import datetime
def use(name):
if name == 'ths':
return easytrader.use('ths')
if name == 'ht':
return easytrader.use('ht')
if name == 'xq':
return easytrader.use('xq')
if name == 'gf':
return easytrader.use('gf')
if name == 'yh':
return easytrader.use('yh')
if name == 'sina':
return easytrader.use('sina')
raise ValueError('unknown trader')
class RedThreeSoldiers:
def __init__(self, symbol):
self.user = use('sina')
self.symbol = symbol
self.bars = []
self.bar_interval = 60 # bar的时间间隔,单位秒
self.pre_close_price = 0 # 当前交易日的昨收价
def handle_bar(self, bar):
# 判断当前时间是否在交易时间段内
# 早上9:30之前和下午3点之后,我们不进行交易
now = datetime.datetime.now()
if now < now.replace(hour=9, minute=25, second=0, microsecond=0):
return
if now > now.replace(hour=14, minute=57, second=0, microsecond=0):
return
# 更新历史数据
self.bars.append(bar)
# 获取当前持仓信息
position = self.user.position[self.symbol]
# 如果当前没有持仓,则判断是否需要开仓
if position['总持仓'] == 0:
# 如果最新的3个bar都是阳线,且第2个bar的收盘价高于第1个bar的收盘价,第3个bar的收盘价高于第2个bar的收盘价
if self.bars[-1]['close'] > self.bars[-1]['open'] and self.bars[-2]['close'] > self.bars[-2]['open'] and self.bars[-3]['close'] > self.bars[-3]['open'] \
and self.bars[-2]['close'] > self.bars[-3]['close'] and self.bars[-1]['close'] > self.bars[-2]['close']:
# 买入
order_price = self.bars[-1]['close']
self.user.buy(self.symbol, price=order_price, amount=100)
# 设置止损价和止盈价
stop_loss_price = order_price * 0.98
take_profit_price = order_price * 1.02
self.user.set_order_direction('sell')
self.user.set_stop_loss(self.symbol, price=stop_loss_price, amount=100)
self.user.set_take_profit(self.symbol, price=take_profit_price, amount=100)
# 如果已经持仓了,则更新止损价和止盈价
else:
if position['浮动盈亏'] < 0:
# 如果当前浮动亏损超过5%,则平仓止损
if abs(position['浮动盈亏']/position['成本价']) > 0.05:
self.user.sell(self.symbol, price=self.bars[-1]['close'], amount=position['总持仓'])
return
# 更新止损价
stop_loss_price = self.pre_close_price * 0.98
self.user.set_order_direction('sell')
self.user.adjust_stop_loss(self.symbol, price=stop_loss_price)
# 更新止盈价
take_profit_price = position['成本价'] * 1.02
self.user.set_take_profit(self.symbol, price=take_profit_price, amount=position['可卖数量'])
# 更新当日昨收价
if len(self.bars) == 1:
self.pre_close_price = bar['close']
import easyquotation
def main():
stock_code = '600000'
trader = RedThreeSoldiers(stock_code)
quotation = easyquotation.use('sina')
while True:
try:
bar = quotation.stocks(stock_code)[stock_code]
trader.handle_bar(bar)
time.sleep(trader.bar_interval)
except KeyboardInterrupt:
break
except Exception as e:
print(f'Error: {e}')
if __name__ == '__main__':
main()
您可以将股票代码修改为任何您感兴趣的代码进行实际交易,但这里代码只是个示范引导学习和交流。当然,在实际交易时,请务必审慎考虑风险并设置合理的止损和止盈价。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。明辉优配提示:文章来自网络,不代表本站观点。