एफएमजेड क्वांट प्लेटफॉर्म के लिए प्राथमिक ट्यूटोरियल रणनीति लेखन

लेखक:निनाबादास, बनाया गयाः 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

प्लेटफ़ॉर्म एपीआई को कॉल करने से हर बार एक्सेस सफल होने की गारंटी नहीं दी जा सकती है, और _C एक स्वचालित पुनः प्रयास फ़ंक्शन है। यह हमेशा निर्दिष्ट फ़ंक्शन को तब तक कॉल करेगा जब तक कि यह सफलतापूर्वक वापस न हो जाए (फंक्शन पुनः प्रयास करेगा यदि यह शून्य या गलत लौटाता है); उदाहरण के लिए,_C(exchange.GetTicker), 3 सेकंड के डिफ़ॉल्ट पुनः प्रयास अंतराल के साथ, और आप _CDelay फ़ंक्शन को पुनः प्रयास अंतराल को नियंत्रित करने के लिए कॉल कर सकते हैं, जैसे _CDelay(1000), जिसका अर्थ है कि _C फ़ंक्शन पुनः प्रयास अंतराल को 1 सेकंड में बदलना।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()सीधे वर्तमान समय स्ट्रिंग लौटाएगा, जैसेः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.

टीए संकेतक कार्य

कुछ आम तौर पर इस्तेमाल किए जाने वाले संकेतक कार्यों के लिए, जैसे कि MA\MACD\KDJ\BOLL और अन्य सामान्य संकेतक, जिन्हें सीधे FMZ प्लेटफॉर्म द्वारा निर्मित किया गया है, और विशिष्ट समर्थित संकेतक एपीआई दस्तावेज़ में पाए जा सकते हैं।

संकेतक कार्यों का उपयोग करने से पहले, K-लाइन की लंबाई का न्याय करना सबसे अच्छा है। जब पिछले K-लाइन की लंबाई गणना के लिए आवश्यक अवधि को पूरा नहीं कर सकती है, तो परिणाम हैnullउदाहरण के लिए, यदि इनपुट के-लाइन लंबाई 100 है और एमए की गणना के लिए अवधि 10 है, तो पहले 9 मान सभी शून्य हैं, और फॉर्म 9 मानों के बाद गणना सामान्य रूप से की जाएगी।

जावास्क्रिप्ट भी पूर्ण तालिब का समर्थन करता है, एक तृतीय-पक्ष पुस्तकालय के रूप में, जैसे कि आह्वान विधि के साथtalib.CCI(records). कृपया देखेंhttp://ta-lib.org/function.html. पायथन के लिए, आप तालिब लाइब्रेरी को स्वयं स्थापित कर सकते हैं. संकलन की आवश्यकता के कारण, आप बस स्थापित करने के लिए पाइप का उपयोग नहीं कर सकते. आप स्थापना विधि के लिए स्वयं खोज कर सकते हैं.

संकेतक कार्य न केवल 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 ;
  • एफएमजेड द्वारा प्रयुक्त तृतीय पक्ष गणित पुस्तकालय; संदर्भःhttps://mathjs.org/ ;
  • एफएमजेड द्वारा उपयोग किए जाने वाले जावास्क्रिप्ट के तीसरे पक्ष के हाइलाइट लाइब्रेरी, जिसके बारे में ज्ञान रखने की सिफारिश की जाती है और जो थकाऊ जेएस संचालन को अधिक सुविधाजनक बनाता है; संदर्भःhttps://underscorejs.org/.

टेम्पलेट

