Administrator
4 天以前 48fb7a00951f91bdc707e5dd2d196e5bccb752c3
trade/trade_juejin.py
@@ -1,23 +1,24 @@
"""
同花顺交易操作工具
 掘金交易
"""
import json
import logging
import time
import gm.api as gmapi
# import gm.api as gmapi
# gmapi.set_token(token)
import constant
from code_attribute import gpcode_manager
from db.redis_manager import RedisManager
from logs_.log import logger_juejin_trade
from db.redis_manager_delegate import RedisManager, RedisUtils
from log_module.log import logger_juejin_trade
from utils import network_util, tool
__context_dict = {}
account_id = "77916efb-b856-46ee-9680-71be0fe18a42"
token = "38fb624832c1949708c7600abaf1e863d27663b3"
gmapi.set_token(token)
# gmapi.set_account_id(account_id)
@@ -34,18 +35,18 @@
    # 添加订单ID
    @classmethod
    def add_order_id(cls, code, account_id, order_id):
        cls.__get_redis().sadd(f"juejin_order_id-{code}", json.dumps((account_id, order_id)))
        cls.__get_redis().expire(f"juejin_order_id-{code}", tool.get_expire())
        RedisUtils.sadd(cls.__get_redis(),f"juejin_order_id-{code}", json.dumps((account_id, order_id)))
        RedisUtils.expire(cls.__get_redis(), f"juejin_order_id-{code}", tool.get_expire())
    # 删除订单ID
    @classmethod
    def remove_order_id(cls, code, account_id, order_id):
        cls.__get_redis().srem(f"juejin_order_id-{code}", json.dumps((account_id, order_id)))
        RedisUtils.srem(cls.__get_redis(), f"juejin_order_id-{code}", json.dumps((account_id, order_id)))
    # 查询所有的订单号
    @classmethod
    def list_order_ids(cls, code):
        return cls.__get_redis().smembers(f"juejin_order_id-{code}")
        return RedisUtils.smembers(cls.__get_redis(), f"juejin_order_id-{code}")
def init(context):
@@ -65,12 +66,12 @@
def order_volume(code, price, count):
    if not constant.TRADE_ENABLE:
        return
    if code.find("00") != 0 and code.find("60") != 0:
    if not tool.is_can_buy_code(code):
        raise Exception("只支持00开头与60开头的代码下单")
    code_str = code
    if code[0:2] == '00':
    if tool.is_sz_code(code):
        code_str = f"SZSE.{code}"
    elif code[0:2] == '60':
    elif tool.is_sh_code(code):
        code_str = f"SHSE.{code}"
    start_time = time.time()
    results = gmapi.order_volume(code_str, count, gmapi.OrderSide_Buy, gmapi.OrderType_Limit, gmapi.PositionEffect_Open,
@@ -86,7 +87,7 @@
            logger_juejin_trade.info(f"{code}:下单失败:{result['ord_rej_reason_detail']}")
            raise Exception(result["ord_rej_reason_detail"])
        else:
            TradeOrderIdManager.add_order_id(code, result["account_id"], result["cl_ord_id"])
            TradeOrderIdManager().add_order_id(code, result["account_id"], result["cl_ord_id"])
            logger_juejin_trade.info(f"{code}:下单成功 ord_id:{result['cl_ord_id']}")
            return result["symbol"].split(".")[1], result["account_id"], result["cl_ord_id"]
    else:
@@ -95,7 +96,7 @@
# 撤单
def cancel_order(code):
    orders_info = TradeOrderIdManager.list_order_ids(code)
    orders_info = TradeOrderIdManager().list_order_ids(code)
    orders = []
    if orders_info:
        for order in orders_info:
@@ -108,7 +109,7 @@
            gmapi.order_cancel(orders)
        logger_juejin_trade.info(f"{code}:撤单成功,撤单数量:{len(orders)}")
        for order in orders:
            TradeOrderIdManager.remove_order_id(code, order["account_id"], order["cl_ord_id"])
            TradeOrderIdManager().remove_order_id(code, order["account_id"], order["cl_ord_id"])
# 撤单
@@ -124,26 +125,27 @@
def run():
    print("启动读取掘金交易数据")
    # strategy_id = "e97a257e-1bba-11ed-a1b1-00e070c694ff"
    # token = "a2eed2b159e9238dc0353fc3e73734d7677f7baf"
    # gmapi.run(strategy_id, filename="trade.trade_juejin.py", mode=gmapi.MODE_LIVE, token=token)
    while True:
        try:
            if tool.is_trade_time():
                datas = get_execution_reports()
                # 上传数据
                fdatas = []
                for d in datas:
                    fdatas.append(
                        {"code": d[0], "money": d[4], "num": d[2], "price": d[3], "time": d[7], "trade_num": d[5],
                         "type": d[1] - 1})
                if fdatas:
                    network_util.send_socket_msg("127.0.0.1", 9001, {"type": 3, "data": fdatas})
        except Exception as e:
            logging.exception(e)
        # 2s更新
        time.sleep(1.5)
    if constant.TRADE_WAY == constant.TRADE_WAY_JUEJIN:
        print("启动读取掘金交易数据")
        # strategy_id = "e97a257e-1bba-11ed-a1b1-00e070c694ff"
        # token = "a2eed2b159e9238dc0353fc3e73734d7677f7baf"
        # gmapi.run(strategy_id, filename="trade.trade_juejin.py", mode=gmapi.MODE_LIVE, token=token)
        while True:
            try:
                if tool.is_trade_time():
                    datas = get_execution_reports()
                    # 上传数据
                    fdatas = []
                    for d in datas:
                        fdatas.append(
                            {"code": d[0], "money": d[4], "num": d[2], "price": d[3], "time": d[7], "trade_num": d[5],
                             "type": d[1] - 1})
                    if fdatas:
                        network_util.send_socket_msg("127.0.0.1", 9001, {"type": 3, "data": fdatas})
            except Exception as e:
                logging.exception(e)
            # 2s更新
            time.sleep(1.5)
# 获取成交列表,返回的内容为:[(代码,买(1)/卖(2),量,价格,成交金额,订单ID,委托客户端ID,成交时间,成交日期)]