Pada artikel sebelumnya, saya menggunakan strategi Python yang sangat sederhana:"Strategi Perburuan dan Kecelakaan Python"Strategi ini dapat mengoperasikan satu akun untuk melakukan perdagangan terprogram pada pasangan perdagangan tertentu, prinsipnya sangat sederhana, yaitu mengejar tumbang. Kadang-kadang kita ingin menggunakan logika perdagangan yang sama untuk mengoperasikan pasangan perdagangan yang berbeda.
Adapun sumber kode yang diubah adalah:
'''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 melihat kode yang berbeda, apakah kita menemukan perbedaan yang signifikan dari kode yang ada di artikel sebelumnya? Pada kenyataannya logika transaksi adalah sama persis, tidak ada perubahan, hanya saja kita mengubah strategi menjadi berbagai, maka tidak bisa menggunakan variabel tunggal yang sebelumnya tidak dapat digunakan sebagai bentuk dari parameter strategi, solusi yang lebih masuk akal adalah, membuat parameter menjadi array, indeks dari setiap posisi array sesuai dengan transaksi yang ditambahkan.
Kemudian kita bungkus bagian dari kode logika transaksi ini menjadi fungsi.process
Dalam strategi utama loop, fungsi ini dipanggil berdasarkan transaksi yang ditambahkan pada pasangan iterasi, sehingga setiap pasangan transaksi menjalankan satu kode logis 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 cara ini, setiap pasangan perdagangan dapat memiliki parameternya sendiri, karena setiap transaksi memiliki perbedaan harga yang mungkin sangat besar, dan parameternya juga mungkin berbeda, yang kadang-kadang membutuhkan pengaturan diferensiasi.
Perbandingan adalah perubahan fungsi ini. Fungsi ini hanya mengubah kode sedikit demi sedikit, dan kemudian berpikir, maksud dari perubahan tersebut.
Ditambah grafik yang menampilkan data pasar dan data aset akun di kolom status, yang dapat menampilkan aset dan pasar yang sesuai dengan setiap objek bursa secara real-time.
Jika Anda memiliki ide-ide desain di atas, tidakkah mudah untuk mengubah strategi Python menjadi strategi multi-varietas?
Strategi ini hanya untuk referensi belajar, uji ulang, dan minat untuk mengoptimalkan upgrade.Alamat strategis
bbbwwed2009Meng, kenapa kamu tidak bisa mengatur arah exchange.SetDirection (untuk "buy") dan e. bukan exchange.
Kuda Hitam BesarBerapa modal minimum untuk strategi ini?
Kuda Hitam Besar"Saya tidak mau melakukan transaksi, dan tidak ada tanggapan selama setengah hari.
Kuda Hitam BesarBaiklah, baiklah, sudah selesai, saya telah mengubahnya menjadi koin asli, tidak heran.
Kuda Hitam Besar/upload/asset/164f3fe6e84331d800583.png sekarang baik-baik saja, tapi saya memiliki banyak uang di akun saya, berapa minimal modal yang harus Anda investasikan dalam strategi ini, apakah saya tidak memiliki cukup uang di akun saya?
Kuda Hitam Besar/upload/asset/16495fcb1185338f8af27.png adalah IP administrator yang ditambahkan
Kuda Hitam BesarGetAccount: 400: {"error_message":"Invalid IP","code":30011,"error_code":"30011","message":"Invalid IP"} IP. Saya menambahkannya ke dalam API.
Kuda Hitam Besar/upload/asset/164330beccf32fc55e7b6.png Bagaimana caranya?
Kuda Hitam BesarBerapa banyak siklus K-line yang disetel robot
Penemu Kuantitas - Mimpi KecilTidak ada piringan, strategi ini adalah strategi pengajaran, belajar, dan dapat dimodifikasi, diperluas, dan dioptimalkan sendiri.
Penemu Kuantitas - Mimpi KecilAnda dapat melihat secara spesifik kode sumber strategi ini, strategi ini terbuka, logika strategisnya sangat sederhana adalah mengejar dan menjatuhkan. Perhatikan, ini adalah strategi mata uang digital langsung, tidak dapat menjalankan futures, Anda dapat mengubahnya menjadi futures sendiri.
Penemu Kuantitas - Mimpi KecilSaat Anda meminta API KEY, alamat IP yang Anda atur adalah alamat daftar putih yang diizinkan untuk diakses. Setelah Anda atur, hanya alamat IP ini yang dapat digunakan untuk mengakses API KEY Anda. Apakah Anda mengatur alamat IP host Anda?
Penemu Kuantitas - Mimpi KecilPada saat itu, Anda harus menginstal Python pada server yang di-host.
Penemu Kuantitas - Mimpi KecilKebijakan ini tidak melihat garis K, pengaturan yang tidak disengaja, kata ulangan karena mempengaruhi titik partikel, diatur untuk 1 menit.