Recientemente, ha habido muchas noticias sobre el mercado de divisas digitales y el intercambio. Durante un tiempo, todos los amigos de la moneda estaban en un estado de pánico, preocupados por la seguridad de sus activos de blockchain. También hay muchos anuncios pequeños de 10% y 20% de descuento para monedas de segunda mano inactivas en varios grupos del mercado de divisas. Hay muchos tipos de estrategias de money printer
, que no es fácil de encontrar.
Perdóname por mi pobre inglés.
Por ejemplo, mediante la cobertura contractual, podemos obtener ganancias mientras hacemos pérdidas tanto como sea posible.
Estrategia DEMO
/*backtest
start: 2020-09-30 00:00:00
end: 2020-10-19 00:00:00
period: 1d
basePeriod: 1m
exchanges: [{"eid":"Futures_OKCoin","currency":"BTC_USD"},{"eid":"Futures_HuobiDM","currency":"BTC_USD"}]
*/
var step = 20 // Step length of adding position price
function main() {
var pos1 = []
var pos2 = []
var ct = "quarter" // For example, quarterly contract
exchanges[0].SetContractType(ct)
exchanges[1].SetContractType(ct)
var diff = 0
while (true) {
var r1 = exchanges[0].Go("GetDepth") // Exchange A
var r2 = exchanges[1].Go("GetDepth") // Exchange B
var depth1 = r1.wait()
var depth2 = r2.wait()
if(depth1.Bids[0].Price - depth2.Asks[0].Price > diff) {
if(pos1.length == 0 && pos2.length == 0) {
var info1 = $.OpenShort(exchanges[0], ct, 10)
var info2 = $.OpenLong(exchanges[1], ct, 10)
pos1 = _C(exchanges[0].GetPosition)
pos2 = _C(exchanges[1].GetPosition)
diff = depth1.Bids[0].Price - depth2.Asks[0].Price
} else if(depth1.Bids[0].Price - depth2.Asks[0].Price > diff + step) {
var info1 = $.OpenShort(exchanges[0], ct, 10)
var info2 = $.OpenLong(exchanges[1], ct, 10)
pos1 = _C(exchanges[0].GetPosition)
pos2 = _C(exchanges[1].GetPosition)
diff = depth1.Bids[0].Price - depth2.Asks[0].Price
}
}
if(pos1.length != 0 && pos1[0].Profit < -0.001) {
var info1 = $.CoverShort(exchanges[0], ct, pos1[0].Amount)
var info2 = $.CoverLong(exchanges[1], ct, pos2[0].Amount)
pos1 = _C(exchanges[0].GetPosition)
pos2 = _C(exchanges[1].GetPosition)
diff = 0
}
LogStatus(_D(), diff)
Sleep(500)
}
}
La lógica de la estrategia:
La estrategia comienza a iniciar las variables de posición pos1 y pos2 como matriz vacía. La estrategia entra en el bucle principal. Al comienzo de cada bucle, se obtienen los datos de profundidad (datos del libro de pedidos) de los contratos de los dos intercambios para calcular la diferencia de precio. Si la diferencia de precio continúa expandiéndose y más allá de la
El principio es muy simple, es decir, cuando la diferencia de precio es grande, entonces desabrochamos. Cuando esperamos la pérdida de la pérdida esperada de la posición de cambio, cerramos la posición. Si la diferencia de precio continúa expandiéndose, seguimos agregando posiciones para cubrir hasta la pérdida esperada de la pérdida de posición de cambio. Los parámetros importantes son: la cantidad de pérdida para cerrar la posición, la longitud del paso de agregar la diferencia de precio de posición y la cantidad de cobertura.
La estrategia es bastante rudimentaria, solo para verificar la idea, el bot real no está disponible. Todavía hay muchos problemas a considerar para un bot real, por ejemplo, si el contrato a negociar es estándar de moneda o estándar U, y si los multiplicadores de diferentes contratos en los intercambios A y B son los mismos.
De esta manera, un intercambio perderá dinero, y la parte de pérdida se convertirá en la parte de ganancia de otro intercambio (diferencia de precio, puede haber pérdida de cobertura, es decir, la pérdida es mayor que la ganancia).$.OverShort
, $.OpenShort
, estas son las funciones de interfaz de la plantilla. Para ejecutar la demostración anterior, debe hacer referencia a esta biblioteca de clases.
El prototipo de estrategia anterior es solo la exploración más simple, y puede haber más detalles a considerar en la operación real, por ejemplo, la cantidad de posiciones se puede diseñar de forma incremental.