신: 유동화율 전략

저자:, 2020-04-18 22:54:45
태그:ATR

이 글은 전 T 신 공개자명으로, 신 특별 전략으로 번역되었습니다. 이 글은 이쪽에서 본 것입니다. "천만의 양적 세계"에 더 많은 관심을 기울여 더 많은 전략 소스 코드를 얻으세요! 그리고 자신의 광고를 만들기도 합니다. "산화콩의 양적 기록" 인터넷에 있는 모든 사람들이 매일 공개적으로 벌받을 수 있는 더 많은 혜택, 더 많은 혜택을 받으세요.

이것은 단지 데모! 데모! 데모 숙모! 부모님들, 조심하세요!


은 오리지널 洋洋 千千 量化世界 3일 전 량화 전략의 연구개발은 실제로 두 가지 측면이 있으며, 처음 시작하는 사람들에게는 매우 어렵습니다. 수준 코드뿐만 아니라 수준 전략적 논리적 사고도 똑같이 어렵습니다. 둘 다 중요합니다.

, , , , !

이 기사는 특집 문서의 두 번째 부문입니다. 우리는 양양대신 (LE_CHIFFRE1 마이크로 신호) 에 초대되어 매우 영광입니다.

신은 전통적인 양 투자 기관에서 왔으며, 동전 동전 거래소 사업에 깊이 참여했으며, 양량화 분야에서 풍부한 경험과 독특한 통찰력을 가지고 있습니다. 신의 내용은 아이디어 계시, 코딩 구현 및 개인 깨달음 등을 포함합니다.

아래의 박수와 함께, 신 ( 신) 이 변동율 전략을 소개합니다.

01

문장

안녕하세요, 오늘 천만 명의 양자화 공중보호에 기사를 게시할 수 있는 특권을 얻었습니다. 또한 T 사장 (천만 명의 외계자 중 한 명) 의 초청에 감사합니다. 처음으로 T 사장에게 기사를 작성하고, 완전히 자유롭게 플레이하고, 작업 후의 여분의 시간, 품질 및 오류를 빌려서 기사에 올바르게 표시하고 포함하십시오. 감사합니다.

T 사장은 양적, 그리고 어떤 범위를 제공하지 않고, 실제로 어디서 쓰는지 모르겠다고 말합니다. 그러면 자신의 좋아하는 주제와 다른 사람들과 토론하기 시작하십시오. 양적 지표와 전략 (보조 할 수도 있고 자동화 할 수도 있습니다), 물론, 마지막으로 우리는 또한 오래된 말을 추가해야합니다: 양적 투자가 위험하고, 시장에 진출하는 것은 신중해야합니다. 전략은 단지 생각과 교훈을 제공하고, 자손을 얻습니다. 이 전략을 사용하는 모든 이익과 이익은 나와 수천의 양적 세계 의 대중 주체와 관련이 없습니다.

이 문헌은 이 문헌의 내용을 담고 있습니다.

02

그리고 그 다음에는,

저를 아는 사람들은 사실 제가 개인적으로는 알파 게임을 별로 좋아하지 않는다는 것을 알고 있습니다. 저는 비교적 베타를 더 믿고, 베타를 더 많이 연구합니다. 왜, e.........mmmmm, 모르겠어요.

정량화 전략의 연구개발은 실제로는 두 가지 측면이 있으며, 처음 입문하는 사람들에게는 매우 어렵고 어렵습니다. 문법적 요법 수준의 코드뿐만 아니라 조리법적 요법 수준의 전략적 논리적 사고도 똑같이 어렵습니다. 둘 다 중요합니다. 오늘 여러분에게 소개하는 전략은 사실 수년 전에 HuaThai의 한 연구 보고서에서 영감을 받았습니다.

이 전략 알고리즘은 로그램 가격의 특정 주기 경사 하락의 굴러 수익률 변동의 원리를 사용하며, 이 변동 범위를 계산하여 특정 주기 굴러 최고와 최소를 찾습니다. 최고가 상승 파이프로, 최소가 하락 파이프로, 상승 파이프를 돌파하고, 거래를 개시합니다. 상승 및 하락 파이프 굴러 평균은 평평한 거래 라인으로.

