손잡이, 손잡이, 손잡이, 손잡이

저자:작은 꿈, 2020-06-30 10:48:18, 업데이트: 2023-10-08 19:48:02

img

손잡이, 손잡이, 손잡이, 손잡이

이 글은 두 가지 방법을 소개하고, 다른 방법은 더 간단합니다.

파이썬 언어를 사용하는 많은 개발자들이 정책 보안을 우려하여 정책 코드 파일을 로컬로 보관하기를 원합니다.FMZ API이 문서에서 제안하는 한 가지 방안은:

전략적 안전 발명가 양적 거래 플랫폼에서 개발 정책을 개발하고, 정책은 발명가 양적 계정 소유자에게만 표시됩니다. 그리고 발명가 양적 거래 플랫폼에서 정책 코드를 완전히 현지화 할 수 있습니다. 예를 들어, 정책을 파이썬 패키지로 포장하고 전략 코드 안에 로드하여 정책 현지화를 구현합니다.https://www.fmz.com/api#策略安全性

이런 걱정은 불필요하지만, 이런 해결책이 있다면 완전한 실현 사례를 제시한다.

전략의 포장을

우리는 간단한 파이썬 전략을 가지고 있습니다.Dual Thrust이 모든 것은 우리가 할 수 있는 일입니다.https://www.fmz.com/strategy/21856우리는 어떤 정책 부분 코드도 변경하지 않고, FMZ 플랫폼에서 정책 코드가 호출할 수 있는 문서로 정책을 포괄하고, 실행 결과와 직접 실행하는 정책에 완전히 일치합니다. 포괄의 가장 큰 문제는 FMZ 플랫폼에서 전략 코드가 호출되는 범체적인 객체, 범체적인 함수, 변수 값이 우리의 포괄 파일에서 액세스 할 수 없다는 것입니다. 따라서 이러한 객체, 함수, 변수, 변수를 포괄 문서로 전달하는 방법을 찾아야 합니다. 다음으로 우리는 분과별로 처리합니다.

  • 복제파이썬 버전 듀얼 스러스트 OKCoin 선물테스트A라고 불리는 로컬 파이썬 파일에 붙여진 정책 코드입니다.

    img

    로컬 에디터에서 열리는 파일 testA에 붙여넣습니다.

    img

  • 복사 붙여진 정책 코드의 일부를 원본으로 유지하기 위해 코드를 추가합니다.

    # 函数、对象
    exchanges = None
    exchange = None
    Log = None
    Sleep = None
    TA = None
    Chart = None
    LogProfitReset = None
    LogStatus = None
    _N = None
    _C = None 
    LogProfit = None  
    
    
    # 策略参数
    ContractTypeIdx = None
    MarginLevelIdx = None
    NPeriod = None
    Ks = None
    Kx = None
    AmountOP = None
    Interval = None
    LoopInterval = None
    PeriodShow = None  
    
    # 常量
    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
    

    위의 코드의 주요 기능은 현재 문서에서 사용되는 범용 함수, 변수를 선언하는 것입니다. 그리고 이러한 함수들을 가져올 인터페이스를 예약합니다.SetExchangesSetParamsSetFunc▲ FMZ 플랫폼의 전략은 이러한 함수를 호출하여 사용된 함수, 객체 등을 전달합니다.

FMZ 플랫폼의 시작 전략

이 프로젝트의 시작은 매우 간단합니다.

img

FMZ 플랫폼에 쓰인 코드는 이 몇 줄에 불과합니다. 이 시작 정책의 매개 변수는 우리가 포장하는 정책과 같다는 것입니다.파이썬 버전 듀얼 스러스트 OKCoin 선물같은 방식으로, 바로 "Python 버전의 듀얼 스러스트 OKCoin 선물" 전략을 복사하고, 코드를 비어 붙여넣을 수 있습니다.

import sys
# 这里我写的是自己放置testA文件的路径,具体我替换为xxx了,简单说就是设置自己的testA文件路径就可以了
sys.path.append("/Users/xxx/Desktop/pythonPlayground/")
import testA

def main():
    # 传递交易所对象
    testA.SetExchanges(exchanges)
    # 传递全局函数 SetFunc(pLog, pSleep, pTA, pChart, pLogStatus, pLogProfitReset, p_N, p_C, pLogProfit)
    testA.SetFunc(Log, Sleep, TA, Chart, LogStatus, LogProfitReset, _N, _C, LogProfit)
    # 传递策略参数 SetParams(pContractTypeIdx, pMarginLevelIdx, pNPeriod, pKs, pKx, pAmountOP, pInterval, pLoopInterval, pPeriodShow)
    testA.SetParams(ContractTypeIdx, MarginLevelIdx, NPeriod, Ks, Kx, AmountOP, Interval, LoopInterval, PeriodShow)
    # 执行封装的testA文件中的策略主函数
    testA.main()

그래서 우리는 정책 논리 주체를 testA 파일로 포장하고, 호스트가 있는 장치에 로컬로 배치합니다. FMZ 플랫폼에서는 시작 정책을 저장하는 것만으로, 이 시작 정책을 만든 로봇이 우리의 로컬 파일을 로컬로 로드하여 호스트에서 실행할 수 있습니다.

재검토 대조

  • 로컬 로드 testA 파일 검색

    img

  • 원본 정책, 공용 서버에서 재검토

    img

다른 방법이 좀 더 간단합니다.

이 파일은 바로 실행에 탑재됩니다. 이 때 우리는 testB 파일을 준비했고, "Python 버전의 듀얼 스러스트 OKCoin 선물"이라는 전략을 위한 코드를 넣었습니다.

import time
class Error_noSupport(BaseException):
    def __init__(self):
        Log("只支持OKCoin期货!#FF0000")

class Error_AtBeginHasPosition(BaseException):
    def __init__(self):
        Log("启动时有期货持仓! #FF0000")

ChartCfg = {
    '__isStock': True,
    'title': {
        'text': 'Dual Thrust 上下轨图'
    },
    'yAxis': {

...

너무 길어서 방침 코드를 전혀 바꾸지 않고 방치합니다. 다음으로 "python 버전의 Dual Thrust OKCoin 선물 (시작 정책, 직접 testB 파일을 실행) "을 준비합니다. 이것은 FMZ 플랫폼에서 우리가 하는 방법입니다. 로봇을 만들고, 직접 testB 파일을 로드하고, 직접 실행합니다. "시작 정책"에는 원래의 Python 버전의 Dual Thrust OKCoin 선물과 동일한 전략 파라미터 설정 (전략 인터페이스 파라미터) 이 있어야 합니다.

img

if __name__ == '__main__':
    Log("run...")
    try:
        # 文件路径做了处理,可以写入自己testB文件放置的实际路径
        f = open("/Users/xxx/Desktop/pythonPlayground/testB.py", "r")
        code = f.read()
        exec(code)
    except Exception as e:
        Log(e)

리코드를 실행합니다:img

이 실험의 결과들은 위의 실험과 일치합니다.

두 번째 방법은 분명히 더 간단하고 더 나은 방법이 있다면, 더 좋은 방법을 사용하는 것이 좋습니다.


관련

더 많은

qq89520그리고 저는 셀레늄이 더 많은 기능을 할 수 있다는 것을 깨달았습니다.

qq89520배우기

작은 꿈哈哈, 어떤 아이디어가 나오면 함께 토론해 봅시다.