xchangeList()
GetExchangeList()
समर्थित एक्सचेंजों की सूची और आवश्यक कॉन्फ़िगरेशन जानकारी लौटाता है.
पैरामीटर कोई नहीं
रिटर्न मूल्य
{
"code": 0,
"data": {
"result": {
"exchanges": [{
"website": "https://www.huobi.pro/",
"name": "Huobi",
"priority": 1,
"meta": "[{"desc": "Access Key", "required": true, "type": "string", "name": "AccessKey", "label": "Access Key"}, {"encrypt": true, "name": "SecretKey", "required": true, "label": "Secret Key", "type": "password", "desc": "Secret Key"}]",
"eid": "Huobi",
"logo": "huobi.png",
"id": 1
}, {
"website": "https://www.kex.com/",
"name": "KEX",
"priority": -99,
"meta": "[{"desc": "Access Key", "required": true, "type": "string", "name": "AccessKey", "label": "Access Key"}, {"encrypt": true, "name": "SecretKey", "required": true, "label": "Secret Key", "type": "password", "desc": "Secret Key"}, {"encrypt": true, "required": true, "type": "password", "name": "Password", "label": "Trading Password"}]",
"eid": "KEX",
"logo": "",
"id": 43
},
...
]
},
"error": null
}
}
DeleteNode(Nid)
डॉकर नोड हटाता है (ID
हैNid
) के अनुरूप है।API KEY
एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म खाते के अनुरोध में।
पैरामीटरNid
पूर्णांक प्रकार का है, अर्थात् डॉकरID
.
रिटर्न वैल्यू
{
"code":0,
"data":{
"result":true,
"error":null
}
}
DeleteRobot(RobotId, DeleteLogs)
निर्दिष्ट आईडी (रोबोट) के साथ रोबोट को हटाता हैID
: RobotId
) के अनुरूप है।API KEY
एफएमजेड क्वांट खाते के अंतर्गत अनुरोध में।
पैरामीटरRobotId
पूर्णांक प्रकार का है, अर्थात् रोबोटID
हटाया जाना है।DeleteLogs
बूलियन प्रकार का है; सेटDeleteLogs
यह तय करने के लिए कि लॉग को मिटाना है या नहीं;true
लॉग को मिटाने का संकेत देता है।
रिटर्न वैल्यू
// Return value after successful deletion
{
"code": 0,
"data": {
"result": 0,
"error": null
}
}
GetStrategyList()
रणनीति की जानकारी प्राप्त करता हैAPI KEY
एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म खाते के अनुरोध में।
पैरामीटर कोई नहीं
रिटर्न मूल्य
{
"code": 0,
"data": {
"result": {
"strategies": [{
"category": 0,
"username": "yifidslei",
"is_owner": true,
"name": "fmz simulation market test strategy",
"language": 0,
"hasToken": false,
"args": "[]",
"is_buy": false,
"public": 0,
"last_modified": "2018-01-18 12:36:03",
"date": "2018-01-17 09:19:32",
"forked": 0,
"id": 63372
}, {
"category": 20,
"username": "bifndslez",
"is_owner": true,
"name": "Line drawing library",
"language": 0,
"hasToken": false,
"args": "[]",
"is_buy": false,
"public": 0,
"last_modified": "2017-05-08 09:44:18",
"date": "2017-04-19 10:38:14",
"forked": 0,
"id": 39677
},
...
],
"all": 20
},
"error": null
}
}
NewRobot(Settings)
पैरामीटर सेटिंग्स के अनुसार एक नया बॉट बनाता है,API KEY
एफएमजेड क्वांट खाते के अनुरोध में।
पैरामीटरSettings
हैJSON
वस्तु प्रकार।Settings
हैJSON
बॉट द्वारा कॉन्फ़िगर की गई वस्तु।
..Settings
विवरण इस प्रकार समझाया गया हैः
Settings = {
"name": "hedge test",
/*
Strategy parameters; the order does not have to be in correspondence with the parameter order, but the name must be the same as the parameter name
Note: the second element in the parameter array ["MAType", 0, 75882] is an array including three elements, in which the first one "MAType" is the parameter on the pattern referred by the bot-binding strategy, and the second one "0" is the specific value set by the parameter "MAType", and the third one "75882" is the pattern ID containing the parameter "MAType"
*/
"args": [["Interval", 500], ["MAType", 0, 75882]],
// Strategy ID, which can be obtained by "GetStrategyList" method
"strategy": 25189,
// K-line period parameter; "60" indicates 60 seconds
"period": 60,
// it can be specified to run on which docker; no writing of the attribute will lead to automatic assignment
"node" : 52924,
// custom field
"appid": "member2",
// Specify a bot group
"group": 1122,
"exchanges": [
// ZB; "pid" can be obtained by "GetPlatformList" method
{"pid": 15445, "pair": "ETH_BTC"},
// OKEX
{"pid": 13802, "pair": "BCH_BTC"},
// In addition to the exchanges configured by the FMZ dashboard (pid identification), you can also set exchange configuration information that has not been configured to operate the bot
{"eid": "OKEX", "pair": "ETH_BTC", "meta" :{"AccessKey": "xxx", "SecretKey": "yyy"}},
{"eid": "Huobi", "pair": "BCH_BTC", "meta" :{"AccessKey": "xxx", "SecretKey": "yyy"}}
]
}
नोटः
जब आप संवेदनशील जानकारी का उपयोग करते हैं, जैसे कि मंचAPI KEY
, सहित"meta":{"AccessKey":"xxx","SecretKey":"yyy"}
के विन्यास मेंeid
, आपको पता होना चाहिए कि FMZ डेटा संग्रहीत नहीं करता है. डेटा सीधे डॉकर प्रोग्राम को भेजा जाएगा, इसलिए इस जानकारी को हर बार कॉन्फ़िगर किया जाना चाहिए जब बॉट बनाया या पुनरारंभ किया जाता है.
प्लगइन का उपयोग करता है कि बोट को पुनरारंभ करने के लिए मंच का समर्थन करने के लिए, जब विन्यासSettings
पैरामीटर, आप के लिए निम्नलिखित सेटिंग्स करना चाहिएexchanges
विशेषताः
{"eid": "Exchange", "label" : "testXXX", "pair": "ETH_BTC", "meta" :{"AccessKey": "123", "SecretKey": "1234", "Front" : "http://127.0.0.1:6666/XXX"}}
label
विशेषता वर्तमान सामान्य प्रोटोकॉल द्वारा एक्सेस की गई एक्सचेंज ऑब्जेक्ट के लिए एक लेबल सेट करना है, जिसे प्राप्त किया जा सकता हैexchange.GetLabel()
कार्यनीति में भूमिका निभाना।
परीक्षण रणनीतिः
रणनीति पैरामीटरInterval
JavaScript
रणनीति कोड
function main(){
Log(exchange.GetAccount())
Log(exchange.GetTicker())
Log(exchange.GetDepth())
Log("Interval:", Interval)
}
रिटर्न मूल्य
// Create the bot successfully
{
"code": 0,
"data": {
"result": 74260,
"error": null
}
}
PluginRun(Settings)
कॉल करने के लिए विस्तारित एपीआई का उपयोग करता हैडिबगिंग उपकरण function.
पैरामीटरSettings
हैJSON
ऑब्जेक्ट, अर्थात् डिबगिंग टूल में सेटिंग (Settings
विशेषता में लिखा परीक्षण कोड शामिल हैsource
).
परीक्षण कोडPython
उदाहरण:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import time
import md5
import urllib
import json
# API KEY has been blurred; you can use your own API KEY to test
accessKey = 'f77XXXXXXXXXXXXXXX757'
# API KEY has been blurred; you can use your own API KEY to test
secretKey = 'd8XXXXXXXXXXXXXXXX41ca97ea15'
def api(method, *args):
d = {
'version': '1.0',
'access_key': accessKey,
'method': method,
'args': json.dumps(list(args)),
'nonce': int(time.time() * 1000),
}
d['sign'] = md5.md5('%s|%s|%s|%d|%s' % (d['version'], d['method'], d['args'], d['nonce'], secretKey)).hexdigest()
return json.loads(urllib.urlopen('https://www.fmz.com/api/v1', urllib.urlencode(d)).read())
code = '''
function main() {
Log(exchange.GetTicker())
exchange.SetTimeout(2000);
return exchanges[0].GetTicker()
}
'''
settings = {
# K-line period parameter "60" indicates 60 seconds
"period": 60,
"source": code,
# The docker ID can specify which docker to run the bot on; if the value is -1, it means automatic assignment
"node" : 54913,
"exchanges": [
{"eid": "OKEX", "pair": "ETH_BTC", "meta" :{"AccessKey": "123abc", "SecretKey": "123abc"}},
{"eid": "Huobi", "pair": "BCH_BTC", "meta" :{"AccessKey": "123abc", "SecretKey": "123abc"}}
]
}
print api("PluginRun", settings)
नोटः{"eid": "OKEX", "pair": "ETH_BTC", "meta" :{"AccessKey": "123abc", "SecretKey": "123abc"}}
{"eid": "Huobi", "pair": "BCH_BTC", "meta" :{"AccessKey": "123abc", "SecretKey": "123abc"}}
के लिएexchanges
विशेषता मेंसेटिंग्स, विशेषता केवल 1 पर सेट करने की जरूरत है, जब कॉल करने के लिएPluginRun
इंटरफ़ेस (केवल एक एक्सचेंज ऑब्जेक्ट के लिए समर्थित किया जा सकता है जब आप
रिटर्न मूल्यapi("PluginRun", settings)
लौटाए गए परिणामः
{
u'code': 0,
u'data': {
u'result': u'{"logs":[{"PlatformId":"","OrderId":"0","LogType":5,"Price":0,"Amount":0,"Extra":"{\\"Info\\":{\\"date\\":\\"1523715057\\",\\"ticker\\":{\\"high\\":\\"0.06400845\\",\\"vol\\":\\"117648.31546800\\",\\"last\\":\\"0.06204514\\",\\"low\\":\\"0.06178666\\",\\"buy\\":\\"0.06200001\\",\\"sell\\":\\"0.06208728\\"}},\\"High\\":0.06400845,\\"Low\\":0.06178666,\\"Sell\\":0.06208728,\\"Buy\\":0.06200001,\\"Last\\":0.06204514,\\"Volume\\":117648.315468,\\"OpenInterest\\":0,\\"Time\\":1523715057726}","Instrument":"","Direction":"","Time":1523715057726}],"result":"{\\"Info\\":{\\"date\\":\\"1523715057\\",\\"ticker\\":{\\"vol\\":\\"117648.31546800\\",\\"last\\":\\"0.06204514\\",\\"low\\":\\"0.06178666\\",\\"buy\\":\\"0.06200001\\",\\"sell\\":\\"0.06208728\\",\\"high\\":\\"0.06400845\\"}},\\"High\\":0.06400845,\\"Low\\":0.06178666,\\"Sell\\":0.06208728,\\"Buy\\":0.06200001,\\"Last\\":0.06204514,\\"Volume\\":117648.315468,\\"OpenInterest\\":0,\\"Time\\":1523715057774}"}\n',
u'error': None
}
}
GetRobotLogs(robotId, logMinId, logMaxId, logOffset, logLimit, profitMinId, profitMaxId, profitOffset, profitLimit, chartMinId, chartMaxId, chartOffset, chartLimit, chartUpdateBaseId, chartUpdateDate, summaryLimit)
रोबोट लॉग की जानकारी प्राप्त करता है (रोबोटID
: robotId
) के अनुरूप है।API KEY
एफएमजेड क्वांट खाते के अनुरोध में।
पैरामीटर
पैरामीटर का नाम | प्रकार | टिप्पणी |
---|---|---|
robotId | पूर्णांक | बॉट आईडी |
तालिका लॉगडेटाबेस तालिका के लॉग डेटा से पूछताछ करता हैः
पैरामीटर का नाम | प्रकार | टिप्पणी |
---|---|---|
logMinId | पूर्णांक | लॉग की न्यूनतम पहचान |
logMaxId | पूर्णांक | लॉग का अधिकतम आईडी |
लॉगऑफसेट | पूर्णांक | logMinId और logMaxId द्वारा सीमा निर्धारित करने के बाद, logOffset ऑफसेट (कितने रिकॉर्ड को छोड़ दिया जाता है) डेटा प्राप्त करने के लिए प्रारंभिक स्थिति के रूप में उपयोग किया जाना शुरू होता है |
लॉगलिमिट | पूर्णांक | प्रारंभिक स्थिति निर्धारित करने के बाद, चयनित डेटा रिकॉर्ड की संख्या |
तालिका लाभडेटाबेस तालिका के लाभ के आंकड़ों को पूछताछ करता हैः
पैरामीटर का नाम | प्रकार | टिप्पणी |
---|---|---|
लाभMinId | पूर्णांक | रिकॉर्ड की न्यूनतम पहचान |
लाभMaxId | पूर्णांक | रिकॉर्ड का अधिकतम आईडी |
लाभऑफसेट | पूर्णांक | ऑफसेट (कितने रिकॉर्ड छोड़ दिया जाता है) प्रारंभिक स्थिति के रूप में इस्तेमाल किया जा करने के लिए शुरू होता है |
लाभसीमा | पूर्णांक | प्रारंभिक स्थिति निर्धारित करने के बाद, चयनित डेटा रिकॉर्ड की संख्या |
तालिका चार्टडेटाबेस तालिका के चार्ट डेटा से पूछताछ करता हैः
पैरामीटर का नाम | प्रकार | टिप्पणी |
---|---|---|
चार्ट | पूर्णांक | रिकॉर्ड की न्यूनतम पहचान |
chartMaxId | पूर्णांक | रिकॉर्ड का अधिकतम आईडी |
चार्टऑफसेट | पूर्णांक | ऑफसेट |
chartLimit | पूर्णांक | प्राप्त किए जाने वाले अभिलेखों की संख्या |
chartUpdateBaseId | पूर्णांक | अद्यतन आधार आईडी पूछें |
चार्टअपडेट दिनांक | पूर्णांक | डेटा रिकॉर्ड टाइमस्टैम्प को अपडेट करता है जो इस टाइमस्टैम्प से बड़े रिकॉर्ड को फ़िल्टर करेगा |
सारांश सीमास्थिति पट्टी के आंकड़ों को पूछताछ करता हैः
यह बॉट के स्टेटस बार डेटा की क्वेरी करता है। पैरामीटर प्रकार पूर्णांक है। summaryLimit
सभी स्थिति पट्टी जानकारी प्राप्त करने के लिए पैरामीटर) स्थिति पट्टी डेटा लौटाए गए डेटा में संग्रहीत किया जाता हैsummary
.
Python
उदाहरण:
api('GetRobotLogs', 63024, 0, 0, 7, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) # For the specific code, please refer to the above content: 4. Simple examples, which will not be repeated here; here only write the call and pass of "GetRobotLogs"
रिटर्न मूल्य लौटाए गए डेटाः
{
"code": 0,
"data": {
"result": {
"status": 1,
"updateTime": 1527049990197,
"wd": 0,
// The first data structure in logs is the log records in the strategy log table in the bot database
"logs": [{
"Max": 3984,
"Arr": [
[3977, 3, "Futures_OKCoin", "", 0, 0, "Sell(688.9, 2): 20016", 1526954372591, "", ""],
[3976, 5, "", "", 0, 0, "OKCoin:this_week too many positions, long: 2", 1526954372410, "", ""]
],
"Total": 1503,
"Min": 2482
}, {
// The second data structure in logs is the log records in the strategy log table in the bot database
"Max": 0,
"Arr": [],
"Total": 0,
"Min": 0
}, {
// The third data structure in logs is the log records in the strategy log table in the bot database
"Max": 0,
"Arr": [],
"Total": 0,
"Min": 0
}],
"chart": "",
"refresh": 1527049988000,
"summary": "...",
"chartTime ": 0,
"node_id ": 50755,
"online ": true
},
"error ": null
}
}
डेटाबेस में रणनीति लॉग तालिका
..Arr
उपरोक्त रिटर्न किए गए परिणाम डेटा में विशेषता मान का वर्णनः
"Arr": [
[3977, 3, "Futures_OKCoin", "", 0, 0, "Sell(688.9, 2): 20016", 1526954372591, "", ""],
[3976, 5, "", "", 0, 0, "OKCoin:this_week too many positions, long: 2", 1526954372410, "", ""]
],
आईडी | लॉग प्रकार | ईद | आदेशित | मूल्य | राशि | अतिरिक्त | तिथि | अनुबंधप्रकार | दिशा |
---|---|---|---|---|---|---|---|---|---|
3977 | 3 | "" | 0 | 0 | 1526954372591 | "" | "" | ||
3976 | 5 | "" | "" | 0 | 0 | 1526954372410 | "" | "" |
extra
मुद्रित लॉग का संलग्न संदेश है।
विशिष्ट लॉग प्रकारों का प्रतिनिधित्वlogType
मूल्यः
लॉग प्रकारः | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
logType का अर्थः | खरीदना | बिक्री | वापस लेना | त्रुटि | लाभ | संदेश | पुनः आरंभ करें |
चीनी अर्थ | खरीद आदेश प्रकार लॉग | बेचने के आदेश का प्रकार | वापस ले लो | त्रुटि | राजस्व | लॉग | पुनः आरंभ करें |
डेटाबेस में राजस्व चार्ट की लॉग तालिका चार्ट की लॉग तालिका में डेटा रणनीति लॉग तालिका में राजस्व लॉग के अनुरूप है।
"Arr": [
[202, 2515.44, 1575896700315],
[201, 1415.44, 1575896341568]
]
उदाहरण के रूप में लॉग डेटा में से एक को लेंः
[202, 2515.44, 1575896700315]
202
लॉग के रूप मेंID
; 2515.44
राजस्व मूल्य के रूप में;1575896700315
समय के टिकट के रूप में।
डेटाबेस में चार्ट लॉग तालिका
"Arr": [
[23637, 0, "{\"close\":648,\"high\":650.5,\"low\":647,\"open\":650,\"x\":1575960300000}"],
[23636, 5, "{\"x\":1575960300000,\"y\":3.0735}"]
]
उदाहरण के रूप में लॉग डेटा में से एक को लेंः
[23637, 0, "{\"close\":648,\"high\":650.5,\"low\":647,\"open\":650,\"x\":1575960300000}"],
23637
लॉग हैID
, 0
चार्ट डेटा श्रृंखला का सूचकांक है, और अंतिम डेटा"{\"close\":648,\"high\":650.5,\"low\":647,\"open\":650,\"x\":1575960300000}"
लॉग डेटा है; यह डेटा चार्ट पर के-लाइन डेटा है।
ट्रेडिंग टर्मिनल के कार्यों में सुधार करने और मैन्युअल ट्रेडिंग को आसान बनाने के लिए, एक प्लग-इन फ़ंक्शन अब उपलब्ध है। स्थान निम्नानुसार दिखाया गया हैः
सिद्धांत डिबगिंग टूल के समान हैः निष्पादित करने के लिए
Trading Plugin
, जो समर्थन करता हैJavaScript
, Python
, cpp
और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 a bot 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
ट्रेडिंग टर्मिनल के प्लगइन मॉड्यूल जोड़ें
जैसा कि चित्र में दिखाया गया है,
प्लगइन चलाएँ
प्लगइन चलाने का समय प्लगइन का अधिकतम चलने का समय 3 मिनट है; और यह 3 मिनट से अधिक होने के बाद स्वचालित रूप से चलना बंद कर देगा।
विश्लेषण सूत्र सार्वजनिक बाजार में बाजार उद्धरण गणना विधि को संदर्भित करता है।alpha101
काworldquant
: http://q.fmz.com/chart/doc/101_Formulaic_Alphas.pdf, जो मूल रूप से इसके व्याकरण के साथ संगत है (अपरिवर्तित सुविधाओं के लिए स्पष्टीकरण के साथ), और इसे बढ़ाया गया है।
इसका उपयोग समय श्रृंखलाओं पर त्वरित गणना करने और विचारों को मान्य करने के लिए किया जाता है।पता प्रयोग करें.
पृष्ठ परिचय:
"{}" नीचे प्लेसहोल्डर का प्रतिनिधित्व करता है, सभी अभिव्यक्ति केस संवेदनशील नहीं हैं, और
abs(x), log(x), sign(x)
शाब्दिक रूप से निरपेक्ष मूल्य, लघुगणक और संकेत समारोह का अर्थ है, क्रमशः।निम्नलिखित ऑपरेटर, जिनमें शामिल हैं+, -, *, /, >, <
, अपने मानकों के अर्थों को भी पूरा करते हैं;==
||
अर्थ है x? y: z
तृतीयक संचालक दर्शाता है.
rank(x)
: क्रॉस सेक्शन की रैंकिंग, स्थान का प्रतिशत लौटाता है; कई उम्मीदवारों के लक्ष्य पूल को निर्दिष्ट करना आवश्यक है, जिन्हें एकल बाजार के लिए गणना नहीं की जा सकती है और सीधे मूल परिणाम लौटाएगा।delay(x, d)
: अनुक्रम के d अवधि से पहले का मान।sma(x, d)
: अनुक्रम की d अवधि का सरल चलती औसत।correlation(x, y, d)
: पिछले d अवधियों में समय श्रृंखला x और y का सहसंबंध गुणांक।covariance(x, y, d)
: पिछले d अवधियों में समय श्रृंखला x और y का सह-विभेदक।scale(x, a)
: यह डेटा को सामान्य करता है, ताकिsum(abs(x)) = a
(delta(x, d)
: समय श्रृंखला x का वर्तमान मान घटाकर d अवधि से पहले का मान।signedpower(x, a)
: x^a
.decay_linear(x, d)
: समय श्रृंखला x के भारित d-अवधि चलती औसत, भार d, d-1, d-2... 1 (सामान्यीकृत) के साथ।indneutralize(x, g)
: उद्योग वर्गीकरण के लिए तटस्थ प्रसंस्करण ts_{O}(x, d)
: पिछले d अवधियों में समय श्रृंखला x पर ts_min(x, d)
: पिछले d अवधियों का न्यूनतम मान।ts_max(x, d)
पिछले d अवधियों का अधिकतम मान.ts_argmax(x, d)
: ts_max(x, d)
position.ts_argmin(x, d)
: ts_min(x, d)
position.ts_rank(x, d)
: पिछले d अवधियों के समय श्रृंखला x मूल्यों का क्रमबद्ध करना (प्रतिशत क्रमबद्ध करना) ।min(x, d)
: ts_min(x, d)
.max(x, d)
: ts_max(x, d)
.sum(x, d)
: पिछले d अवधियों का योग।product(x, d)
: पिछले d अवधियों का गुणनफल।stddev(x, d)
: पिछले d अवधियों का मानक विचलन।इनपुट डेटा केस संवेदनशील नहीं है; डिफ़ॉल्ट डेटा वेब पेज पर चयनित प्रतीक है, या यह सीधे निर्दिष्ट किया जा सकता है, जैसे किbinance.ada_bnb
returns
: समापन मूल्य का प्रतिफल।open, close, high, low, volume
: अर्थात् अवधि के दौरान खुली कीमत, बंद कीमत, उच्चतम मूल्य, निम्नतम मूल्य और व्यापार की मात्रा।vwap
: वॉल्यूम-वेटेड निष्पादित मूल्य, अभी तक लागू नहीं किया गया है, जो वर्तमान में समापन मूल्य है।cap
: कुल बाजार मूल्य, अभी तक लागू नहीं किया गया है।IndClass
: उद्योग वर्गीकरण, अभी तक लागू नहीं किया गया है।कई परिणामों (सूची द्वारा व्यक्त) को एक बार में आउटपुट करना समर्थित है; उदाहरण के लिए,[sma(close, 10), sma(high, 30)]
चार्ट पर दो पंक्तियाँ खींचेगा। समय श्रृंखला डेटा इनपुट करने के अलावा, इसका उपयोग एक साधारण कैलकुलेटर के रूप में भी किया जा सकता है।
एफएमजेड क्वांट ट्रेडिंग प्लेटफ़ॉर्म के लिए जिसने अभी तक एक्सचेंज एपीआई इंटरफ़ेस को कैप्सूल नहीं किया है, इसे एक सामान्य प्रोटोकॉल प्लग-इन प्रोग्राम लिखकर एक्सेस किया जा सकता है। आप इस सामान्य प्रोटोकॉल का उपयोग किसी भी एक्सचेंज तक पहुंचने के लिए कर सकते हैं जो ट्रेडिंग के लिए एपीआई इंटरफ़ेस प्रदान करता है, और निम्नलिखित दो प्रोटोकॉल समर्थित हैंः
REST
प्रोटोकॉल:संदर्भ दस्तावेज.FIX
प्रोटोकॉल:संदर्भ वस्तु.के बीच अंतरFIX
प्रोटोकॉल प्लग-इन कार्यक्रम औरREST
प्रोटोकॉल प्लग-इन प्रोग्राम केवल प्रोटोकॉल प्लग-इन प्रोग्राम और एक्सचेंज इंटरफेस के बीच बातचीत है। प्रोटोकॉल प्लग-इन प्रोग्राम में एफएमजेड क्वांट के रूप में डॉकर प्रोग्राम इंटरैक्शन और डेटा प्रारूप का समान विवरण प्रसंस्करण है। विवरण के लिए, कृपया ऊपर दिए गए लिंक में उदाहरण देखें।
एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म एक मॉड्यूलर और अनुकूलन योग्य
डिबग उपकरणपृष्ठ जल्दी से बॉट द्वारा कोड का परीक्षण करने के लिए एक वातावरण प्रदान करता है, केवल समर्थनJavaScript
currently.
यह स्थानीय संपादक दूरस्थ सिंक्रनाइज़ेशन रणनीति कोड को FMZ क्वांट ट्रेडिंग प्लेटफॉर्म का समर्थन करता है और यह समर्थन करता हैSublime Text
/Atom
/Vim
/VSCode
संपादक. रणनीति संपादन पृष्ठ पर, क्लिक करें
वर्तमान कुंजी प्रदर्शन को ताज़ा करने के लिए
अलग-अलग संपादकों के प्लग-इन की स्थापना विधियां थोड़ा अलग हैं. आप विशिष्ट रिमोट सिंक्रनाइज़ेशन प्लग-इन आइटम पर जाने के लिए डाउनलोड बटन पर क्लिक कर सकते हैं.
जब लाइव ट्रेडिंग चल रहा है, तो आपको वास्तविक बॉट कॉन्फ़िगरेशन के पैरामीटर डेटा को सहेजने की आवश्यकता है, आप JSON
फ़ाइल, और निर्यात की गई रणनीति पैरामीटर विन्यास भी वास्तविक बॉट में फिर से आयात किया जा सकता है. सहेजे गए रणनीति बॉट पैरामीटर को वर्तमान वास्तविक बॉट में आयात करने के लिए
स्रोत कोड डाउनलोड करें
रणनीति स्रोत कोड निर्यात करें, और निर्यात फ़ाइल का प्रकार रणनीति प्रोग्रामिंग भाषा पर आधारित है. जावास्क्रिप्ट रणनीति विस्तार के साथ फ़ाइलों को निर्यात करता हैjs
; पायथन रणनीति विस्तार के साथ फ़ाइलों को निर्यात करता हैpy
; सी++ रणनीति एक्सटेंशन के साथ फ़ाइलों को निर्यात करता हैcpp
; Mylanguage रणनीति विस्तार के साथ फ़ाइलों को निर्यात करता हैtxt
ध्यान दें कि केवल रणनीति स्रोत कोड निर्यात किया जाता है, जिसमें रणनीति पैरामीटर, टेम्पलेट संदर्भ आदि शामिल नहीं हैं।
निर्यात रणनीति
पूरी रणनीति, जैसे रणनीति स्रोत कोड और पैरामीटर डिजाइन सहित सभी रणनीति जानकारी निर्यात करें।xml
file.
आयात रणनीति
उपयोग करेंxml
फ़ाइल xml
आयात करने के लिए, यानी, आप एक पूर्ण रणनीति आयात कर सकते हैं. आयात करने के बाद, आप रणनीति को बचाने के लिए
रणनीति नाम और रणनीति पैरामीटर विवरण में लिखा जा सकता हैChinese|English
, स्वचालित रूप से वेब पृष्ठों द्वारा पहचानी जाने वाली भाषा में प्रदर्शित होता है।
अन्य स्थानों पर, जैसेःरणनीति का वर्णन, उपयोग के निर्देशऔर अन्य ग्रंथों मेंMarkdown
प्रारूप, उपयोग[trans]Chinese|English[/trans]
या[trans]Chinese||English[/trans]
स्वचालित पहचान का प्रभाव भी प्राप्त कर सकता है। उपरोक्त उदाहरण का प्रभाव निम्नलिखित चित्र में दिखाया गया हैः
चीनी में पृष्ठ प्रदर्शित करेंः
अंग्रेजी में पृष्ठ प्रदर्शित करेंः
भाषा बदलने के बाद, यह वेब पेज को ताज़ा करने के बाद प्रभाव लेगा.
फ़ंक्शन जो रणनीति कोड में स्ट्रिंग लिख सकते हैं, भाषा स्विचिंग का भी समर्थन करते हैं, जैसे फ़ंक्शनLog
, कार्यLogStatus
आदि।
function main() {
Log("[trans]日志|log[/trans]")
var table = {
type: "table",
title: "[trans]操作|option[/trans]",
cols: ["[trans]列1|col1[/trans]", "[trans]列2|col2[/trans]", "[trans]操作|option[/trans]"],
rows: [
["[trans]比特币|BTC[/trans]", "[trans]以太坊|ETH[/trans]", {"type": "button", "cmd": "coverAll", "name": "平仓|cover", "description": "描述|description"}] // Note: It doesn't need to add [trans] tag in the button
]
}
LogStatus("[trans]信息|message[/trans]", "\n`" + JSON.stringify(table) + "`")
throw "[trans]错误|error[/trans]"
}
import json
def main():
Log("[trans]日志|log[/trans]")
table = {
"type": "table",
"title": "[trans]操作|option[/trans]",
"cols": ["[trans]列1|col1[/trans]", "[trans]列2|col2[/trans]", "[trans]操作|option[/trans]"],
"rows": [
["[trans]比特币|BTC[/trans]", "[trans]以太坊|ETH[/trans]", {"type": "button", "cmd": "coverAll", "name": "平仓|cover", "description": "描述|description"}]
]
}
LogStatus("[trans]信息|message[/trans]", "\n`" + json.dumps(table) + "`")
raise Exception("[trans]错误|error[/trans]")
void main() {
Log("[trans]日志|log[/trans]");
json table = R"({
"type": "table",
"title": "[trans]操作|option[/trans]",
"cols": ["[trans]列1|col1[/trans]", "[trans]列2|col2[/trans]", "[trans]操作|option[/trans]"],
"rows": [
["[trans]比特币|BTC[/trans]", "[trans]以太坊|ETH[/trans]", {"type": "button", "cmd": "coverAll", "name": "平仓|cover", "description": "描述|description"}]
]
})"_json;
LogStatus("[trans]信息|message[/trans]", "\n`" + table.dump() + "`");
Panic("[trans]错误|error[/trans]");
}
डॉकर सॉफ़्टवेयर डाउनलोड करने के बाद, डिकंप्रेशन के बाद निष्पादन योग्य फ़ाइल (फ़ाइल नामःrobot
) डॉकर प्रोग्राम है; डॉकर प्रोग्राम के लिए पैरामीटर डॉकर को तैनात करते समय निर्दिष्ट किए जा सकते हैं।
-v
: वर्तमान डॉकर प्रोग्राम के संस्करण और संकलन समय सहित जानकारी की जाँच करें।
पूर्ण निष्पादन आदेश पर आधारित हैApple Mac System
: ./robot -v
.-s
: डॉकर प्रोग्राम चलाते समय एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म के साथ संवाद करने के लिए निर्दिष्ट पता।
पूर्ण निष्पादन आदेश पर आधारित हैApple Mac System
: ./robot -s node.fmz.com/xxxxxxx
; xxxxxxx
एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म पर प्रत्येक खाते की विशिष्ट पहचान आईडी है; कमांड निष्पादित करने के बाद, संबंधित एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म खाते के लिए पासवर्ड दर्ज करने के लिए एक संकेत होगा।-p
: आप सीधे पासवर्ड दर्ज करने के लिए रन कमांड में पैरामीटर निर्दिष्ट कर सकते हैं, जो अनुशंसित नहीं है, क्योंकि पासवर्ड पैरामीटर वर्तमान सिस्टम रिकॉर्ड में छोड़ दिया जाएगा। मान लीजिए कि खाता पासवर्ड पता के अनुरूप हैnode.fmz.com/xxxxxxx
है:abc123456
.
पूर्ण निष्पादन आदेश पर आधारित हैApple Mac System
: ./robot -s node.fmz.com/xxxxxxx -p abc123456
.-n
: चल रहे डॉकर प्रोग्राम के लिए लेबल जानकारी संलग्न करें.
पूर्ण निष्पादन आदेश पर आधारित हैApple Mac System
: ./robot -n macTest -s node.fmz.com/xxxxxxx
. वहाँ एक होगाmacTest
मंच डॉकर प्रबंधन पृष्ठ पर डॉकर जानकारी में पाठ लेबल.-l
: वर्तमान डॉकर द्वारा समर्थित एक्सचेंज सूची प्रिंट करें.
पूर्ण निष्पादन आदेश पर आधारित हैApple Mac System
: ./robot -l
, यानी समर्थित एक्सचेंजों के नाम आउटपुट किए जा सकते हैं।exchange.Go
कार्य, कोई उचित नहीं हैwait
ऑपरेशन के दौरान कोरोटीन के अंत की प्रतीक्षा करने के लिए, जिसके परिणामस्वरूप बड़ी संख्या में कोरोटीन होते हैं।Decrypt: Secret key decrypt failed
, जो लाइव ट्रेडिंग शुरू करने में विफलता का कारण होगा। त्रुटि का कारण यह है कि एफएमजेड खाते के पासवर्ड को संशोधित करने से सभी कॉन्फ़िगर किए गएAPI KEY
समस्या को हल करने के लिए,API KEY
फिर से कॉन्फ़िगर किया जाना चाहिए, और डॉकर को फिर से शुरू किया जाना चाहिए।ValueError: bad marshal data (unknown type code)
. रणनीति द्वारा चलाए जाने वाले पायथन वातावरण को रणनीति द्वारा समर्थित संस्करणों में से एक में अपग्रेड या स्थापित करें:Python 2.7
, Python 3.5
औरPython 3.6
.interrupt
त्रुटि; त्रुटि है क्योंकि उपयोगकर्ता क्लिक करता हैरोको बॉटबॉट पृष्ठ पर बटन जब प्रोग्राम एक ऑपरेशन करता है (जैसे प्लेटफॉर्म इंटरफ़ेस तक पहुंचना), और बॉट वर्तमान ऑपरेशन द्वारा मुद्रित त्रुटि संदेश को रोकता है और बाधित करता है। त्रुटि का कोई प्रभाव नहीं होता है और यह केवल लॉग रिकॉर्ड है।एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म के
उप-खाते
मंच में लॉग इन करने के बाद,
उप-खातों के पास सीमित अनुमतियाँ हैं; केवल अधिकृत बॉट्स की सेटिंग्स मेंउपलब्ध अनुमतियाँउप-खातों में देखा जा सकता है। अधिकृत बॉट के पास पैरामीटर को संशोधित करने, लाइव ट्रेडिंग को रोकने और फिर से शुरू करने का अधिकार है, लेकिन यह बॉट द्वारा कॉन्फ़िगर की गई एक्सचेंज ऑब्जेक्ट को संशोधित नहीं कर सकता है। उप खातों के उपयोग के परिदृश्य आमतौर पर हैंः
लाइव ट्रेडिंग व्यू
एफएमजेड प्लेटफॉर्म की बॉट सूची मेंबॉट पृष्ठ, वर्तमान पंक्ति के बॉट्स को सार्वजनिक रूप से प्रदर्शित करने के लिए
पर
रणनीति साझा करना
सार्वजनिक साझाकरण
आंतरिक साझाकरण
रणनीति किराया
सार्वजनिक बिक्री
आंतरिक बिक्री
महत्वपूर्ण नोटः
निर्माण और वितरण करते समयरणनीति टोकन, कृपया ध्यान से पुष्टि करें कि क्या यह
function returnAnalyze(totalAssets, profits, ts, te, period, yearDays) {
// force by days
period = 86400000
if (profits.length == 0) {
return null
}
var freeProfit = 0.03 // 0.04
var yearRange = yearDays * 86400000
var totalReturns = profits[profits.length - 1][1] / totalAssets
var annualizedReturns = (totalReturns * yearRange) / (te - ts)
// MaxDrawDown
var maxDrawdown = 0
var maxAssets = totalAssets
var maxAssetsTime = 0
var maxDrawdownTime = 0
var maxDrawdownStartTime = 0
var winningRate = 0
var winningResult = 0
for (var i = 0; i < profits.length; i++) {
if (i == 0) {
if (profits[i][1] > 0) {
winningResult++
}
} else {
if (profits[i][1] > profits[i - 1][1]) {
winningResult++
}
}
if ((profits[i][1] + totalAssets) > maxAssets) {
maxAssets = profits[i][1] + totalAssets
maxAssetsTime = profits[i][0]
}
if (maxAssets > 0) {
var drawDown = 1 - (profits[i][1] + totalAssets) / maxAssets
if (drawDown > maxDrawdown) {
maxDrawdown = drawDown
maxDrawdownTime = profits[i][0]
maxDrawdownStartTime = maxAssetsTime
}
}
}
if (profits.length > 0) {
winningRate = winningResult / profits.length
}
// trim profits
var i = 0
var datas = []
var sum = 0
var preProfit = 0
var perRatio = 0
var rangeEnd = te
if ((te - ts) % period > 0) {
rangeEnd = (parseInt(te / period) + 1) * period
}
for (var n = ts; n < rangeEnd; n += period) {
var dayProfit = 0.0
var cut = n + period
while (i < profits.length && profits[i][0] < cut) {
dayProfit += (profits[i][1] - preProfit)
preProfit = profits[i][1]
i++
}
perRatio = ((dayProfit / totalAssets) * yearRange) / period
sum += perRatio
datas.push(perRatio)
}
var sharpeRatio = 0
var volatility = 0
if (datas.length > 0) {
var avg = sum / datas.length;
var std = 0;
for (i = 0; i < datas.length; i++) {
std += Math.pow(datas[i] - avg, 2);
}
volatility = Math.sqrt(std / datas.length);
if (volatility !== 0) {
sharpeRatio = (annualizedReturns - freeProfit) / volatility
}
}
return {
totalAssets: totalAssets,
yearDays: yearDays,
totalReturns: totalReturns,
annualizedReturns: annualizedReturns,
sharpeRatio: sharpeRatio,
volatility: volatility,
maxDrawdown: maxDrawdown,
maxDrawdownTime: maxDrawdownTime,
maxAssetsTime: maxAssetsTime,
maxDrawdownStartTime: maxDrawdownStartTime,
winningRate: winningRate
}
}
वायदा_बाइनेंस
यह Binance वायदा के दोहरी स्थिति मोड का समर्थन करता है; आप उपयोग कर सकते हैंexchange.IO
स्विच करने के लिएः
function main() {
var ret = exchange.IO("api", "POST", "/fapi/v1/positionSide/dual", "dualSidePosition=true")
// ret : {"code":200,"msg":"success"}
Log(ret)
}
def main():
ret = exchange.IO("api", "POST", "/fapi/v1/positionSide/dual", "dualSidePosition=false")
Log(ret)
void main() {
auto ret = exchange.IO("api", "POST", "/fapi/v1/positionSide/dual", "dualSidePosition=true");
Log(ret);
}
यह क्रॉसिंग स्थिति / अलग स्थिति के बीच स्विचिंग का समर्थन करता है
function main() {
exchange.SetContractType("swap")
exchange.IO("cross", true) // Switch to crossed position
exchange.IO("cross", false) // Switch to isolated position
}
def main():
exchange.SetContractType("swap")
exchange.IO("cross", True)
exchange.IO("cross", False)
void main() {
exchange.SetContractType("swap");
exchange.IO("cross", true);
exchange.IO("cross", false);
}
फ्यूचर्स_हुओबीडीएम
यह हस्ताक्षर में भाग लेने वाले Huobi वायदा के पते को संशोधित करने का समर्थन करता है, जो डिफ़ॉल्ट रूप से स्विच नहीं किया जाता है. यदि आपको फ़ंक्शन को अक्षम करने की आवश्यकता है, तो आप उपयोग कर सकते हैंexchange.IO("signHost", "")
एक खाली स्ट्रिंग सेट करने के लिए.
प्रयोगexchange.IO("signHost", "https://aaa.xxx.xxx")
हस्ताक्षर सत्यापन में भाग लेने वाली Huobi Futures के आधार पते को बदलने के लिए।
प्रयोगexchange.IO("base", "https://bbb.xxx.xxx")
याexchange.SetBase("https://bbb.xxx.xxx")
प्लेटफार्म इंटरफेस के आधार पते को बदलने के लिए।
जब ट्रेडिंग जोड़ी को सेट किया जाता हैXXX_USDT
, फ़ंक्शन का उपयोग करेंexchange.SetContractType("swap")
अनुबंध कोड कोswap
स्थायी अनुबंध, उपयोगexchange.IO("cross", true)
पर स्विच कर सकते हैंUSDT
- मार्जिन पर टिकाऊ अनुबंध क्रॉसिंग स्थिति मोड में।exchange.IO("cross", false)
अलग-थलग स्थिति मोड पर वापस स्विच करने के लिए. प्रारंभिक डिफ़ॉल्ट अलग-थलग स्थिति मोड है.
हुओबी
यह Huobi स्पॉट लीवरेज टोकन का समर्थन करता है, जैसेःLINK*(-3)
; एक्सचेंज द्वारा परिभाषित कोड हैःlink3susdt
, जो तब लिखा जाता है जब FMZ ट्रेडिंग जोड़ी सेट करता हैLINK3S_USDT
.
रणनीति में ट्रेडिंग जोड़े को स्विच करना भी संभव हैः
function main() {
exchange.SetCurrency("LINK3S_USDT")
Log(exchange.GetTicker())
}
def main():
exchange.SetCurrency("LINK3S_USDT")
Log(exchange.GetTicker())
void main() {
exchange.SetCurrency("LINK3S_USDT");
Log(exchange.GetTicker());
}
ओकेएक्स
ओकेएक्स इंटरफ़ेस ओकेएक्स के सिमुलेशन बॉट परीक्षण वातावरण पर स्विच कर सकता है;exchange.IO("simulate", true)
सिमुलेटेड ट्रेडिंग वातावरण में स्विच कर सकते हैं। यदि आप वास्तविक ट्रेडिंग वातावरण में स्विच करना चाहते हैं, तो उपयोग करेंexchange.IO("simulate", false)
प्रारंभिक डिफ़ॉल्ट वास्तविक व्यापारिक वातावरण है।
यह खाता मार्जिन मोड स्विच करने का समर्थन करता है;exchange.IO("cross", true)
क्रॉस पोजीशन मोड पर स्विच करने के लिए, और उपयोग करने के लिएexchange.IO("cross", false)
अलग-थलग स्थिति मोड पर स्विच करने के लिए, प्रारंभिक डिफ़ॉल्ट क्रॉसिंग स्थिति मोड है।
वायदा_बिबॉक्स
प्रयोगexchange.IO("cross", true)
क्रॉस पोजीशन मोड पर स्विच करने के लिए, और उपयोग करने के लिएexchange.IO("cross", false)
अलग-थलग स्थिति मोड पर स्विच करने के लिए; प्रारंभिक डिफ़ॉल्ट क्रॉसिंग स्थिति मोड है।
एक्सचेंज वर्तमान लंबित आदेशों की क्वेरी और बाजार के ऐतिहासिक ट्रेडिंग रिकॉर्ड की क्वेरी के लिए इंटरफ़ेस का समर्थन नहीं करता है, इसलिएGetOrders
औरGetTrades
कार्य समर्थित नहीं हैं.
फ्यूचर्स_बिटगेट
प्रयोगexchange.IO("cross", true)
क्रॉस पोजीशन मोड पर स्विच करने के लिए, और उपयोग करने के लिएexchange.IO("cross", false)
अलग-थलग स्थिति मोड में स्विच करने के लिए।
फ्यूचर्स_एओएफएक्स
प्रयोगexchange.IO("cross", true)
क्रॉस पोजीशन मोड पर स्विच करने के लिए, और उपयोग करने के लिएexchange.IO("cross", false)
अलग-थलग स्थिति मोड में स्विच करने के लिए।
फ्यूचर्स_मेक्सिको
प्रयोगexchange.IO("cross", true)
क्रॉस पोजीशन मोड पर स्विच करने के लिए, और उपयोग करने के लिए` ` विनिमय.IO("क्रॉस",