Стратегия бросания монеты (●''●)

Автор:Соленые бобы, Дата: 2020-04-21 17:39:52
Тэги:

Полная публикация: T.S.S. Ниже приведены трансляции. Пожалуйста, обратите внимание на "Квантифицированный мир в тысячах" и получите больше стратегического исходного кода! И еще он сделал себе рекламу. Общественный журнал "Квантированный журнал о соленой фасоле" Онлайн количественное банкротство - публичное наказание каждый день. Если вы хотите получить больше пособий, приезжайте.


Если вы хотите, чтобы ваши деньги были доступны для вас, вы должны использовать их, чтобы заработать деньги в биткоин. Оригинальное: Океан Океан Миллионы Количественный мир 3 дня назад Разработка и разработка количественной стратегии на самом деле является двусторонней, очень сложной для тех, кто только начинает, сложной не только для кода на уровне хитрости хитрости, но также сложной и для стратегического логического мышления на уровне хитрости.

Здравствуйте, тысячи количественных друзей!

Второе издание этой специальной публикации, мы с честью приглашаем вас на микроклимат LE_CHIFFRE1 для того, чтобы рассказать вам о том, как использовать фактор колебания, чтобы легко выиграть биткойн, чтобы достичь уменьшения размера биткоина!

В этом выпуске содержатся идеи, прозрения, реализация кодирования и личное осознание. Нельзя сказать, что он не полон сухого сыра, но тысячи людей, прочитав его, чувствуют себя очень полезными.

В следующей статье мы рассмотрим некоторые из них.

01

Преамбула

Здравствуйте, сегодня мне посчастливилось поделиться статьей в количественном общественном номере, а также поблагодарить Т-босса за приглашение (один из тысяч посторонних номеров). Впервые написал статью Т-боссу, полностью свободно играть, позаимствовал свободное время после работы, качество и ошибки.

Т-хозяин говорит, что написать количественный, но не дает никакого объема, действительно не знаю, откуда написать. Тогда начните с вашей любимой темы для обсуждения с другими людьми. Количественные показатели и стратегии (только можно помочь, но также можно автоматизировать), конечно, в конце мы также должны добавить старую фразу: инвестировать рискованно, входить в рынок нужно осторожно, стратегия только для того, чтобы дать вам идеи и уроки, чтобы заработать.

После того, как мы закончили с этим, мы начинаем с основного вопроса.

02

Простая стратегия волатильности

Люди, которые знают меня, знают, что лично я не очень люблю играть в альфа, относительно я больше доверяю бетам, больше изучаю беты. Что касается того, почему, e.........mmmmm, не знаю, мама ответила, пожалуйста, пополните свой мозг.

Разработка количественной стратегии на самом деле двусторонняя, для тех, кто только начинает, это очень трудно, очень трудно, трудно не только кодировать на уровне хитрости, но также трудно и стратегическое логическое мышление на уровне хитрости. Оба являются важными, и не следует предвзято относиться к ним.

Стратегический алгоритм использует принцип колебаний роликовой доходности, когда цена логарета падает на определенные циклы. В соответствии с этим диапазоном колебаний вычисляется максимальное и минимальное значение ролика определенного цикла, максимальное значение как верхний канал, минимальное значение как нижний канал, прорыв верхнего канала, открытие позиции.

Конкретный графический визуализационный интерфейс можно найти в следующем PPT. Этот график сам нарисовал с помощью Pyecharts.

img

На самом деле, эта стратегия, которую я использовал ранее, чтобы сделать широкополосный ETF, конечно, также использовался для покупки и продажи акций при выборе индекса, а затем переместился прямо в монетный круг, и был удивлен, обнаружив, что действительно снижает размер удара, параметры не должны меняться.

img

Ниже приведены результаты рецензирования за этот год, а конкретные части кода сняты следующим образом:

img

На самом деле, после прочтения данных, с помощью панды можно вычислить показатели.

img

После завершения вычисления можно вывести данные с помощью функции pd.to_csv и визуализировать вывод pyecharts, используемых в скриншоте выше (примечание: я использую старые версии pyecharts).

