Esempio n. 1
0
def test_short_compute5():
    """
    做多场2,考虑异常情况下的卖出
    """
    busi_date = "2017-03-20"
    data = {}
    data["trade_id"] = "trade_id"
    data["secu_acc_id"] = "secu_acc_id"
    data["prd_no"] = "prd_no"
    data['open_date'] = "2017-03-10"
    data["busi_date"] = busi_date
    data['liab_qty'] = 0
    data['mkt_val'] = 0.
    data["trd_detail"] = []
    data['now_trd'] = [{
        "trd_qty": 800,
        "trd_cash_flow": 4000,
        "timestamp": 1489626000
    }, {
        "trd_qty": -150,
        "trd_cash_flow": -1200,
        "timestamp": 1489626001
    }, {
        "trd_qty": 150,
        "trd_cash_flow": 1000,
        "timestamp": 1489626002
    }]
    data["total_in"] = 0.
    data["total_out"] = 0.
    re = short_compute(data, busi_date)
    assert_equal(re['exception_label'], 1)
    assert_less(0.0 - float(re["trd_detail"][0]["return"]), 1e-4)
    assert_less(0.0 - float(re["trd_detail"][1]["return"]), 1e-4)
    assert_less(200.0 - float(re["trd_detail"][2]["return"]), 1e-4)
Esempio n. 2
0
def test_short_compute():
    """
    做空场景1,考虑正常情况下,在计算日无交易
    """
    busi_date = "2017-03-20"
    data = {}
    data["trade_id"] = "trade_id"
    data["secu_acc_id"] = "secu_acc_id"
    data["prd_no"] = "prd_no"
    data['open_date'] = "2017-03-10"
    data["busi_date"] = busi_date
    data['liab_qty'] = -950
    data['mkt_val'] = -10000.
    data["trd_detail"] = [{
        "trd_amt": "-8000",
        "trd_qty": "-800",
        "trd_date": "2017-03-10",
        "return": "0.0"
    }, {
        "trd_amt": "-2000",
        "trd_qty": "-150",
        "trd_date": "2017-03-12",
        "return": "0.0"
    }]
    data['now_trd'] = None
    data["total_in"] = 0.
    data["total_out"] = 0.
    re = short_compute(data, busi_date)
    assert_equal(re['total_in'], 0.)
    assert_equal(re['total_out'], 10000.)
    assert_equal(re['remain_val'], -10000.)
    assert_equal(re['remain_liab_qty'], -950)
Esempio n. 3
0
def test_short_compute4():
    """
    做多场2,考虑金额正常卖出
    """
    busi_date = "2017-03-20"
    data = {}
    data["trade_id"] = "trade_id"
    data["secu_acc_id"] = "secu_acc_id"
    data["prd_no"] = "prd_no"
    data['open_date'] = "2017-03-10"
    data["busi_date"] = busi_date
    data['liab_qty'] = 0
    data['mkt_val'] = 0.
    data["trd_detail"] = [{
        "trd_amt": "-8000",
        "trd_qty": "-800",
        "trd_date": "2017-03-10",
        "return": "0.0"
    }, {
        "trd_amt": "-2000",
        "trd_qty": "-150",
        "trd_date": "2017-03-12",
        "return": "0.0"
    }]
    data['now_trd'] = [{
        "trd_qty": 800,
        "trd_cash_flow": 4000,
        "timestamp": 1489626002
    }, {
        "trd_qty": 150,
        "trd_cash_flow": 1000,
        "timestamp": 1489626001
    }]
    data["total_in"] = 0.
    data["total_out"] = 0.
    re = short_compute(data, busi_date)
    assert_equal(re['return_rate'], 1.)
    assert_equal(re['total_in'], 5000.)
    assert_equal(re['total_out'], 10000.)
    assert_equal(re['exception_label'], 0)
Esempio n. 4
0
 def daily_compute(self, busi_date):
     """
     """
     spark = self.spark
     yesterday = get_date(self.date_order, self.order_date, busi_date, -1)
     unclose = spark.sql("select * from %s.%s where busi_date='%s'" %
                         (self.fdata, self.unclose_table, yesterday))
     trd = spark.sql("select * from %s.%s where busi_date='%s'" %
                     (self.odata, self.cash_flow_table, busi_date))
     trd = trd.filter("trd_type='short_related' and prd_no!='0.0'")
     trd = trd.withColumn(
         "now_trd", func.struct("trd_qty", "trd_cash_flow", "timestamp"))
     trd = trd.groupBy("trade_id", "secu_acc_id", "prd_no") \
         .agg(func.collect_list("now_trd").alias("now_trd"))
     trd.persist(StorageLevel.DISK_ONLY)
     trd.count()
     debt = spark.sql("select * from %s.%s where busi_date='%s'" %
                      (self.odata, self.debt_table, busi_date))
     debt = debt.select("trade_id", "secu_acc_id", "prd_no", "liab_qty",
                        "mkt_val")
     debt = debt.filter("prd_no!='0.0'")
     df = full_outer_join(unclose, trd,
                          ["trade_id", "secu_acc_id", "prd_no"])
     df = full_outer_join(df, debt, ["trade_id", "secu_acc_id", "prd_no"])
     df.persist(StorageLevel.DISK_ONLY)
     df.count()
     data = df.rdd.map(lambda x: Row(**short_compute(
         x.asDict(recursive=True), busi_date)))
     if data.count() > 0:
         data = data.toDF()
         close = data.filter("remain_liab_qty = 0")
         close = close.withColumn("close_date", close.busi_date)
         self.check_data(close)
         unclose = data.filter("remain_liab_qty != 0")
         self.save_close_data(close, busi_date)
         self.save_unclose_data(unclose, busi_date)
     else:
         print "清仓股票收益做空没有数据输出"