示例#1
0
def __get_realposition_basket():
    redis_title_name = 'market:typelist:realposition'
    if r.llen(redis_title_name) > 0:
        r.ltrim(redis_title_name, 1, 0)

    server_model = ServerConstant().get_server_model('local118')
    session_aggregation = server_model.get_db_session('aggregation')

    total_position_dict = dict()
    total_money = Decimal(0.0)
    for basket_name in multifactor_strategy_list:
        ticker_position_dict = dict()
        basket_total_money = Decimal(0.0)
        last_trading_day = date_utils.get_today_str('%Y-%m-%d')
        query_sql = "select a.SYMBOL,sum(a.`LONG`) from aggregation.pf_position a \
left join aggregation.pf_account b on a.SERVER_NAME = b.SERVER_NAME and a.id = b.id \
where a.DATE = '%s' and b.FUND_NAME like '%%%s%%' group by a.SYMBOL" % (
            last_trading_day, basket_name)
        for position_item in session_aggregation.execute(query_sql):
            ticker = position_item[0]
            long_value = Decimal(position_item[1])
            if long_value <= 0:
                continue
            if ticker not in instrument_dict:
                continue

            instrument_minbar_info = instrument_dict[ticker]
            ticker_money = long_value * instrument_minbar_info.prev_close
            ticker_position_dict[ticker] = (ticker_money, long_value)
            basket_total_money += ticker_money
            total_money += ticker_money

        if basket_total_money == 0:
            continue

        r.lpush(redis_title_name, basket_name)

        basket_dict[basket_name] = []
        for (ticker, ticker_value) in ticker_position_dict.items():
            (ticker_money, long_value) = ticker_value
            ticker_weight = ticker_money / basket_total_money
            basket_dict[basket_name].append(
                '%s,%.4f,%s' % (ticker, ticker_weight, long_value))

            if ticker in total_position_dict:
                (temp_money, temp_long_value) = total_position_dict[ticker]
                temp_money += ticker_money
                temp_long_value += long_value
                total_position_dict[ticker] = (temp_money, temp_long_value)
            else:
                total_position_dict[ticker] = (ticker_money, long_value)

    total_pf_account_name = 'MultiFactor_Total'
    basket_dict[total_pf_account_name] = []
    r.lpush(redis_title_name, total_pf_account_name)
    for (ticker, (ticker_money,
                  ticker_long_value)) in total_position_dict.items():
        ticker_weight = ticker_money / total_money
        basket_dict[total_pf_account_name].append(
            '%s,%.4f,%s' % (ticker, ticker_weight, ticker_long_value))
示例#2
0
def commission_check():
    # 找到手续费文件夹
    for commission_file_name in os.listdir('./'):
        if '手续费' in commission_file_name:
            commission_folder = './' + commission_file_name + '/'
            break

    # 检查统一期货公司各个帐户的手续费是否一致,并得到南华和中信的手续费dict
    [nanhua_commissiton_dict, zhongxin_commissiton_dict] = self_check(commission_folder)
    print 'self check finished!'

    # 获得国信的手续费
    guoxin_commissiton_dict = get_guoxin_commission_dict(commission_folder)

    # 获得鲁证的手续费
    luzheng_commissiton_dict = get_luzheng_commission_dict(commission_folder)

    # 检查我们的手续费表格与上面的是否一致
    server_model_nanhua = ServerConstant().get_server_model('nanhua')
    server_model_zhongxin = ServerConstant().get_server_model('zhongxin')
    server_model_guoxin = ServerConstant().get_server_model('guoxin')
    server_model_luzheng = ServerConstant().get_server_model('luzheng')
    print '\n nanhua:'
    commission_check_sql(server_model_nanhua, nanhua_commissiton_dict)
    print '\n zhongxin:'
    commission_check_sql(server_model_zhongxin, zhongxin_commissiton_dict)
    print '\n guoxin:'
    commission_check_sql(server_model_guoxin, guoxin_commissiton_dict)
    print '\n luzheng:'
    commission_check_sql(server_model_luzheng, luzheng_commissiton_dict)
示例#3
0
def __get_instrument_list():
    server_model = ServerConstant().get_server_model('host')
    session_common = server_model.get_db_session('common')
    query = session_common.query(Instrument)
    for instrument_db in query.filter(Instrument.type_id.in_((4, 6))):
        instrument_minbar_info = Instrument_Minbar_Info(
            instrument_db.ticker, instrument_db.prev_close)
        instrument_dict[instrument_db.ticker] = instrument_minbar_info
def __build_pf_account_dict():
    global pf_account_dict
    pf_account_dict = dict()
    server_host = ServerConstant().get_server_model(server_name)
    session_portfolio = server_host.get_db_session('portfolio')
    query_pf_account = session_portfolio.query(PfAccount)
    for pf_account_db in query_pf_account.filter(
            PfAccount.group_name == 'Event_Real'):
        pf_account_dict[pf_account_db.name] = pf_account_db
