Торговая система крокодиловой линии версия Python

Автор:Доброта, Создано: 2020-05-07 14:33:19, Обновлено: 2023-11-06 19:40:42

img

Резюме

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

Что такое крокодильная линия?

img

Линия крокодила на самом деле состоит из трех специальных скользящих средних, которые соответствуют подбородку синей линии, зубам красной линии и верхней губе зеленой линии. Подбородка представляет собой 13-периодную скользящую среднюю и движется 8 бар в будущем. Зуб представляет собой 8-периодную скользящую среднюю и движется 5 бар в будущем. Верхняя губа представляет собой 5-периодную скользящую среднюю и движется 3 бар в будущем.

Принцип крокодиловой линии

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

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

Формула расчета линии крокодила

верхняя губа = REF(SMA(VAR1,5,1),3) Зъбы = REF ((SMA ((VAR1,8,1),5) Чин = REF(SMA(VAR1,13,1)

Состав стратегии крокодила

Шаг 1: Составление стратегии

# Strategy main function
def onTick():
     pass

# Program entry
def main ():
     while True: # Enter infinite loop mode
         onTick() # execute strategy main function
         Sleep(1000) # sleep for 1 second

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

Шаг 2: Импорт библиотеки Python

import talib
import numpy as np

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

Шаг 3: Преобразование данных массива K-линии

# Convert the K-line array into an array of highest price, lowest price, and closing price, for conversion to numpy.array
def get_data(bars):
    arr = []
    for i in bars:
        arr.append(i['Close'])
    return arr

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

Шаг 4: Получение данных о положении

# Get the number of positions
def get_position ():
     # Get position
     position = 0 # The number of assigned positions is 0
     position_arr = _C (exchange.GetPosition) # Get array of positions
     if len (position_arr)> 0: # If the position array length is greater than 0
         for i in position_arr:
             if i ['ContractType'] == 'rb000': # If the position symbol is equal to the subscription symbol
                 if i ['Type']% 2 == 0: # If it is long position
                     position = i ['Amount'] # Assigning a positive number of positions
                 else:
                     position = -i ['Amount'] # Assigning a negative number of positions
     return position

Статус позиции включает в себя стратегическую логику. Наши первые десять уроков всегда использовали виртуальные позиции, но в реальной торговой среде лучше всего использовать функцию GetPosition для получения реальной информации о позиции, включая: направление позиции, прибыль и убыток позиции, количество позиций и т. Д.

Шаг 5: Получить данные

exchange.SetContractType('rb000') # Subscribe the futures varieties
     bars_arr = exchange.GetRecords() # Get K line array
     if len(bars_arr) < 22: # If the number of K lines is less than 22
         return

Перед приобретением данных вы должны сначала использовать функцию SetContractType для подписки на соответствующие варианты фьючерсов. FMZ поддерживает все китайские варианты фьючерсов на сырьевые товары. После подписки на символ фьючерсов вы можете использовать функцию GetRecords для получения данных K-линии, которая возвращает массив.

Шаг 6: Вычислить данные

np_arr = np.array (get_data (bars_arr)) # Convert closing price array
sma13 = talib.SMA (np_arr, 130) [-9] # chin
sma8 = talib.SMA (np_arr, 80) [-6] # teeth
sma5 = talib.SMA (np_arr, 50) [-4] # upper lip
current_price = bars_arr [-1] ['Close'] # latest price

Прежде чем рассчитать SMA с помощью библиотеки талиб, вам нужно использовать библиотеку numpy для обработки обычного K-линейного массива в numpy-данные. Затем получите подбородок, зубы и верхнюю губу крокодиловой линии отдельно. Кроме того, параметр цены должен быть передан при размещении заказа, поэтому мы можем использовать цену закрытия в массиве K-линии.

Шаг 7: Заказать

position = get_position ()
if position == 0: # If there is no position
     if current_price> sma5: # If the current price is greater than the upper lip
         exchange.SetDirection ("buy") # Set the trading direction and type
         exchange.Buy (current_price + 1, 1) # open long position order
     if current_price <sma13: # If the current price is less than the chin
         exchange.SetDirection ("sell") # Set the trading direction and type
         exchange.Sell (current_price-1, 1) # open short position order
    
if position> 0: # If you have long positions
     if current_price <sma8: # If the current price is less than teeth
         exchange.SetDirection ("closebuy") # Set the trading direction and type
         exchange.Sell (current_price-1, 1) # close long position

if position <0: # If you have short position
     if current_price> sma8: # If the current price is greater than the tooth
         exchange.SetDirection ("closesell") # Set the trading direction and type
         exchange.Buy (current_price + 1, 1) # close short position

Перед размещением ордера вам нужно получить фактическую позицию. Функция get_position, которую мы определили ранее, вернет фактическое количество позиций. Если текущая позиция длинная, она вернет положительное число. Если текущая позиция короткая, она вернет отрицательное число. Если нет позиции, возвращает 0. Наконец, функции покупки и продажи используются для размещения заказов в соответствии с вышеуказанной логикой торговли, но перед этим также необходимо установить направление и тип торговли.

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

'' 'backtest
start: 2019-01-01 00:00:00
end: 2020-01-01 00:00:00
period: 1h
exchanges: [{"eid": "Futures_CTP", "currency": "FUTURES"}]
'' '

import talib
import numpy as np


# Convert the K-line array into an array of highest price, lowest price, and closing price, used to convert to numpy.array type data
def get_data (bars):
    arr = []
    for i in bars:
        arr.append (i ['Close'])
    return arr


# Get the number of positions
def get_position ():
    # Get position
    position = 0 # The number of assigned positions is 0
    position_arr = _C (exchange.GetPosition) # Get array of positions
    if len (position_arr)> 0: # If the position array length is greater than 0
        for i in position_arr:
            if i ['ContractType'] == 'rb000': # If the position symbol is equal to the subscription symbol
                if i ['Type']% 2 == 0: # If it is long
                    position = i ['Amount'] # Assign a positive number of positions
                else:
                    position = -i ['Amount'] # Assign a negative number of positions
    return position
    
    

# Strategy main function
def onTick ():
    # retrieve data
    exchange.SetContractType ('rb000') # Subscribe to futures varieties
    bars_arr = exchange.GetRecords () # Get K line array
    if len (bars_arr) <22: # If the number of K lines is less than 22
        return
    
    # Calculation
    np_arr = np.array (get_data (bars_arr)) # Convert closing price array
    sma13 = talib.SMA (np_arr, 130) [-9] # chin
    sma8 = talib.SMA (np_arr, 80) [-6] # teeth
    sma5 = talib.SMA (np_arr, 50) [-4] # upper lip
    current_price = bars_arr [-1] ['Close'] # latest price

    position = get_position ()
    if position == 0: # If there is no position
        if current_price> sma5: # If the current price is greater than the upper lip
            exchange.SetDirection ("buy") # Set the trading direction and type
            exchange.Buy (current_price + 1, 1) # open long position order
        if current_price <sma13: # If the current price is less than the chin
            exchange.SetDirection ("sell") # Set the trading direction and type
            exchange.Sell (current_price-1, 1) # open short position order
        
    if position> 0: # If you have long positions
        if current_price <sma8: # If the current price is less than teeth
            exchange.SetDirection ("closebuy") # Set the trading direction and type
            exchange.Sell (current_price-1, 1) # close long position

    if position <0: # If you have short positions
        if current_price> sma8: # If the current price is greater than the tooth
            exchange.SetDirection ("closesell") # Set the trading direction and type
            exchange.Buy (current_price + 1, 1) # close short position

            
# Program main function
def main ():
    while True: # loop
        onTick () # execution strategy main function
        Sleep (1000) # sleep for 1 second

Нажмите прямо на ссылку ниже, чтобы скопировать полную стратегию без настройки:https://www.fmz.com/strategy/199025

Конец

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


Связанные

Больше