파이썬에서 전략을 작성하는 많은 개발자는 전략의 안전성에 대해 걱정하여 전략 코드 파일을 로컬로 넣기를 원합니다. FMZ API 문서에서 제안된 해결책으로:
전략 안전
전략은 FMZ 플랫폼에서 개발되며, 전략은 FMZ 계정 소유자에게만 표시됩니다. 그리고 FMZ 플랫폼에서 전략 코드는 완전히 현지화 될 수 있습니다. 예를 들어, 전략은 파이썬 패키지에 캡슐화되어 전략 코드에 로드되어 전략 현지화가 실현됩니다.
자세한 내용은 다음으로 문의하십시오:https://www.fmz.com/api
사실 이런 걱정은 필요없지만, 그런 필요성이 있기 때문에, 우리는 완전한 실행 사례를 제시할 것입니다.
이제 간단한 파이썬 전략을 찾아보겠습니다.Dual Thrust
전략, 전략 주소:https://www.fmz.com/strategy/21856우리는 전략 코드의 어떤 부분도 변경하지 않으려고 노력합니다. FMZ 플랫폼에서 전략 코드가 호출 할 수있는 파일로 전략을 캡슐화하고 실행 결과는 전략을 직접 실행하는 것과 정확히 동일합니다. 캡슐화의 가장 큰 문제는 FMZ 플랫폼에서 전략 코드가 호출하는 글로벌 객체, 글로벌 함수 및 상수 값이 캡슐화 된 파일에서 액세스 할 수 없으므로 이러한 객체, 함수, 변수 및 상수를 캡슐화 된 파일로 전달하는 방법을 찾아야합니다. 단계적으로 수행하자.
testA
.파일에 붙여testA
지역 편집자가 열었습니다.
일부 코드를 추가하고 전략 코드 부분을 그대로 복사 붙여
# 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
, SetFunc
FMZ 플랫폼의 전략은 이러한 함수를 호출하고 사용된 함수와 객체를 전달합니다.
스타트업 전략은 매우 간단합니다.
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
백테스트를 위한 로컬 파일실행을 위해 파일을 바로 로드합니다.
이번엔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 선물 전략 코드 파이썬 버전.
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)
백테스트를 수행합니다.
백테스트 결과는 위의 테스트와 일치합니다.
분명히 위의 두 번째 방법은 더 간단합니다. 사용하는 것이 좋습니다.