Часто говорят, что торговля - это искусство, а искусство исходит из вдохновения.
То, что мы обычно называем вдохновением, относится к творческому состоянию, которое люди создают в процессе мышления. Для трейдеров левое полушарие нашего мозга завершило формулировку серии правил, таких как написание стратегии, распределение капитала и установка параметров. Вдохновение и чувство рынка торговли исходят из правого полушария мозга.
Многие люди слышали о слове "рыночное чувство", которое является своего рода расплывчатым чувством, как дежавю того, что происходит в данный момент.
В глазах простых людей, рыночное чувство таинственно. Это таинственный талант. С ним вы можете стоять на рынке. На самом деле, это краткое изложение субъективного опыта торговли мозгом. Это расплывчатое предвзятое чувство, реализованное через годы наблюдения за рынком.
Хотя, строго говоря, вдохновение не совсем то же самое, что чувство рынка, мы считаем, что после тысяч раз совершенствования рынка, мы будем иметь более глубокое понимание рынка, и мы сможем с легкостью разрабатывать стратегии. Так что если вы хотите приобрести этот талант и разработать больше торговых стратегий. Только через большое количество транзакций, мы можем улучшить нашу торговую систему.
Однако внутренние товарные фьючерсы и акции имеют всего несколько часов торгового времени в день, поэтому было бы сложно улучшить свой опыт наблюдения за рынком, формирования собственных моделей прибыли и правил торговли и обучения своих условных рефлексов подсознательно только от живой торговли.
Функция воспроизведения данных может быть обучена независимо от торговых часов биржи, и она поддерживает различные товарные фьючерсы и цифровые валютные сорта. Рынок может быть воспроизведен вручную или автоматически, а время начала и окончания и скорость воспроизведения исторического рынка могут быть свободно настроены. По сравнению с другим программным обеспечением широко используется режим воспроизведения данных K-line, в то время как FMZ Quant использует режим воспроизведения данных на уровне Tick, который действительно близок к среде бэкстестинга реального бота, и он воспроизводит данные о объеме цены рынка, позволяя трейдерам погрузиться в реальный мир.
Откройте официальный сайт FMZ Quant (fmz.comДля того, чтобы зарегистрироваться и войти в систему, нажмите на "База данных" в панели управления, чтобы отобразить страницу функции воспроизведения данных. Есть четыре окна опций и одна кнопка выбора. Сначала нажмите на кнопку выбора, чтобы отобразить только варианты, которые поддерживают воспроизведение реального бота, затем выберите варианты, которые будут воспроизведены в левом верхнем углу, затем выберите время начала и окончания данных в следующих двух окнах опций, затем выберите период времени воспроизведения данных как реального бота, и, наконец, нажмите кнопку Go в крайнем правом углу, чтобы начать функцию воспроизведения данных.
На левой стороне расположена история торговли, где все закрытые ордера отображаются в хронологическом порядке. На правой стороне расположена область управления воспроизведением данных, где вы можете выбрать методы ручной и автоматической воспроизведения данных, как при использовании медиаплеера.
Позиционный индекс может перетаскивать курсор вперед и назад слева направо, позволяя быстро выбрать время начала воспроизведения данных.
Скорость воспроизведения данных также может контролироваться внизу, перемещая курсор справа-слева, в миллисекундах, чтобы ускорить и замедлить воспроизведение данных во время воспроизведения.
Хотя существует много факторов, влияющих на рост и падение цены, включая глобальную экономическую среду, национальную макрополитику, соответствующую промышленную политику, отношения спроса и предложения, международные события, процентные ставки и обменные курсы, инфляцию и дефляцию, психологию рынка, неизвестные факторы и т. Д., Конечная цена на рынке является результатом конкуренции между различными сторонами и стороной короткой позиции. Если больше людей покупают, чем продают, цена увеличится; Напротив, если больше людей продают, чем покупают, цена снизится. Тогда нам нужно только проанализировать цену, чтобы сделать торговую стратегию.
Благодаря FMZ Quant воспроизведению последних месяцев BTC_USDT торговых пар биржи Binance, мы обнаружили, что когда рынок резко увеличился и уменьшился, книга заказов Tick данных явно асимметрична с точки зрения объема заказов между длинными и короткими позициями. Когда рынок увеличивается, количество идущих длинных заказов, очевидно, больше, чем количество идущих коротких заказов; Когда рынок увеличивается, количество идущих коротких заказов, очевидно, больше, чем количество идущих длинных заказов. Итак, можем ли мы предсказать рост и снижение цены в течение короткого периода времени на основе объема ожидающих заказов в книге заказов?
Ответ - да.
Когда рынок увеличивается, количество длинных заказов, очевидно, больше, чем количество коротких заказов.
Когда рынок уменьшается, количество коротких заказов, очевидно, больше, чем количество длинных заказов.
Мы можем собирать углубленные данные Tick для расчета длинных и коротких ожидаемых ордеров и сравнивать их, если объединенные длинные и короткие ожидаемые ордера сильно отличаются, это может быть потенциальной торговой возможностью. Например, когда количество ордеров на длинные позиции N раз больше, чем ордеров на короткие позиции, мы можем думать, что большинство людей на рынке быстрые, и вероятность роста цены увеличится в короткое время в будущем; когда количество коротких продавцов N раз больше, чем длинных продавцов, мы можем думать, что большинство людей на рынке медвежие, и вероятность снижения цены увеличится в ближайшем будущем.
Согласно логике вышеприведенной стратегии, он начинает реализовываться в коде.fmz.com> Вход в систему > Приборная панель > Стратегия > Добавление стратегии > Нажмите в развёртывающемся меню в правом верхнем углу, чтобы выбрать язык Python и начать писать стратегии.
Шаг 1: Составление стратегии
# Strategy main function
def onTick():
pass
# Program entry
def main():
while True: # Enter the infinite loop mode
onTick() # Execute the strategy main function
Sleep(1000) # Sleep for 1 second
Мы должны написать нашу стратегию от большой до маленькой, как строить дом, сначала строить раму, а затем стену. В этой структуре мы используем две функции: основную функцию и функцию onTick. Основная функция - это ввод программы, то есть программа будет выполняться отсюда, затем вводить бесконечный режим петли, и выполнять функцию onTick неоднократно. Затем нам просто нужно написать содержание стратегии в функцию onTick.
Шаг 2: Напишите глобальные переменные
vol_ratio_arr = [] # Long/Short positions pending order ratio array
mp = 0 # Virtual positions
Причина, по которой vol_ratio_arr определяется как глобальная переменная, заключается в том, что моей стратегии необходимо собрать соотношение длинных и коротких позиций ожидающих заказов части данных Tick. Если мы поместим переменную vol_ratio_arr в функцию onTick, очевидно, неразумно запускать с петлей. Нам нужно изменить значение переменной в режиме петли, когда выполняется определенное условие. Наиболее разумный способ - поместить переменную вне петли.
Управление позицией очень необходимо, поскольку оно связано с логикой торговли. Как правило, мы рассчитываем валютные пары, удерживаемые путем приобретения счетов в спотовых операциях. Для упрощения кода, глобальная виртуальная переменная позиции напрямую определена для управления логикой торговли.
Шаг 3: Вычислить отношение текущего кратного пустого
depth = exchange.GetDepth() # Get depth data
asks = depth['Asks'] # Get asks array
bids = depth['Bids'] # Get bids array
asks_vol = 0 # All pending orders at ask price
bids_vol = 0 # All pending orders at bid price
for index, ask in enumerate(asks): # Iterate through the ask price array
# Linear calculation of all pending orders at the ask price
asks_vol = asks_vol + ask['Amount'] * (20 - index)
for index, bid in enumerate(bids): # Iterate through the bid price array
# Linear calculation of all pending orders at the bid price
bids_vol = bids_vol + bid['Amount'] * (20 - index)
bidask_ratio = bids_vol / asks_vol # Calculate long/short position ratio
Как мы все знаем, цифровая валюта обычно состоит из 20 уровней глубоких данных, поэтому мы можем сложить количество ордеров на длинные и короткие позиции, чтобы рассчитать соотношение между длинными и короткими позициями. Когда это значение больше 1, это означает, что бычьи люди больше, чем медвежие люди, что указывает на то, что цена будет расти в короткий период времени в будущем; когда это значение меньше 1, это означает, что медвежие люди больше, чем бычьи люди, что указывает на то, что цена упадет в короткий период времени в будущем.
Тем не менее, есть один момент, который следует выделить. Чем ближе ожидаемый ордер к открывающемуся рынку, тем сильнее будет желание бычьего или беришского. Например, ордер первого уровня определенно более склонен к бычьему, чем ордер 20-го уровня. Поэтому, когда мы накапливаем ожидаемые ордера, нам нужно дать разные веса ордерам 20-х уровней линейным образом, что будет более разумным.
Шаг 4: Линейный расчет коэффициента длинной/короткой позиции за определенный период времени
global vol_ratio_arr, mp # Introduce global variables
vol_ratio_arr.insert(0, bidask_ratio) # Put the long/short position ratio into the global variable array
if len(vol_ratio_arr) > 20: # If the array exceeds the specified length
vol_ratio_arr.pop() # Delete the oldest elements
all_ratio = 0 # Temporary variable, ratio of all long and short position pending orders
all_num = 0 # Temporary variables, all linear multipliers
for index, vol_ratio in enumerate(vol_ratio_arr): # Variable global variable arrays
num = 20 - index # Linear multiplier
all_num = all_num + num # Linear multiplier accumulation
all_ratio = all_ratio + vol_ratio * num # Accumulation of all long and short position pending orders ratio
ratio = all_ratio / all_num # Linear long and short position pending order ratio
Соотношение длинных и коротких позиций можно получить путем деления длинных накопленных ожидаемых ордеров на короткие накопленные ожидаемые ордера. Однако это только данные о тике. Если используется только один тиковый данный, это может быть не мудрым выбором для принятия решения о покупке и продаже сделок, потому что на быстро меняющемся рынке один тиковый данный неубедителен. Поэтому нам нужно собрать фиксированный кусок данных о тике и, наконец, рассчитать справедливую стоимость с помощью линейного расчета.
Шаг 5: Заказать
last_ask_price = asks[0]['Price'] # Latest buy one price for asks
last_bid_price = bids[0]['Price'] # Latest sell one price for bids
if mp == 0 and ratio > buy_threshold: # If no currency is held currently, and the ratio is greater than the specified value
exchange.Buy(last_ask_price, 0.01) # Buy
mp = 1 # Set the value of virtual position
if mp == 1 and ratio < sell_threshold: # If there is currency held currently, and the ratio is less than the specified value
exchange.Sell(last_bid_price, 0.01) # Sell
mp = 0 # Reset the value of virtual position
Поскольку нам нужно указать цену при размещении заказа, мы можем напрямую использовать последнюю продать одну цену при покупке; При продаже, вы можете напрямую использовать последнюю купить одну цену. Наконец, сбросить значение виртуальной позиции после размещения заказа.
Если вы новичок в количественной торговле, функция воспроизведения данных может помочь вам научиться торговать по нулевым затратам и сократить время для понимания транзакций. Обычно требуется несколько лет, чтобы реальный бот или имитированная транзакция достигли первоначальных результатов. Функция воспроизведения данных занимает несколько недель, чтобы достичь того же эффекта. При условии, что вы не теряете время, вы можете научиться торговать с минимальными потерями. Для продвинутых трейдеров динамическое воспроизведение может помочь вам проанализировать ваши прошлые проблемы, проверить и улучшить торговые стратегии, улучшить уверенность трейдеров в стратегиях и помочь генерировать новое стратегическое вдохновение.