股票学习网

每日牛股推荐,股票每日推荐,每日股票推荐,股票预测 - - 股票预测网!

免费版自动下单炒股软件(免费版炒股软件有哪些)

2023-09-04 17:38分类:帐户交易 阅读:

本篇文章给大家谈谈免费版自动下单炒股软件,以及免费版炒股软件有哪些的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

文章详情介绍:

如何购买和交易ETF_ 一个初学者指南!

在过去的几十年里,交易所交易基金(ETF)已经成为投资者们追逐资本市场收益的一种重要工具。与传统的共同基金相比,ETF具有更高的流动性、更低的费用和更大的灵活性。然而,对于新手来说,购买和交易ETF可能会感到有些困惑。本文将为您提供一个简单明了的指南,帮助您了解如何购买和交易ETF。

一、什么是ETF?

ETF是一种类似于股票的投资工具,它代表着一篮子不同类型的资产,如股票、债券、商品或其他证券。与共同基金不同,ETF的价格在交易所上涨和下跌,可以随时买卖,就像股票一样。ETF通常追踪某个指数,如标普500指数或纳斯达克综合指数,因此它们被认为是一种便捷的投资方式,可以让投资者获得广泛的市场曝光。

二、选择合适的ETF

购买和交易ETF之前,您需要确定您的投资目标和风险承受能力。首先,您需要决定您想要在哪个市场或资产类别进行投资。例如,如果您对股票市场感兴趣,可以选择追踪特定股票指数的股票ETF。如果您更喜欢固定收益投资,那么债券ETF可能是更好的选择。

其次,您需要考虑ETF的费用和流动性。费用是购买和持有ETF时需要支付的成本,包括管理费和交易佣金。较低的费用通常意味着更高的回报。此外,您还应该注意ETF的流动性,即市场上买卖ETF的活跃程度。流动性较高的ETF更容易买卖,并且价格波动较小。

三、如何购买ETF

1、开立证券账户:

首先,您需要在一家证券公司或经纪商处开立一个证券账户。在中国,您可以选择AA级知名券商开设证券账户。

2、选择ETF:

在开立证券账户后,您需要在券商处查询并选择一款适合自己的ETF。您可以根据自己的投资目标、风险承受能力和市场趋势来选择ETF。例如,如果您希望投资中国A股市场,可以选择跟踪沪深300指数的ETF;如果您希望投资国际市场,可以选择跟踪标普500指数的ETF。

3、下单购买:

当您确定了要购买的ETF后,可以通过券商提供的在线交易平台或手机APP进行下单购买。下单时需要填写购买数量和价格,并支付相应的资金。请注意,购买ETF时可能需要支付一定的手续费。

4、交易确认:

订单提交后,券商会将您的订单发送给交易所进行撮合。一旦您的订单与另一个投资者的订单匹配成功,交易就会完成。此时,您的ETF份额将增加,相应的资金将从您的证券账户转出并进入ETF的资金账户。您可以在券商提供的平台上查看交易明细和持仓情况。

四、如何交易ETF

一旦您的经纪账户准备就绪,您可以通过以下几种方式购买和交易ETF:

1、市价订单:

这是最常见的下单方式。您只需输入要购买或卖出的ETF数量,然后以当前市场价格执行交易。

2、限价订单:

如果您希望以特定价格购买或卖出ETF,您可以使用限价订单。您需要指定您愿意接受的最高购买价格或最低卖出价格,并等待市场达到您设定的价格时执行交易。

3、停损订单:

停损订单用于限制您的损失。您可以设置一个触发价格,在市场达到该价格时自动卖出ETF。这对于控制风险非常有用。

4、市价止损订单:

这是一种结合了市价订单和停损订单的下单方式。当市场价格达到您设定的触发价格时,该订单将转为市价订单进行交易。

五、定期投资和再平衡

购买ETF后,您可以考虑定期投资和再平衡您的投资组合。定期投资是指定期定额地购买ETF,无论市场如何波动。这有助于分散风险,并利用长期投资的力量。

再平衡是调整您的投资组合以保持所选资产的目标权重。由于不同资产的表现可能会有所不同,您的投资组合可能会偏离最初的目标。通过定期再平衡,您可以卖出表现良好的资产并购买表现较差的资产,以确保您的投资组合保持在正确的轨道上。

