Artigo relacionado:https://www.fmz.com/bbs-topic/8479
/*backtest start: 2021-09-01 00:00:00 end: 2021-12-02 00:00:00 period: 1h basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}] */ var LONG = 1 var SHORT = -1 var IDLE = 0 function getPosition(positions, direction) { var ret = {Price : 0, Amount : 0, Type : ""} _.each(positions, function(pos) { if (pos.Type == direction) { ret = pos } }) return ret } function cancellAll() { while (true) { var orders = _C(exchange.GetOrders) if (orders.length == 0) { break } else { for (var i = 0 ; i < orders.length ; i++) { exchange.CancelOrder(orders[i].Id, orders[i]) Sleep(500) } } Sleep(500) } } function cover(tradeFunc, direction) { var mapDirection = {"closebuy": PD_LONG, "closesell": PD_SHORT} var positions = _C(exchange.GetPosition) var pos = getPosition(positions, mapDirection[direction]) if (pos.Amount > 0) { cancellAll() exchange.SetDirection(direction) if (tradeFunc(-1, pos.Amount)) { return true } else { return false } } return true } function main() { if (okexSimulate) { exchange.IO("simulate", true) // 切换到OKEX V5模拟盘测试 Log("切换到OKEX V5模拟盘") } exchange.SetContractType(ct) var state = IDLE var holdPrice = 0 var preTime = 0 while (true) { var r = _C(exchange.GetRecords) var l = r.length if (l < Math.max(ema1Period, ema2Period)) { Sleep(1000) continue } var ema1 = TA.EMA(r, ema1Period) var ema2 = TA.EMA(r, ema2Period) // 画图 $.PlotRecords(r, 'K线') if(preTime !== r[l - 1].Time){ $.PlotLine('ema1', ema1[l - 2], r[l - 2].Time) $.PlotLine('ema2', ema2[l - 2], r[l - 2].Time) $.PlotLine('ema1', ema1[l - 1], r[l - 1].Time) $.PlotLine('ema2', ema2[l - 1], r[l - 1].Time) preTime = r[l - 1].Time } else { $.PlotLine('ema1', ema1[l - 1], r[l - 1].Time) $.PlotLine('ema2', ema2[l - 1], r[l - 1].Time) } var up = (ema1[l - 2] > ema1[l - 3] && ema1[l - 4] > ema1[l - 3]) && (ema2[l - 2] > ema2[l - 3] && ema2[l - 4] > ema2[l - 3]) var down = (ema1[l - 2] < ema1[l - 3] && ema1[l - 4] < ema1[l - 3]) && (ema2[l - 2] < ema2[l - 3] && ema2[l - 4] < ema2[l - 3]) if (up && (state == SHORT || state == IDLE)) { if (state == SHORT && cover(exchange.Buy, "closesell")) { state = IDLE holdPrice = 0 $.PlotFlag(r[l - 1].Time, 'coverShort', 'CS') } exchange.SetDirection("buy") if (exchange.Buy(-1, amount)) { state = LONG holdPrice = r[l - 1].Close $.PlotFlag(r[l - 1].Time, 'openLong', 'L') } } else if (down && (state == LONG || state == IDLE)) { if (state == LONG && cover(exchange.Sell, "closebuy")) { state = IDLE holdPrice = 0 $.PlotFlag(r[l - 1].Time, 'coverLong', 'CL') } exchange.SetDirection("sell") if (exchange.Sell(-1, amount)) { state = SHORT holdPrice = r[l - 1].Close $.PlotFlag(r[l - 1].Time, 'openShort', 'S') } } // 止盈 if (state == LONG && r[l - 1].Close - holdPrice > profitTarget && cover(exchange.Sell, "closebuy")) { state = IDLE holdPrice = 0 $.PlotFlag(r[l - 1].Time, 'coverLong', 'CL') } else if (state == SHORT && holdPrice - r[l - 1].Close > profitTarget && cover(exchange.Buy, "closesell")) { state = IDLE holdPrice = 0 $.PlotFlag(r[l - 1].Time, 'coverShort', 'CS') } LogStatus(_D()) Sleep(500) } }
xxs1xxs1Mas, meu caro, eu fiz uma pequena modificação na tua, e os resultados parecem bons. Você dá conselhos? Risco e otimização. https://www.fmz.com/m/edit-strategy/359761
O céu e a terraMinha professora: Quantas vezes você usou essa estratégia de ensino?
O céu e a terraComeçou a tocar e não reagiu.
O céu e a terra/upload/asset/2152afd2a78355e8ce25b.png
O céu e a terraBuy ((-1, 5): 400: {"code":-2019, "msg:"Margin is insufficient. "} O que quer dizer?
O céu e a terraProfessora Little Dream, pode me dar um WeChat?
O céu e a terraA estratégia pode funcionar no disco real?
Ciclo9Macd cruzar compra para cima e venda para baixo ao mesmo tempo trocar o pedido, não só ganhar, apenas parar de perder como escrever
13826543292Graças a Deus, é muito bom.
Inventor quantificado - sonho pequenoO que você está fazendo aqui é muito ruim.
xxs1xxs1O chefe, você pode pensar em uma estratégia para desbloquear o estoque? A estratégia de parar a perda direta é muito forte.
Inventor quantificado - sonho pequenoMuito bem, mais estratégias serão compartilhadas no futuro, obrigado pelo apoio ao FMZ.
xxs1xxs1Só posso dizer que o senhor é o 666. Eu só estou usando a vantagem de lucro. Você vai testar o EOS. Eu estou fazendo um estudo para ver se o disco real não é possível. O disco real atualmente não é estimado para pagar as taxas de manutenção.
Inventor quantificado - sonho pequenoO que é que isso significa?
Inventor quantificado - sonho pequenoO efeito de alavancagem é geralmente 10 vezes maior quando o teste é retestado.
Inventor quantificado - sonho pequenoX. X quantidade, eu também não posso dizer... Porém, falando da sua versão optimizada do 666, qual é o tamanho do Sharp?
O céu e a terraÉ um contrato próprio, não é?
Inventor quantificado - sonho pequenoA sua conta não tem garantias suficientes, não tem dinheiro suficiente para fazer o pedido.
Inventor quantificado - sonho pequenoO código é redigido de acordo com as necessidades.