로컬 파일로 파이썬 전략을 캡슐화하는 법을 가르쳐

저자:선함, 2020-07-09 10:21:31, 업데이트: 2023-10-28 15:28:00

img

파이썬에서 전략을 작성하는 많은 개발자는 전략의 안전성에 대해 걱정하여 전략 코드 파일을 로컬로 넣기를 원합니다. FMZ API 문서에서 제안된 해결책으로:

전략 안전

전략은 FMZ 플랫폼에서 개발되며, 전략은 FMZ 계정 소유자에게만 표시됩니다. 그리고 FMZ 플랫폼에서 전략 코드는 완전히 현지화 될 수 있습니다. 예를 들어, 전략은 파이썬 패키지에 캡슐화되어 전략 코드에 로드되어 전략 현지화가 실현됩니다.

자세한 내용은 다음으로 문의하십시오:https://www.fmz.com/api

사실 이런 걱정은 필요없지만, 그런 필요성이 있기 때문에, 우리는 완전한 실행 사례를 제시할 것입니다.

전략을 포괄

이제 간단한 파이썬 전략을 찾아보겠습니다.Dual Thrust전략, 전략 주소:https://www.fmz.com/strategy/21856우리는 전략 코드의 어떤 부분도 변경하지 않으려고 노력합니다. FMZ 플랫폼에서 전략 코드가 호출 할 수있는 파일로 전략을 캡슐화하고 실행 결과는 전략을 직접 실행하는 것과 정확히 동일합니다. 캡슐화의 가장 큰 문제는 FMZ 플랫폼에서 전략 코드가 호출하는 글로벌 객체, 글로벌 함수 및 상수 값이 캡슐화 된 파일에서 액세스 할 수 없으므로 이러한 객체, 함수, 변수 및 상수를 캡슐화 된 파일로 전달하는 방법을 찾아야합니다. 단계적으로 수행하자.

img

파일에 붙여testA지역 편집자가 열었습니다.

img

일부 코드를 추가하고 전략 코드 부분을 그대로 복사 붙여

# Function, object
exchanges = None
exchange = None
Log = None
Sleep = None
TA = None
Chart = None
LogProfitReset = None
LogStatus = None
_N = None
_C = None 
LogProfit = None  


# Strategy parameters
ContractTypeIdx = None
MarginLevelIdx = None
NPeriod = None
Ks = None
Kx = None
AmountOP = None
Interval = None
LoopInterval = None
PeriodShow = None  

# constant
ORDER_STATE_PENDING = 0
ORDER_STATE_CLOSED = 1
ORDER_STATE_CANCELED = 2
ORDER_STATE_UNKNOWN = 3
ORDER_TYPE_BUY = 0 
ORDER_TYPE_SELL = 1
PD_LONG = 0
PD_SHORT = 1  


def SetExchanges(es):
    global exchanges, exchange
    exchanges = es
    exchange = es[0]  

def SetFunc(pLog, pSleep, pTA, pChart, pLogStatus, pLogProfitReset, p_N, p_C, pLogProfit):
    global Log, Sleep, TA, Chart, LogStatus, LogProfitReset, _N, _C, LogProfit
    Log = pLog
    Sleep = pSleep
    TA = pTA
    Chart = pChart
    LogStatus = pLogStatus
    LogProfitReset = pLogProfitReset
    _N = p_N
    _C = p_C
    LogProfit = pLogProfit  

def SetParams(pContractTypeIdx, pMarginLevelIdx, pNPeriod, pKs, pKx, pAmountOP, pInterval, pLoopInterval, pPeriodShow):
    global ContractTypeIdx, MarginLevelIdx, NPeriod, Ks, Kx, AmountOP, Interval, LoopInterval, PeriodShow
    ContractTypeIdx = pContractTypeIdx
    MarginLevelIdx = pMarginLevelIdx
    NPeriod = pNPeriod
    Ks = pKs
    Kx = pKx
    AmountOP = pAmountOP
    Interval = pInterval
    LoopInterval = pLoopInterval
    PeriodShow = pPeriodShow

