Beispiel #1
0
    def selling_3(self, first_sell_up, second_sell_up, third_sell_up,
                  first_sell_down):
        global running_box
        # 支撑线压力线,波谷波峰数据集,变异系数,支撑点压力点,以及原因的获取
        # df_s, cv_s, price_s = self.support_line()
        e_support, reason_s = self.support_dot()
        # df_p, cv_p, price_p = self.pressure_line()
        e_pressure, reason_p = self.pressure_dot()
        obj1 = Deal(self.stock_id)

        price_buy = 0
        price_sell = 0
        cash = 0
        num = 0
        # 涨停止盈
        if self.df.low[0] <= self.df.close[1] * 1.09 <= self.df.high[0]:
            price_buy = 0
            price_sell = self.df.close[1] * 1.09
            num0 = list(running_box.loc[running_box.stock_id == self.stock_id,
                                        'bought_num'])[0] / 5
            num = math.floor(num0 * 100) * 100
            commission_buy, commission_sell = obj1.order_cost(
                num,
                price_sell,
                close_tax=0.001,
                open_commission=0.0003,
                close_commission=0.0003,
                min_commission=5)
            cash = num * price_sell - commission_sell
            if num >= 200:
                print 'situation3_5'
                return price_buy, price_sell, cash, num
            else:
                num = 200
                commission_buy, commission_sell = obj1.order_cost(
                    num,
                    price_sell,
                    close_tax=0.001,
                    open_commission=0.0003,
                    close_commission=0.0003,
                    min_commission=5)
                cash = num * price_sell - commission_sell
                print 'situation3_6'
                return price_buy, price_sell, cash, num

        # 长上影线止盈
        close_ave5 = create_data.ave_data_create(self.df.close, 5)
        open_ave5 = create_data.ave_data_create(self.df.open, 5)
        high_ave5 = create_data.ave_data_create(self.df.high, 5)
        low_ave5 = create_data.ave_data_create(self.df.low, 5)
        if ((self.df.high[0] - max(self.df.close[0], self.df.open[0])) / (self.df.high[0] - self.df.low[0]) >= 0.5) or \
                ((high_ave5[0] - max(open_ave5[0], close_ave5[0])) / (high_ave5[0] - low_ave5[0]) >= 0.5):
            if self.df.volume[0] > self.df.volums[0:5].mean():
                price_buy = 0
                price_sell = self.df.close[0]
                num0 = list(
                    running_box.loc[running_box.stock_id == self.stock_id,
                                    'bought_num'])[0] / 5
                num = math.floor(num0 * 100) * 100
                commission_buy, commission_sell = obj1.order_cost(
                    num,
                    price_sell,
                    close_tax=0.001,
                    open_commission=0.0003,
                    close_commission=0.0003,
                    min_commission=5)
                cash = num * price_sell - commission_sell
                if num >= 200:
                    print 'situation3_7'
                    return price_buy, price_sell, cash, num
                else:
                    num = 200
                    commission_buy, commission_sell = obj1.order_cost(
                        num,
                        price_sell,
                        close_tax=0.001,
                        open_commission=0.0003,
                        close_commission=0.0003,
                        min_commission=5)
                    cash = num * price_sell - commission_sell
                    print 'situation3_8'
                    return price_buy, price_sell, cash, num

        if self.df.high[0] < self.ave_price_60[0]:
            price_sell = min(e_support, first_sell_down) * 0.99
            # 支撑位止损
            if self.df.close[0] <= price_sell:
                num = list(
                    running_box.loc[running_box.stock_id == self.stock_id,
                                    'bought_num'])[0]
                commission_buy, commission_sell = obj1.order_cost(
                    num,
                    price_sell,
                    close_tax=0.001,
                    open_commission=0.0003,
                    close_commission=0.0003,
                    min_commission=5)
                cash = num * price_sell - commission_sell
                print 'situation3_9'
                return price_buy, price_sell, cash, num
        else:
            # 跳空止盈
            if self.df.low[0] > self.ave_price_5[0]:
                price_buy = 0
                price_sell = self.df.close[0]
                num0 = list(
                    running_box.loc[running_box.stock_id == self.stock_id,
                                    'bought_num'])[0] / 5
                num = math.floor(num0 * 100) * 100
                commission_buy, commission_sell = obj1.order_cost(
                    num,
                    price_sell,
                    close_tax=0.001,
                    open_commission=0.0003,
                    close_commission=0.0003,
                    min_commission=5)
                cash = num * price_sell - commission_sell
                if num >= 200:
                    print 'situation3_10'
                    return price_buy, price_sell, cash, num
                else:
                    num = 200
                    commission_buy, commission_sell = obj1.order_cost(
                        num,
                        price_sell,
                        close_tax=0.001,
                        open_commission=0.0003,
                        close_commission=0.0003,
                        min_commission=5)
                    cash = num * price_sell - commission_sell
                    print 'situation3_11'
                    return price_buy, price_sell, cash, num
            # 超过压力位止盈
            # 对于cv_p没做限定,如果存在负角度的压力线,是否会低于60日线,已改pressure角度0到30
            elif self.df.low[0] <= first_sell_up <= self.df.high[0]:
                price_buy = 0
                price_sell = self.df.close[0]
                num0 = list(
                    running_box.loc[running_box.stock_id == self.stock_id,
                                    'bought_num'])[0] / 5
                num = math.floor(num0 * 100) * 100
                commission_buy, commission_sell = obj1.order_cost(
                    num,
                    price_sell,
                    close_tax=0.001,
                    open_commission=0.0003,
                    close_commission=0.0003,
                    min_commission=5)
                cash = num * price_sell - commission_sell
                if num >= 200:
                    print 'situation3_12'
                    return price_buy, price_sell, cash, num
                else:
                    num = 200
                    commission_buy, commission_sell = obj1.order_cost(
                        num,
                        price_sell,
                        close_tax=0.001,
                        open_commission=0.0003,
                        close_commission=0.0003,
                        min_commission=5)
                    cash = num * price_sell - commission_sell
                    print 'situation3_13'
                    return price_buy, price_sell, cash, num
            elif self.df.low[0] <= second_sell_up <= self.df.high[0]:
                price_buy = 0
                price_sell = self.df.close[0]
                num0 = list(
                    running_box.loc[running_box.stock_id == self.stock_id,
                                    'bought_num'])[0] / 5
                num = math.floor(num0 * 100) * 100
                commission_buy, commission_sell = obj1.order_cost(
                    num,
                    price_sell,
                    close_tax=0.001,
                    open_commission=0.0003,
                    close_commission=0.0003,
                    min_commission=5)
                cash = num * price_sell - commission_sell
                if num >= 200:
                    print 'situation3_14'
                    return price_buy, price_sell, cash, num
                else:
                    num = 200
                    commission_buy, commission_sell = obj1.order_cost(
                        num,
                        price_sell,
                        close_tax=0.001,
                        open_commission=0.0003,
                        close_commission=0.0003,
                        min_commission=5)
                    cash = num * price_sell - commission_sell
                    print 'situation3_15'
                    return price_buy, price_sell, cash, num
            elif self.df.low[0] <= third_sell_up <= self.df.high[0]:
                price_buy = 0
                price_sell = self.df.close[0]
                num0 = list(
                    running_box.loc[running_box.stock_id == self.stock_id,
                                    'bought_num'])[0] / 5
                num = math.floor(num0 * 100) * 100
                commission_buy, commission_sell = obj1.order_cost(
                    num,
                    price_sell,
                    close_tax=0.001,
                    open_commission=0.0003,
                    close_commission=0.0003,
                    min_commission=5)
                cash = num * price_sell - commission_sell
                if num >= 200:
                    print 'situation3_16'
                    return price_buy, price_sell, cash, num
                else:
                    num = 200
                    commission_buy, commission_sell = obj1.order_cost(
                        num,
                        price_sell,
                        close_tax=0.001,
                        open_commission=0.0003,
                        close_commission=0.0003,
                        min_commission=5)
                    cash = num * price_sell - commission_sell
                    print 'situation3_17'
                    return price_buy, price_sell, cash, num

        return price_buy, price_sell, cash, num