この記事では2つの方法について述べていますが,文末のもう1つの方法はよりシンプルです.
Python言語でポリシーを書く開発者は,そのセキュリティを懸念し,ポリシーコードファイルをローカルにしたいと願っています.FMZ API
文書の提案の一つは,
戦略的セキュリティ 発明者量化取引プラットフォームでは,策略が発明者量化アカウント所有者にのみ表示される策略を開発する.また,発明者量化取引プラットフォームでは,策略コードを完全にローカライズすることが可能である.例えば,策略をPythonパッケージに包み込み,策略コードにロードすることで,策略のローカライゼーションを実現する.https://www.fmz.com/api#策略安全性
解決策があるからこそ,実現の完全な例が提示される.
簡単なPython戦略を例に挙げます.Dual Thrust
戦略,戦略の住所:https://www.fmz.com/strategy/21856策略の一部コードを一切変更しないように努め,策略をFMZプラットフォーム上の策略コードで呼び出すことができるファイルにパッケージ化し,実行結果と直接実行するポリシーに完全に一致します. パッケージ化で最大の問題は,FMZプラットフォーム上の策略コードで呼び出すグローバルオブジェクト,グローバル関数,常量値は,私たちのパッケージ化ファイルではアクセスできないので,これらのオブジェクト,関数,変数,常数をパッケージ化ファイルに転送する方法を考えなければなりません. 次に,部署で処理します.
複製Python版 Dual Thrust OKCoin フューチャー策略のコードを testA と呼ばれるローカル Python ファイルに貼り付けます.
testA を testA のファイルに貼る.
コードの一部を追加して,コピー・ペーストするポリシーコードの一部を原始保存します.
# 函数、对象
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
上記のコードの主な役割は,現在のファイル内で使用されている全域関数,変数を宣言すること.そして,これらの関数を輸入するインターフェースを予約すること.SetExchanges
,SetParams
,SetFunc
FMZのプラットフォーム上の戦略は,これらの関数を呼び出し,使用した関数,オブジェクトなどの一部を転送します.
スタート戦略は簡単で,次の通りです.
FMZのプラットフォームでは,この数行だけのコードが書かれています. 注意しておきたいのは,この起動ポリシーのパラメータは,Python版 Dual Thrust OKCoin フューチャーPython版 Dual Thrust 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 ファイルをローカルに読み返す
オリジナルのポリシー,公共サーバーで復習
ファイルを直接実行にアップロードします. テストBファイルを作成し",Python版 Dual Thrust 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フューチャーと同じタッチのポリシーパラメータ設定 (戦略インターフェースパラメータ) が必要です.
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)
復習を実行する:
テスト結果が上記のテストと一致した.
明らかに2番目の方法はもっと簡単で,使用することをお勧めします. より良い方法があるなら,Welcome to God's Message.
QQ89520セレニウムにはもっと多くの機能があると思います
QQ89520学習する
発明者 量化 - 微かな夢ハハ,どんなアイデアが浮かび上がるのか,みんなで議論しましょう.