FMZ 퀀트 플랫폼 전략 작성 기본 튜토리얼

저자:니나바다스, 창작: 2022-03-18 09:00:46, 업데이트: 2022-04-02 11:48:15

파이썬을 사용하여 데이터베이스에 직접 작성할 수 있습니다.

function onexit(){
    _G('profit', profit)
}
function main(){
    _G("num", 1); // Set a global variable num, with a value of 1 second 
    _G("num", "ok"); // Change a global variable num, whose value is the string "ok"
    _G("num", null); // Delete the global variable num 
    _G("num"); // Return the value of the global variable num; if it does not exist, return null

    var profit = 0
    if(_G('profit')){
        profit = _G('profit')
    }
}

_N

주문을 할 때, 가격과 부피의 정밀도는 일반적으로 제어해야합니다. FMZ는 저장해야하는 소수점을 결정하기 위해 _N 함수를 구축했습니다. 예를 들어,_N(4.253,2)4.25.

_C

플랫폼 API를 호출하는 것은 접근이 매번 성공할 것을 보장할 수 없으며, _C는 자동 재시험 함수입니다. 그것은 성공적으로 반환될 때까지 항상 지정된 함수를 호출합니다 (공함수가 null 또는 false를 반환하는 경우 재시험합니다); 예를 들어,_C(exchange.GetTicker), 3 초의 기본 재시험 간격으로, 당신은 _CDelay 함수를 호출 할 수 있습니다 재시험 간격을 제어하기 위해, 예를 들어 _CDelay ((1000), 즉 1 초로 _C 함수의 재시험 간격을 변경하는 것을 의미합니다.GetTicker(), exchange.GetDepth, GetTrade, GetRecords, GetAccount, GetOrders그리고GetOrder접근 실패로 인한 프로그램 중단을 방지하기 위해서입니다.

CancelOrder_C 함수를 사용할 수 없습니다. 왜냐하면 주문을 취소하는 데 실패하는 여러 가지 이유가 있기 때문입니다. 명령이 실행된 경우, 주문을 취소하면 실패를 반환하고 _C 함수를 사용하면 항상 다시 시도됩니다. _C 함수는 또한 매개 변수를 전달할 수 있으며 사용자 정의 함수에도 사용됩니다.

function main(){
    var ticker = _C(exchange.GetTicker)
    var depth = _C(exchange.GetDepth)
    var records = _C(exchange.GetRecords, PERIOD_D1) // Pass in the parameters
}

_D

전화_D()direct는 현재 시간 문자열을 반환합니다. 예를 들어:2019-08-15 03:46:14. 백테스트 중에 호출되면 백테스트 시간은 반환됩니다. 당신은 시간을 판단하기 위해 _D 함수를 사용할 수 있습니다. 예를 들어:_D().slice(11) > '09:00:00':. _D(timestamp, fmt), ms 타임 스탬프를 시간 문자열로 변환합니다._D(1565855310002)fmt 매개 변수는 시간 형식이고 기본은yyyy-MM-dd hh:mm:ss.

TA 지표 기능

일부 일반적으로 사용되는 지표 기능, 예를 들어 MA\MACD\KDJ\BOLL 및 FMZ 플랫폼에 의해 직접 내장 된 다른 일반적인 지표와 특정 지원 지표는 API 문서에서 찾을 수 있습니다.

표시기 함수를 사용하기 전에 K-선 길이를 판단하는 것이 좋습니다. 이전 K-선 길이가 계산에 필요한 기간을 충족 할 수 없을 때 결과는null예를 들어, 입력 K-선 길이가 100이고 MA를 계산하는 기간이 10일 경우, 첫 9값은 모두 0이고, 포머 9값 이후의 계산은 정상적으로 수행됩니다.

자바스크립트는 또한 전체 talib을 지원합니다.talib.CCI(records)참고하시기 바랍니다.http://ta-lib.org/function.html. 파이썬의 경우, 당신은 스스로 talib 라이브러리를 설치할 수 있습니다. 컴파일 필요성 때문에, 당신은 단순히 pip를 사용하여 설치할 수 없습니다. 당신은 스스로 설치 방법을 검색할 수 있습니다.

표시기 함수는 K-선 데이터를 전달할 수 있을 뿐만 아니라 모든 배열을 전달할 수 있습니다

function main(){
    var records = exchange.GetRecords(PERIOD_M30)
    if (records && records.length > 9) {
        var ma = TA.MA(records, 14)
        Log(ma)
    }
}

자바스크립트에서 일반적으로 사용되는 함수

여기 보트에서 자주 사용하는 자바스크립트 함수를 소개합니다.

  • Date.now()현재 시간표를 반환합니다.
  • parseFloat()문자열을 숫자로 옮깁니다.parseFloat("123.21");
  • parseInt()문자열을 정수로 변환합니다.
  • num.toString()숫자를 문자열로 옮기는데, 숫자의 변수 num가 있습니다.
  • JSON.parse()Json 문자열의 형식, 예를 들어JSON.parse(exchange.GetRawJSON());
  • 자바스크립트에는 일반적인 수학 연산과 같은 자체 수학 함수가 있습니다.Math.max(), Math.abs()등등; 참조:https://www.w3school.com.cn/jsref/jsref_obj_math.asp ;
  • FMZ가 사용하는 제3자 수학 라이브러리; 참조:https://mathjs.org/ ;
  • FMZ가 사용하는 자바스크립트 라이브러리를 강조하는 타사 라이브러리, 이는 지루한 Js 작업을 더 편리하게하고 지식을 가질 것이 좋습니다. 참조:https://underscorejs.org/.

템플릿

봇 전략 함수를 작성할 때 고려해야 할 많은 상황들이 있다. 예를 들어, 5개의 동전을 구매하는 것과 같은 간단한 함수, 우리는 고려해야 한다: 현재 잔액이 충분합니까? 주문 가격은 얼마입니까? 정밀도는 무엇입니까? 시장에 영향을 미치지 않기 위해 주문을 분할해야합니까? 미완성 주문을 처리하는 방법? 그리고 그런 몇 가지 세부 사항. 다른 전략에서, 이러한 함수는 동일하므로 템플릿으로 만들 수 있습니다. 공식 템플릿을 따라 사용자는 자신의 템플릿 전략을 작성할 수 있습니다. 여기에서는 FMZ가 공식적으로 출시 한 여러 가지 매우 일반적으로 사용되는 템플릿 클래스 라이브러리를 소개하여 사용자가 신속하게 자신의 전략을 작성할 수 있습니다.

자바스크립트 암호화폐 거래 라이브러리와 상품 선물 거래 라이브러리는 기본으로 내장되어 복사 할 필요가 없습니다. 다른 템플릿 라이브러리는 전략에서 찾을 수 있습니다.https://www.fmz.com/square/20/1). 템플릿 라이브러리를 복사하고 저장하고, 자신의 전략을 만들 때 사용할 라이브러리를 확인합니다.

자바스크립트 템플릿 함수는 모두$, 파이썬의 경우 모두ext.

암호화폐 거래 라이브러리

소스 코드 주소:https://www.fmz.com/strategy/10989, 이미 내장되어 있기 때문에 복사할 필요가 없습니다. 특정 함수 구현은 직접 소스 코드를 참조할 수 있습니다.

계정을 얻으세요:

$.GetAccount(e)

Log($.GetAccount()); // Obtain the account information, with fault tolerance function 
Log($.GetAcccount(exchanges[1]));

주문 & 취소:

$.Buy/Sell(e, amount)
$.Buy(0.3); // The main platform buys 0.3 coin
$.Sell(0.2); // The main platform sells 0.2 coin
$.Sell(exchanges[1], 0.1); // The secondary platform sells 0.1 coin
$.CancelPendingOrders(e, orderType)

$.CancelPendingOrders(); // Cancel all entrusted orders of the main platform 
$.CancelPendingOrders(ORDER_TYPE_BUY); // Cancel all buy orders of the main platform
$.CancelPendingOrders(exchanges[1]); // Cancel all orders of the secondary platform
$.CancelPendingOrders(exchanges[1], ORDER_TYPE_SELL); // Cancel all sell orders of the secondary platforom 

십자가를 심판하라

$.Cross(periodA, periodB) / $.Cross(arr1, arr2);

var n = $.Cross(15, 30);
var m = $.Cross([1,2,3,2.8,3.5], [3,1.9,2,5,0.6])
If n = 0, it means that the current prices of exactly 15-period EMA and 30-period EMA are equal. 
If n > 0, such as 5, it means that the 15-period EMA up-crosses the 30-period EMA by 5 periods (Bar)
If n < 0, such as -12, it means that the 15-period EMA down-crosses the 30-period EMA by 12 periods (Bar)
If it is not an array passed to the Cross, the function automatically obtains the K-line for moving average calculation.
If an array is passed to Cross, compare directly.

$.withdraw ((e, 통화, 주소, 금액, 수수료, 비밀번호) 함수:

$.withdraw(exchange, "btc", "0x.........", 1.0, 0.0001, "***")

재화 선물 거래 도서관

상품 선물 거래 라이브러리 사용은 매우 안정적이므로 권장됩니다. 소스 코드 주소:https://www.fmz.com/strategy/12961, 이미 내장되어 있기 때문에 복사할 필요가 없습니다. 특정 함수 구현은 직접 소스 코드를 참조할 수 있습니다.

CTA 라이브러리

  • 봇은 자동으로 주 연속 계약에 인덱스를 매핑합니다.
  • 자동으로 이동을 처리합니다.
  • rb000/rb888 같은 백테스트를 위한 매핑을 지정할 수 있습니다. rb 인덱스의 k 라인을 메인 연속 계약 거래로 매핑하는 것입니다.
  • 또한 다른 계약에 매핑할 수 있습니다. 예를 들어, rb000/MA888는 MA 주 연속 계약 거래를 위해 rb 지수의 K-라인을 살펴야합니다.
function main() {
    $.CTA("rb000,M000", function(r, mp) {
        if (r.length < 20) {
            return
        }
        var emaSlow = TA.EMA(r, 20)
        var emaFast = TA.EMA(r, 5)
        var cross = $.Cross(emaFast, emaSlow);
        if (mp <= 0 && cross > 2) {
            Log("Golden cross period", cross, "the moment position", mp);
            return 1
        } else if (mp >= 0 && cross < -2) {
            Log("Death cross period", cross, "the moment position", mp);
            return -1
        }
    });
}

호출 라이브러리의 예

function main() {
    var p = $.NewPositionManager();
    p.OpenShort("MA609", 1);
    p.OpenShort("MA701", 1);
    Log(p.GetPosition("MA609", PD_SHORT));
    Log(p.GetAccount());
    Log(p.Account());
    Sleep(60000 * 10);
    p.CoverAll("MA609");
    LogProfit(p.Profit());
    Log($.IsTrading("MA609"));
    // Multiple varieties use the trading queue to complete the non-blocking trading task
    var q = $.NewTaskQueue();
    q.pushTask(exchange, "MA701", "buy", 3, function(task, ret) {
        Log(task.desc, ret)
    })
    while (true) {
        // Call "poll" to execute the unfinished tasks in the spare time
        q.poll()
        Sleep(1000)
    }
}

그림 도서관

그리기 위한 원료 함수는 매우 복잡하기 때문에, 다음 튜토리얼에서 소개될 예정이며, 초보자는 그리기 라이브러리를 사용하여 매우 간단한 선 차트와 k-line 차트를 그리는 것을 권장합니다. 간단한 그림 라이브러리는 FMZ에 구축되어 있으며, 전략 편집 페이지에서 볼 수 있습니다. 라이브러리가 아직 구축되지 않은 경우 사용자는 라이브러리를 복사하고 저장하여 전략을 확인하고 사용할 필요가 있습니다.

img

자바스크립트 버전 그림 라이브러리의 복사 주소:https://www.fmz.com/strategy/27293파이썬 버전 그림 라이브러리의 복사 주소:https://www.fmz.com/strategy/39066

구체적인 예제:

function main() {
    while (true) {
        var ticker = exchange.GetTicker()
        if (ticker) {
            $.PlotLine('Last', ticker.Last) // You can draw two lines at the samw time, "Last" is the name of the line
            $.PlotLine('Buy', ticker.Buy)
        }
        Sleep(6000)
    }
}

전략 매개 변수 설정

Edit Strategy 아래에는 전략의 글로벌 변수와 동등한 전략 매개 변수 설정이 있으며 코드의 모든 위치에서 액세스 할 수 있습니다. 전략 매개 변수는 bot 페이지에서 수정 할 수 있으며 재시작 후 유효합니다. 따라서 일부 변수를 매개 변수로 설정 할 수 있으며 전략을 수정하지 않고 매개 변수를 수정 할 수 있습니다.
img

  • 변수 이름: 위 이미지의 숫자, 문자열, 콤박스 등, 전략 그룹에서 직접 사용할 수 있습니다.
  • 설명: 전략 인터페이스에서 매개 변수의 이름, 사용자가 매개 변수의 의미를 이해하는 데 더 편리합니다.
  • 언급: 매개 변수의 상세한 설명, 마우스가 매개 변수를 넘어서면 그에 따라 표시됩니다.
  • 종류: 파라미터의 종류, 나중에 자세히 소개 될 것입니다.
  • 기본값: a 매개 변수의 기본값.

문자열 유형과 숫자 유형을 이해하는 것은 매우 쉽습니다. 이것은 매우 일반적으로 사용되는 유형입니다. 컴보 박스는 매개 변수 인터페이스의 박스에 있는 옵션을 표시합니다. 예를 들어, SYMBOL 매개 변수를 설정할 수 있습니다.BTC|USDT|ETH콤보 박스에서 USDT를 선택하면 전략의 SYMBOL 값은 USDT 인덱스 1입니다. 선택지를 확인하는 것은 선택적인 체크 박스를 의미합니다. 확인하는 것은 사실이고 체크하지 않는 것은 거짓입니다.

설정에 대한 더 많은 매개 변수가 있습니다; 참조:https://www.fmz.com/api.

전략 역시험

전략의 양자화 작업이 완료되면 역사 데이터에 의해 테스트하여 전략의 수익 상황을 확인할 수 있습니다. 물론, 백테스트 결과는 참고용입니다. FMZ 퀀트 플랫폼은 암호화폐 스팟 및 선물, BitMEX 영구 계약, 상품 선물의 백테스트를 지원합니다. 자바스크립트 백테스트는 브라우저에서 실행됩니다. 파이썬 백테스트는 도커에 있으며 우리 플랫폼은 사용자에게 공개 도커를 제공합니다. MyLanguage의 백테스트는 설정에 대한 더 많은 매개 변수를 가지고 있으며 더 자세한 내용은 MyLanguage 문서에서 참조 할 수 있습니다.

백테스트 메커니즘

온바르 백테스트 메커니즘은 K 라인을 기반으로 하며, 즉, 각 K 라인은 백테스트를 위해 한 시점에 한 시점을 생성할 것이다. 그 시점에, 현재 K 라인의 오픈, 클로즈, 최고 및 최저 가격 및 거래량, 그리고 그 시점 이전의 역사 K 라인 정보를 포함한 정보를 얻을 수 있다. 이 유형의 메커니즘의 단점은 매우 분명하다: 한 K 라인에서만 한 번의 구매가 생성될 수 있다. 일반적으로 참조된 가격은 thr K 라인의 클로즈 가격이다. 또한, 한 K 라인은 단지 네 개의 가격, 즉 클로즈, 오픈, 최고 및 최저 가격을 얻을 수 있다. 한 K 라인에서의 가격 변화와 가장 높은 가격 또는 최저 가격의 변화 여부를 포함한 정보를 얻을 수 없다. 한 시간 K 라인 테스트를 예로 들어보자. 이 정보는 확실히 몇 초에 한 번 얻을 수 있으며, 명령들은 K 라인 백테스트를 마친 후 K 라인 트레이딩에서 수행될 것이다. 이 장점은 K 라인 코팅이 끝나고 가장 높은 가격 또는 최저 가격의 변화 여부를 파악하기 쉽지 않다.

FMZ의 백테스트는 시뮬레이션 레벨 백테스트와 실제 시장 레벨 백테스트 두 가지 유형을 포함합니다. 시뮬레이션 레벨 백테스트는 하층 K-라인 기간에 따라 시뮬레이션 틱을 생성 할 수 있으며 각 하층 K-라인 기간은 14 개의 백테스트 시간 포인트를 생성합니다.그러나 실제 시장 레벨 백테스트는 실제로 몇 초마다 틱을 수집하고, 이제 실제 깊이 (20 레벨 포함) 를 지원하고, tarde에 의해 실제 실행 거래를 지원합니다.날짜 볼륨은 상당히 크고 백테스트 속도는 매우 느리기 때문에 백테스트는 오랫동안 실행할 수 없습니다. FMZ 백테스트 메커니즘은 하나의 K 라인에 스타트게리의 여러 거래를 실현 할 수 있습니다. 거래가 폐쇄 가격으로만 실행 될 수있는 상황을 방지하고 백테스트 속도를 점점 더 목표로하고 관리합니다. 자세한 지침을 위해:https://www.fmz.com/bbs-topic/9126.

백테스트와 봇의 프레임워크는 동일하며, 둘 다 무한 루프입니다. 백테스트가 다른 백테스트 포인트로 건너뛰기 때문에 백테스트는 Sleep를 사용하지 않고 실행할 수 있으며, 하나의 루프가 끝나면 자동으로 다음 시간 포인트로 건너갑니다. 그러나 파이썬은 프로그램 메커니즘으로 인해Sleep(10)고착되지 않도록

백테스트 일치

백테스트 엔진은 사용자에 의해 배치된 주문 가격과 백테스트 시점의 시장 가격에 일치합니다. 구매 가격이 판매 가격보다 높으면 판매가 실행됩니다. 거래가 실행 될 수 없는 경우 대기 주문이 생성됩니다. 거래를 보장하기 위해 슬리핑이 추가되어야합니다. 백테스트 중에 포지션이 열리거나 닫히지 않으면 완료되지 않은 주문으로 인해 포지션이 동결되었는지 확인하십시오.

백테스트 페이지 설정

img

  • 1.Backtest의 페이지를 선택하고, 왼쪽에는 Edit Strategy 페이지가 있습니다.
  • 2) 백테스트의 시작 시간 및 종료 시간; 데이터가 불완전할 수 있는 경우, 백테스트는 데이터가 존재하는 시점부터 직접 시작될 수 있습니다.
  • 3.반기 테스트의 기본 기간GetRecords()함수: 코드에 기간 매개 변수를 지정할 수도 있습니다.
  • 4) 백트테스트 메커니즘 선택
  • 5.더 많은 백테스트 설정을 표시하거나 숨기는 것;
  • 6.대량의 데이터로 인한 브라우저의 장애를 방지하기 위해 로그 항목, 이익 로그 항목 및 차트 로그 항목의 최대
  • 7.K-라인에 따라 하층 틱이 생성하는 기간
  • 8.트레이닝 슬리프포인트
  • 9.실패 허용, API 요청이 잘못되었을 때 상황을 시뮬레이션하고 전략의 오류 허용 능력을 테스트합니다.
  • 10.시장 차트를 그리는지 여부; 만약 백테스트에서 TA 지표 기능을 사용한다면, 그 기능은 차트에 자동으로 표시되며, 구매와 판매도 표시됩니다.
  • 11.서비스 수수료의 설정
  • 12.매매 플랫폼 - 거래 쌍 및 자산
  • 13.backtest 매개 변수 설정; 매개 변수가 숫자이고 또한 1키 최적화를 지원하는 경우, 매개 변수는 자동으로 백테스트에서 특정 범위에서 통과됩니다.