示例#5
0
def get_strategy_name_list():
    strategy_name_list = []
    server_model_host = ServerConstant().get_server_model('host')
    session_strategy = server_model_host.get_db_session('strategy')
    query_sql = "select `NAME` from strategy.strategy_online where strategy_type = 'CTA' and `ENABLE` = 1;"
    query_result = session_strategy.execute(query_sql)
    for query_line in query_result:
        strategy_name_list.append(query_line[0])
    return strategy_name_list
def __read_future_daily_file(date_str):
    server_model = ServerConstant().get_server_model('local118')
    session_portfolio = server_model.get_db_session('dump_wind')
    query_sql = "select t.S_INFO_WINDCODE, t.S_DQ_CLOSE from dump_wind.CINDEXFUTURESEODPRICES t where t.TRADE_DT='%s'" % (date_str.replace('-', ''),)

    future_file_dict = dict()
    for db_item in session_portfolio.execute(query_sql):
        ticker = db_item[0].split('.')[0]
        future_file_dict[ticker] = db_item[1]
    return future_file_dict
def dailyreturn_test(server_name, group_name):
    server_model = ServerConstant().get_server_model(server_name)
    session_portfolio = server_model.get_db_session('portfolio')

    __build_ticker_exchange(server_model)

    query_pf_account = session_portfolio.query(PfAccount)
    for pf_account_db in query_pf_account.filter(
            PfAccount.group_name.like('%' + group_name + '%')):
        __dailyreturn_test(server_model, pf_account_db)
def __save_to_db(trade2_history_list, pf_position_list):
    server_model = ServerConstant().get_server_model(server_name)
    session_om = server_model.get_db_session('om')
    for trade2_history_db in trade2_history_list:
        session_om.add(trade2_history_db)
    session_om.commit()

    session_portfolio = server_model.get_db_session('portfolio')
    for pf_position_db in pf_position_list:
        session_portfolio.add(pf_position_db)
    session_portfolio.commit()
示例#9
0
def position_change_job():
    strategy_name_list = get_strategy_name_list()

    server_model_server = ServerConstant().get_server_model(server_name)
    session_strategy = server_model_server.get_db_session('strategy')

    fr = open(position_change_insert_sql_path, 'w+')

    for strategy_name in strategy_name_list:
        print strategy_name
        parameter_value_str = ''
        query_sql = "select Value from strategy.strategy_parameter where `NAME` = '%s' order by time desc limit 1;" \
                    % strategy_name
        query_result = session_strategy.execute(query_sql)
        for query_line in query_result:
            parameter_value_str = query_line[0]
            break
        parameter_value_dict = json.loads(parameter_value_str)
        if 'tq.%s.max_long_position' % account_name in parameter_value_dict:
            max_long_value = float(
                parameter_value_dict['tq.%s.max_long_position' % account_name])
            max_short_value = float(
                parameter_value_dict['tq.%s.max_short_position' %
                                     account_name])
            qty_per_trade_value = float(
                parameter_value_dict['tq.%s.qty_per_trade' % account_name])
        else:
            continue

        new_max_long_value = int(max_long_value * multiple_number)
        new_max_short_value = int(max_short_value * multiple_number)
        new_qty_per_trade_value = int(qty_per_trade_value * multiple_number)

        if new_qty_per_trade_value < 2 * max(new_max_long_value,
                                             new_max_short_value):
            new_qty_per_trade_value = 2 * max(new_max_long_value,
                                              new_max_short_value)

        parameter_value_dict['tq.%s.max_long_position' %
                             account_name] = new_max_long_value
        parameter_value_dict['tq.%s.max_short_position' %
                             account_name] = new_max_short_value
        parameter_value_dict['tq.%s.qty_per_trade' %
                             account_name] = new_qty_per_trade_value

        new_parameter_str = json.dumps(parameter_value_dict)
        insert_sql = '''Insert Into strategy.strategy_parameter(TIME,NAME,VALUE) VALUES(sysdate(),'%s','%s');''' \
                     % (strategy_name, new_parameter_str)
        fr.write(insert_sql + '\n')
    #     session_strategy.execute(insert_sql)
    # session_strategy.commit()
    fr.close()
    server_model_server.close()
