python 量化策略之路(上)

   日期:2020-09-06     浏览:100    评论:0    
核心提示:量化策略个人理解: 就是用程序去做交易员的事情,各大交易所股票,或者区块链里面的比特币。再通俗易懂点的就是,程序去炒股,炒币python代码段 基于FMZ平台开发代码import timeclass mid_class(): def __init__(self, this_exchaneg): 初始化数据 :param this_exchaneg: FMZ的交易所结构 self.init

量化策略

个人理解: 就是用程序去做交易员的事情,各大交易所股票,或者区块链里面的比特币。
再通俗易懂点的就是,程序去炒股,炒币

python代码段 基于FMZ平台开发代码

import time


class mid_class():

    def __init__(self, this_exchaneg):
        ''' 初始化数据 :param this_exchaneg: FMZ的交易所结构 '''
        self.init_time = time.time()
        self.exchange = this_exchaneg
        self.name = self.exchange.GetName()  # 返回交易所名称
        self.jyd = self.exchange.GetCurrency()  # 返回操作货币对名称 例:BTC_USD

    def get_account(self):
        ''' 账户信息 :return: 获取信息成功返回True 错误返回False '''
        try:
            self.account = self.exchange.GetAccount()  # 返回交易所信息
            self.Balance = self.account['Balance']  # 余额
            self.amount = self.account['Stocks']  # 币种
            self.FrozenBalance = self.account['FrozenBalance']  # 冻结钱
            self.ForzenStocks = self.account['FrozenStocks']  # 冻结币
            return self.account
        except:
            return False

    def get_ticker(self):
        ''' 获取市场信息 :return: '''
        try:
            self.ticker = self.exchange.GetTicker()  # 获取市场信息
            return self.ticker
        except:
            return False

    def get_depth(self):
        ''' 获取深度 :return: '''

        try:
            self.depth = self.exchange.GetDepth()  # 获取交易所订单薄
            self.ask = self.depth['Asks']  # 价格
            self.bid = self.depth['Bids']  # 数量
            return True
        except:
            return False

    def get_oglc_data(self, Period=PERIOD_M5):
        ''' K线 :param Period: K线周期 PERIOD_M1指1分钟,PERIOD_M5指5分钟,PERIOD_M15指15分钟,PERIOD_M30指30分钟,PERIOD_H1指1小时,PERIOD_D1指一天 :return: '''
        self.oglc_data = self.exchange.GetRecords(Period)

    def create_order(self, order_tpye, price, account):
        ''' 创建订单 :param order_tpye: 挂单类型 buy买,shell 卖单 :param price: 价格 :param account: 数量 :return: 挂单id '''
        if order_tpye == 'buy':
            try:
                order_id = self.exchange.Buy(price, account)
            except:
                return False
        elif order_tpye == 'sell':
            try:
                order_id = self.exchange.Sell(price, account)
            except:
                return False

        return order_id

    def cancel_order(self, order_id):
        ''' 取消挂单 order_id: 挂单id号 :return: '''
        return self.exchange.CancelOrder(order_id)

    def refreash_data(self):
        ''' 刷新信息 :return: 刷新信息: 成功refreash_data_finish '''

        if not self.get_account():
            return 'false_get_account'

        if not self.get_ticker():
            return 'false_get_ticker'

        if not self.get_depth():
            return 'false_get_depth'
        try:
            self.get_oglc_data()
        except:
            return 'false_get_K_line_info'

        return 'refreash_data_finish!'


def main():
    test_mid = mid_class(exchange)
    price = 450  # 设定一个基价
    wave = 50  # 波动范围
    amount = 1  # 数量
    while True:
        Sleep(1000)
        Log('刷新信息', test_mid.refreash_data())
        Log('市场信息', test_mid.get_ticker())

        # 买卖处理
        robot_buy = test_mid.create_order('buy', price - wave, amount)
        robot_buy_id = exchange.GetOrder(robot_buy)

        robot_sell = test_mid.create_order('sell', price + wave, amount)
        robot_sell_id = exchange.GetOrder(robot_sell)
        Log('账户信息', test_mid.get_account())
        # 成功之后返回 Id 和 false
        Log('买单', robot_buy_id)
        Log('卖单', robot_sell_id)
        if robot_buy_id['Status'] == 1:
            Log('买单成交,撤销全部订单')
            test_mid.cancel_order(robot_sell_id['Id'])
        else:
            test_mid.cancel_order(robot_buy_id['Id'])
            Log('卖单成交,撤销全部订单')

代码逻辑通顺,只是学习交易,不可实际运用。接口请看FMZ 量化平台api接口文档

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服