봇과 백테스트의 차이점

  • 1.백테스트에서 유효한 시장 코팅은 GetTicker와 GetRecords에서만; GetDepth와 GetTrades와 같은 다른 코팅은 실제가 아닙니다 (데이터 양은 엄청납니다. 실제 시장 수준의 백테스트는 이미 데이터를 지원하지만 최신 데이터를 지원합니다.)
  • 2.백테스트에 추가된 플랫폼은 모두 분리된 계정입니다. 거래 쌍을 바로 전환하는 것은 지원되지 않습니다. 따라서 한 계정에 두 개의 거래 쌍을 운영할 수 없습니다.
  • 3.netwrok 요청은 백테스트에서 사용할 수 없습니다.
  • 4.IO확장은 백테스트에서 사용할 수 없으며 기본 API만 작동할 수 있습니다.
  • 5.백테스트에서 표준 데이터만 얻을 수 있고, 봇과 관련된 정보와 같은 데이터는 존재하지 않습니다.
  • 6.지연은 백트테스트에서 실행되지 않을 수 있으며, 동결된 주문의 상황에주의를 기울여야 합니다.
  • 7.in재화 선물의 백테스트, 시장 질서는 지원되지 않습니다.

전략 실수 용인 및 일반적인 실수

앞서 언급했듯이, 보트에서 API 인터페이스를 사용하여 액세스 및 반환 실패할 수 있습니다null; 당신이 여전히 데이터 사용 하는 경우, 오류를 보고 하 고 봇을 중지 합니다. 따라서, 전략은 오류 관용에서 잘해야 합니다.