示例#10
0
def read_structure_fund_file(server_name):
    structure_fund_file_dict = dict()
    file_path = 'E:/market_file/structure_fund_list.csv'
    input_file = open(file_path)
    for line in input_file.xreadlines():
        line_item = line.split(',')
        structure_fund_file_dict[line_item[0]] = (line_item[1], line_item[2],
                                                  line_item[3])

    structure_fund_db_dict = dict()
    host_server_model = ServerConstant().get_server_model(server_name)
    session_common = host_server_model.get_db_session('common')
    query = session_common.query(Instrument)
    for instrument_db in query.filter(Instrument.type_id == 16):
        structure_fund_db_dict[instrument_db.ticker] = instrument_db

    index_dict = dict()
    for instrument_db in query.filter(Instrument.type_id == 6):
        index_dict[instrument_db.ticker] = instrument_db

    for parent_ticker in structure_fund_file_dict.keys():
        print 'Parent Ticker:', parent_ticker
        if parent_ticker not in structure_fund_db_dict:
            print '   unfind in db'
            continue

        parent_instrument_db = structure_fund_db_dict[parent_ticker]
        if parent_instrument_db.tranche is not None:
            print '   tranche error'
        (sub_ticker_db1,
         sub_ticker_db2) = parent_instrument_db.undl_tickers.split(';')
        (sub_ticker1, sub_ticker2,
         undel_index) = structure_fund_file_dict[parent_ticker]
        if sub_ticker_db1 != sub_ticker1 or sub_ticker_db2 != sub_ticker2:
            print 'error'

        sub_instrument_db1 = structure_fund_db_dict[sub_ticker_db1]
        sub_instrument_db2 = structure_fund_db_dict[sub_ticker_db2]

        if sub_instrument_db1.tranche != 'A':
            print 'sub ticker:%s tranche is not A' % sub_instrument_db1.ticker
        if sub_instrument_db2.tranche != 'B':
            print 'sub ticker:%s tranche is not B' % sub_instrument_db2.ticker

        if sub_instrument_db1.undl_tickers is not None and sub_instrument_db1.undl_tickers not in index_dict:
            print 'sub ticker:%s, undl_tickers:%s error' % (
                sub_instrument_db1.ticker, sub_instrument_db1.undl_tickers)

        if sub_instrument_db2.undl_tickers is not None and sub_instrument_db2.undl_tickers not in index_dict:
            print 'sub ticker:%s, undl_tickers:%s error' % (
                sub_instrument_db2.ticker, sub_instrument_db2.undl_tickers)
示例#11
0
def start():
    server_model = ServerConstant().get_server_model('huabao')
    pf_account_db_list = get_account_id_list(server_model)

    for pf_account_db in pf_account_db_list:
        server_enter(server_model, pf_account_db)
    __email_algo_pf_position(pf_account_db_list)
示例#12
0
def start():
    server_model = ServerConstant().get_server_model('nanhua')
    trading_day_list = date_utils.get_trading_day_list(
        date_utils.string_toDatetime('2016-09-23'),
        date_utils.string_toDatetime('2016-10-14'))
    for trading_day in trading_day_list:
        __trade_strategy_build(server_model, trading_day.strftime("%Y-%m-%d"))
示例#13
0
 def __enter__(self):
     server_model = ServerConstant().get_server_model(self.server_name)
     self.ftp = FTP()
     self.ftp.set_pasv(False)
     self.ftp.connect(server_model.ip, server_model.port)
     self.ftp.login(server_model.userName, server_model.passWord)
     return self
示例#14
0
def risk_management():
    server_constant = ServerConstant()
    server_host = server_constant.get_server_model('host')
    session_jobs = server_host.get_db_session('jobs')

    email_content_list = []
    for risk_management_db in session_jobs.query(RiskManagement):
        email_content_list.append('Title:%s' %
                                  risk_management_db.monitor_index)
        email_content_list.append('Describe:%s' % risk_management_db.describe)

        temp_email_content = []
        if risk_management_db.fund_risk_list != '':
            for fund_risk_item in risk_management_db.fund_risk_list.split(';'):
                temp_email_content.append(fund_risk_item.split('|'))
        html_table_list = email_utils2.list_to_html(
            'FundName,Warn_Line,Error_Line', temp_email_content)
        email_content_list.append(''.join(html_table_list))
        email_content_list.append('<br><br>')
    email_utils2.send_email_group_all('RiskManagementInfo',
                                      '<br>'.join(email_content_list), 'html')
示例#15
0
def update_trading_time(server_name, include_history_flag):
    server_model = ServerConstant().get_server_model(server_name)

    trading_info_dict = dict()
    future_type_list = __get_future_type(server_model)
    for future_type in future_type_list:
        trading_info_list = __get_trading_info_list(server_model, future_type)
        if len(trading_info_list) == 0:
            print 'Error future_type:', future_type
            continue
        trading_info_dict[future_type] = trading_info_list

    __update_db(server_model, trading_info_dict, include_history_flag)

    for type_info in trading_info_dict.keys():
        print type_info + ':------------------------'
        print '\n'.join(trading_info_dict[type_info])