Все конкретные стратегии, визуализации и коды показателей эффективности - это болтовня Т-диагона.

03

Разговоры о количестве

В первую очередь, хорошая стратегия - это не бояться открытости, это не что-то такое, как разработка оружия на уровне войны, которое решает жизнь и смерть, поэтому я и другие учреждения или даже люди не боятся так называемых секретов, потому что, на мой взгляд, CTA не имеет секретов.

Во-вторых, многие люди, как новички, так и старые игроки, нуждаются в источниках вдохновения, включая анализ факторов акций, идеи о выборе времени для стратегии и т. Д., которые часто исходят из субъективного опыта, исследовательских отчетов, обмена информацией в кругу и т. Д. Не исключено, что сейчас на рынке есть некоторые стратегии, которые можно купить, а затем прочитать и понять.

В конце концов, количественная стратегия была обычным предметом, программируемые сделки принадлежат к подмножеству количественных, уже в свое время в университете (около 2009 года), когда кто-то охотился за программированием, например, ТБ, пирамида, и т. д. Если это будет продолжаться сегодня, можно сказать, что эта часть первых пророков уже 10 лет назад, в том числе и те, кто не включает высокочастотные стратегии и системы, которые вернулись из Уолл-стрит. Поэтому количественная стратегия или так называемая программируемая стратегия в Китае существует уже некоторое время, но в настоящее время она является частью рынка и участников, а также политической поддержки.

В заключение, я хочу поблагодарить тысячи людей за доверие к моей профессии и приглашение написать статью. Если у вас есть какие-либо конкретные проблемы с кодом и стратегией, пожалуйста, напишите мне лично или T-Dawg, я тоже в группе T-Dawg.

В конце концов, еще раз благодарю вас за замечательную лекцию!

Для тех, кто еще не присоединился к группе по количественному обсуждению, присоединяйтесь и получите информацию!

"Сегодня мы должны быть готовы к тому, что мы не сможем выжить.

img

Вейчмены стерли Обратите внимание на этот номер


/*backtest
start: 2020-01-20 00:00:00
end: 2021-01-19 23:59:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_BitMEX","currency":"XBT_USD","fee":[0.008,0.1]}]
args: [["st",0.1]]
*/

// 初始化
exchange.SetContractType('XBTUSD')
_CDelay(100)
// 止盈止损
var TP_status = false // 是否触发追踪止盈 
var TP_HH = 0
var TP_LL = 0
var B = 1

// 获取交易所信息
function UpdateInfo() {
    account = exchange.GetAccount()
    pos = exchange.GetPosition()
    records = exchange.GetRecords()
    ticker = exchange.GetTicker()
}

// 定制本次盈亏
function Onept() {
    // 更新用户信息
    UpdateInfo()
    // 如果现在余额 大于 之前的余额, 那么 盈利次数+1, 且pt_1设为现在余额
    if (account.Stocks - pt_1 > 0) {
        pt_times = pt_times + 1
        Log('这回赚钱啦~~~~ (^U^)ノ~YO', account.Stocks - pt_1)
        B = 1
        pt_1 = account.Stocks
    }
    // 如果现在余额 小于 之前的余额, 那么 亏损次数+1, 且pt_1设为现在余额
    if (account.Stocks - pt_1 < 0) {
        st_times = st_times + 1
        Log('这回亏掉了.... /(ㄒoㄒ)/~~', account.Stocks - pt_1)
        B = B * 1.618
        pt_1 = account.Stocks
    }
}

// 画线
function PlotMA_Kline(records) {
    $.PlotRecords(records, "K")
}

