A estratégia de grade, estratégia Martingale, que preferem flutuações do mercado, têm suas próprias desvantagens, e eles foram testados por algum tempo no mercado de contratos ETH.FMZ.COMUma coisa sobre este tipo de estratégia é muito de acordo com um amigo, que é, como para os contratos, ir longo tem menos risco do que ir curto no mercado de moeda digital.
Então, será Martingale, Grid e outras estratégias apenas ir longo, não ir curto, e espalhar o risco de pesca de fundo em uma longa distância ser melhor do que posição bilateral? Esta ideia soa muito bem, mas ninguém sabe se pode ser colocado em prática.
O código para implementar essa ideia é realmente simples, graças à flexibilidade da plataforma, encapsulamento da interface, sistema de backtesting poderoso e assim por diante.
A ideia de design da estratégia é muito simples. Coloque a ordem de compra em intervalos de acordo com o preço inicial no início da lógica e, se o preço continuar a diminuir, continuaremos a colocar a ordem de compra e continuaremos a pescar no fundo. Em seguida, colocamos a ordem de posição de fechamento com base no preço da posição aumentando uma certa margem de lucro e esperamos o fechamento da posição. Se a posição for fechada, a lógica acima será repetida com o preço atual como o preço inicial. A estratégia não será curta para manter a posição, mas apenas longa.
Código fonte da estratégia:
function cancelAll() {
while (true) {
var orders = _C(exchange.GetOrders)
if (orders.length == 0) {
break
}
for (var i = 0 ; i < orders.length ; i++) {
exchange.CancelOrder(orders[i].Id, orders[i])
Sleep(interval)
}
}
}
function getLong(arr, kind) {
var ret = null
for (var i = 0 ; i < arr.length ; i++) {
if (arr[i].Type == (kind == "pos" ? PD_LONG : ORDER_TYPE_BUY)) {
ret = arr[i]
}
}
return ret
}
function pendingBidOrders(firstPrice) {
var index = 0
var amount = baseAmount
while (true) {
var pos = _C(exchange.GetPosition)
var price = firstPrice - index * baseSpacing
amount *= ratio
index++
exchange.SetDirection("buy")
exchange.Buy(price, amount)
if (pos.length != 0) {
var longPos = getLong(pos, "pos")
if (longPos) {
exchange.SetDirection("closebuy")
exchange.Sell(longPos.Price + profitTarget, longPos.Amount)
}
}
while (true) {
Sleep(interval)
if (!getLong(_C(exchange.GetOrders), "orders")) {
cancelAll()
break
}
if (!getLong(_C(exchange.GetPosition), "pos")) {
cancelAll()
return
}
}
}
}
function main() {
exchange.SetContractType(symbol)
while (true) {
pendingBidOrders(_C(exchange.GetTicker).Last)
}
}
O projeto dos parâmetros também é muito simples:
Com estes 6 parâmetros apenas.
Configure o intervalo de tempo de backtesting aleatoriamente:
Teste de retrocesso:
Parece muito a estratégia de grelha, estratégia de Martingale ~. Os alunos que são iniciantes geralmente têm medo da estratégia com código longo, que é fácil de ser dissuadido. Uma estratégia curta e concisa para começar é mais fácil e mais apropriada para entender as ideias de estratégia e aprender o design lógico.
O código de estratégia é apenas para fins de estudo e investigação.