def rebuild_strategy_parameter():
    server_model1 = ServerConstant().get_server_model('host')
    session_strategy1 = server_model1.get_db_session('strategy')
    query_sql = 'select a.name from strategy.strategy_online a group by a.name'
    strategy_name_list = []
    for db_item in session_strategy1.execute(query_sql):
        strategy_name_list.append(db_item[0])
    session_strategy1.commit()

    server_model = ServerConstant().get_server_model(server_name)
    session_strategy = server_model.get_db_session('strategy')

    strategy_parameter_db_list = []
    query_strategy_parameter = session_strategy.query(StrategyParameter)
    for strategy_name in strategy_name_list:
        strategy_parameter_db = query_strategy_parameter.filter(
            StrategyParameter.name == strategy_name).order_by(
                desc(StrategyParameter.time)).first()
        if strategy_parameter_db is None:
            print 'unfind %s' % strategy_name
            continue
        strategy_parameter_dict = json.loads(strategy_parameter_db.value)
        if 'Target' in strategy_parameter_dict:
            target_ticker_str = strategy_parameter_dict['Target']
            new_target_ticker_list = []
            change_flag = False
            for target_ticker in target_ticker_str.split(';'):
                if target_ticker in contract_change_dict2:
                    change_flag = True
                    change_ticker = contract_change_dict2[target_ticker]
                    new_target_ticker_list.append(change_ticker)
                else:
                    new_target_ticker_list.append(target_ticker)

            if change_flag:
                print '%s:%s ---> %s' % (strategy_name, target_ticker_str,
                                         ';'.join(new_target_ticker_list))
                strategy_parameter_dict['Target'] = ';'.join(
                    new_target_ticker_list)
                strategy_parameter_db.value = json.dumps(
                    strategy_parameter_dict)
                strategy_parameter_db_list.append(strategy_parameter_db)
            else:
                print '%s:%s' % (strategy_name, target_ticker_str)

    for strategy_parameter_db in strategy_parameter_db_list:
        session_strategy.merge(strategy_parameter_db)
    session_strategy.commit()
def __get_account_id_list():
    server_model = ServerConstant().get_server_model('host')
    session_strategy = server_model.get_db_session('strategy')
    query_sql = 'select a.STRATEGY_NAME from strategy.strategy_online a group by a.STRATEGY_NAME'
    strategy_name_list = []
    for db_item in session_strategy.execute(query_sql):
        strategy_name_list.append(db_item[0])

    pf_account_id_list = []
    server_model = ServerConstant().get_server_model(server_name)
    session_portfolio = server_model.get_db_session('portfolio')
    query_pf_account = session_portfolio.query(PfAccount)
    for pf_account_db in query_pf_account.filter(
            PfAccount.group_name.in_(tuple(strategy_name_list))):
        pf_account_id_list.append(int(pf_account_db.id))
    return pf_account_id_list
示例#18
0
def commission_check(base_path):
    exchange_folder = os.path.join(base_path, u'交易所')
    exchange_commission_file = get_abs_filepath(exchange_folder)[0]
    exchange_commission_dict = get_exchange_commission_dict(exchange_commission_file)
    for folder_name in os.listdir(base_path):
        flag = True
        if u'中信' in folder_name:
            commission_folder = os.path.join(base_path, folder_name)

            file_list = get_abs_filepath(commission_folder)
            if len(file_list) > 1:
                f_commission_dict = get_zhongxin_commission_dict(file_list[0])
                for i in file_list[1:]:
                    s_commission_dict = get_zhongxin_commission_dict(i)
                    if not dict_check(f_commission_dict, s_commission_dict):
                        flag = False
                        break
            if flag:
                commission_dict = get_zhongxin_commission_dict(file_list[0])
                server_name = 'zhongxin'
        elif u'南华' in folder_name:
            commission_folder = os.path.join(base_path, folder_name)
            commission_dict = get_commission_dict_bymultiple(exchange_commission_dict, 1.05)
            server_name = 'nanhua'
        elif u'鲁证' in folder_name:
            commission_folder = os.path.join(base_path, folder_name)
            server_name = 'luzheng'
        elif u'兴证' in folder_name:
            commission_folder = os.path.join(base_path, folder_name)
            commission_dict = get_commission_dict_bymultiple(exchange_commission_dict, 1.05)
            server_name = 'xinzheng'
        else:
            continue
        server_model = ServerConstant().get_server_model(server_name)

        if flag:
            print server_name, ': '
            commission_check_sql(server_model, commission_dict)
示例#19
0
# -*- coding: utf-8 -*-
import os

from eod_aps.model.schema_jobs import SpecialTickers
from eod_aps.model.server_constans import ServerConstant

server_constant = ServerConstant()
server_host = server_constant.get_server_model('host')
session_jobs = server_host.get_db_session('jobs')
special_ticker_list = []
for special_ticker in session_jobs.query(SpecialTickers).filter(
        SpecialTickers.date == '2019-02-27'):
    if special_ticker.describe in ('High_Stop', 'Low_Stop'):
        special_ticker_list.append(special_ticker.ticker)
print special_ticker_list

