Siehe auch: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) } }
xxs1xxs1Herr, ich habe deine Kleine modifiziert und die Ergebnisse sehen gut aus. Du gibst einen Tipp: Risiko und Optimierung. Ich habe das Gefühl, dass ich das nicht kann.
Der RegenbogenLehrerin: Wie vielfach hast du die Lehrstrategie für diesen Test verwendet?
Der RegenbogenIch habe das Video nicht gesehen, aber ich habe es gesehen.
Der Regenbogen/upload/asset/2152afd2a78355e8ce25b.png
Der RegenbogenBuy ((-1, 5): 400: {"code":-2019, "msg:"Margin is insufficient. "} Was soll das heißen?
Der RegenbogenLehrerin Little Dream: Kannst du mir deine WeChat-Nachricht geben?
Der RegenbogenKann diese Strategie auf einer echten Platte funktionieren?
Zylk9Macd kreuzt aufwärts, kauft nach unten und verkauft gleichzeitig umgekehrte Aufträge, nicht nur Gewinn, sondern auch Verlust.
13826543292Dank Gottes, das ist toll.
Die Erfinder quantifizieren - Kleine TräumeIch bin der Meinung, dass es eine gute Idee ist, diese Studie zu starten.
xxs1xxs1Kannst du eine Strategie finden, wie du die Lager aufschließst? Oder kann die Idee auch funktionieren. Die Strategie des direkten Stopps ist zu heftig.
Die Erfinder quantifizieren - Kleine TräumeIch hoffe, dass wir in Zukunft mehr Strategien teilen werden.
xxs1xxs1Ich kann nur sagen, Boss, du bist wirklich 666. Ich benutze nur den Gewinnvorteil. Ich bin auf der Suche nach einer Studie, um herauszufinden, ob das nicht der Fall ist. Derzeit ist die Schätzung nicht ausreichend, um die Gebühren zu bezahlen.
Die Erfinder quantifizieren - Kleine TräumeDas bedeutet, dass die Konten nicht ausreichend ausgestattet sind.
Die Erfinder quantifizieren - Kleine TräumeIm Allgemeinen ist der Hebel bei der Nachprüfung 10 mal höher.
Die Erfinder quantifizieren - Kleine TräumeX. X-Menge, ich sage auch nicht..... Aber was deine optimierte Version 666 angeht, wie hoch ist Sharp?
Der RegenbogenIst das ein Vertrag, oder ist es ein Hebel?
Die Erfinder quantifizieren - Kleine TräumeSie haben nicht genügend Geld für Ihr Konto, Sie haben nicht genügend Geld für Ihre Bestellung.
Die Erfinder quantifizieren - Kleine TräumeDas Programm wird von den Entwicklern und Anbietern der Software entwickelt.