지난 기사에서는 매우 간단한 파이썬 전략을 구현했습니다."Python 버전의 추격 및 추락 전략"이 전략은 하나의 계정을 조작하여 거래 쌍에 대한 절차적 거래를 수행할 수 있으며, 원리는 매우 간단합니다. 때로는 동일한 거래 논리를 사용하여 다른 거래 쌍을 조작하고자합니다. 여러 로봇을 만들 수 있으며, 다양한 거래 쌍을 설정하여 다양한 화폐를 거래 할 수 있습니다. 전략이 복잡하지 않은 경우, 발명자가 거래 플랫폼을 양적화하는 강력한 유연성을 고려하면. 하나의 전략을 여러 가지 전략으로 쉽게 바꿀 수 있습니다.
이 문서는 다른 문장과 다른 문장들을 포함하고 있습니다.
'''backtest
start: 2019-02-20 00:00:00
end: 2020-01-10 00:00:00
period: 1m
exchanges: [{"eid":"OKEX","currency":"BTC_USDT"},{"eid":"OKEX","currency":"ETH_USDT","stocks":30},{"eid":"OKEX","currency":"LTC_USDT","stocks":100}]
'''
import time
import json
params = {
"arrBasePrice": [-1, -1, -1], # -1
"arrRatio": [0.05, 0.05, 0.05], # 0.05
"arrAcc": [], # _C(exchange.GetAccount)
"arrLastCancelAll": [0, 0, 0], # 0
"arrMinStocks": [0.01, 0.01, 0.01], # 0.01
"arrPricePrecision": [2, 2, 2], # 2
"arrAmountPrecision": [3, 2, 2], # 2
"arrTick":[]
}
def CancelAll(e):
while True :
orders = _C(e.GetOrders)
for i in range(len(orders)) :
e.CancelOrder(orders[i]["Id"], orders[i])
if len(orders) == 0 :
break
Sleep(1000)
def process(e, index):
global params
ticker = _C(e.GetTicker)
params["arrTick"][index] = ticker
if params["arrBasePrice"][index] == -1 :
params["arrBasePrice"][index] = ticker.Last
if ticker.Last - params["arrBasePrice"][index] > 0 and (ticker.Last - params["arrBasePrice"][index]) / params["arrBasePrice"][index] > params["arrRatio"][index]:
params["arrAcc"][index] = _C(e.GetAccount)
if params["arrAcc"][index].Balance * params["arrRatio"][index] / ticker.Last > params["arrMinStocks"][index]:
e.Buy(ticker.Last, params["arrAcc"][index].Balance * params["arrRatio"][index] / ticker.Last)
params["arrBasePrice"][index] = ticker.Last
if ticker.Last - params["arrBasePrice"][index] < 0 and (params["arrBasePrice"][index] - ticker.Last) / params["arrBasePrice"][index] > params["arrRatio"][index]:
params["arrAcc"][index] = _C(e.GetAccount)
if params["arrAcc"][index].Stocks * params["arrRatio"][index] > params["arrMinStocks"][index]:
e.Sell(ticker.Last, params["arrAcc"][index].Stocks * params["arrRatio"][index])
params["arrBasePrice"][index] = ticker.Last
ts = time.time()
if ts - params["arrLastCancelAll"][index] > 60 * 5 :
CancelAll(e)
params["arrLastCancelAll"][index] = ts
def main():
global params
for i in range(len(exchanges)) :
params["arrAcc"].append(_C(exchanges[i].GetAccount))
params["arrTick"].append(_C(exchanges[i].GetTicker))
exchanges[i].SetPrecision(params["arrPricePrecision"][i], params["arrAmountPrecision"][i])
for key in params :
if len(params[key]) < len(exchanges):
raise "params error!"
while True:
tblAcc = {
"type" : "table",
"title": "account",
"cols": ["账户信息"],
"rows": []
}
tblTick = {
"type" : "table",
"title": "ticker",
"cols": ["行情信息"],
"rows": []
}
for i in range(len(exchanges)):
process(exchanges[i], i)
for i in range(len(exchanges)):
tblAcc["rows"].append([json.dumps(params["arrAcc"][i])])
tblTick["rows"].append([json.dumps(params["arrTick"][i])])
LogStatus(_D(), "\n`" + json.dumps([tblAcc, tblTick]) + "`")
Sleep(500)
이 코드는 이전 기사에서 발견한 것과는 크게 다르지 않은가요?
실제로 거래 논리는 완전히 동일하며, 어떠한 변화도 없이, 단지 우리가 전략을 다종으로 수정하면, 이전
그리고 트랜잭션 로직의 이 부분을 함수로 포괄합니다.process
중, 전략주자 루프에서, 추가된 트랜잭션에 따라 이리저리 함수를 호출하여 각 트랜잭션 쌍에 트랜잭션 논리 코드를 한 번 실행하도록 한다.
for i in range(len(exchanges)):
process(exchanges[i], i)
params = {
"arrBasePrice": [-1, -1, -1], # -1
"arrRatio": [0.05, 0.05, 0.05], # 0.05
"arrAcc": [], # _C(exchange.GetAccount)
"arrLastCancelAll": [0, 0, 0], # 0
"arrMinStocks": [0.01, 0.01, 0.01], # 0.01
"arrPricePrecision": [2, 2, 2], # 2
"arrAmountPrecision": [3, 2, 2], # 2
"arrTick":[]
}
이러한 디자인은 각 거래 쌍이 자신의 매개 변수를 가질 수 있도록 해줍니다. 왜냐하면 각각의 거래는 가능한 가격에 큰 차이를 가지고 있기 때문에 매개 변수에도 차이가있을 수 있으며 때로는 차별화 설정이 필요합니다.
이 함수의 변화와 비교해 볼 수 있다. 함수는 단지 코드를 조금만 수정하고, 그 다음에는 그 변경의 의도를 생각해 본다.
상태 탭에 시장 데이터와 계정 자산 데이터를 보여주는 그래프를 추가하여 각 거래소 대상의 해당 자산과 시장이 실시간으로 표시될 수 있습니다.
위의 모든 디자인 아이디어를 가지고, Python의 전략을 다중으로 바꾸는 것이 쉬운 일이 아닐까요?
이 전략은 레퍼런스 학습, 리테스트 테스트, 업그레이드를 최적화 할 수있는 관심사를 위한 것입니다.전략적 주소
2009년
동전의 검은 말이 전략의 최소 자본은 얼마일까요?
동전의 검은 말왜 거래하지 않는가, 반일 동안 반응이 없습니다.
동전의 검은 말좋아요, 좋아요, 잘 됐습니다. 저는 동전을 만들었어요.
동전의 검은 말/upload/asset/164f3fe6e84331d800583.png 지금은 괜찮아요, 하지만 내 계좌에는 돈이 있습니다. 당신의 전략은 최소한의 자본을 얼마나 투자해야합니까?
동전의 검은 말/upload/asset/16495fcb1185338f8af27.png 추가된 관리자 IP입니다.
동전의 검은 말GetAccount: 400: {"error_message":"Invalid IP","code":30011,"error_code":"30011","message":"Invalid IP"} IP는 API에 추가했습니다.
동전의 검은 말/upload/asset/164330beccf32fc55e7b6.png 이 문제를 해결하는 방법
동전의 검은 말로봇의 K 라인 주기가 얼마나 설정되는지
발명가들의 수량화 - 작은 꿈실제 디스크가 없으므로, 이 전략은 교육 전략이며, 학습이 주요이며, 직접 수정, 확장, 최적화 할 수 있습니다.
발명가들의 수량화 - 작은 꿈이 전략의 소스코드를 구체적으로 살펴보면, 전략은 공개되어 있으며, 전략 논리는 간단합니다. 이것은 디지털 통화 현금 전략이며, 선물로 실행할 수 없으며, 선물로 수정 할 수 있습니다.
발명가들의 수량화 - 작은 꿈API KEY를 요청할 때 IP 주소가 허용되는 Whitelist 주소가 설정됩니다. 당신이 설정한 후, 이 IP 주소가 당신의 API KEY를 사용하여 API 인터페이스에 액세스 할 수 있습니다. 당신은 당신의 호스트의 IP 주소를 설정합니까?
발명가들의 수량화 - 작은 꿈관리자가 있는 서버에 python을 설치하십시오.
발명가들의 수량화 - 작은 꿈이 정책은 K 라인을 고려하지 않고 임의로 설정할 수 있으며, 재검토 단어가 틱 입자성에 영향을 미치기 때문에 1분으로 설정됩니다.