Стратегия
Некоторые люди считают, что открытие рынка утром - это время, когда рынок имеет наибольшую дивергенцию. Через около 30 минут рынок полностью переварил все виды ночной информации, и ценовая тенденция будет рациональной и вернется к нормальной. Другими словами: рыночная тенденция в первые 30 минут или около того в основном составляет общую модель торговли сегодня.
Относительные высокие и низкие точки, генерируемые в это время, образуют эффективные высокие и низкие точки в теории Дау, и стратегия HANS123 является логикой торговли, установленной этим. На внутреннем фьючерсном рынке рынок открывается в 09:00 утра, и в 09:30 вы можете судить, длинный или короткий сегодня. Когда цена проходит через высокую точку вверх, цена легко продолжит расти; когда цена проходит через низкую точку вниз, цена легко продолжит падать.
Хотя стратегия прорыва может войти на рынок, как только формируется тренд. Но это преимущество также является обоюдоострым мечом. В результате чувствительного входа ценовой прорыв не удалось. Поэтому необходимо установить стоп-лосс. В то же время, для достижения логики стратегии выигрыша и проигрыша, необходимо установить прибыль.
Открыть в свою очередь:fmz.comСайт> Вход > Приборная панель > Библиотека стратегии > Новая стратегия > Нажмите в разбивке в правом верхнем углу, чтобы выбрать язык Python и начать писать стратегию.
# 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
Написание стратегии, это было изучено в предыдущей главе, один изonTick
Функция, и другой являетсяmain
Функция, в которойonTick
Функция выполняется в бесконечном цикле вmain
function.
up_line = 0 # upper rail
down_line = 0 # lower rail
trade_count = 0 # Number of transactions on the day
Поскольку верхние и нижние рельсы подсчитываются только в 09:30, а в остальное время не делается никакой статистики, нам нужно записать эти две переменные вне петли.trade_count
Перед использованием этих двух глобальных переменных в основной функцииonTick
Стратегия, вы должны использоватьglobal
ключевое слово для ссылки.
exchange.SetContractType("rb888") # Subscribe to futures varieties
bar_arr = _C(exchange.GetRecords, PERIOD_M1) # Get 1-minute K line array
current_close = bar_arr[-1]['Close'] # Get the latest price
if len(bar_arr) <50: # If less than 50 k line bars
return # Return to continue waiting for data
Для получения данных сначала используйтеSetContractType
Функция в платформе FMZ API для подписки на фьючерсные сорта, а затем использоватьGetRecords
Вы также можете передать в K-линейный массив указаниеPERIOD_M11
минуты при использованииGetRecords
function.
Следующим шагом является получение последней цены, которая используется для определения отношения позиции между текущей ценой и верхним и нижним рельсами. В то же время, при размещении ордера с использованием функции Купить или Продать, вам нужно передать указанную цену. Кроме того, не забудьте отфильтровать количество k-линейных баров, потому что если количество k-линейных баров слишком мало, произойдет ошибка, которую невозможно рассчитать.
def current_time():
current_time = bar_arr[-1]['Time'] # Get current K-line timestamp
time_local = time.localtime(current_time / 1000) # Processing timestamp
hour = time.strftime("%H", time_local) # Format the timestamp and get the hour
minute = time.strftime("%M", time_local) # Format the timestamp and get the minute
if len(minute) == 1:
minute = "0" + minute
return int(hour + minute)
При расчете верхней и нижней рельсов и размещении ордеров необходимо судить, соответствует ли текущее время торговому времени, указанному нами, поэтому для облегчения суждения нам необходимо иметь дело с конкретными часами и минутами текущей K-линии.
global up_line, down_line, trade_count # Introduce global variables
current_time = current_time() # processing time
if current_time == 930: # If the latest K-line time is 09:30
up_line = TA.Highest(bar_arr, 30,'High') + count # The highest price of the first 30 k line bars
down_line = TA.Lowest(bar_arr, 30,'Low')-count # The lowest price of the first 30 ke line bars
trade_count = 0 # Reset the number of transactions to 0
position_arr = _C(exchange.GetPosition) # Get position array
if len(position_arr) > 0: # If the position array length is greater than 0
position_arr = position_arr[0] # Get position dictionary data
if position_arr['ContractType'] =='rb888': # If the position symbol is equal to the subscription symbol
if position_arr['Type']% 2 == 0: # If it is a long position
position = position_arr['Amount'] # The number of assigned positions is a positive number
else:
position = -position_arr['Amount'] # Assign a negative number of positions
profit = position_arr['Profit'] # Get position profit and loss
else:
position = 0 # The number of assigned positions is 0
profit = 0 # Assign position profit and loss to 0
Статус позиции включает в себя стратегическую логику.GetPosition
функция получения информации о реальной позиции, включая: направление позиции, прибыль и убыток от позиции, количество позиций и т.д.
# If it is close to market closing or reach taking profit and stopping loss
if current_time > 1450 or profit > stop * 3 or profit < -stop:
if position > 0: # If holding a long position
exchange.SetDirection("closebuy") # Set transaction direction and type
exchange.Sell(current_close-1, 1) # Close long order
elif position <0: # If holding an empty order
exchange.SetDirection("closesell") # Set transaction direction and type
exchange.Buy(current_close + 1, 1) # Close short order
# If there is no current position, and it is less than the specified number of transactions, and within the specified trading time
if position == 0 and trade_count < 2 and 930 < current_time < 1450:
if current_close > up_line: # If the price is greater than the upper line
exchange.SetDirection("buy") # Set transaction direction and type
exchange.Buy(current_close + 1, 1) # Open long order
trade_count = trade_count + 1 # Increase the number of transactions
elif current_close < down_line: # If the price is less than the lower line
exchange.SetDirection("sell") # Set transaction direction and type
exchange.Sell(current_close-1, 1) # Open a short order
trade_count = trade_count + 1 # Increase the number of transactions
Чтобы избежать ошибок в стратегии, лучше всего написать логику закрытия позиции перед логикой открытия позиции. В этой стратегии при открытии позиции сначала определяется текущее состояние позиции, находится ли она в течение указанного торгового времени, а затем определяется связь между текущей ценой и верхними и нижними рельсами.
HANS123 является очень типичной и очень эффективной автоматизированной торговой стратегией. Ее основной принцип заключается в том, чтобы преодолеть самую высокую или самую низкую цену предыдущего рынка в течение определенного периода времени. Система может быть применена практически ко всем валютным продуктам со стабильной прибыльностью. Это также режим раннего входа в торговлю, с соответствующей технологией фильтрации, или может улучшить свои шансы на победу.
Нажмите, чтобы скопировать исходный код стратегииhttps://www.fmz.com/strategy/179805обратная проверка без настройки
Выше приведен принцип и анализ кода стратегии HANS123. На самом деле, стратегия HANS123 обеспечивает лучшее время для входа на рынок. Вы также можете улучшить время выхода в соответствии с вашим пониманием рынка и пониманием сделки, или в соответствии с волатильностью разновидности Для оптимизации таких параметров, как получение прибыли и остановка убытков для достижения лучших результатов.