base_folder = 'E:/test'
last_ticker_list = []
last_folder = os.path.join(base_folder, '20190226_change')
for file_name in os.listdir(last_folder):
    with open(os.path.join(last_folder, file_name), 'rb') as fr:
        if not file_name.endswith('.txt'):
            continue
        for line in fr.readlines():
            last_ticker_list.append(line.split(',')[0])
print last_ticker_list

today_ticker_list = []
today_folder = os.path.join(base_folder, '20190227_change')
for file_name in os.listdir(today_folder):
    with open(os.path.join(today_folder, file_name), 'rb') as fr:
示例#20
0
# -*- coding: utf-8 -*-
from eod_aps.model.schema_strategy import StrategyParameter, StrategyChangeHistory, StrategyOnline
from eod_aps.model.server_constans import ServerConstant
from eod_aps.tools.date_utils import DateUtils
from eod_aps.wsdl.cta_strategy_wsdl import *
from cfg import custom_log

server_constant = ServerConstant()
date_utils = DateUtils()


def __strategy_online(session, strategy_change_history):
    query = session.query(StrategyOnline)
    strategy_online_db = query.filter(
        StrategyOnline.name == strategy_change_history.name).first()
    if strategy_online_db is None:
        custom_log.log_error_task('unfind strategy:%s' %
                                  strategy_change_history.name)
        return

    target_server_list = strategy_online_db.target_server.split('|')
    parameter_server_list = strategy_online_db.parameter_server.split('|')
    for index in range(0, len(target_server_list)):
        server_name = target_server_list[index]
        parameter_value = parameter_server_list[index]

        server_model = server_constant.get_server_model(server_name)
        session_strategy = server_model.get_db_session('strategy')

        strategy_parameter = StrategyParameter()
        strategy_parameter.time = date_utils.get_now()
示例#21
0
        if start_date is None:
            start_date = trading_info[1]

        if str(trading_info[1]) in const.HOLIDAYS:
            continue

        if last_trading_time is None:
            last_trading_time = trading_info[2]

        if trading_info[2] != last_trading_time:
            trading_info_list.append('(%s,%s)%s' %
                                     (start_date, end_date, last_trading_time))
            start_date = trading_info[1]

        end_date = trading_info[1]
        last_trading_time = trading_info[2]
    end_date = '20991231'
    trading_info_list.append('(%s,%s)%s' %
                             (start_date, end_date, last_trading_time))
    return trading_info_list


if __name__ == '__main__':
    server_constant = ServerConstant()
    host_server_model = server_constant.get_server_model('host')
    session_common = host_server_model.get_db_session('common')

    add_future_option()

    # session.commit()
        rate_db_str = (float(rate_db.open_ratio_by_money),
                       float(rate_db.open_ratio_by_volume),
                       float(rate_db.close_ratio_by_money),
                       float(rate_db.close_ratio_by_volume),
                       float(rate_db.close_today_ratio_by_money),
                       float(rate_db.close_today_ratio_by_volume))
        if rate_db_str != rate_file:
            print 'ticker:%s|rate_db:%s|reate_file:%s' % (key, rate_db_str,
                                                          rate_file)
            rate_db.open_ratio_by_money = rate_file[0]
            rate_db.open_ratio_by_volume = rate_file[1]
            rate_db.close_ratio_by_money = rate_file[2]
            rate_db.close_ratio_by_volume = rate_file[3]
            rate_db.close_today_ratio_by_money = rate_file[4]
            rate_db.close_today_ratio_by_volume = rate_file[5]
            session_common.merge(rate_db)


def commission_rat_update():
    __get_rate_file_list()
    __get_rate_db_list()
    __rate_compare()


if __name__ == '__main__':
    host_server_model = ServerConstant().get_server_model(server_name)
    session_common = host_server_model.get_db_session('common')
    commission_rat_update()

    session_common.commit()
