主页 > imtoken官网唯一地址 > 比特币矿商的礼物:价值平均订购策略

比特币矿商的礼物:价值平均订购策略

imtoken官网唯一地址 2023-08-04 05:14:42

全文如下:

在上一篇文章“比特币市场中价值固定投资策略的应用”中,我们为比特币忠实粉丝(比特币市场的坚定看涨者)提供了一种存储资金的方法。我希望所有在早期阅读我文章的朋友都在这一波大市场中买了钱,赚了很多钱

本文将介绍另一种策略,为比特币市场的另一类卖家参与者(矿工)提供一种最大化销售硬币收入的方法

一、战略介绍

比特币分叉会影响比特币价格吗_淘宝最早卖比特币_比特币多少起卖

价值平均销售策略是一种长期销售策略。提前确定每个周期的预期总头寸(通常按周期递减)。根据预期市场价值与实际头寸市场价值之间的差异,确定买卖标的物的数量。它比传统的固定目标数量销售更灵活,适合矿工

下图显示了该策略下用户持有的比特币市值占净资产比例的变化。我们可以看到比特币多少起卖,这是一个线性递减过程:

<

<二、实现方法

比特币分叉会影响比特币价格吗_比特币多少起卖_淘宝最早卖比特币

首先,制定出我们在每个阶段想要达到的总体目标。因为这是一种销售策略,所以这个位置应该逐渐减少。例如,如果初始头寸为10万元,总净值为20万元,初始头寸比例为50%。设定后,目标头寸占各期资产净值总额的比例降低1%。那么第一阶段的目标位置比例是49%,第二阶段是48%,依此类推。现有头寸将随着基础价格的波动而变化,因此每个时期的销售额比例将发生变化。例如,在第一阶段,由于价格上涨,仓位从50%增加到51%。为了将仓位调整到49%的目标仓位,我们必须卖出2%的目标仓位。在第二阶段比特币多少起卖,由于价格下跌,仓位从49%降至4%8.5%。为了将仓位调整到48%的目标仓位,我们必须出售0.5%的标的。可以看出,当价格上涨时,销售量增加;当价格下跌时,销售额就会下降。如果价格下跌过快,为了适应目标仓位,你甚至需要反向买入目标仓位。高价时多卖,低价时少卖,甚至买。这实际上有助于我们执行类似于“高卖低买”的操作

三、优势

与传统的定量订购相比,平均值订购更灵活。该策略的实质是通过改变投资目标价格来调整每个时期的销售量。此外,平均值法也有购买机制。如果某一时期的价格突然暴跌,可能会导致该时期的仓位低于目标仓位。此时,为了达到目标仓位,我们不会继续出售,而是购买。以足够低的价格购买,以帮助稀释持仓成本,并在后续销售中获得更高的回报。固定数量的订单是出售而不是购买,持有的物品数量只是减少而不是增加。这是两者之间最大的区别,也是平均值排序的优势

四、缺点

比特币多少起卖_比特币分叉会影响比特币价格吗_淘宝最早卖比特币

由于每个时期的销售量不是一个固定的或可预测的值,这将给投资者带来一些麻烦。每个时期的销售量都必须计算,如果某一时期的销售量突然增加(由价格暴涨引起),也可能给投资者带来意想不到的压力

五、策略源代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 策略代码总共分为三大部分,1)PARAMS变量 2)intialize函数 3)handle_data函数
# 请根据指示阅读。或者直接点击运行回测按钮,进行测试,查看策略效果。
# 策略名称:价值平均定卖策略
# 策略详细介绍:https://zhuanlan.zhihu.com/p/24513918
# 关键词:卖出策略、矿工首选、高抛低吸、分批卖出。
# 方法:
# 1)确定每个周期的目标仓位;
# 2)每一期将仓位调整至目标仓位;
# 阅读1,首次阅读可跳过:
# PARAMS用于设定程序参数,回测的起始时间、结束时间、滑点误差、初始资金和持仓。
# 可以仿照格式修改,基本都能运行。如果想了解详情请参考新手学堂的API文档。
PARAMS = {
    "start_time": "2014-05-01 00:00:00",
    "end_time": "2014-11-01 00:00:00",
    "slippage": 0.00001,
    "account_initial": {"huobi_cny_cash": 0,
                        "huobi_cny_btc": 1000},
}
# 阅读2,遇到不明白的变量可以跳过,需要的时候回来查阅:
# initialize函数是两大核心函数之一(另一个是handle_data),用于初始化策略变量。
# 策略变量包含:必填变量,以及非必填(用户自己方便使用)的变量
def initialize(context):
    # 以日为单位进行回测
    context.frequency = "1d"
    # 设定以比特币为基准
    context.benchmark = "huobi_cny_btc"
    # 设定操作的标的为比特币
    context.security = "huobi_cny_btc"
    # 设置策略参数
    # 每个frequency的持仓占净资产减少的比例(%)
    context.user_data.pos_value_decrease_per_period = 0.5464
    # 记录下当前处于第几个投资周期
    context.user_data.invest_period_count = 0
    # 设置策略期望初始仓位(%)
    context.user_data.initial_pos_ratio = 100