구체적인 그래픽 시각화 인터페이스는 아래의 PPT를 참조하십시오. 이 그래픽은 직접 Pyecharts로 그려졌습니다. 구체적인 코드는 T 대장입니다.

img

사실 이 전략은 그가 이전엔 브로드 베이스 ETF에서 사용했던 전략이고, 물론 지수 선택 때 주식을 사거나 팔기 위해 사용되기도 했으며, 나중에 직접 동전에 옮겼습니다.

img

아래 그림은 그 해에 대한 재검토 성과를 보여줍니다. 특정 부분의 코드 로직 스크린은 다음과 같습니다.

img

위쪽은 실제로 데이터를 읽고 판다를 통해 지표 데이터를 계산하는 것입니다.

img

계산이 완료되면 pd.to_csv () 함수와 위의 스크린에서 사용된 pyecharts () 를 시각화하여 데이터를 출력할 수 있습니다.

모든 전략, 시각화, 그리고 성과 지표 코드는 T-Dragon (T-Dragon) 이라고 합니다.

03

수량화

다음으로 제가 가장 중요하게 언급하는 두 가지 사항입니다. 첫째: 많은 사람들이 의문을 품거나 왜 여러분들이 실제의 전략을 공개할 수 있는지, 가짜 사기꾼입니까? 아니면 정말로 만연한 존재입니까? 하하. 첫째, 좋은 전략은 공개를 두려워하지 않습니다. 이것은 전쟁 수준 대립의 무기 개발이 아니라 삶과 죽음을 결정하는 것입니다. 따라서 자신과 다른 기관 또는 개인은 비밀이라고 불리는 어떤 전략도 두려워하지 않습니다. 왜냐하면 CTA는 비밀이 없다고 생각합니다.

두 번째: 많은 사람들이 새로운 사람이든, 이미 입문한 사람이든, 심지어 오래된 플레이어를 포함하여, 영감을 필요로합니다. 주식의 요인 채굴, 시간 전략 아이디어 등이 포함됩니다. 이러한 사람들은 종종 주관적 경험, 연구 보고서, 서클 내 커뮤니케이션 교류 등을 원천으로합니다.

마지막으로 요약하자면, 정량화라는 것은 원래는 유래한 제품이고, 프로그래밍 거래는 정량화 속의 하위 집합에 속한다. 그 당시의 대학 시절 (약 2009년) 에 TB, 피라미드 등 프로그래밍에 관여한 사람들이 있었다. 만약 오늘날에도 계속한다면, 이 부분의 초기 예언자 10년 전이라고 말할 수 있다. 이 부분에는 월 스트리트 에서 을 가져온 고주파 전략과 시스템이 포함되지 않았다. 따라서, 정량화라는 전략은 중국에서는 이미 오래전부터 지속되어 왔지만, 현재 시장 점유율과 주체, 정책 지원의 부분에서는 여전히 소규모로 존재하고 있다.

마지막으로, 제 전문성에 대한 신뢰와 기사에 대한 초대에 대한 수천 명의 양자화 대중에게 감사 드립니다. 여러분께 구체적인 코드 및 전략 문제가 있다면, 저에게 또는 T 대장에게 개인 이메일을 보내십시오.

그리고 마지막으로 다시 한 번 의 훌륭한 설명에 감사드립니다!

아직 양적 토론 그룹에 가입하지 않은 친구들은 빠르게 그룹에 가입하여 학습 자료를 얻을 수 있습니다!

천천천왕타운!

img

위크멘트 스파이 이 문제에 대한 관심


/*backtest
start: 2019-04-18 00:00:00
end: 2020-04-17 23:59:00
period: 15m
exchanges: [{"eid":"Futures_BitMEX","currency":"XBT_USD"}]
*/

// 胖友们!! 实盘前请注意!! 此内容仅是吕神翻译demo, 上实盘请自行添加相关内容.
// 是Demo!!! 实盘谨慎!!!

// 初始化
exchange.SetContractType('XBTUSD')
var vix_arr = []
var vix_ma = []
var vix_ma_up = []
var vix_ma_dw = []
var LastBarTime = 0
var isFirst = true