def main_contract_change_tools(symbol, filter_date_str):
    pf_account_id_list = __get_account_id_list()

    next_trading_day = date_utils.get_next_trading_day('%Y-%m-%d',
                                                       filter_date_str)

    server_model = ServerConstant().get_server_model(server_name)
    session_om = server_model.get_db_session('om')

    pf_account_dict = dict()
    session_portfolio = server_model.get_db_session('portfolio')
    query_pf_account = session_portfolio.query(PfAccount)
    for pf_account_db in query_pf_account:
        pf_account_dict[pf_account_db.id] = pf_account_db

    instrument_db_dict = dict()
    session_common = server_model.get_db_session('common')
    query = session_common.query(Instrument)
    for instrument_db in query.filter(Instrument.type_id == 1):
        if instrument_db.exchange_id == 20:
            exchange_name = 'SHF'
        if instrument_db.exchange_id == 21:
            exchange_name = 'DCE'
        if instrument_db.exchange_id == 22:
            exchange_name = 'ZCE'
        dict_key = '%s %s' % (instrument_db.ticker, exchange_name)
        if instrument_db.exchange_id == 25:
            dict_key = instrument_db.ticker
        instrument_db_dict[dict_key] = instrument_db

    fictitious_symbol_position_dict = dict()
    fictitious_change_symbol_position_dict = dict()
    session_portfolio = server_model.get_db_session('portfolio')
    query_pf_position = session_portfolio.query(PfPosition)
    for pf_position_db in query_pf_position.filter(
            PfPosition.symbol.like(symbol + '%'),
            PfPosition.date == next_trading_day,
            PfPosition.id.in_(tuple(pf_account_id_list))):
        if pf_position_db.long == 0 and pf_position_db.short == 0:
            continue

        pf_account_db = pf_account_dict[pf_position_db.id]
        if 'All_Weather_1' in pf_account_db.fund_name:
            account_name = '11610021-CTP-All_Weather_1-00'
            fictitious_account_id = fictitious_account_dict['All_Weather_1']
        elif 'All_Weather_2' in pf_account_db.fund_name:
            account_name = '11610021-CTP-All_Weather_2-00'
            fictitious_account_id = fictitious_account_dict['All_Weather_2']
        elif 'All_Weather_3' in pf_account_db.fund_name:
            account_name = '11610021-CTP-All_Weather_3-00'
            fictitious_account_id = fictitious_account_dict['All_Weather_3']
        elif 'absolute_return' in pf_account_db.fund_name:
            account_name = '120301313-CTP-absolute_return-00'
            fictitious_account_id = fictitious_account_dict['absolute_return']
        elif 'steady_return' in pf_account_db.fund_name:
            account_name = '120301312-CTP-steady_return-00'
            fictitious_account_id = fictitious_account_dict['steady_return']
        fictitious_account_db = pf_account_dict[int(fictitious_account_id)]

        symbol = pf_position_db.symbol
        instrument_db = instrument_db_dict[symbol]
        trade2_history1 = Trade2History()
        trade2_history1.time = '%s 15:00:00' % filter_date_str
        trade2_history1.symbol = symbol
        trade2_history1.price = instrument_db.close
        trade2_history1.trade_type = 3
        trade2_history1.strategy_id = '%s.%s' % (pf_account_db.group_name,
                                                 pf_account_db.name)
        trade2_history1.account = account_name
        if pf_position_db.short > 0:
            trade2_history1.qty = pf_position_db.short
        elif pf_position_db.long > 0:
            trade2_history1.qty = -pf_position_db.long

        trade2_history2 = Trade2History()
        trade2_history2.time = '%s 15:00:00' % filter_date_str
        trade2_history2.symbol = symbol
        trade2_history2.price = instrument_db.close
        trade2_history2.trade_type = 2
        trade2_history2.strategy_id = '%s.%s' % (
            fictitious_account_db.group_name, fictitious_account_db.name)
        trade2_history2.account = account_name
        if pf_position_db.short > 0:
            trade2_history2.qty = -pf_position_db.short
        elif pf_position_db.long > 0:
            trade2_history2.qty = pf_position_db.long

        change_symbol = contract_change_dict[pf_position_db.symbol]
        change_instrument_db = instrument_db_dict[change_symbol]
        trade2_history3 = Trade2History()
        trade2_history3.time = '%s 15:00:00' % filter_date_str
        trade2_history3.symbol = change_symbol
        trade2_history3.price = change_instrument_db.close
        trade2_history3.trade_type = 2
        trade2_history3.strategy_id = '%s.%s' % (pf_account_db.group_name,
                                                 pf_account_db.name)
        trade2_history3.account = account_name
        if pf_position_db.short > 0:
            trade2_history3.qty = -pf_position_db.short
        elif pf_position_db.long > 0:
            trade2_history3.qty = pf_position_db.long

        trade2_history4 = Trade2History()
        trade2_history4.time = '%s 15:00:00' % filter_date_str
        trade2_history4.symbol = change_symbol
        trade2_history4.price = change_instrument_db.close
        trade2_history4.trade_type = 2
        trade2_history4.strategy_id = '%s.%s' % (
            fictitious_account_db.group_name, fictitious_account_db.name)
        trade2_history4.account = account_name
        if pf_position_db.short > 0:
            trade2_history4.qty = pf_position_db.short
        elif pf_position_db.long > 0:
            trade2_history4.qty = -pf_position_db.long

        session_om.merge(trade2_history1)
        session_om.merge(trade2_history2)
        session_om.merge(trade2_history3)
        session_om.merge(trade2_history4)

        pf_position_db2 = PfPosition()
        pf_position_db2.date = next_trading_day
        pf_position_db2.id = fictitious_account_id
        pf_position_db2.symbol = symbol
        pf_position_db2.long = pf_position_db.long
        pf_position_db2.long_cost = pf_position_db.long * instrument_db.close * instrument_db.fut_val_pt
        pf_position_db2.long_avail = pf_position_db.long_avail
        pf_position_db2.short = pf_position_db.short
        pf_position_db2.short_cost = pf_position_db.short * instrument_db.close * instrument_db.fut_val_pt
        pf_position_db2.short_avail = pf_position_db.short_avail
        pf_position_db2.yd_position_long = pf_position_db.long
        pf_position_db2.yd_long_remain = pf_position_db.long
        pf_position_db2.yd_position_short = pf_position_db.short
        pf_position_db2.yd_short_remain = pf_position_db.short
        pf_position_db2.prev_net = pf_position_db2.yd_position_long - pf_position_db2.yd_position_short

        pf_position_db3 = PfPosition()
        pf_position_db3.date = next_trading_day
        pf_position_db3.id = fictitious_account_id
        pf_position_db3.symbol = change_symbol
        if pf_position_db.short > 0:
            pf_position_db3.long = pf_position_db.short
            pf_position_db3.long_cost = pf_position_db.short * change_instrument_db.close * change_instrument_db.fut_val_pt
            pf_position_db3.long_avail = pf_position_db.short_avail
        elif pf_position_db.long > 0:
            pf_position_db3.short = pf_position_db.long
            pf_position_db3.short_cost = pf_position_db.long * change_instrument_db.close * change_instrument_db.fut_val_pt
            pf_position_db3.short_avail = pf_position_db.long_avail
        pf_position_db3.yd_position_long = pf_position_db.long
        pf_position_db3.yd_long_remain = pf_position_db.long
        pf_position_db3.yd_position_short = pf_position_db.short
        pf_position_db3.yd_short_remain = pf_position_db.short
        pf_position_db3.prev_net = pf_position_db3.yd_position_long - pf_position_db3.yd_position_short

        pf_position_db1 = pf_position_db
        pf_position_db1.symbol = change_symbol
        pf_position_db1.long = pf_position_db.long
        pf_position_db1.long_cost = pf_position_db.long * change_instrument_db.close * instrument_db.fut_val_pt
        pf_position_db1.long_avail = pf_position_db.long_avail
        pf_position_db1.short = pf_position_db.short
        pf_position_db1.short_cost = pf_position_db.short * change_instrument_db.close * instrument_db.fut_val_pt
        pf_position_db1.short_avail = pf_position_db.short_avail
        pf_position_db1.yd_position_long = pf_position_db.long
        pf_position_db1.yd_long_remain = pf_position_db.long
        pf_position_db1.yd_position_short = pf_position_db.short
        pf_position_db1.yd_short_remain = pf_position_db.short
        pf_position_db1.prev_net = pf_position_db1.yd_position_long - pf_position_db1.yd_position_short

        session_portfolio.merge(pf_position_db1)
        if fictitious_account_id in fictitious_symbol_position_dict:
            fictitious_symbol_position_dict[fictitious_account_id].append(
                pf_position_db2)
        else:
            fictitious_symbol_position_dict[fictitious_account_id] = [
                pf_position_db2
            ]

        if fictitious_account_id in fictitious_change_symbol_position_dict:
            fictitious_change_symbol_position_dict[
                fictitious_account_id].append(pf_position_db3)
        else:
            fictitious_change_symbol_position_dict[fictitious_account_id] = [
                pf_position_db3
            ]

    for (fictitious_account_id, fictitious_symbol_position_list
         ) in fictitious_symbol_position_dict.items():
        pf_position_db2 = __rebuild_position(server_model, next_trading_day,
                                             fictitious_symbol_position_list)
        session_portfolio.merge(pf_position_db2)

    for (fictitious_account_id, fictitious_symbol_position_list
         ) in fictitious_change_symbol_position_dict.items():
        pf_position_db3 = __rebuild_position(server_model, next_trading_day,
                                             fictitious_symbol_position_list)
        session_portfolio.merge(pf_position_db3)

    session_om.commit()
    session_portfolio.commit()