# 阅读3,策略核心逻辑:
# handle_data函数定义了策略的执行逻辑,按照frequency生成的bar依次读取并执行策略逻辑,直至程序结束。
# handle_data和bar的详细说明,请参考新手学堂的解释文档。
def handle_data(context):
    # 取得最新价格
    latest_close_price = context.data.get_current_price(context.security)
    # 计算当前实时仓位(元)
    current_pos_value = getattr(context.account, context.security) * latest_close_price
    # 计算当前实时仓位比例(%)
    current_pos_ratio = current_pos_value / context.account.huobi_cny_net * 100
    if context.user_data.initial_pos_ratio is None:
        context.user_data.initial_pos_ratio = current_pos_ratio
    # 计算当前期望仓位比例 (%)
    expected_pos_ratio = context.user_data.initial_pos_ratio - context.user_data.pos_value_decrease_per_period * (context.user_data.invest_period_count + 1)
    # 计算当前期望仓位 (元)
    expected_pos_value = (expected_pos_ratio / 100) * context.account.huobi_cny_net
    # 当前账户持有的人民币现金
    current_cash_pos = context.account.huobi_cny_cash
    # 当前账户持有的数字货币数量
    current_sec_pos = getattr(context.account, context.security)
    # 计算本期需要卖出的数量(若为负,则需要买入数字货币)
    quantity_to_sell = quantity_to_sell_fn(context, expected_pos_value, current_pos_value, current_cash_pos, current_sec_pos, latest_close_price)
    context.log.info("目标仓位: %s 元, 现有仓位: %s 元" % (expected_pos_value, current_pos_value))
    # 更新投资周期至下一期
    context.user_data.invest_period_count += 1
    if quantity_to_sell > 0:
        # 需要卖出仓位,市价单卖出
        context.log.info("正在卖出 %s" % context.security)
        context.log.info("卖出数量为 %s" % quantity_to_sell)
        context.order.sell(context.security, quantity=str(quantity_to_sell))
    elif quantity_to_sell < 0:
        # 需要买入仓位,计算需要买入的金额,市价单买入
        cash_to_buy = -1 * quantity_to_sell * latest_close_price
        context.log.info("正在买入%s" % context.security)
        context.log.info("下单金额为 %s 元" % cash_to_buy)
        context.order.buy(context.security, cash_amount=str(cash_to_buy))
    else:
        context.log.info("无加减仓操作")
def quantity_to_sell_fn(context, expected_pos_value, current_pos_value, current_cash_pos, current_sec_pos, latest_close_price):
    # 高于目标仓位,需要卖出减仓
    if current_pos_value > expected_pos_value:
        result = current_pos_value - expected_pos_value
        pos_qty_to_sell = result / latest_close_price
        # 当前仓位可以满足卖出需求
        if pos_qty_to_sell <= current_sec_pos:
            context.log.info("需要卖出,来达到目标仓位")
            return pos_qty_to_sell
        else:  # 仓位不足,卖出全部仓位
            context.log.warn(
                "现有仓位不足以满足目标仓位, 需要卖出仓位:%.2f, 现有仓位:%.2f. 本次将卖出所有仓位" % (pos_qty_to_sell, current_sec_pos))
            return current_sec_pos
    # 低于目标仓位,需要买入加仓
    elif current_pos_value < expected_pos_value:
        result = expected_pos_value - current_pos_value
        if result < current_cash_pos:
            context.log.info("需要买入,来达到目标仓位")
            quantity_to_buy = result / latest_close_price
            return -1 * quantity_to_buy
        else:  # 现金不足,投入全部现金加仓
            context.log.warn(
                "现金不足以满足目标仓位, 需要现金:%.2f, 现有现金:%.2f. 本次将用完全部现金" % (result, current_cash_pos))
            return -1 * current_cash_pos / latest_close_price
    else:
        return 0

六、回溯测试

比特币分叉会影响比特币价格吗_淘宝最早卖比特币_比特币多少起卖

从策略源代码中,我们可以很容易地看到策略的回溯测试参数如下:

回溯测试的持续时间总共为184天。回溯测试在几天内进行。初始账户中有1000个比特币,没有现金,因此初始头寸为100%。目标是在回溯测试结束时出售所有比特币,以将头寸减少至0%,因此,每个时段(日)的头寸下降率应为100%/184=0.5464%

回测结果如下:

比特币多少起卖_淘宝最早卖比特币_比特币分叉会影响比特币价格吗

与基准相比,该策略的绩效更稳定,回调也更小,存在较大的超额收益。当整个市场出现逆转和下跌时,该策略可以控制用户净资产的下降率。此外,由于这是一种销售策略,账户中的资金正在增加,这是一种锁定的收入。投资者可以根据个人需求将现金投资于其他产品或策略,而不必一直将其保存在账户中。因此,该账户的实际回报率被低估了。这个策略不是教你如何“投资”,而是教你如何“剥离”,更合理地实现数字货币。因此,它非常适合数字货币生产商(矿工)

七、总结

平均值排序策略是对固定数量排序的改进,它可以帮助投资者虚拟地“高卖低吸”,并通过市场确定交易数量。对于采矿者来说,更合理地使用数字货币是非常合适的