// 追踪止盈 初始%, 追踪U
function TP() {
    var TP_first_long = pos[0].Price + tp_first * ticker.Last
    var TP_trailing_long = TP_HH - trailing_tp * ticker.Last
    var TP_first_short = pos[0].Price - tp_first * ticker.Last
    var TP_trailing_short = TP_LL + trailing_tp * ticker.Last
    // 当多仓时, 现价大于开仓+初始止赢价 -> 触发追踪止盈 
    if ((pos[0].Type == 0) && (ticker.Last > TP_first_long)) {
        // Log('当多仓时, 现价大于开仓+初始止赢价 -> 触发追踪止盈', TP_HH)
        TP_status = true
        // 触发追踪止盈, 未初始化开仓最大价格 -> 开仓后最大价格更新为现价
        if (TP_status === true && TP_HH == 0) {
            Log('触发追踪止盈, 未初始化开仓最大价格 -> 开仓后最大价格更新为现价', TP_HH)
            TP_HH = ticker.Last
        }
        // 触发追踪止盈, 已有开仓后最大价格, 现价大于开仓后最大价格 -> 开仓后最大价格更新为现价
        else if (TP_status === true && TP_HH != 0 && ticker.Last > TP_HH) {
            Log('触发追踪止盈, 已有开仓后最大价格, 现价大于开仓后最大价格 -> 开仓后最大价格更新为现价', TP_HH)
            TP_HH = ticker.Last
        }
        // 触发追踪止盈, 已有开仓后最大价格, 现价小于 (开仓后最大价格减 - 回撤USD) -> 开空平仓止盈
        else if (TP_status === true && TP_HH != 0 && ticker.Last < TP_trailing_long) {
            Log('触发追踪止盈, 已有开仓后最大价格, 现价小于 (开仓后最大价格减 - 回撤USD) -> 开空平仓止盈', TP_HH)
            exchange.SetDirection("closebuy")
            exchange.Sell(ticker.Buy, pos[0].Amount, "在" + ticker.Last + "止赢平多仓!! 开仓价格: " + pos[0].Price + "数量: " + pos[0].Amount)
            $.PlotFlag(new Date().getTime(), 'Sell', 'PT_BK' + ticker.Sell)
            Onept()
            TP_status = false
            TP_HH = 0
        }
    }
    // 当空仓时, 现价小于开仓-初始止赢价 -> 触发追踪止盈
    else if ((pos[0].Type == 1) && (ticker.Last < TP_first_short)) {
        // Log('当空仓时, 现价小于开仓-初始止赢价 -> 触发追踪止盈', TP_LL)
        TP_status = true
        // 触发追踪止盈, 未初始化开仓最大价格 -> 开仓后最小价格更新为现价
        if (TP_status === true && TP_LL == 0) {
            Log('触发追踪止盈, 未初始化开仓最大价格 -> 开仓后最小价格更新为现价', TP_LL)
            TP_LL = ticker.Last
        }
        // 触发追踪止盈, 已有开仓后最小价格, 现价小于开仓后最小价格 -> 开仓后最小价格更新为现价
        else if (TP_status === true && TP_LL != 0 && ticker.Last < TP_LL) {
            Log('触发追踪止盈, 已有开仓后最小价格, 现价小于开仓后最小价格 -> 开仓后最小价格更新为现价', TP_LL)
            TP_LL = ticker.Last
        }
        // 触发追踪止盈, 已有开仓后最小价格, 现价大于 (开仓后最小价格减 + 回撤USD) -> 开多平仓止盈
        else if (TP_status === true && TP_LL != 0 && ticker.Last > TP_trailing_short) {
            Log('触发追踪止盈, 已有开仓后最小价格, 现价大于 (开仓后最小价格减 + 回撤USD) -> 开多平仓止盈', TP_LL)
            exchange.SetDirection("closesell")
            exchange.Buy(ticker.Sell, pos[0].Amount, "在" + ticker.Last + "止赢平空仓!! 开仓价格: " + pos[0].Price + "数量: " + pos[0].Amount)
            $.PlotFlag(new Date().getTime(), 'Buy', 'PT_SK' + ticker.Sell)
            Onept()
            TP_status = false
            TP_LL = 0
        }
    }
}