def daily_return_report_check(account_id, date_str):
    server_model = ServerConstant().get_server_model('huabao')
    pf_account_db = get_account_id(server_model, account_id)
    server_enter(server_model, pf_account_db, date_str)
示例#25
0
# -*- coding: utf-8 -*-
# 策略持仓修改工具
import xlrd
from eod_aps.model.pf_account import PfAccount
from sqlalchemy import desc

from eod_aps.model.pf_position import PfPosition
from eod_aps.model.server_constans import ServerConstant
from datetime import datetime

server_constant = ServerConstant()
pf_account_dict = dict()


def pf_position_modify(symbol_key, account_id, long_volume, short_volume):
    server_model = server_constant.get_server_model('host')
    session_portfolio = server_model.get_db_session('portfolio')
    query_position = session_portfolio.query(PfPosition)
    pf_position_db = query_position.filter(
        PfPosition.symbol.like('%' + symbol_key + '%')).order_by(
            desc(PfPosition.date)).first()
    if pf_position_db.long_avail > 0:
        unit_price = pf_position_db.long_cost / pf_position_db.long_avail
    elif pf_position_db.short_avail > 0:
        unit_price = pf_position_db.short_cost / pf_position_db.short_avail

    pf_position = PfPosition()
    pf_position.date = datetime.now()
    pf_position.id = account_id
    if long_volume > 0:
        pf_position.long = long_volume
    return future_file_dict


