시스템트레이딩 게시글

자기 최적화 RSI 및 MFI 트레이더 - 메타트레이더 4를 위한 시스템 트레이딩

첨부파일
19392.zip (4.86 KB, 다운로드 1회)

여러분, 안녕하세요! 오늘은 제가 꿈꾸던 '자기 최적화' 로봇에 대해 이야기해보려 해요. 이 로봇은 항상 최고의 값으로 거래를 할 수 있도록 최적화를 진행해줍니다. 제가 만든 이 전문가 어드바이저(EA)는 과매수 및 과매도 수준을 최적화하여 거래를 수행합니다. 여러분도 이 아이디어를 바탕으로 더 발전시켜주셨으면 좋겠어요. 만약 그렇게 된다면 꼭 저에게 알려주세요! 마지막으로, 제 로봇을 별점으로 평가하는 것도 잊지 마세요. 이 전략은 올바른 설정을 사용하면 어떤 통화 쌍에도, 어떤 시간대에도 적용할 수 있습니다.

이 로봇을 위한 입력 값들이 몇 가지 있습니다. 제가 좋아하는 추가 기능도 포함되어 있으니 즐기시길 바랍니다!

입력 값

  • magic = 4376 - 이 EA의 고유 번호입니다.
  • optomizingPeriods = 144 - 최적화 주기(바). 이 값은 최적화를 수행할 바의 수를 나타냅니다. 예를 들어, 1시간 차트를 사용하고 144를 선택하면 로봇은 144시간, 즉 6일을 되돌아보게 됩니다.
  • inAggressive = false - 전문가를 공격적으로 작동할까요? 위험할 수 있습니다. 공격적인 모드는 전문가 어드바이저가 더 공격적으로 거래를 수행하게 합니다. 과매수 또는 과매도 수준의 교차를 기다리지 않고, 최근에 매수 거래가 매도 거래보다 더 수익성이 높았다면 매수 거래를 바로 진행합니다.
  • inTradeReverse = false - 거래 방향 반전. 거래 방향을 반전시킵니다.
  • inOneOrderAtATime = true - 한 번에 하나의 주문만 열기? true로 설정하면 로봇은 한 번에 하나의 주문만 열 수 있습니다. false로 설정하면 진입 조건에 따라 무제한으로 주문을 열 수 있습니다.
  • Lot_sizing_dynamic_invalidates_static - 로트 크기 메커니즘과 다른 입력을 구분하기 위한 구분자입니다.
  • Lots = 0.01 - 주문의 정적 로트 크기. 주문의 로트 크기를 정적 숫자로 지정합니다.
  • inUseDynamicLotSize = true - 동적 로트 크기 사용. 동적 로트 크기를 켜면 정적 로트 크기 대신 사용됩니다. 하지만 동적 로트 크기가 유효하지 않으면 로봇은 정적 로트 크기로 기본 설정됩니다.
  • inPercentageOfRisk = 2 - 각 거래에서 위험을 감수할 잔고 비율(2 = 2%). 동적 로트 크기를 사용할 때, 잔고의 비율로 로트 크기를 지정합니다. 2는 2%와 같습니다. 0.02와 같은 방식으로 입력할 필요는 없습니다. 이렇게 입력하면 사용되는 비율이 매우 작아질 수 있습니다. 최대 비율은 10%입니다.
  • Index_Indicator_Values - 인덱스 지표 매개변수를 다른 입력과 구분하기 위한 구분자입니다.
  • indicator index = _RSI_ - 사용할 인덱스 지표를 선택합니다. 현재 선택 가능한 지표는 상대 강도 지수(RSI) 또는 자금 흐름 지수(MFI)입니다.
  • IndicatorTopValue = 100 - 거래를 진행할 수 있는 최대 값입니다. 이 값은 지표를 사용하여 거래를 진행할 수 있는 최대 값입니다. 모든 인덱스 지표 값을 고려하려면 100으로 두세요.
  • IndicatorBottomValue = 0 - 거래를 진행할 수 있는 최소 값입니다. 이 값은 지표를 사용하여 거래를 진행할 수 있는 최소 값입니다. 모든 인덱스 지표 값을 고려하려면 0으로 두세요.
  • IndyTimeframe = PERIOD_CURRENT - 인덱스의 시간대. 최적화 및 거래 중 사용할 시간대를 선택합니다. PERIOD_CURRENT은 전문가 어드바이저를 부착한 차트의 시간대를 사용한다는 의미입니다. 원하신다면 계산을 위해 다른 시간대를 사용할 수도 있습니다.
  • inIndyPeriods = 14 - 인덱스 및 ATR 계산의 평균 주기입니다. 평균 진폭(ATR)은 아래의 추가 입력 옵션에서 동적 손절매 또는 이익 실현을 설정하는 데 사용됩니다.
  • IndyAppPrice = PRICE_CLOSE - 필요할 경우 인덱스에 적용할 가격입니다.
  • SL_TP_Dynamic_invalidates_static_values - 손절매 및 이익 실현 매개변수를 다른 입력과 구분하기 위한 구분자입니다.
  • iStoploss = 1000 - 포인트 단위의 정적 손절매 값입니다. 손절매 값은 포인트 단위로, 이는 터미널에서의 최소 이동 단위입니다.
  • iTakeprofit = 2000 - 포인트 단위의 정적 이익 실현 값입니다. 이익 실현 값은 포인트 단위입니다.
  • input inDynamic = true - ATR 배수를 기반으로 한 동적 손절매 및 이익 실현 사용? 동적 손절매 및 이익 실현을 켜면 정적 손절매 또는 이익 실현 대신 사용됩니다. 동적 설정은 시장 행동에 따라 조정할 수 있기 때문에 매력적입니다. 시장이 활발할 때 ATR이 더 크기 때문에 동적 설정은 시장이 빠르게 움직일 때 더 큰 손절매와 이익 실현을 생성하고, 시장이 느리게 움직일 때 더 가까운 설정을 유도합니다.
  • inStoplossMultiple = 2 - 동적 SL = X * ATR (평균 주기). 손절매는 여기 입력한 값에 평균 진폭(ATR)을 곱한 값이 됩니다.
  • inTakeProfitMultiple = 7 - 동적 TP = X * ATR (평균 주기). 이익 실현은 여기 입력한 값에 평균 진폭(ATR)을 곱한 값이 됩니다.
  • Break_Even_Settings - 패딩은 트리거보다 낮아야 합니다. 손익 분기점 설정을 위한 구분자입니다. 작동 방식은 수익이 트리거 금액을 초과할 때 손절매를 손익 분기점으로 이동합니다. 패딩 설정이 있으면 손절매를 손익 분기점 + 패딩으로 이동하여 패딩 수익을 잠급니다.
  • bUseBreakEven = true - 손익 분기점 사용. 손익 분기점의 사용을 켜거나 끕니다.
  • inTrigger = 200 - BE = [true]일 경우 수익을 트리거하기 위한 포인트 설정. 거래가 이만큼의 포인트 수익에 도달하면 손절매가 손익 분기점으로 이동합니다.
  • inPadding = 100 - BE로 이동할 때 잠글 포인트 수익. 이 값은 손익 분기점으로 이동할 때 고정하고 싶은 수익 포인트 수입니다. 이 값은 트리거보다 작아야 합니다.