बॉट रणनीति फ़ंक्शन लिखने के दौरान कई स्थितियों पर विचार करने की आवश्यकता होती है। उदाहरण के लिए, 5 सिक्के खरीदने जैसे एक सरल फ़ंक्शन पर विचार करने की आवश्यकता हैः क्या वर्तमान शेष राशि पर्याप्त है? ऑर्डर की कीमत कितनी है? सटीकता क्या है? क्या आपको बाजार को प्रभावित करने से बचने के लिए ऑर्डर विभाजित करने की आवश्यकता है? अधूरे ऑर्डर से कैसे निपटें? और कुछ विवरण जैसे। विभिन्न रणनीतियों में, ये कार्य समान हैं, इसलिए आप उन्हें एक टेम्पलेट में बना सकते हैं। आधिकारिक टेम्पलेट का पालन करके, उपयोगकर्ता अपनी टेम्पलेट रणनीतियों को भी लिख सकते हैं। यहां हम एफएमजेड द्वारा आधिकारिक तौर पर जारी कई बहुत ही उपयोग किए जाने वाले टेम्पलेट क्लास लाइब्रेरी पेश करेंगे, ताकि उपयोगकर्ता अपनी रणनीतियों को जल्दी से लिख सकें।

जावास्क्रिप्ट क्रिप्टोक्यूरेंसी ट्रेडिंग लाइब्रेरी और कमोडिटी फ्यूचर्स ट्रेडिंग लाइब्रेरी डिफ़ॉल्ट रूप से निर्मित हैं और कॉपी करने की आवश्यकता नहीं है। अन्य टेम्पलेट लाइब्रेरी रणनीति पर पाई जा सकती हैं Square (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, जो पहले से ही अंतर्निहित है, इसलिए कॉपी करने की कोई आवश्यकता नहीं है। विशिष्ट फ़ंक्शन कार्यान्वयन सीधे स्रोत कोड को संदर्भित कर सकते हैं।

सीटीए पुस्तकालय

  • बॉट स्वचालित रूप से मुख्य निरंतर अनुबंध के लिए सूचकांक मैप करेगा;
  • यह स्वचालित रूप से कदम संभाल जाएगा;
  • आप बैकटेस्ट के लिए मैपिंग निर्दिष्ट कर सकते हैं, जैसे कि 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)
    }
}

चित्र पुस्तकालय

ड्राइंग के लिए कच्चे कार्यों के लिए बहुत जटिल हैं, जो अगले ट्यूटोरियल में पेश किया जाएगा, हम शुरुआती ड्राइंग पुस्तकालय का उपयोग करने की सलाह देते हैं, बहुत सरल रेखा चार्ट और के-लाइन चार्ट, आदि आकर्षित करने के लिए। सरल ड्राइंग पुस्तकालय एफएमजेड में बनाया गया है, जो रणनीति संपादन पृष्ठ पर देखा जा सकता है; यदि पुस्तकालय में अभी तक निर्मित नहीं है, तो उपयोगकर्ताओं को रणनीति में पुस्तकालय की जांच और उपयोग करने के लिए कॉपी और सहेजने की आवश्यकता है।

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)
    }
}

रणनीति पैरामीटर सेटिंग्स

संपादित रणनीति के तहत, रणनीति पैरामीटर सेटिंग्स हैं, जो रणनीति के वैश्विक चर के बराबर हैं, और कोड में किसी भी स्थान पर एक्सेस की जा सकती हैं। रणनीति पैरामीटर को बॉट पृष्ठ पर संशोधित किया जा सकता है, और वे पुनरारंभ के बाद मान्य होंगे। इसलिए, कुछ चर को मापदंडों पर सेट किया जा सकता है, और मापदंडों को रणनीति को संशोधित किए बिना संशोधित किया जा सकता है।
img

  • चर नाम: अर्थात् उपरोक्त चित्र में संख्या, स्ट्रिंग और कॉम्बॉक्स आदि,जिसे सीधे रणनीति समूह में इस्तेमाल किया जा सकता है।
  • विवरण: रणनीति इंटरफेस पर एक पैरामीटर का नाम, उपयोगकर्ताओं के लिए पैरामीटर के अर्थ को समझने के लिए अधिक सुविधाजनक।
  • टिप्पणियाँ: एक पैरामीटर का विस्तृत विवरण, जो माउस के पैरामीटर के ऊपर होने पर तदनुसार प्रदर्शित किया जाएगा।
  • प्रकार: एक पैरामीटर का प्रकार, जिसे बाद में विस्तार से पेश किया जाएगा।
  • डिफ़ॉल्ट: a पैरामीटर का डिफ़ॉल्ट।