위의 코드의 주요 기능은 현재 파일에서 사용되는 글로벌 함수와 변수를 선언하는 것입니다.SetExchanges, SetParams, SetFuncFMZ 플랫폼의 전략은 이러한 함수를 호출하고 사용된 함수와 객체를 전달합니다.

FMZ 플랫폼에서의 스타트업 전략

스타트업 전략은 매우 간단합니다.

img

FMZ 플랫폼에 작성 된 코드 몇 줄 밖에 없습니다. 이 시작 전략의 매개 변수 우리의 패키지 전략과 정확히 동일하다는 점에 유의해야합니다.듀얼 스러스트 OKCoin 선물 전략 코드 파이썬 버전사실, 당신은 직접 복사 할 수 있습니다듀얼 스러스트 OKCoin 선물 전략 코드 파이썬 버전전략, 그럼 전략 코드를 삭제하고 붙여주세요.

import sys
# Here I wrote the path where I put the testA file myself. I replaced it with xxx. To put it simply, I set the path of my testA file.
sys.path.append("/Users/xxx/Desktop/pythonPlayground/")
import testA

def main():
    # Passing Exchange Object
    testA.SetExchanges(exchanges)
    # Pass global function SetFunc(pLog, pSleep, pTA, pChart, pLogStatus, pLogProfitReset, p_N, p_C, pLogProfit)
    testA.SetFunc(Log, Sleep, TA, Chart, LogStatus, LogProfitReset, _N, _C, LogProfit)
    # Passing strategy parameters SetParams(pContractTypeIdx, pMarginLevelIdx, pNPeriod, pKs, pKx, pAmountOP, pInterval, pLoopInterval, pPeriodShow)
    testA.SetParams(ContractTypeIdx, MarginLevelIdx, NPeriod, Ks, Kx, AmountOP, Interval, LoopInterval, PeriodShow)
    # Execute the main strategy function in the encapsulated testA file
    testA.main()

이러한 방식으로 우리는 전략 논리의 주요 부분을testA이 파일은 FMZ 플랫폼에서 시작 전략을 저장할 필요가 있습니다. 이 시작 전략을 만드는 로봇은 우리의 로컬 파일을 직접 로드하고 로컬로 실행할 수 있습니다.

백테스팅 비교

  • 부하testA백테스트를 위한 로컬 파일

img

  • 오리지널 전략, 공개 서버에서 백테스팅

img

또 다른 더 간단한 방법

실행을 위해 파일을 바로 로드합니다. 이번엔testB이 파일의 코드듀얼 스러스트 OKCoin 선물 전략 코드 파이썬 버전 strategy.

import time
class Error_noSupport(BaseException):
    def __init__(self):
        Log("Only OKCoin futures are supported!#FF0000")

class Error_AtBeginHasPosition(BaseException):
    def __init__(self):
        Log("There is a futures position at startup!#FF0000")

ChartCfg = {
    '__isStock': True,
    'title': {
        'text': 'Dual Thrust Top and bottom rail map'
    },
    'yAxis': {

...

전략이 너무 길다면, 방치되고 전략 코드는 전혀 변경할 필요가 없습니다.

그럼 준비해듀얼 스러스트 OKCoin 선물 전략 코드 파이썬 버전(전략을 시작, 직접 실행testB파일), 이것은 FMZ 플랫폼에서 우리의 전략입니다, 로봇을 만들고, 직접 로드testB시작 전략 또한 정확히 동일한 전략 매개 변수 설정 (전략 인터페이스 매개 변수) 을 가지고 있어야 합니다듀얼 스러스트 OKCoin 선물 전략 코드 파이썬 버전.

img

if __name__ == '__main__':
    Log("run...")
    try:
        # The file path is processed, you can write the actual path of your testB file
        f = open("/Users/xxx/Desktop/pythonPlayground/testB.py", "r")
        code = f.read()
        exec(code)
    except Exception as e:
        Log(e)

백테스트를 수행합니다.

img

백테스트 결과는 위의 테스트와 일치합니다.

분명히 위의 두 번째 방법은 더 간단합니다. 사용하는 것이 좋습니다.


더 많은