리소스 로딩... 로딩...

거래 터미널

FMZ 퀀트 트레이딩 플랫폼은 모듈화되고 사용자 정의 가능한무역당신은 자유롭게 다양한 데이터 모듈과 거래 기능 모듈을 추가 할 수 있습니다, 심지어 자신의 코드 모듈을 개발 (거래 터미널 플러그인). 매우 유연하고 무료 사용으로 수동 거래 및 반프로그램화 거래의 사용자를 크게 용이하게합니다. 트레이드 페이지의 다양한 모듈을 끌고 확대할 수 있으며 모듈에 묶인 거래 쌍 및 거래소의 설정을 수정 할 수 있으며 동일한 유형의 여러 모듈을 추가 할 수 있습니다.

FMZ 퀀트 트레이딩 플랫폼은 트레이딩 터미널의 기능을 개선하고 수동 거래를 더 쉽게하고 트레이딩 터미널의 플러그인 기능을 도입했습니다.

플러그인의 원리

원칙은디버깅 도구: 실행하기 위해 Trade 터미널 페이지의 도커에 코드 조각을 전송하고 차트와 테이블의 반환을 지원합니다 (디버깅 도구는 또한 업그레이드를 지원합니다).디버깅 도구, 그것은 단지 3 분 동안 실행 될 수 있습니다, 충전없이. 그것은 몇 가지 간단한 작은 기능을 실현 할 수 있습니다, 복잡한 전략은 여전히 라이브 거래에서 실행해야합니다.

플러그인 작성

거래 터미널 플러그인을 만들기 위해, 당신은 전략 유형을 설정할 수 있습니다:Trading plugin새로운 전략페이지. 거래 플러그인 지원JavaScript, Python, C++, 그리고MyLanguage.

플러그인 사용

이 플러그인은 코드를 일정 기간 동안 실행할 수 있고 몇 가지 간단한 작업을 수행할 수 있습니다.아이스버그 주문, 미뤄진 명령, 주문 취소그리고주문 계산같은디버깅 도구, 그것은 사용return결과를 반환할 수 있고, 차트와 테이블을 직접 반환할 수도 있습니다. 여기 몇 가지 예가 있습니다. 그리고 다른 함수들은 스스로 탐구할 수 있습니다.

  • 깊이 스냅샷으로 돌아가

    // Return to the depth snapshot
    function main() {
        var tbl = { 
            type: 'table', 
            title: 'snapshot of the order depth @ ' + _D(), 
            cols: ['#', 'Amount', 'Ask', 'Bid', 'Amount'], 
            rows: []
        }
        var d = exchange.GetDepth()
        for (var i = 0; i < Math.min(Math.min(d.Asks.length, d.Bids.length), 15); i++) {
            tbl.rows.push([i, d.Asks[i].Amount, d.Asks[i].Price+'#ff0000', d.Bids[i].Price+'#0000ff', d.Bids[i].Amount])
        }
        return tbl
    }
    
    def main():
        tbl = {
            "type": "table",
            "title": "snapshot of the order depth @ " + _D(),
            "cols": ["#", "Amount", "Ask", "Bid", "Amount"],
            "rows": []
        }
        d = exchange.GetDepth()
        for i in range(min(min(len(d["Asks"]), len(d["Bids"])), 15)):
            tbl["rows"].append([i, d["Asks"][i]["Amount"], str(d["Asks"][i]["Price"]) + "#FF0000", str(d["Bids"][i]["Price"]) + "#0000FF", d["Bids"][i]["Amount"]])
        return tbl
    
    void main() {
        json tbl = R"({
            "type": "table",
            "title": "abc",
            "cols": ["#", "Amount", "Ask", "Bid", "Amount"],
            "rows": []   
        })"_json;
        
        tbl["title"] = "snapshot of the order depth @" + _D(); 
        auto d = exchange.GetDepth();
        for(int i = 0; i < 5; i++) {
            tbl["rows"].push_back({format("%d", i), format("%f", d.Asks[i].Amount), format("%f #FF0000", d.Asks[i].Price), format("%f #0000FF", d.Bids[i].Price), format("%f", d.Bids[i].Amount)});
        }
        
        LogStatus("`" + tbl.dump() + "`");
        // C++ does not support "return json" to display the table, and you can create the live trading to display the table of the status bar
    }
    
  • 기간 간 스프레드를 적립합니다

    // Draw cross-period spreads
    var chart = { 
        __isStock: true,    
        title : { text : 'spread analysis chart'},                     
        xAxis: { type: 'datetime'},                 
        yAxis : {                                        
            title: {text: 'spread'},                   
            opposite: false                   
        },
        series : [                    
            {name : "diff", data : []}
        ]
    }  
    
    function main() {
        exchange.SetContractType('quarter')
        var recordsA = exchange.GetRecords(PERIOD_M5)
        exchange.SetContractType('this_week')
        var recordsB = exchange.GetRecords(PERIOD_M5)
        
        for(var i = 0; i < Math.min(recordsA.length, recordsB.length); i++){
            var diff = recordsA[recordsA.length - Math.min(recordsA.length, recordsB.length) + i].Close - recordsB[recordsB.length - Math.min(recordsA.length, recordsB.length) + i].Close
            chart.series[0].data.push([recordsA[recordsA.length - Math.min(recordsA.length, recordsB.length) + i].Time, diff])
        }
        return chart
    }
    
    chart = {
        "__isStock": True,
        "title": {"text": "spread analysis chart"},
        "xAxis": {"type": "datetime"},
        "yAxis": {
            "title": {"text": "spread"}, 
            "opposite": False
        }, 
        "series": [
            {"name": "diff", "data": []}
        ]
    }  
    
    def main():
        exchange.SetContractType("quarter")
        recordsA = exchange.GetRecords(PERIOD_M5)
        exchange.SetContractType("this_week")
        recordsB = exchange.GetRecords(PERIOD_M5)  
    
        for i in range(min(len(recordsA), len(recordsB))):
            diff = recordsA[len(recordsA) - min(len(recordsA), len(recordsB)) + i].Close - recordsB[len(recordsB) - min(len(recordsA), len(recordsB)) + i].Close
            chart["series"][0]["data"].append([recordsA[len(recordsA) - min(len(recordsA), len(recordsB)) + i]["Time"], diff])
        return chart
    
    // C++ does not support "return json" structure drawing
    

더 많은 전략에 다른 예가 있습니다. 예를 들어 작은 양으로 구매 / 판매.

사용 방법

  • 거래 단말기의 플러그인 모듈을 추가 Trade 터미널 페이지에서 모듈 추가 메뉴를 열고,전략 라이브러리현재 FMZ 계정 목록에서 자동으로 표시됩니다, 추가 할 플러그인을 찾아 Add을 클릭합니다.
  • 플러그인을 실행 Execute를 클릭하면 거래 단말기 플러그인이 실행됩니다. 플러그인은 로그를 표시하지 않지만 표시 테이블을 반환 할 수 있습니다.
  • 플러그인을 실행하는 시간 플러그인의 최대 실행 시간은 3분이고, 3분 이상 지나면 자동으로 실행을 멈추게 됩니다.
확장된 API 인터페이스 데이터 탐색