स्ट्रिंग प्रकार और संख्या प्रकार को समझना बहुत आसान है। जो बहुत आम तौर पर उपयोग किए जाने वाले प्रकार हैं। कॉम्बो बॉक्स पैरामीटर इंटरफ़ेस पर बॉक्स में विकल्प प्रदर्शित करेगा। उदाहरण के लिए, आप SYMBOL पैरामीटर को सेट कर सकते हैंBTC|USDT|ETHकॉम्बो बॉक्स में; यदि आप पृष्ठ पर बॉक्स में USDT चुनते हैं, तो रणनीति में SYMBOL मान USDT इंडेक्स 1 है। चेक विकल्प एक वैकल्पिक चेक बॉक्स को संदर्भित करता है; चेक का अर्थ है सही, जबकि कोई चेक का अर्थ है गलत।

सेटिंग्स के लिए अधिक पैरामीटर हैं; संदर्भःhttps://www.fmz.com/api.

रणनीति बैकटेस्ट

जब किसी रणनीति का क्वांटिज़ेशन समाप्त हो जाता है, तो आप इतिहास डेटा द्वारा इसका परीक्षण कर सकते हैं, ताकि इतिहास की तारीख में रणनीति की लाभ स्थिति की जांच की जा सके। बेशक, बैकटेस्ट परिणाम केवल संदर्भ के लिए है। एफएमजेड क्वांट प्लेटफॉर्म क्रिप्टोक्यूरेंसी स्पॉट और वायदा, बिटमेक्स स्थायी अनुबंध, कमोडिटी वायदा के बैकटेस्ट का समर्थन करता है, जिसमें केवल मुख्यधारा के क्रिप्टोक्यूरेंसी का समर्थन किया जाता है। जावास्क्रिप्ट बैकटेस्ट ब्राउज़र पर चलाया जाता है; पायथन बैकटेस्ट डॉकर पर है, और हमारा मंच उपयोगकर्ताओं के लिए सार्वजनिक डॉकर प्रदान करता है। माइलैंग्वेज के बैकटेस्ट में सेटिंग्स के लिए अधिक पैरामीटर हैं, और अधिक विवरण माइलैंग्वेज के दस्तावेज़ में संदर्भित किए जा सकते हैं।

बैक्टेस्ट तंत्र

ऑनबार बैकटेस्ट तंत्र के-लाइन पर आधारित है, यानी प्रत्येक के-लाइन बैकटेस्ट के लिए समय में एक बिंदु उत्पन्न करेगी। समय के बिंदु पर, आप वर्तमान के-लाइन की खुली, बंद, उच्चतम और सबसे कम कीमतों और ट्रेडिंग वॉल्यूम सहित जानकारी प्राप्त कर सकते हैं, साथ ही बिंदु से पहले इतिहास के-लाइन जानकारी भी प्राप्त कर सकते हैं। इस प्रकार के तंत्र की कमी बहुत स्पष्ट हैः एक के-लाइन पर केवल एक खरीद उत्पन्न की जा सकती है; आमतौर पर संदर्भित मूल्य थ्र के-लाइन की बंद कीमत है। इसके अलावा, एक के-लाइन केवल चार कीमतें प्राप्त कर सकती है, अर्थात् बंद, खुली, उच्चतम और सबसे कम कीमतें; एक के-लाइन में कीमतें कैसे बदलती हैं और क्या सबसे अधिक कीमत या सबसे कम कीमत पहले बदलती है, इस जानकारी को प्राप्त नहीं किया जा सकता है। एक घंटे के बाजार बॉट-लाइन परीक्षण को एक उदाहरण के रूप में लें। जानकारी निश्चित रूप से हर कई सेकंड में प्राप्त की जाती है, और आदेश के-लाइन पर वापस ट्रेडिंग समाप्त होने के बाद आयोजित किए जाएंगे।