function initVix() {
    records = _C(exchange.GetRecords)
    Log(records.length)
    if (records && records.length > 2 * N + 2) {
        // 初始化前N个vix值
        for (var i = -2; i < N - 1; i++) {
            Bar = records[records.length - N + i]
            lastNbar = records[records.length - N + i - N]
            Vix()
        }
    }
    // Log("vix_arr", vix_arr.length, vix_arr)
    // Log("vix_ma", vix_ma.length, vix_ma)
    // Log("vix_ma_up", vix_ma_up.length, vix_ma_up)
    // Log("vix_ma_dw", vix_ma_dw.length, vix_ma_dw)
}

// 获取交易所信息
function UpdateInfo() {
    account = _C(exchange.GetAccount)
    pos = _C(exchange.GetPosition)
    records = _C(exchange.GetRecords)
    Bar = records[records.length - 1]
    lastNbar = records[records.length - N]
    ticker = _C(exchange.GetTicker)
}

// 计算波动率及上下轨
function Vix() {
    // 当每K结束时计算
    if (LastBarTime !== Bar.Time) {
        // 当K达到计算根数开始计算vix_arr
        if (records && records.length > N) {
            // 获取vix 当前close自然对数 除以 前90根自然对数 减一
            vix = Math.log(Bar.Close) / Math.log(lastNbar.Close) - 1
            vix_arr.push(vix)
            //Log("vix_arr", vix_arr)
        }
        // 当vix_arr达到计算根数时开始计算vix_ma
        if (vix_arr && vix_arr.length > N) {
            // 获取对应周期vix算其移动平均值
            vix_ma = TA.MA(vix_arr, N)
            // 去除ma中的null值
            vix_ma = vix_ma.filter(function(val) {
                return !(!val || val === "");
            })
            //Log("vix_ma", vix_ma)
            // 获取上下通道
            vix_up = TA.Highest(vix_arr, N)
            vix_dw = TA.Lowest(vix_arr, N)
            vix_ma_up.push(vix_up)
            vix_ma_dw.push(vix_dw)
            // Log("vix_ma_up", vix_ma_up)
            //Log("vix_ma_dw", vix_ma_dw)
            // 限制所有数组长度
            if (vix_arr.length > 2000) {
                vix_arr.splice(0, 1);
            }
            if (vix_ma.length > 2000) {
                vix_ma.splice(0, 1);
            }
            if (vix_ma_up.length > 2000) {
                vix_ma_up.splice(0, 1);
            }
            if (vix_ma_dw.length > 2000) {
                vix_ma_dw.splice(0, 1);
            }
        }
        LastBarTime = Bar.Time
    }
}

// 画线
function PlotMA_Kline(records, isFirst) {
    //$.PlotRecords(records, "K")
    if (isFirst) {
        for (var i = records.length - 1 - N; i <= records.length - 1; i++) {
            if (vix_ma[i] !== null) {
                $.PlotLine("vix_arr", vix_arr[i], records[i].Time)
                $.PlotLine("vix_ma", vix_ma[i], records[i].Time)
                $.PlotLine("vix_ma_up", vix_ma_up[i], records[i].Time)
                $.PlotLine("vix_ma_dw", vix_ma_dw[i], records[i].Time)
            }
        }
        PreBarTime = records[records.length - 1].Time
    } else {
        if (PreBarTime !== records[records.length - 1].Time) {
            $.PlotLine("vix_arr", vix_arr[vix_arr.length - 2], records[records.length - 2].Time)
            $.PlotLine("vix_ma", vix_ma[vix_ma.length - 2], records[records.length - 2].Time)
            $.PlotLine("vix_ma_up", vix_ma_up[vix_ma_up.length - 2], records[records.length - 2].Time)
            $.PlotLine("vix_ma_dw", vix_ma_dw[vix_ma_dw.length - 2], records[records.length - 2].Time)
            PreBarTime = records[records.length - 1].Time
        }
        $.PlotLine("vix_arr", vix_arr[vix_arr.length - 1], records[records.length - 1].Time)
        $.PlotLine("vix_ma", vix_ma[vix_ma.length - 1], records[records.length - 1].Time)
        $.PlotLine("vix_ma_up", vix_ma_up[vix_ma_up.length - 1], records[records.length - 1].Time)
        $.PlotLine("vix_ma_dw", vix_ma_dw[vix_ma_dw.length - 1], records[records.length - 1].Time)
    }
}

