/*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) } }
xxs1xxs1"이봐요, 선생님, 저는 당신의 작은 것을 조금 수정했습니다. 당신은 조언을 해주세요. 이 글은 이쪽에서 읽었습니다.
천하의 재물조영미 선생님: 시험에서 얼마나 많은 수업 전략을 사용하셨나요?
천하의 재물"이봐요, 이봐요, 이봐요.
천하의 재물/upload/asset/2152afd2a78355e8ce25b.png
천하의 재물Buy ((-1, 5): 400: {"코드":-2019, "msg:"마린이 부족하다. "} 무슨 뜻이야~ 한 분마다
천하의 재물소림 선생님, 微信을 추가해 주시겠습니까?
천하의 재물이 전략은 실제 디스크에서 실행될 수 있습니까?
실크9macd는 상향과 상향을 교차하고 동시에 상향과 상향을 판매합니다.
13826543292감사합니다. 정말 대단합니다.
발명가들의 수량화 - 작은 꿈이 연구는 매우 흥미롭습니다.
xxs1xxs1"이봐요, 노부님, 잠금을 풀기 위한 전략을 구해낼 수 있나요? 아니면 아이디어도 작동할까요?" 우리는 이 전략이 너무 강력하다는 것을 알고 있습니다. 우리는 다음 시장을 기다려야 합니다.
발명가들의 수량화 - 작은 꿈좋은 소식입니다. 앞으로 더 많은 전략을 공유할 것입니다.
xxs1xxs1당신이 진짜 666이라고 말할 수 있습니다. 저는 단지 이윤의 장점을 이용했습니다. 여러분은 EOS 테스트를 해 보세요. 올해부터 현재까지요. 저는 실제 거래가 불가능한지 알아보기 위해 연구를 하고 있습니다. 현재 실제 거래가 비용 지불에 충분하지 않다고 추정됩니다.
발명가들의 수량화 - 작은 꿈이 모든 것이 우리 국민의 자원을 위한 것입니다.
발명가들의 수량화 - 작은 꿈일반적으로 리테스트 시 리버리는 10배나 됩니다.
발명가들의 수량화 - 작은 꿈X.X 금액, 나는 또한 허용하지 않습니다. 하지만 당신의 최적화된 버전인 666에 대해선 Sharp가 얼마나 높을까요?
천하의 재물이 계약은 유가족 계약이 아닌 레버 계약입니다.
발명가들의 수량화 - 작은 꿈이 글은 유저들의 관심과 관심의 대상이 되고 있습니다.
발명가들의 수량화 - 작은 꿈요구에 따라 코드를 작성하십시오. 예제를 위해 전략 광장을 참조하십시오.