एफएमजेड पर बैकटेस्ट में दो प्रकार होते हैं, अर्थात् सिमुलेशन लेवल बैकटेस्ट और रियल मार्केट लेवल बैकटेस्ट। सिमुलेशन लेवल बैकटेस्ट अंडरलेयर के-लाइन अवधि के अनुसार सिमुलेटेड टिक उत्पन्न कर सकता है, और प्रत्येक अंडरलेयर के-लाइन अवधि 14 बैकटेस्ट समय बिंदु उत्पन्न करेगी।हालांकि, वास्तविक बाजार स्तर बैकटेस्ट वास्तव में प्रत्येक कई सेकंड में टिक एकत्र करेगा, और अब यह वास्तविक गहराई (20 स्तरों सहित) का समर्थन करता है, और देर से वास्तविक निष्पादन व्यापार।तारीख की मात्रा काफी बड़ी है, और बैकटेस्ट की गति बहुत धीमी है, इसलिए बैकटेस्ट को लंबे समय में नहीं चलाया जा सकता है। एफएमजेड बैकटेस्ट तंत्र एक के-लाइन पर स्टार्टेजी के कई ट्रेडों को महसूस कर सकता है, ताकि ऐसी स्थिति को रोका जा सके कि व्यापार केवल बंद मूल्य द्वारा निष्पादित किया जा सके, और बैकटेस्ट की गति को भी तेजी से लक्षित और देखभाल करें। अधिक विस्तृत निर्देशों के लिएःhttps://www.fmz.com/bbs-topic/9126.

बैकटेस्ट और बॉट का ढांचा एक ही है, दोनों एक अनंत लूप हैं। क्योंकि बैकटेस्ट अलग-अलग बैकटेस्ट बिंदुओं पर कूदना है, बैकटेस्ट को Sleep का उपयोग किए बिना चलाया जा सकता है, और यह स्वचालित रूप से अगले समय बिंदु पर कूद जाएगा जब एक लूप खत्म हो जाएगा। हालांकि, पायथन को प्रोग्राम तंत्र के कारण,Sleep(10), फंसने से बचने के लिए।

बैकटेस्ट मिलान

बैकटेस्ट इंजन उपयोगकर्ता द्वारा रखे गए ऑर्डर मूल्य और बैकटेस्ट समय बिंदु पर बाजार मूल्य से मेल खाएगा। यदि खरीद मूल्य एक से अधिक है, तो एक बेच दिया जाएगा। यदि ट्रेडिंग निष्पादित नहीं की जा सकती है, तो एक लंबित ऑर्डर उत्पन्न किया जाएगा। ट्रेडिंग सुनिश्चित करने के लिए स्लिपेज जोड़ने की आवश्यकता है। यदि बैकटेस्ट के दौरान स्थिति को खोला या बंद नहीं किया जा सकता है, तो जांचें कि क्या अधूरे आदेशों के कारण स्थिति जमे हुए है।

बैकटेस्ट पृष्ठ सेटिंग्स

img

  • 1. Backtest के पृष्ठ का चयन करना, जिसके बाईं ओर Edit Strategy पृष्ठ है;
  • 2.बैकटेस्ट की शुरुआत और समाप्ति का समय; डेटा अधूरे हो सकते हैं, बैकटेस्ट सीधे उस समय से शुरू हो सकता है जब डेटा मौजूद है;
  • 3.बैकटेस्टिंग की डिफ़ॉल्ट अवधिGetRecords()function; आप कोड में एक अवधि पैरामीटर भी निर्दिष्ट कर सकते हैं;
  • 4.बैकटेस्ट तंत्र चुनना;
  • 5.अधिक बैकटेस्ट सेटिंग्स दिखाना या छिपाना;
  • 6.अत्यधिक मात्रा में डेटा के कारण ब्राउज़र के टूटने से बचाने के लिए लॉग आइटम, लाभ लॉग आइटम और चार्ट लॉग आइटम की अधिकतम संख्या;
  • 7.के-लाइन के अनुसार अंडरलेयर टिक द्वारा उत्पन्न अवधि;
  • 8.ट्रैनिंग स्लिपपॉइंट;
  • 9.फेल्ट टॉलरेंस, जो एपीआई अनुरोध गलत होने की स्थिति का अनुकरण करेगा और रणनीति की फेल्ट टॉलरेंस क्षमता का परीक्षण करेगा;
  • 10.बाजार चार्ट बनाना है या नहीं; यदि बैकटेस्ट में TA इंडिकेटर फ़ंक्शन का प्रयोग किया जाता है, तो फ़ंक्शन स्वचालित रूप से चार्ट में दिखाया जाएगा, और खरीद और बिक्री को भी चिह्नित किया जाएगा;
  • 11.सेवा शुल्क निर्धारण;
  • 12. जोड़ने वाले प्लेटफार्म - व्यापारिक जोड़े और परिसंपत्तियां;
  • 13.backtest पैरामीटर सेटिंग्स; यदि पैरामीटर संख्याएं हैं और एक-कुंजी अनुकूलन का भी समर्थन करते हैं, तो पैरामीटर स्वचालित रूप से बैकटेस्ट में एक निश्चित सीमा में पार किए जाएंगे।

