어떤 사람들은 시장이 가장 큰 분리를 가지고 있는 시점인 아침 시장 개장 시점이라고 믿는다. 약 30분 후, 시장은 모든 종류의 오버나이트 정보를 완전히 소화하고, 가격 추세는 합리적이고 정상으로 돌아가는 경향이 있다. 다른 말로 하면: 처음 30분 정도 동안의 시장 추세는 기본적으로 오늘날의 전체 거래 패턴을 구성한다.
이 시간에 생성된 상대적 높은 점과 낮은 점은
돌파구 전략은 트렌드가 형성되자마자 시장에 진입할 수 있지만, 이 장점은 또한 양면으로 날카로운 검이다. 민감한 진입으로 인해 가격 돌파구가 실패했다. 따라서 스톱 로스를 설정하는 것이 필요합니다. 동시에 이기고 잃는 전략 논리를 달성하기 위해서는 이윤을 설정해야합니다.
순차적으로 열립니다.fmz.com웹 사이트> 로그인 > 대시보드 > 전략 라이브러리 > 새로운 전략 > 오른쪽 상단에있는 드롭다운 메뉴를 클릭하여 파이썬 언어를 선택하고 전략을 작성하기 시작하십시오. 아래 코드에 있는 댓글에 주의하십시오.
# 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-라인 배열을 얻기 위한 함수입니다. 또한 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
포지션 상태는 전략 논리를 포함합니다. 우리의 첫 번째 10 수업은 항상 가상 보유 포지션을 사용했지만 실제 거래 환경에서,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 전략은 시장에 진입하는 더 나은 시간을 제공합니다. 당신은 또한 시장에 대한 이해와 거래에 대한 이해에 따라 출구 시간을 향상시킬 수 있습니다. 또는 다양한 변동성에 따라 더 나은 결과를 달성하기 위해 수익을 취하고 손실을 중지하는 것과 같은 매개 변수를 최적화 할 수 있습니다.