// 止损 %
function Stoploss() {
    // 当多仓时, 现价小于开仓-止损价, 做空平多
    if ((pos[0].Type == 0) && (ticker.Last < pos[0].Price - st * ticker.Last)) {
        Log('当多仓时, 现价小于开仓-止损价, 做空平多')
        exchange.SetDirection("closebuy")
        exchange.Sell(ticker.Buy, pos[0].Amount, "在" + ticker.Last + "止损平多仓!! 开仓价格: " + pos[0].Price + "数量: " + pos[0].Amount)
        $.PlotFlag(new Date().getTime(), 'Sell', 'ST_BK' + ticker.Buy)
        Onept()
    }
    // 当空仓时, 现价大于开仓+止损价, 做多平空
    else if ((pos[0].Type == 1) && (ticker.Last > pos[0].Price + st * ticker.Last)) {
        Log('当空仓时, 现价大于开仓+止损价, 做多平空')
        exchange.SetDirection("closesell")
        exchange.Buy(ticker.Sell, pos[0].Amount, "在" + ticker.Last + "止损平空仓!! 开仓价格: " + pos[0].Price + "数量: " + pos[0].Amount)
        $.PlotFlag(new Date().getTime(), 'Buy', 'ST_SK' + ticker.Sell)
        Onept()
    }
}

// 计算凯利公式 仓位
function PriceAmount() {
    // 赢可以赢多少 
    y = tp_first
    // 输会输多少 
    s = st
    //赔率
    b = y / s
    // 赢的概率
    if (total_times < 10) {
        p = 0.382
    } else {
        p = pt_times / total_times
    }
    // 输的概率
    q = 1 - p
    // 凯莉公式
    f = (b * p - q) / b
    // 限制B最大值
    if (B > 16.18) {
        B = 16.18
    }
    //Amount = _N(Math.abs(f) * account.Stocks * ticker.Last * B, 0)
    Amount = _N(0.618 * account.Stocks * ticker.Last, 0)
    //Log(Amount)
}

// 交易逻辑
function onTick() {
    // 获取均匀分布 0-9 随机数
    ToTheMoon = Math.floor(Math.random() * 10)
    // 无仓位时
    if (pos.length == 0) {
        // Long 
        if (ToTheMoon > 5) {
            exchange.SetDirection("buy")
            exchange.Buy(ticker.Sell, Amount)
            $.PlotFlag(new Date().getTime(), 'Buy', 'BK' + ticker.Sell)
            total_times = total_times + 1
        }
        // Short 
        if (ToTheMoon < 4) {
            exchange.SetDirection("sell")
            exchange.Sell(ticker.Buy, Amount)
            $.PlotFlag(new Date().getTime(), 'Sell', 'SK' + ticker.Buy)
            total_times = total_times + 1
        }
    }
        // 多仓时
    if (pos.length > 0 && pos[0].Type == 0) {
        // 平多 
        if (ToTheMoon < 1) {
            exchange.SetDirection("closebuy")
            exchange.Sell(ticker.Buy, pos[0].Amount)
            $.PlotFlag(new Date().getTime(), 'Sell', 'PBK')
            Onept()
        }
    }
    // 空仓时
    if (pos.length > 0 && pos[0].Type == 1) {
        // 平空 
        if (ToTheMoon > 8) {
            exchange.SetDirection("closesell")
            exchange.Buy(ticker.Sell, pos[0].Amount)
            $.PlotFlag(new Date().getTime(), 'Buy', 'PSK')
            Onept()
        }
    }
}


function main() {
    UpdateInfo()
    // 统计
    pt_1 = account.Stocks
    total_times = 0
    pt_times = 0
    st_times = 0
    while (1) {
        UpdateInfo()
        PriceAmount()
        onTick()
        PlotMA_Kline(records)
        if (pos.length > 0) {
            TP()
        }
        if (pos.length > 0) {
            Stoploss()
        }
        LogStatus("总余额: " + _N(ticker.Last * account.Stocks, 2), " 下单量: " + Amount, " 下单倍数: " + B, " ToTheMoon: " + ToTheMoon, " 下单量比: " + _N(Amount * 100 / _N(ticker.Last * account.Stocks, 2), 2), "% 胜率: " + _N(p * 100, 2), "%", total_times, pos)
    }
}

Больше

Аль-АльМожет быть, мы сможем перевести его на китайский?