बॉट और बैकटेस्ट के बीच अंतर

  • 1.बैकटेस्ट में केवल वैध बाजार उद्धरण केवल GetTicker और GetRecords से हैं; अन्य जैसे GetDepth और GetTrades वास्तविक नहीं हैं (डेटा की मात्रा बहुत बड़ी है, और हालांकि वास्तविक बाजार स्तर का बैकटेस्ट अब पहले से ही डेटा का समर्थन करता है, यह केवल नवीनतम डेटा का समर्थन करता है);
  • 2.बैकटेस्ट में जोड़े गए प्लेटफार्म सभी अलग-अलग खाते हैं; ट्रेडिंग जोड़े को सीधे स्विच करना समर्थित नहीं है; इसलिए आप एक खाते में दो ट्रेडिंग जोड़े संचालित नहीं कर सकते;
  • 3.netwrok अनुरोध का उपयोग बैकटेस्ट में नहीं किया जा सकता है;
  • 4.IOबैकटेस्ट में एक्सटेंशन का प्रयोग नहीं किया जा सकता है और केवल बुनियादी एपीआई का ही संचालन किया जा सकता है।
  • 5.बैकटेस्ट में केवल मानक डेटा प्राप्त किया जा सकता है, और बॉट से संबंधित सूचना जैसे डेटा मौजूद नहीं हैं;
  • 6.बैकटेस्ट में विलंब नहीं हो सकता है, और जमे हुए आदेशों की स्थिति पर ध्यान दें;
  • 7.inकमोडिटी फ्यूचर्स के बैकटेस्ट के लिए, बाजार व्यवस्था का समर्थन नहीं किया जाता है।

रणनीति त्रुटि सहिष्णुता और आम त्रुटियां

जैसा कि हम पहले उल्लेख किया है, बॉट में एक एपीआई इंटरफ़ेस का उपयोग कर पहुँच और वापसी करने में विफल हो सकता हैnull; यदि आप अभी भी इसके डेटा का उपयोग करते हैं, तो एक त्रुटि की सूचना दी जाएगी और बॉट बंद हो जाएगा। इसलिए, रणनीतियों को त्रुटि सहिष्णुता में अच्छा प्रदर्शन करने की आवश्यकता है।

दोष सहन करने के सामान्य तरीके

आम कारण:

  • एपीआई पहुँच नेटवर्क त्रुटि; इंटरफ़ेस तक पहुँचने का टाइमआउट null लौटाता है, और एक त्रुटि की सूचना दी जाएगी.

  • प्लेटफ़ॉर्म से सीमा त्रुटि, जैसे कि आईपी सीमा, आदेश सटीकता, पहुंच आवृत्ति, पैरामीटर त्रुटि, परिसंपत्ति की कमी, बाजार व्यापार विफलता, निष्पादित आदेशों का रद्द करना आदि; विवरण गलत कोड के अनुसार एपीआई दस्तावेज़ में क्वेरी किया जा सकता है।

  • प्लेटफ़ॉर्म डेटा रिटर्न त्रुटि; यह कभी-कभी होता है, जैसे कि शून्य गहराई, विलंबित खाता जानकारी और विलंबित आदेश स्थिति आदि को वापस करना।

  • प्रोग्राम तर्क त्रुटि।