以下是我所接触的一家AA级券商,股票万1,两融利率5%,且可线上预约,足不出户办理,节省不少时间成本和交易成本,ETF最低可万0.5,以下是具体费率详情:

购买和交易ETF对于新手来说可能是一个令人生畏的过程,但实际上它是相当简单的。选择合适的ETF,开设经纪账户,并学习使用不同类型的订单是关键步骤。定期投资和再平衡可以帮助您保持投资组合的稳定性和长期增长。希望本文能为初学者提供有用的指南,使他们更加自信地购买和交易ETF。

有任何问题,欢迎私信、评论,随时在线回复~



[Python]使用状态机实现自动交易策略

状态机模型简介

状态机(State Machine)是一种计算模型,它描述了系统的行为和状态之间的转换。用通俗一些的方式来说,状态机可以被看作是一个系统的“说明书”,它描述了这个系统所有可能的状态和在状态之间转移的规则。我们可以把状态机想象成一个游戏,游戏中有不同的关卡和过关规则。玩家需要按照规则完成关卡,才能进入下一个关卡。

在状态机中,一个系统可以处于多个状态中的一个状态。而系统状态的转移则表示从一个状态转移到另一个状态的过程。这个过程通常是据特定条件或事件触发的,就像在游戏中通过完成任务或收集道具进入下一个关卡一样。

状态机在计算机网络、通信、自动控制中应用广泛。使用状态机模型实现的程序与过程化的程序相比有很多优点。状态机程序具有非常清晰的结构,它通过状态和转移描述了系统的行为,因此,状态机程序的逻辑更容易实现,相比而言,过程化程序则是基于过程和函数的执行,需要通过条件语句和控制结构来实现相同的逻辑。所以,状态机程序的状态和转移非常容易理解,因此代码的具有更好的可读性和可维护性。

一个日内冲高回落卖出再回落买回的示例,原理

我们用一个冲高回落卖出再回落买回的自动化交易策略看看是如何使用状态机模型来实现的。我们先对冲高回落卖出做个定义:以初始价(例如昨日收盘价)为基准,当涨幅超过阈值1后,当价格从最高点回落超过阈值2后,按比例卖出持仓证券,当卖出成功后股价回落幅度超过阈值,补回仓位。

在这个过程中有五个主要状态,

状态s0:初始状态,该状态为等待上涨状态,即按当前价格计算的涨幅未达到涨幅条件即阈值1. 系统该状态下,根据股价计算涨幅,并进行判断,如果涨幅超过阈值,则进入状态s1; 否则,保持状态不变。

状态s1: 该状态为冲高待卖出状态。该状态下,系统根据当前股价进行如下操作,当股价大于最高价时,将更新最高价为当前股价。当股价低于最高价时,如果股价与最高价的比值低于阈值2,则下单卖出,状态变为s2; 如果高于阈值2,则状态不变。

状态s2: 该状态为冲高回落已卖出状态。该状态下,如果委托全部成交,进入状态s3,否则,状态不变。

状态s3: 该状态为等待回落状态。该状态下,系统跟踪股价与卖出价的比值,当比值低于阈值3,即从高点回落超过阈值,进入状态s4.

状态s4: 该状态为回落后待反弹买回状态。该状态下根据股价更新从本状态开始后的最低价。当股价与最低价比值高于阈值4时,下单买回原仓位,进入状态S5.

状态s5: 该状态为回落卖出待确认状态。该状态下,如果委托全部成交,进入状态s0,否则,状态不变。

状态之间的转移条件都非常简单,状态转移图我就不(懒得)画了。

代码示例

接下来是python代码,代码是由从本人实际运行代码删减而来,缺少相关的函数和环境,无法直接运行。为了便于阅读理解,代码中还删除了一些重要的细节处理部分,因此代码仅供交流学习,不要直接使用。

状态机类StateMachine源代码:

import time from autotrader.trader import Trader import logging ''' 自动交易状态机 ''' class StateMachine: strategy_params = None ''' 突破卖出策略状态机 ''' def __init__(self,code:str,postion:int,trader:Trader,logger=None): ''' 初始化函数 :code: 证券代码 :postion: 初始持仓 :trader: 交易接口实例 ''' self.code = code self.position = postion self.trader = trader self.stmFunc = self.s0 self.strategy = None self.counter = {} self._observe_price = -1 self.basePrice = -1 self.currHighPrice = -1 self.orders = [] self.messages = [] self.currprice = 0 self.yesterday_close = 0 if logger: self.logger = logger else: self.logger = logging.getLogger("autotrader") ''' quoteData:行情报价 ''' def process(self,quoteData): try: if quoteData and self.code in quoteData: data = quoteData[self.code] if not self.yesterday_close: self.yesterday_close = data["yesterday_close"] if data["price"]>0: if not self.strategy:#初始化策略参数 strategy1 = {} for param in StateMachine.strategy_params["default"]: if in_range(data["price"],param["price"]) and in_range(data["premium_rate"],param["premium_rate"]): strategy1 = param break strategy2 = {} if self.code in StateMachine.strategy_params["params"]: strategy2 = StateMachine.strategy_params["params"][self.code] self.strategy = {**strategy1,**strategy2} if not self.strategy and self.stmFunc!=self.s_exception: self.writeLog(logging.INFO,"没有符合条件的策略!",0,0) self.stmFunc = self.s_exception self.currQuote = data self.stmFunc = self.stmFunc(quoteData) messages = self.messages self.messages = [] return messages return [] except Exception as e: self.stmFunc = self.s_exception traceback.print_exc() return ["异常:{}".format(str(e))] def resetCounter(self,counterid): initialCount = {"s2":60,"s5":60} self.counter[counterid] = initialCount[counterid] def decCount(self,counterid): self.counter[counterid]-=1 return self.counter[counterid] def s0(self,quoteData): ''' 状态s0: 初始状态 :quoteData: 行情数据 :返回: 更新的状态机状态 ''' data = quoteData[self.code] currPrice = data["price"] if self.basePrice<0: self.basePrice = data["yesterday_close"] if self.observePrice <=0: self.observePrice = self.basePrice*(1+self.strategy["thresh_high"]) if currPrice >=self.observePrice: percent = currPrice/self.basePrice - 1 mess = "价格{:.2f}({:.2%})超过目标价".format(currPrice,percent) print(mess) self.writeLog(logging.INFO,mess,self.observePrice,data["price"]) self.observePrice = self.currHighPrice - (self.currHighPrice - self.basePrice)*self.strategy["thresh_sell"] return self.s1 return self.s0 def s1(self,quoteData): ''' 状态s1: 突破状态 :参数 :quoteData: 行情数据 :返回: 更新的状态机状态 ''' data = quoteData[self.code] currPrice = data["price"] if currPrice>self.currHighPrice: self.currHighPrice = currPrice self.observePrice = currPrice - (currPrice - self.basePrice)*self.strategy["thresh_sell"] return self.s1 if currPrice<=self.observePrice: quantity = max(self.position - 100,100) orderprice = currPrice - 0.5 orderId = self.trader.sell(self.code,orderprice,quantity,False) if orderId: order = {"orderId":orderId,"order_quantity":quantity,"price":orderprice} self.orders.append(order) self.resetCounter("s2") print("{code}从最高{high:.2f}回落低于{thresh:.2f},卖出[价格:{price:.2f},数量:{quantity},订单号:{orderId}]".format(code=self.code,high=self.currHighPrice,thresh=self.observePrice,price=orderprice,quantity=quantity,orderId=orderId)) self.logger.info("{code}从最高{high:.2f}回落低于{thresh:.2f},卖出[价格:{price:.2f},数量:{quantity},订单号:{orderId}]".format(code=self.code,high=self.currHighPrice,thresh=self.observePrice,price=orderprice,quantity=quantity,orderId=orderId)) mess = "回落卖出,价格:{price:.2f},数量:{quantity}".format(price=orderprice,quantity=quantity) self.writeLog(logging.INFO,mess,self.observePrice,data["price"]) self.observePrice = (self.currHighPrice-self.basePrice)*self.strategy["thresh_fall"]+self.basePrice return self.s2 else: print("下单异常,转入异常状态.") return self.s_exception return self.s1 def s2(self,quoteData): ''' 状态s2: 回落卖出待成交 :参数 :quoteData: 行情数据 :返回: 更新的状态机状态 ''' if self.decCount("s2")==0: self.resetCounter("s2") order = self.orders[-1] deal = self.trader.getDeal(order["orderId"]) if deal and deal["finished_quantity"] == order["order_quantity"]: self.writeLog(logging.INFO,"委托已成交",self.observePrice,deal["price"]) order.update(deal) return self.s3 return self.s2 def s3(self,quoteData): ''' 状态s3: 回落等待向下突破 :参数 :quoteData: 行情数据 :返回: 更新的状态机状态 ''' data = quoteData[self.code] if data["price"]<=self.observePrice: self.writeLog(logging.INFO,"价格向下突破阈值",self.observePrice,data["price"]) self.observePrice = data["price"]*(1+self.strategy["thresh_buy"]) return self.s4 return self.s3 def s4(self,quoteData): ''' 状态s4: 回落突破 :参数 :quoteData: 行情数据 :返回: 更新的状态机状态 ''' data = quoteData[self.code] thresh = self.strategy["thresh_buy"] currPrice = data["price"] if currPrice>self.observePrice: quantity = max(self.position - 10,10) sellorder = self.orders[-1] orderprice = currPrice/(1+self.strategy["thresh_buy"]) orderId = self.trader.buy(self.code,orderprice,quantity) if orderId: order = {"orderId":orderId,"order_quantity":quantity,"price":orderprice} self.orders.append(order) self.resetCounter("s5") print("{code}探底回升超过{thresh:.2f},买回[价格:{price:.2f},数量:{quantity},订单号:{orderId}]".format(code=self.code,thresh=self.observePrice,price=orderprice,quantity=quantity,orderId=orderId)) self.logger.info("{}探底回升超过{thresh:.2%},买回[价格:{price:.2f},数量:{quantity},订单号:{orderId}]".format(self.code,thresh=self.observePrice,price=orderprice,quantity=quantity,orderId=orderId)) self.writeLog(logging.INFO,"探底回升超过阈值,买入",self.observePrice,orderprice) return self.s5 else: print("下单异常,转入异常状态.") self.writeLog(logging.INFO,"探底回升超过阈值,买入下单异常",self.observePrice,orderprice) return self.s_exception observprice = data["price"]*(1+thresh) if observprice<self.observePrice: self.observePrice = observprice return self.s4 def s5(self,quoteData): ''' 状态s4: 回落买回待成交状态 :参数 :quoteData: 行情数据 :返回: 更新的状态机状态 ''' if self.decCount("s5")==0: self.resetCounter("s5") order = self.orders[-1] deal = self.trader.getOrder(order["orderId"]) if deal and deal["finished_quantity"] == order["order_quantity"]: order.update(deal) self.basePrice = order["price"] self.currHighPrice = -1 self.observePrice = -1 return self.s0 return self.s5 def s_exception(self,quoteData): ''' 出现不可处理的异常,进入该状态 ''' return self.s_exception ''' 以下都是些辅助函数 ''' def __str__(self): return "状态{}:{}".format(self.stmFunc.__name__,self.state_literal()) def state_literal(self): statusName = { "s0":"初始", "s1":"向上突破", "s2":"回落卖出(待成)", "s3":"回落卖出(已成)", "s4":"向下突破", "s5":"止跌买回(待成)", "s_exception":"异常" } return statusName[self.stmFunc.__name__] def state(self): return self.stmFunc.__name__ def writeLog(self,level,message,obeservePrice,price): strtime = time.strftime("%H:%M:%S") self.logger.log(level,message) self.log.append({"message":message,"level":level,"time":strtime,"price":price,"obeservePrice":obeservePrice,}) @property def observePrice(self): return self._observe_price @observePrice.setter def observePrice(self,price): if price!=self._observe_price: print("{}的目标价设置为:{:.2f}({})".format(self.code,price,self.state())) self._observe_price = price return self._observe_price

在主程序中为每个执行此策略的证券标的创建一个StateMachine类,在主循环中获取行情数据,调用StatMachine的process函数即可,具体代码这里就省略了。

以上就是一个简单的日内交易状态机模型。之前写过基于过程的同样功能的程序,里面的逻辑判断很多,程序易读性差,修改起来也很麻烦,后来就改成了状态机模型,程序清爽多了,维护起来也很方便。

https://www.shideke.com

上一篇:超短线炒股绝招指标调整法技巧(超短线炒股秘诀)

下一篇:中长线炒股入门(中长线炒股技巧)

相关推荐

返回顶部