잘못 을 용납 하는 일반적인 방법

흔 한 원인:

  • API 액세스 네트워크 오류; 인터페이스에 액세스하는 타임 아웃은 nunll을 반환하고 오류가 보고됩니다.

  • IP 제한, 주문 정확성, 액세스 빈도, 매개 변수 오류, 자산 부족, 시장 거래 실패, 실행된 주문 취소 등과 같은 플랫폼 제한 오류; 자세한 내용은 API 문서에서 잘못된 코드에 따라 검색 할 수 있습니다.

  • 플랫폼 데이터 반환 오류; 그것은 때때로 발생, 예를 들어 null 깊이, 지연 계정 정보 및 지연 주문 상태 등을 반환.

  • 프로그램 논리 오류

API의 반환 데이터를 사용하기 전에, 당신은 데이터가 무효인지 판단해야 합니다. 그리고 일반적인 방법은 다음과 같이 소개됩니다.

//1.judge the data is null and handle 
var ticker = exchange.GetTicker();
while(ticker == null){
     Log('ticker obtain error');
     ticker = exchange.GetTicker();
 }
 Log(ticker.Last);
 // 2. judge the data is not null, and use 
 var ticker = exchange.GetTicker();
 if(!ticker){
     Log(ticker.Last);
 }
 // 3.retry _C() function 
 var ticker = _C(exchange.GetTicker);
 Log(ticker.Last);
 // 4.try cache fault tolerance
 try{
     var ticker = exchange.GetTicker();
     Log(ticker.Last);
 }
 catch(err){
     Log('ticker obtain error');
 } 

