Type/to search
8
Follow
1364
Followers
60 linhas de código para implementar uma ideia - estratégia de bottom-picking de contrato
Original
Created 2022-03-19 14:37:08  Updated 2024-12-02 21:32:02
 14
 3758

img

Estratégias que preferem mercados voláteis, como a estratégia de grade e a estratégia Martingale, têm desvantagens inerentes. Estratégias semelhantes foram testadas no mercado de contratos ETH por algum tempo. Também costumo conversar e compartilhar experiências com jogadores novos e antigos no FMZ.COM. Em relação a esse tipo de estratégia, há um ponto que concordo plenamente com o que um amigo disse. Ou seja, ao fazer contratos no círculo das criptomoedas, o risco de operar comprado é um pouco menor do que o de operar vendido. Ou, para simplificar, a pior queda possível é zero, mas o lado positivo é ilimitado.

Então, estratégias como Martingale e grid somente operar longo e não curto, e distribuir os riscos de seleção de fundo em um longo prazo seriam melhores do que fazer negociações bilaterais? Essa ideia parece boa, mas ninguém sabe se ela resistirá à prática. Mas pelo menos podemos simplesmente testar essa ideia. Então temos o tópico do artigo de hoje: elaborar uma estratégia de bottom-picking de contratos.

Desenvolvimento rápido baseado em FMZ.COM

O código para implementar essa ideia é realmente muito simples, graças à flexibilidade da plataforma, ao encapsulamento da interface, ao poderoso sistema de backtesting, etc. O código inteiro ocupa apenas 60 linhas (por questões de padrões de escrita de código, muitas abreviações não são usadas).

O design da estratégia é muito simples. De acordo com o preço inicial no início da lógica, ordens de compra são colocadas em intervalos para baixo. Se o preço continuar a cair, continue a colocar ordens de compra para continuar pescando no fundo. Em seguida, coloque uma ordem de fechamento com base no preço da posição mais uma certa diferença de lucro e aguarde o fechamento da posição. Se a posição for fechada, a lógica acima será repetida com o preço atual como preço inicial. A estratégia não mantém posições curtas, apenas posições longas.

Código fonte da estratégia:

javascript
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 design dos parâmetros também é muito simples:

img

Existem apenas esses poucos parâmetros.

Veja o efeito de backtest dessas dezenas de linhas de código

Basta definir o intervalo de tempo do backtest:

img

Execução de backtest:

img

img

Parece muito com uma estratégia do tipo grade ou Martin~. Os novos alunos que estão começando a aprender têm medo de estratégias longas e desanimam facilmente? Uma introdução breve e concisa às estratégias é mais adequada, facilitando a assimilação de ideias estratégicas e o aprendizado do design lógico.

O código de estratégia é apenas para fins de aprendizado e pesquisa.

Related Recommendations
Comment
All comments (14)

    img
    运行之后会报错然后一直在挂单,撤单无限循环,要如何解决

    4 years ago

    您好,这个是个教学策略,主要是讲解思路,可以在币安永续合约跑,跑OK需要对策略修改一下。上面问题的原因是下单量为小数了,OKX是要求下单量为合约整张数的。币安期货USDT本位永续合约可以是小数

    4 years ago

    好的谢谢我知道了

    4 years ago

    不客气,刚写支持FMZ量化。

    4 years ago

    这个策略只能在币安上跑吗?

    4 years ago

    都可以跑,就是参数调整下就行。

    4 years ago

    仓位增长系数是什么意思?

    4 years ago

    设置2就是2倍加仓。

    4 years ago

    怎么没有策略地址啊?复制策略源码不能用

    4 years ago

    这个策略只是一个教学策略,切勿实盘,回测研究学习可以。复制策略源码,还要加上策略参数,参数如文章上的截图。

    4 years ago

    img
    现在币安不能支持麦语言策略使用么,会提示用web什么的方式进行实时更新避免api封禁

    4 years ago

    您好,这个和策略无关的,您可以设置一下麦语言模版参数上的轮询间隔,设置大一些。如果您一个服务器上跑多个实盘,都访问一个交易所的接口,那么频率是会翻倍的,很容易就超频超限了。

    4 years ago

    img
    按道理我这个参数两个轮训一分钟最多120次,并没有超过币安限制每分钟1200次访问呀,有点不理解

    4 years ago

    是不是运行了多个实盘,如果一个服务器上运行2个实盘,频率就翻倍,以此类推的。

    4 years ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)