Люди, которые занимались финансовой торговлей, вероятно, имеют опыт. Иногда колебания цен регулярны, но чаще всего это показывает нестабильное состояние случайной ходьбы. Именно эта нестабильность является местом рыночных рисков и возможностей.
Линия крокодила на самом деле состоит из трех специальных скользящих средних, которые соответствуют подбородку синей линии, зубам красной линии и верхней губе зеленой линии. Подбородка представляет собой 13-периодную скользящую среднюю и движется 8 бар в будущем. Зуб представляет собой 8-периодную скользящую среднюю и движется 5 бар в будущем. Верхняя губа представляет собой 5-периодную скользящую среднюю и движется 3 бар в будущем.
Линия крокодила представляет собой набор методов технического анализа, обобщенных на основе геометрии и нелинейной динамики. Когда подбородок, зубы и верхняя губа крокодила закрыты или запутаны, это означает, что крокодил спит.
Чем дольше крокодил спит, тем больше он будет голоден, когда проснется, поэтому, как только он проснется, он широко откроет рот. Если верхняя губа находится выше зубов, а зубы выше подбородка, это указывает на то, что рынок вошел в бычий рынок, и крокодилы собираются съесть говядину. Если верхняя губа находится ниже зубов, а зубы - ниже подбородка, это указывает на то, что рынок вошел в медвежий рынок, и крокодилы собираются съесть мясо медведя.
верхняя губа = REF(SMA(VAR1,5,1),3) Зъбы = REF ((SMA ((VAR1,8,1),5) Чин = REF(SMA(VAR1,13,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 выполняется в бесконечной петле в основной функции.
import talib
import numpy as np
Функция SMA используется в нашей стратегии. SMA - это среднее арифметическое значение. В библиотеке talib уже есть готовые функции SMA, так что напрямую импортируйте библиотеку talib Python, а затем вызовите ее напрямую. Потому что при вызове этой функции вам нужно передать параметры нумпи формата, поэтому нам нужно использовать импорт для импорта этих двух библиотек Python в начале стратегии.
# 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-линейный массив, а выходный результат - обработанные данные в нумпи-формате.
# 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 для получения реальной информации о позиции, включая: направление позиции, прибыль и убыток позиции, количество позиций и т. Д.
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-линии, которая возвращает массив.
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-линии.
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
Конец
Наибольшая роль правила торговли крокодилом заключается в том, чтобы помочь нам поддерживать то же направление, что и рынок при торговле, независимо от того, как меняется текущая рыночная цена, и продолжать получать прибыль, пока не появится консолидационный рынок.