Article détaillé: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) } }
Le numéro de série:Je vous ai modifié un peu, monsieur, et les résultats semblent bons. Vous me donnez des conseils? Risque et optimisation Il est également possible de modifier la page d'accueil de l'application.
Les trésors du cielMaîtresse: Combien de fois avez-vous utilisé cette méthode d'enseignement pour le test?
Les trésors du cielJe commence à jouer, je ne réagis pas.
Les trésors du cielLe montant de l'impôt sur le revenu est calculé à partir du montant de l'impôt sur le revenu.
Les trésors du cielBuy ((-1, 5): 400: {"code":-2019, "msg:" Marge est insuffisante. "} Que signifie ah ~ une minute à la fois
Les trésors du cielProfesseur Choi Dream: Pourriez-vous ajouter votre message, s'il vous plaît, parlez-moi en privé?
Les trésors du cielCette stratégie fonctionne-t-elle sur le disque dur?
cylk9macd croisé acheter vers le haut et vendre vers le bas en même temps en changeant les ordres, non seulement gagner, mais seulement arrêter de perdre comment écrire
13826543292Merci mon Dieu, c'est génial.
L'inventeur de la quantification - un petit rêveBien, cette étude a été menée.
Le numéro de série:Je ne sais pas si vous pouvez me donner une stratégie pour débloquer les sacs, ou si vous pouvez me donner une idée. La stratégie d'arrêt immédiat est trop forte. Nous voulons ajouter un blocage et attendre le prochain marché.
L'inventeur de la quantification - un petit rêveBien, la plateforme partagera plus de stratégies dans le futur, merci de soutenir FMZ.
Le numéro de série:Tout ce que je peux dire, monsieur, c'est que vous êtes bien le 666. Je n'ai fait que profiter de l'avantage. Je suis en train de faire des recherches pour voir si ce n'est pas le cas. Cette estimation actuelle est insuffisante pour payer les frais d'entretien.
L'inventeur de la quantification - un petit rêveIl y a aussi une petite quantité d'argent dans les comptes.
L'inventeur de la quantification - un petit rêveEn général, l'effet de levier est 10 fois plus élevé lorsque le retest est effectué.
L'inventeur de la quantification - un petit rêveX. X, je ne peux pas dire non plus. Mais en parlant de votre version optimisée de 666, quelle est la hauteur de Sharp?
Les trésors du cielC'est votre contrat, n'est-ce pas? C'est pas un levier?
L'inventeur de la quantification - un petit rêveVous n'avez pas assez de garantie, vous n'avez pas assez d'argent pour payer.
L'inventeur de la quantification - un petit rêveLe code est écrit en fonction des besoins.