def __build_ticker_exchange(server_model):
    instrument_dict = dict()
    session_common = server_model.get_db_session('common')
    query = session_common.query(Instrument).filter(Instrument.type_id.in_((1, 4)))
    for instrument_db in query:
        instrument_dict[instrument_db.ticker] = instrument_db
    return instrument_dict

def get_account_id(server_model, account_id):
    session_portfolio = server_model.get_db_session('portfolio')

    query_pf_account = session_portfolio.query(PfAccount)
    pf_account_db = query_pf_account.filter(PfAccount.id == str(account_id)).first()
    return pf_account_db


def daily_return_report_check(account_id, date_str):
    server_model = ServerConstant().get_server_model('huabao')
    pf_account_db = get_account_id(server_model, account_id)
    server_enter(server_model, pf_account_db, date_str)


if __name__ == '__main__':
    # daily_return_report_check('172', '2017-03-27')
    server_model = ServerConstant().get_server_model('host')
    __build_ticker_exchange(server_model)

示例#27
0
def ipo_stock_monitor():
    __wind_close()
    __wind_login()
    stock_server_list = server_constant.get_stock_servers()
    email_list = []
    for server_name in stock_server_list:
        print server_name

        server_model = ServerConstant().get_server_model(server_name)
        session_portfolio = server_model.get_db_session('portfolio')

        # query ipo id
        query_sql1 = "select `ID` from portfolio.pf_account where FUND_NAME like 'container-Iposub%'"
        query_result1 = session_portfolio.execute(query_sql1)
        ipo_account_list = []
        for query_line in query_result1:
            ipo_account_list.append(str(query_line[0]))

        if len(ipo_account_list) == 0:
            continue

        # query max date
        query_sql2 = "select MAX(DATE) from portfolio.pf_position;"
        query_result2 = session_portfolio.execute(query_sql2)
        max_date = datetime.datetime.now().strftime('%Y-%m-%d')
        for query_line in query_result2:
            max_date = datetime.datetime.strftime(query_line[0], '%Y-%m-%d')

        # query ipo id
        query_sql3 = "select `SYMBOL` from portfolio.pf_position where id in (%s) and date = '%s';" % \
                     (','.join(ipo_account_list), max_date)
        query_result3 = session_portfolio.execute(query_sql3)
        ipo_id_list = []
        for query_line in query_result3:
            ipo_id_list.append(query_line[0])

        # rebuild stock ticker
        query_sql4 = "select ticker, exchange_id from common.instrument where ticker in (%s) and type_id = 4" % ','.join(ipo_id_list)
        query_result4 = session_portfolio.execute(query_sql4)
        rebuild_ipo_id_list = []
        for query_line in query_result4:
            if query_line[1] == 18:
                rebuild_ipo_id_list.append(query_line[0] + '.SH')
            elif query_line[1] == 19:
                rebuild_ipo_id_list.append(query_line[0] + '.SZ')
            else:
                continue

        # rebuild date
        date_str_1 = date_utils.get_last_trading_day('%Y-%m-%d', max_date)
        date_str_2 = date_utils.get_last_trading_day('%Y-%m-%d', date_str_1)

        # get wind price
        wind_price_dict = dict()
        wind_data = w.wsd(rebuild_ipo_id_list, "close", date_str_2, date_str_1, "")
        for i in range(len(wind_data['Codes'])):
            wind_price_dict[wind_data['Codes'][i]] = wind_data['Data'][i]

        # build table
        html_title = 'Ticker,Close_%s,Close_%s' % (date_str_2, date_str_1)
        table_list = []
        for (wind_ticker, wind_price_list) in sorted(wind_price_dict.items()):
            tr_list = []
            if wind_price_list[1] / wind_price_list[0] - 1 > 0.095:
                tr_list.append(str(wind_ticker))
                tr_list.append(str(wind_price_list[0]))
                tr_list.append(str(wind_price_list[1]))
            else:
                tr_list.append(str(wind_ticker))
                tr_list.append(str(wind_price_list[0]) + '(Error)')
                tr_list.append(str(wind_price_list[1]) + '(Error)')
            table_list.append(tr_list)
        html_list = email_utils.list_to_html(html_title, table_list)
        email_list.append(server_name + ':<br>')
        email_list.append(''.join(html_list))
        server_model.close()

    email_utils.send_email_group_all(unicode('打新股票开板校验', 'gbk'), '\n'.join(email_list), 'html')
    __wind_close()