이 로봇은 어떻게 자기 최적화를 할까요? 비밀은 로봇이 지표의 각 변수를 두 번 테스트한다는 것입니다. 지표에 가능한 값이 100개라면, 로봇은 이 값을 각각 테스트하여 일정 수의 바에서 거래를 수행해봅니다(optomizingPeriods). 그런 다음 이 값으로 거래를 했을 때 얻었을 수익 또는 손실을 기준으로 평가합니다. 조금 복잡하게 들리겠지만, 여러분이 더 많은 세부 사항을 원하실 것 같아서 이렇게 설명드리겠습니다.

주어진 조건은, 지표가 과매수 값을 위에서 아래로 교차할 때 매도 주문이 발행되고, 지표가 과매도 값을 아래에서 위로 교차할 때 매수 주문이 발행됩니다. 예를 들어, 과매수 값이 80으로 설정되어 있고, 지표의 이전 바 값이 85, 마지막 바 값이 79일 경우 매도 주문이 발행됩니다. 즉, 85 → 79가 80을 아래로 교차하면 매도 주문이 발행됩니다. 과매도 값이 23이라면, 19 → 27이 위로 교차하면 매수 주문이 발생합니다.

이 로봇은 IndicatorTopValueIndicatorBottomValue 사이의 모든 값을 가져와 두 번의 테스트를 수행합니다. 예를 들어, 상한 값이 100이라면, 로봇은 100을 가지고 optomizingPeriods에서 백테스트를 진행합니다. 만약 144주기를 선택했다면, 100에서 매수하고 100에서 매도했을 때 과거 144주기 동안 수익이 발생했는지 확인합니다. 수익이 발생하면 그 금액을 보관합니다.

백테스트를 진행하는 동안 여러 번 매수 기회를 가질 수 있습니다. 이익 실현에 도달하기 전에 손절매에 도달하면 손실이 발생하며, 반대로 손절매에 도달하기 전에 이익 실현에 도달하면 수익이 발생합니다. 모든 기간을 테스트한 후, 수익이 발생한 금액과 손실을 합산하여 금전적 가치를 보관합니다. 그런 다음 인디케이터는 다음 낮은 인디케이터 값으로 이동하여 수익성을 테스트합니다.

모든 값을 테스트한 후, 가장 높은 금전적 금액을 가진 값을 최적의 매수 값으로 선택합니다. 다음으로, 매도 값에 대해서도 유사한 검사를 수행합니다. 이 과정이 완료되면, 최고의 매수 값과 최고의 매도 값을 비교하여 가장 좋은 거래 기회를 찾습니다. 예를 들어, 최적화 결과 매수는 65에서 이루어지며, 이 경우 65에서의 매수가 가장 많은 수익을 달성했다고 가정해보겠습니다. 만약 $329의 수익이 발생했을 때, 매도에 대한 최적 값이 32에서 $530의 이익이 발생하면 로봇은 32 수준에서의 매도 거래를 찾습니다. 왜냐하면 매도 거래가 매수 거래보다 더 많은 수익을 발생시키기 때문입니다.

미래 확장 아이디어

  • 여러 통화 쌍을 동시에 거래할 수 있도록, 스프레드 크기로 필터링 가능하게.
  • 자기 학습 기능, 즉 스스로의 거래로부터 최적의 방법을 학습하는 기능.
  • 백테스트에 포워드 테스트 기능 포함.
  • 선택할 수 있는 더 많은 지표 추가.

여러분의 제안과 댓글을 남겨주세요. 그리고 평가하는 것도 잊지 마세요!

현재 메타트레이더 마켓플레이스에서 이용 가능: https://www.mql5.com/en/market/product/26332

업데이트: 137-142라인에서 누락된 괄호 수정으로 댓글에서 확인된 오류를 해결했습니다.

연관 포스트

댓글 (0)