랜덤 워크 전략


생성 날짜: 2023-10-09 16:10:24 마지막으로 수정됨: 2023-10-09 16:10:24
복사: 0 클릭수: 475
1
집중하다
1226
수행원

개요

무작위 이동 전략 (random wandering strategy) 은 무작위 수 발생에 기반한 자동 거래 전략이다. 이 전략은 선형 동수 생성기를 사용하여 설정된 씨앗에 따라 무작위적으로 숫자를 생성하며, 숫자는 하락할 때 더 많고, 하락할 때 더 작으며, 무작위적으로 하락할 때 더 많은 하락 포지션에 진입한다.

전략 원칙

이 전략은 주로 다음과 같은 부분들을 통해 무작위 거래를 구현합니다:

  1. 무작위 숫자가 생성된 a, c 및 모들 수 m를 설정하고, 초기 씨드 seed。를 설정한다.

  2. 무작위 숫자를 생성하는 함수 GetRandom을 정의하고, 선형 동余 알고리즘을 사용하여 0-m 사이의 무작위 숫자를 생성한다.

  3. 각 K선에서, 현재 포지션이 없다면, 비교 생성된 무작위 숫자의 크기는 m/2 시간 이상으로 더 많이, 그렇지 않으면 공백으로 한다.

  4. 스톱 로드 조건을 설정하고, 스톱 로드와 스톱 로드 마피트를 백분율 형태로 설정한다.

  5. 시간 단위로 재검토 주기를 설정한다.

위의 단계를 통해, 이 전략은 완전히 무작위적인 다중 공백 작업을 구현한다. 무작위 숫자가 m/2보다 크면 다중 주문을 열고, 그렇지 않으면 공백을 열고, 그 다음 스톱 스톱을 포지션에서 빠져 나가도록 설정한다. 재측정 주기를 사용자 정의 할 수 있다.

우위 분석

  • 전략의 논리는 간단하고 명확하며, 구현을 이해하기 쉽습니다.

  • 무작위 거래는 감정적 인 영향을 효과적으로 방지하고 주관적 인 오작동을 줄일 수 있습니다.

  • 사용자 정의 할 수 있는 무작위 숫자 생성 알고리즘 변수, 무작위성을 조정한다.

  • 유연하게 단편적 손실을 제어할 수 있습니다.

  • 피드백 변수 최적화를 지원하여 다양한 변수들이 전체 수익에 미치는 영향을 쉽게 테스트할 수 있습니다.

위험 분석

  • 무작위 거래는 장기적으로 명확한 움직임이 없을 수 있으며 수익은 불확실합니다.

  • 시장 상황에 따라 포지션을 조정할 수 없어 트렌드 기회를 놓칠 수 있다.

  • 단독 수익이 적고, 회수 위험도 높습니다.

  • 너무 큰 손실을 피하기 위해 합리적인 Stop Loss Stop Stop 비율을 설정해야합니다.

  • 무작위성으로 인해 빈번한 하위 포지션이 발생하여 거래비용이 증가할 수 있습니다.

  • 충분한 재검토가 필요하며 검증 파라미터의 설정이 합리적이므로 맹목적으로 사용할 수 없습니다.

트렌드 판단 기능, 무작위 포지션 개시 횟수 감소, 손해 차단 장치 최적화, 단독 손실을 엄격하게 제어하는 등의 기능을 추가하여 위험을 줄일 수 있다.

최적화 방향

  • 트렌드 판단을 높여 역기점을 피하십시오.

  • 포지션 관리에 참여하여 자금 변화에 따라 포지션 크기를 조정하십시오.

  • 랜덤 숫자를 생성하는 알고리즘을 최적화하여 랜덤성을 높인다.

  • 동적으로 조정된 스톱로스 스톱 상승률

  • 포지션 개설 빈도 제한이 추가되었습니다.

  • 다중 변수 조합 회색은 최적의 변수를 찾는다.

요약하다

무작위 이동 전략은 무작위 수 제어를 통해 더 많은 공백을 수행하여 기계적 거래를 실현한다. 이 전략은 무작위성이 강하며, 개인의 감정에 영향을 받지 않으며, 주관적 오작동의 위험을 회피한다. 그러나 무작위 포지션은 트렌드 기회를 놓칠 수도 있으며, 단독 수익은 제한되어 있으며, 리스크 제어 장치를 최적화해야 한다.

전략 소스 코드
/*backtest
start: 2022-10-02 00:00:00
end: 2023-10-08 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//@author=Tr0sT
strategy(title = "Random strategy", shorttitle = "Random", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

a = 16
c = 10
m = 1000
GetRandom(prev) =>
    GetRandom = (a * prev + c) % m

seed = input(200, minval = 2, maxval = m)
stopLoss = input(30, title = "Stop loss percentage(0.1%)")
takeProfit = input(30, title = "Take profit percentage(0.1%)")


curRandom = na
curRandom := nz(curRandom[1]) == 0 ? seed : GetRandom(curRandom[1])
if (strategy.position_size == 0)
    if (curRandom >= m / 2)
        strategy.entry("Enter", strategy.long)
    else
        strategy.entry("Enter", strategy.short)
        
    strategy.exit("Exit", "Enter", loss = close * stopLoss / 1000 / syminfo.mintick, profit = close * takeProfit / 1000 / syminfo.mintick)            

// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(3, "Backtest Start Month")
testStartDay = input(6, "Backtest Start Day")
testStartHour = input(08, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
    strategy.cancel_all()
    strategy.close_all()