// 交易逻辑
function onTick() {
    // 无仓位时
    if (pos.length == 0) {
        // Long 当前K线的收盘价 > 上轨 && 之前K线的收盘价 <= 上轨
        if (vix_arr[vix_arr.length - 1] > vix_ma_up[vix_ma_up.length - 1] &&
            vix_arr[vix_arr.length - 2] <= vix_ma_up[vix_ma_up.length - 2]) {
            exchange.SetDirection("buy")
            exchange.Buy(ticker.Sell, Amount)
            $.PlotFlag(new Date().getTime(), 'Buy', 'BK')
        }
        // Short 当前K线的收盘价 < 下轨 && 之前K线的收盘价 >= 下轨
        if (vix_arr[vix_arr.length - 1] < vix_ma_dw[vix_ma_dw.length - 1] &&
            vix_arr[vix_arr.length - 2] >= vix_ma_dw[vix_ma_dw.length - 2]) {
            exchange.SetDirection("sell")
            exchange.Sell(ticker.Buy, Amount)
            $.PlotFlag(new Date().getTime(), 'Sell', 'SK')
        }
    }
    // 多仓时
    if (pos.length > 0 && pos[0].Type == 0) {
        // 平多 当前K线的收盘价 < 中轨 && 之前K线的收盘价 >= 中轨
        if (vix_arr[vix_arr.length - 1] < vix_ma[vix_ma.length - 1] &&
            vix_arr[vix_arr.length - 2] >= vix_ma[vix_ma.length - 2]) {
            exchange.SetDirection("closebuy")
            exchange.Sell(ticker.Buy, pos[0].Amount)
            $.PlotFlag(new Date().getTime(), 'Sell', 'SBK')
        }
    }
    // 空仓时
    if (pos.length > 0 && pos[0].Type == 1) {
        // 平空 当前K线的收盘价 > 中轨 && 之前K线的收盘价 <= 中轨
        if (vix_arr[vix_arr.length - 1] > vix_ma[vix_ma.length - 1] &&
            vix_arr[vix_arr.length - 2] <= vix_ma[vix_ma.length - 2]) {
            exchange.SetDirection("closesell")
            exchange.Buy(ticker.Sell, pos[0].Amount)
            $.PlotFlag(new Date().getTime(), 'Buy', 'PSK')
        }
    }
}

function main() {
    initVix()
    while (1) {
        UpdateInfo()
        Vix()
        onTick()
        if (records) {
            PlotMA_Kline(records, isFirst)
            //Log('画线')
            isFirst = false
        }
        Sleep(5 * 1000)
    }
}

관련

더 많은

발명가 양자화저는 아래를 가로질러 왔습니다.

로트메콩은 항상 아름답습니다.

커피 한 잔이 전략은 변동률과 큰 관련이 없는 것 같습니다.

설교저는 90주기 전의 제 자신을 제외하고는 변동률을 설명할 수 없습니다. HH,LL의 오픈 방식은 도치안 통로 DC의 동작이며, 평형 거래는 일평선 전략을 선택했다. 일반적으로 개선된 해파리 시스템이다. 암시된 변동성에 대해, 전문가에게 설명해 주세요.

가벼운 구름콩부녀, 가방 받아?

미끄럽다당신은 내가 지지하지 않냐고 물으면, 나는 당연히 지지할 것이다.

미끄럽다당신은 내가 지지하지 않냐고 물으면, 나는 당연히 지지할 것이다.

가벼운 구름잘됐네

다음 6개월 동안 공백이 있을 것 같네요.

가벼운 구름ᅲ。。。。。。。좋아요.

(^U^)ノ~YO

지금은 시간이 없어서 나중에 생각해볼 생각도 없지만 제 코딩 능력은 별로 없습니다. /(o) /~~