오류에 대한 정보를 얻으려면GetLastError(), 그리고 마지막 시간 오류 정보의 문자열을 반환, 그리고 오류는 차이에 의해 처리 될 수 있습니다.

자주 묻는 질문

포럼의 상위 게시물에서 일반적인 오류 요약:https://www.fmz.com/bbs-topic/9158여기서 간단히 소개합니다. Ctrl + F를 사용하여 문제를 찾을 수 있습니다.

도커를 어떻게 배치해야 할까요?

도커를 추가하는 섹션에 자세한 소개가 있습니다.

누군가 나에게 유령 전략을 써줄 수 있을까요?

https://www.fmz.com/markets, 다른 사람들을 위해 전략을 작성하는 서비스를 제공하는 사람들이 있습니다. 또는 채팅 그룹에서 문의 할 수 있습니다. 이러한 종류의 서비스에 직접 연락해야한다는 점에 유의하십시오. 그리고 위험 또한 스스로 부담해야한다는 것을 알아야합니다.

모든 인터페이스가 액세스 할 때 타임아웃을 요청합니다.

접속되는 플랫폼 인터페이스의 타임아웃을 의미합니다. 타임아웃이 가끔 발생하면 문제가 아닙니다. 만약 타임아웃이 항상 요청되면 모든 네트워크에 액세스 할 수 없으며 해외 서버가 필요합니다.

