Анализ и реализация товарных фьючерсов

Автор:Доброта, Создано: 2020-07-03 11:06:48, Обновлено: 2023-10-28 15:30:11

img

Резюме

Квантовый график является передовым инструментом анализа графиков, английское название Footprint Charts. Он показывает торговую активность каждой цены в одной K-линии. В дополнение к предоставлению информации о цене, он также предоставляет информацию, такую как объем транзакций, активная покупка и активная продажа. Это многомерный технический график, который показывает истинное соотношение распределения каждой цены на основе объема торговли, объясняет сложные отношения между объемом торговли, ценой и временем и может предоставить больше справок для трейдеров.

Что такое квантовый след?

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

  • Цена на линии K
  • Объем активных покупок (ASK)
  • Объем активной продажи (BID)
  • Соотношение равновесия

img

Как показано на рисунке выше, это демонстрационная версия графика количественного энергетического следа, реализованного на торговой платформе.FMZ.COMОн рассчитывается на основе фактическихtickРынок. Подробные данные прикреплены к линии K. Когда мышь перемещается по линии K, можно представить количественные данные о энергетическом следствии. Данные в синем квадрате - это результат его расчета, который разделен на две колонки в общей сложности, а левая колонка - все ценовые точки текущей линии K, которые расположены в порядке от большого до маленького. Правая колонка - объем торговли для каждого уровня цен, разделенный на объем торговли покупкой и объем торговли продажей, разделенный x.

Роль квантового энергетического следа

Подумайте, что вызвало рост цен? Ответ прост... покупатели и продавцы. Если покупателей больше, чем продавцов, цена вырастет; если продавцов больше, чем покупателей, цена упадет. Если текущее количество продавцов примерно равно количеству покупательских цен, то рынок будет показывать волатильную тенденцию, то есть рынок находится в состоянии баланса. Как только появятся крупные покупатели или продавцы, этот баланс будет нарушен, и тогда карта энергетического следа покажет экстремальное соотношение активных покупок и продаж.

Энергетический след динамически отображается на основе данных Tick, поэтому он особенно подходит для краткосрочной внутридневной торговли. Трейдеры могут точно видеть активный объем торговли на каждой цене, чтобы объяснить причины или законы колебаний цен и настроить свои собственные торговые стратегии. Например: если объем покупки слева намного больше объема продажи справа, это означает, что участники рынка активно покупают, и цена может увеличиться в будущем; в противном случае, если объем продажи справа намного больше объема покупки слева, это означает, что с участниками рынка, активно продающими, цены могут упасть в будущем.

Принцип квантового энергетического следа

Принцип расчета квантового энергетического следа исходит из объема и данных рынка. Текущий объем рассчитывается в режиме реального времени в соответствии с изменениями цены на рынке. Если рыночная цена растет, объем регистрируется как активная покупка; если рыночная цена падает, Затем запишите объем как активную продажу.TickДанные будут рассчитываться в режиме реального времени для точного вычисления оборота каждогоTick.

Внедрение кодекса квантового энергетического следа

/*backtest
start: 2020-03-10 00:00:00
end: 2020-03-10 23:59:00
period: 1h
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
mode: 1
*/

var NewFuturesTradeFilter = function (period) {
    var self = {} // Create an object
    self.c = Chart({ // Create "Chart" chart
        tooltip: {
            xDateFormat:'%Y-%m-%d %H:%M:%S, %A',
            pointFormat:'{point.tips}'
        },
        series: [{
            name: exchange.GetName(),
            type:'candlestick',
            data: []
        }]
    })
    self.c.reset() // clear chart data
    self.pre = null // used to record the last data
    self.records = []
    self.feed = function (ticker) {
        if (!self.pre) {// If the previous data is not true
            self.pre = ticker // Assign the latest data
        }
        var action ='' // Mark as empty string
        Log('ticker', ticker)
        Log('pre', self.pre)
        if (ticker.Last >= self.pre.Sell) {// If the last price of the latest data is greater than or equal to the selling price of the previous data
            action ='buy' // mark as buy
        } else if (ticker.Last <= self.pre.Buy) {// If the last price of the latest data is less than or equal to the bid price of the previous data
            action ='sell' // mark as sell
        } else {
            if (ticker.Last >= ticker.Sell) {// If the last price of the latest data is greater than or equal to the selling price of the latest data
                action ='buy' // mark as buy
            } else if (ticker.Last <= ticker.Buy) {// If the last price of the latest data is less than or equal to the buying price of the latest data
                action ='sell' // mark as "sell"
            } else {
                action ='both' // Mark as "both"
            }
        }
        // reset volume
        if (ticker.Volume <self.pre.Volume) {// If the volume of the latest data is less than the volume of the previous data
            self.pre.Volume = 0 // Assign the volume of the previous data to 0
        }
        var amount = ticker.Volume-self.pre.Volume // the volume of the latest data minus the volume of the previous data
        if (action !='' && amount> 0) {// If the tag is not an empty string and the action is greater than 0
            var epoch = parseInt(ticker.Time / period) * period // Calculate the K-line timestamp and round it
            var bar = null
            var pos = undefined
            if (
                self.records.length == 0 || // If the K-line length is 0 or the last K-line timestamp is less than "epoch"
                self.records[self.records.length-1].time <epoch
            ) {
                bar = {
                    time: epoch,
                    data: {},
                    open: ticker.Last,
                    high: ticker.Last,
                    low: ticker.Last,
                    close: ticker.Last
                } // Assign the latest data to bar
                self.records.push(bar) // Add bar to the records array
            } else {// reassign bar
                bar = self.records[self.records.length-1] // the last bar of the previous data
                bar.high = Math.max(bar.high, ticker.Last) // the maximum price of the last bar of the previous data and the maximum value of the last price of the latest data
                bar.low = Math.min(bar.low, ticker.Last) // The minimum price of the last bar of the previous data and the minimum value of the last price of the latest data
                bar.close = ticker.Last // last price of latest data
                pos = -1
            }
            if (typeof bar.data[ticker.Last] ==='undefined') {// If the data is empty
                bar.data[ticker.Last] = {// reassign value
                    buy: 0,
                    sell: 0
                }
            }
            if (action =='both') {// If the token is equal to both
                bar.data[ticker.Last]['buy'] += amount // buy accumulation
                bar.data[ticker.Last]['sell'] += amount // sell accumulated
            } else {
                bar.data[ticker.Last][action] += amount // mark accumulation
            }
            var tips =''
            Object.keys(bar.data) // Put the keys in the object into an array
                .sort() // sort
                .reverse() // Reverse the order in the array
                .forEach(function (p) {// traverse the array
                    tips +='<br>' + p + '' + bar.data[p].sell +'x' + bar.data[p].buy
                })
            self.c.add( // Add data
                0, {
                    x: bar.time,
                    open: bar.open,
                    high: bar.high,
                    low: bar.low,
                    close: bar.close,
                    tips: tips
                },
                pos
            )
        }
        self.pre = ticker // reassign
    }
    return self // return object
}


// program entry
function main() {
    Log(_C(exchange.SetContractType,'MA888')) // subscription data
    var filt = NewFuturesTradeFilter(60000) // Create an object
    while (true) {// Enter loop mode
        var ticker = exchange.GetTicker() // Get exchange tick data
        if (ticker) {// If the Tick data is successfully obtained
            filt.feed(ticker) // Start processing data
        }
    }
}

Скачать код квантового следа

Код стратегии количественного кода карты следа был опубликован наFMZ.comПлатформа, и обычные пользователи могут использовать ее без настройки.https://www.fmz.com/strategy/189965

Подводя итог

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


Связанные

Больше