Dalam artikel sebelumnya, kami telah melaksanakan strategi Python yang sangat mudah:"Strategi Mencari dan Menjatuhkan Python"Strategi ini boleh mengendalikan satu akaun untuk berdagang secara terprogram pada pasangan dagangan tertentu, prinsipnya sangat mudah, iaitu mengejar dan menjatuhkan. Kadang-kadang kita ingin menggunakan logik dagangan yang sama untuk mengendalikan pasangan dagangan yang berbeza. Anda boleh membuat beberapa bot, menetapkan pasangan dagangan yang berbeza, untuk berdagang dalam pelbagai mata wang. Jika strategi tidak begitu rumit, memandangkan pencipta menjimatkan fleksibiliti platform dagangan yang kuat.
Kod sumber strategi yang telah diubah:
'''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)
Jika kita lihat pada kodnya, adakah ia berbeza dengan kod dalam artikel sebelumnya? Sebenarnya, logik urus niaga adalah sama, tidak ada perubahan, hanya kita mengubah strategi menjadi pelbagai, tidak boleh menggunakan pembolehubah tunggal yang sebelumnya sebagai bentuk parameter strategi. Penyelesaian yang lebih munasabah adalah, membuat parameter menjadi array, indeks setiap kedudukan array sepadan dengan pasangan urus niaga yang ditambahkan.
Kemudian, kita bungkus bahagian kod logik urus niaga ini menjadi satu fungsi.process
Dalam strategi utama, pada loop utama, fungsi ini dipanggil berdasarkan transaksi yang ditambahkan untuk mengulang, supaya setiap pasangan transaksi menjalankan satu kod logik transaksi.
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":[]
}
Dengan reka bentuk sedemikian, setiap pasangan dagangan boleh mempunyai parameternya sendiri, kerana setiap dagangan mempunyai perbezaan harga yang mungkin besar, parameter yang mungkin berbeza, dan kadang-kadang memerlukan tetapan pembezaan.
Sebagai perbandingan, perubahan fungsi ini. Fungsi ini hanya mengubah sedikit kod, dan kemudian berfikir, niat untuk mengubahnya.
Tambahan carta yang memaparkan data pasaran dan data aset akaun pada tetingkap status untuk memaparkan aset dan pasaran yang berkaitan dengan setiap objek bursa secara langsung.
Jika anda mempunyai idea-idea reka bentuk di atas, adakah ia mudah untuk mengubah strategi Python menjadi pelbagai?
Strategi ini hanya untuk rujukan pembelajaran, ujian ulangan, dan berminat untuk mengoptimumkan peningkatan.Alamat Strategi
bbbwwed2009Meng, boleh saya tanya kenapa anda tidak perlu menetapkan arah exchange.SetDirection (("buy") untuk menggunakan strategi ini, dan ada e. bukan exchange.
Kuda HitamBerapa jumlah modal minimum untuk strategi ini?
Kuda HitamSaya tidak mahu berurusan, tidak ada tindak balas selama setengah hari.
Kuda HitamBaiklah, baiklah, saya berjaya, saya berjaya, tidak hairanlah.
Kuda Hitam/upload/asset/164f3fe6e84331d800583.png Sekarang baik, tetapi saya mempunyai wang dalam akaun saya, berapa jumlah modal minimum yang perlu anda letakkan dalam strategi ini, adakah wang dalam akaun saya tidak mencukupi?
Kuda Hitam/upload/asset/16495fcb1185338f8af27.png adalah IP pentadbir yang ditambahkan
Kuda HitamGetAccount: 400: {"error_message":"Invalid IP","code":30011,"error_code":"30011","message:"Invalid IP"} IP. Saya telah menambahkannya ke dalam API.
Kuda Hitam/upload/asset/164330beccf32fc55e7b6.png Bagaimana untuk menyelesaikan masalah ini?
Kuda HitamBerapa banyak kitaran K-line robot
Pencipta Kuantiti - Impian KecilTidak ada piringan sebenar, strategi ini adalah strategi pengajaran, pembelajaran utama, yang boleh diubah, diperluaskan, dioptimumkan sendiri.
Pencipta Kuantiti - Impian KecilSecara khusus, anda boleh melihat kod sumber strategi ini, strategi terbuka, logik strategi sangat mudah untuk mengejar dan menjatuhkan. Perhatikan, ini adalah strategi mata wang digital yang tidak dapat dijalankan dengan masa hadapan, yang boleh diubah menjadi masa depan sendiri.
Pencipta Kuantiti - Impian KecilApabila anda meminta API KEY, alamat IP yang ditetapkan adalah alamat senarai putih yang dibenarkan untuk diakses, dan selepas anda menetapkannya, hanya alamat IP ini yang boleh digunakan untuk mengakses API API dengan API KEY anda. Adakah anda menetapkan alamat IP hos anda?
Pencipta Kuantiti - Impian KecilPemasang Python pada pelayan di mana pentadbir berada.
Pencipta Kuantiti - Impian KecilKaedah ini tidak melihat garis K, apa pun yang ditetapkan boleh dilakukan, perkataan ulangan kerana ia memberi kesan kepada butiran tik, ditetapkan untuk 1 minit.