ERR_INVALID_POSITION

백테스트에서 오류가 보고되면 일반적으로 작성 오류입니다. 포지션을 닫으려는 주문을 시도할 때 포지션이 없거나 포지션 부피가 충분하지 않으면 오류가 보고됩니다.

표시가 설정되지 않았습니다.

코드에는 계약 설정이 없습니다. 선물 플랫폼의 백테스트를 통해. 교환.SetContractType 함수를 참조하십시오.

BITMEX 429error,{error:{message:Rate limit exceeded retry in 1 seconds......}}

플랫폼 인터페이스의 접속 빈도는 너무 높습니다.

{status:6004, msg: 타임 스탬프 범위를 벗어났다}

서버의 시간표는 서버 업데이트의 시간 범위를 초과하고 초과된 시간은 너무 길 수 없습니다.

GetOrder ((455284455): 오류: 유효하지 않은 주문 ID 또는 주문 취소.

플랫폼의 주문이 취소되면 플랫폼은 더 이상 주문 정보를 유지하지 않으므로 정보를 얻을 수 없습니다.

코드:-1121, 메시지:

유효하지 않은 거래 쌍; 트레이딩 쌍 설정이 잘못되었는지 확인합니다.

비밀 키 해독 실패

APIKEY 분석이 실패합니다. APIKEY가 구성된 후 FMZ 비밀번호가 변경된 경우 FMZ에 플랫폼 페이지를 추가하고 플랫폼 APIKEY를 재구성하려고 시도합니다.

서명 유효하지 않습니다: 유효하지 않은 제출 시간 또는 잘못된 시간 형식

리눅스 서버를 사용하거나 이 문제가 발생하는 윈도우 시스템에서 시간 동기화 소프트웨어를 설치하는 것이 좋습니다.

왜 도커가 글로벌 프록시가 설정되어 있을 때 플랫폼 API에 접근할 수 없는 걸까요?

글로벌 프록시에는 프록시 도커 네트워크 포트가 없습니다. 지연 문제로 인해 해외 서버의 도커를 배포하는 것이 좋습니다.

어떻게 하면 FMZ에 올리지 않고 로컬로 전략을 저장할 수 있을까요?

파이썬을 사용해서 로컬 파일을 가져오면 됩니다. FMZ API에서 일반적으로 작성된 전략을 파일로 저장하고

#!python2.7

def run(runfile):
      with open(runfile,"r") as f:
            exec(f.read())
            
def main():
    run('my.py')

어떻게 플랫폼의 테스트넷에 또는 API 기본 주소를 변경하는 방법?

해당 API 기본 주소로 직접 전환하려면 exchange.SetBase(를 사용하십시오. 예를 들어:

exchange.SetBase("https://www.okex.me")

더 많은