इससे पहले कि आप एपीआई के लौटे डेटा का उपयोग करें, आपको यह न्याय करना चाहिए कि डेटा शून्य है या नहीं, और सामान्य विधियों को निम्नानुसार पेश किया जाता हैः

//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

यदि बैकटेस्ट में कोई त्रुटि दर्ज की जाती है, तो यह आम तौर पर एक लेखन त्रुटि होती है; जब आप किसी स्थिति को बंद करने के लिए ऑर्डर देने का प्रयास करते हैं, जब कोई स्थिति नहीं होती है या स्थिति की मात्रा पर्याप्त नहीं होती है, तो एक त्रुटि दर्ज की जाएगी।

प्रतीक सेट नहीं

कोड में कोई अनुबंध सेट नहीं है, वायदा प्लेटफार्मों के बैकटेस्ट के दौरान।

BITMEX 429error,{error:{message:Rate limit exceeded re-try in 1 seconds......}}

प्लेटफार्म इंटरफेस की पहुँच आवृत्ति बहुत अधिक है।

{status:6004,msg:टाइमस्टैम्प सीमा से बाहर है}

सर्वर का टाइमस्टैम्प सर्वर को अपडेट करने के समय सीमा से अधिक है, और अधिक समय बहुत लंबा नहीं हो सकता है.

GetOrder ((455284455): त्रुटिः अमान्य आदेश आईडी या आदेश रद्द कर दिया गया.

यदि किसी प्लेटफ़ॉर्म का ऑर्डर रद्द कर दिया जाता है, तो प्लेटफ़ॉर्म अब ऑर्डर की जानकारी नहीं रखेगा, इसलिए जानकारी प्राप्त नहीं की जा सकती है।

GetOrders: 400: {code:-1121,msg:अमान्य प्रतीक.}

अमान्य ट्रेडिंग जोड़ी; जांचें कि क्या ट्रेडिंग जोड़ी सेटिंग गलत है.

गुप्त कुंजी डिक्रिप्ट विफल रहा

APIKEY पार्सिंग विफल होती है. यदि APIKEY कॉन्फ़िगर होने के बाद FMZ पासवर्ड संशोधित किया गया है, तो FMZ पर एक प्लेटफ़ॉर्म पृष्ठ जोड़ने का प्रयास करें और प्लेटफ़ॉर्म APIKEY को पुनः कॉन्फ़िगर करें.

हस्ताक्षर अवैध: अवैध प्रस्तुत समय या गलत समय प्रारूप

सुझाव है कि आप लिनक्स सर्वर का उपयोग करें, या इन विंडोज सिस्टम पर समय सिंक्रनाइज़ेशन सॉफ्टवेयर स्थापित करें जहां यह समस्या होती है।

क्यों डॉकर अभी भी एक वैश्विक प्रॉक्सी सेट है जब मंच एपीआई का उपयोग नहीं कर सकते?

वैश्विक प्रॉक्सी में प्रॉक्सी डॉकर नेटवर्क पोर्ट नहीं है. देरी की समस्या के कारण, विदेशी सर्वर के डॉकर को तैनात करना सबसे अच्छा है.

कैसे स्थानीय रूप से एक रणनीति को बचाने के लिए, FMZ पर अपलोड करने के लिए नहीं?

पायथन का उपयोग करके, और आप स्थानीय फ़ाइलों को आयात कर सकते हैं, एक फ़ाइल के रूप में सामान्य रूप से एफएमजेड एपीआई द्वारा लिखी गई रणनीति को सहेजें और इसे अपने स्वयं के सर्वर पर निष्पादन पथ में रखें, और आप सीधे इसे पढ़ और निष्पादित कर सकते हैं।

#!python2.7

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

कैसे एक मंच के परीक्षण नेटवर्क या कैसे एपीआई आधार पते को बदलने के लिए?

संबंधित एपीआई आधार पते पर सीधे स्विच करने के लिए exchange.SetBase( का उपयोग करें। उदाहरण के लिएः

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

अधिक