وسائل لوڈ ہو رہے ہیں... لوڈنگ...

لاگ

لاگ

آؤٹ پٹ لاگ۔

لاگ ((...msgs)

پیرامیٹرmsgپیداوار کا مواد ہے، اور پیرامیٹرmsgایک سے زیادہ پاس کیا جا سکتا ہے. پی ایس جی غلط تار، نمبر، بول، آبجیکٹ، صف، کسی بھی قسم کے نظام کی طرف سے حمایت کی جیسے null.

function main() {
    Log("msg1", "msg2", "msg3")
}
def main():
    Log("msg1", "msg2", "msg3")
void main() {
    Log("msg1", "msg2", "msg3");
}

متعددmsgپیرامیٹرز کو منتقل کیا جا سکتا ہے:

function main() {
    Log("Hello, FMZ Quant!@")
    Sleep(1000 * 5)
    // Add #ff0000 to the string to print the log in red and push the message
    Log("Hello, #ff0000@")
}
def main():
    Log("Hello, FMZ Quant!@")
    Sleep(1000 * 5)
    Log("Hello, #ff0000@")
void main() {
    Log("Hello, FMZ Quant!@");
    Sleep(1000 * 5);
    Log("Hello, #ff0000@");
}

یہ آؤٹ پٹ پیغام کا رنگ مقرر کرنے کی حمایت کرتا ہے، اگر ہم رنگ کی ترتیب اور ایک ہی وقت میں دھکا استعمال کرتے ہیں، ہم رنگ پہلے مقرر کرنے کی ضرورت ہے اور استعمال کرتے ہیں@آخری دھکا مقرر کرنے کے لئے کردار.

function main() {
    Log("`data:image/png;base64,AAAA`")
}
def main():
    Log("`data:image/png;base64,AAAA`")
void main() {
    Log("`data:image/png;base64,AAAA`");
}

کےLog()تقریب پرنٹنگ کی حمایت کرتا ہےbase64کوڈ شدہ تصاویر، کے ساتھ شروع`اور اس کے ساتھ ختم`مثال کے طور پر:

import matplotlib.pyplot as plt 
def main(): 
    plt.plot([3,6,2,4,7,1]) 
    Log(plt)

کےLog()کی براہ راست پرنٹنگ کی حمایت کرتا ہےPythonہےmatplotlib.pyplotشے. جب تک کہ شے میں شامل ہےsavefigطریقہ کار، یہ براہ راست پرنٹ کیا جا سکتا ہےLogفنکشن، مثال کے طور پر:

function main() {
    Log("[trans]中文|abc[/trans]")
}
def main():
    Log("[trans]中文|abc[/trans]")
void main() {
    Log("[trans]中文|abc[/trans]");
}

کےLog()زبان سوئچنگ کی حمایت کرتا ہے.Log()فنکشن آؤٹ پٹ متن جو پلیٹ فارم کے صفحے پر زبان کی ترتیب کی بنیاد پر خود بخود اسی زبان پر سوئچ کرے گا، مثال کے طور پر:

کےLog()فنکشن لائیو ٹریڈنگ یا بیک ٹسٹنگ سسٹم کے لاگ ایریا میں ایک لاگ میسج آؤٹ پٹ کرتا ہے ، اور جب لائیو ٹریڈنگ چل رہی ہے تو لاگ کو لائیو ٹریڈنگ ڈیٹا بیس میں محفوظ کیا جاتا ہے۔Log()تقریب کے ساتھ ختم ہونے والے ایک لاگ پیغام کی پیداوار@کردار، اس کے بعد اس لاگ میں داخل ہو جائے گا پیغام دھکا قطار. ای میل ایڈریس پر دھکا، ویب ہک ایڈریس، وغیرہ میں تشکیلترتیبات دبائیںموجودہ ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم اکاؤنٹ کی. پیغام دھکا کی طرف سے حمایت نہیں ہےڈیبگنگ ٹولز، بیک ٹسٹنگ سسٹم۔ پیغام کو آگے بڑھانے کے لئے تعدد کی حد ہے۔ مخصوص پابندی کے قواعد مندرجہ ذیل ہیں: براہ راست تجارت کے 20 سیکنڈ کے چکر کے اندر ، صرف آخری پش پیغام کو برقرار رکھا جائے گا اور آگے بڑھایا جائے گا ، اور دوسرے پیغامات کو فلٹر کیا جائے گا اور آگے نہیں بڑھایا جائے گا (لاگ فنکشن کے ذریعہ پش لاگ آؤٹ پٹ کو طباعت کیا جائے گا اور لاگ ایریا میں عام طور پر دکھایا جائے گا۔) کے لئےWebHookدھکا، آپ کی طرف سے لکھا سروس پروگرام استعمال کر سکتے ہیںGolang:

package main
import (
    "fmt"
    "net/http"
)            

func Handle (w http.ResponseWriter, r *http.Request) {
    defer func() {
        fmt.Println("req:", *r)
    }()
}            

func main () {
    fmt.Println("listen http://localhost:9090")
    http.HandleFunc("/data", Handle)
    http.ListenAndServe(":9090", nil)
}

سیٹWebHookمیںترتیبات دبائیں: http://XXX.XX.XXX.XX:9090/data?data=Hello_FMZ. تحریری چلانے کے بعدGolangسروس کے پروگرام، ہم حکمت عملی لائیو ٹریڈنگ چلانے شروع، مندرجہ ذیل میں لکھا حکمت عملی ہےJavaScriptزبان، حکمت عملی پر عملدرآمد کی طرف سے چلتا ہےLog()تقریب اور پیغام کو دھکا:

function main() {
    Log("msg", "@")
}

میں لکھا ایک سروس پروگرامGolangزبان دھکا وصول کرتا ہے اور سروس پروگرام پیغام پرنٹ کرتا ہے:

listen http://localhost:9090
req: {GET /data?data=Hello_FMZ HTTP/1.1 1 1 map[User-Agent:[Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/xx.x.xxxx.xxx Safari/537.36] Accept-Encoding:[gzip]] {} <nil> 0 [] false 1XX.XX.X.XX:9090 map[] map[] <nil> map[] XXX.XX.XXX.XX:4xxx2 /data?data=Hello_FMZ <nil> <nil> <nil> 0xc420056300

{@fun/Log/LogReset LogReset}، {@fun/Log/LogVacuum LogVacuum} {@fun/Log/LogReset LogReset}، {@fun/Log/LogVacuum LogVacuum}

لاگ منافع

منافع اور نقصان کی قیمت ریکارڈ کریں، منافع اور نقصان کی قیمت پرنٹ کریں اور منافع اور نقصان کی قیمت پر مبنی واپسی کے منحنی خطوط کو پلاٹ کریں.

لاگ منافع ((منافع) LogProfit ((منافع،...args)

پیرامیٹرprofitآمدنی کے اعداد و شمار ہیں، جو حکمت عملی میں ڈیزائن الگورتھم اور حساب سے ملتے ہیں. منافع سچ نمبر آمدنی کے ریکارڈ میں ضمنی معلومات کو آؤٹ پٹ کرنے کے لئے توسیع شدہ پیرامیٹر،argپیرامیٹرز ایک سے زیادہ منتقل کیا جا سکتا ہے. ارگ غلط تار، نمبر، بول، آبجیکٹ، صف، کسی بھی قسم کے نظام کی طرف سے حمایت کی جیسے null.

function main() {
    // Print 30 points on the earnings chart
    for(var i = 0; i < 30; i++) {
        LogProfit(i, '&')
        Sleep(500)
    }
}
def main():
    for i in range(30):
        LogProfit(i, '&')
        Sleep(500)
void main() {
    for(int i = 0; i < 30; i++) {
        LogProfit(i, '&');
        Sleep(500);
    }
}

کےLogProfitفنکشن، اگر یہ کردار کے ساتھ ختم ہوتا ہے&، صرف آمدنی کا چارٹ تیار کرتا ہے اور آمدنی کا نوشتہ نہیں پرنٹ کرتا ہے۔ مثال کے طور پر:

{@fun/Log/LogProfitReset LogProfitReset}

لاگپروفٹ ری سیٹ کریں

تمام آمدنی کے نوشتہ جات، آمدنی کے چارٹ کو صاف کریں.

لاگپروفٹ ری سیٹ کریں (() لاگ منافع ری سیٹ (باقی)

کےremainپیرامیٹر استعمال کیا جاتا ہے لاگ ان اندراجات کی تعداد کی وضاحت کرنے کے لئے (انتہائی قدر) رکھنے کے لئے. رہنا غلط نمبر

function main() {
    // Print 30 points on the revenue chart, then reset and keep only the last 10 points
    for(var i = 0; i < 30; i++) {
        LogProfit(i)
        Sleep(500)
    }
    LogProfitReset(10)
}
def main():
    for i in range(30):
        LogProfit(i)
        Sleep(500)
    LogProfitReset(10)
void main() {
    for(int i = 0; i < 30; i++) {
        LogProfit(i);
        Sleep(500);
    }
    LogProfitReset(10);
}

{@fun/Log/LogProfit لاگپروفٹ}

لاگ اسٹیٹس

بیک ٹسٹنگ سسٹم یا لائیو ٹریڈنگ پیج کے اسٹیٹس بار میں آؤٹ پٹ کی معلومات۔

لاگ اسٹیٹس ((...msgs)

پیرامیٹرmsgپیداوار کا مواد ہے، اور پیرامیٹرmsgایک سے زیادہ پاس کیا جا سکتا ہے. پی ایس جی غلط تار، نمبر، بول، آبجیکٹ، صف، کسی بھی قسم کے نظام کی طرف سے حمایت کی جیسے null.

function main() {
    LogStatus('This is a general status alert')
    LogStatus('This is a status alert in red font #ff0000')
    LogStatus('This is a multi-line status message \n I am the second line')
}
def main():
    LogStatus('This is a general status alert')
    LogStatus('This is a status alert in red font #ff0000')
    LogStatus('This is a multi-line status message \n I am the second line')
void main() {
    LogStatus("This is a general status alert");
    LogStatus("This is a status alert in red font #ff0000");
    LogStatus("This is a multi-line status message \n I am the second line");
}

یہ آؤٹ پٹ مواد کا رنگ مقرر کرنے کی حمایت کرتا ہے:

function main() {
    var table = {type: 'table', title: 'Position information', cols: ['Column 1', 'Column 2'], rows: [ ['abc', 'def'], ['ABC', 'support color #ff0000']]}
    // JSON serialization with the ` character on both sides, as a complex message format (support tables currently)
    LogStatus('`' + JSON.stringify(table) + '`')                    
    // Table information can also appear in multiple rows
    LogStatus('First line of message\n`' + JSON.stringify(table) + '`\n third line of message')
    // It supports multiple tables at the same time, will be displayed in a group with TAB
    LogStatus('`' + JSON.stringify([table, table]) + '`')
    
    // You can also construct a button in the form, and use the GetCommand strategy to receive the contents of the cmd attribute                                
    var table = { 
        type: 'table', 
        title: 'Position operations', 
        cols: ['Column 1', 'Column 2', 'Action'], 
        rows: [ 
            ['abc', 'def', {'type':'button', 'cmd': 'coverAll', 'name': 'Close out positions'}]
        ]
    }
    LogStatus('`' + JSON.stringify(table) + '`') 
    // Or construct a separate button
    LogStatus('`' + JSON.stringify({'type':'button', 'cmd': 'coverAll', 'name': 'Close out positions'}) + '`') 
    // Customizable button style (bootstrap's button attribute)
    LogStatus('`' + JSON.stringify({'type':'button', 'class': 'btn btn-xs btn-danger', 'cmd': 'coverAll', 'name': 'Close out positions'}) + '`')
}
import json
def main():
    table = {"type": "table", "title": "Position information", "cols": ["Column 1", "Column 2"], "rows": [["abc", "def"], ["ABC", "support color #ff0000"]]}
    LogStatus('`' + json.dumps(table) + '`')
    LogStatus('First line of message\n`' + json.dumps(table) + '`\n third line of message')
    LogStatus('`' + json.dumps([table, table]) + '`')            

    table = {
        "type" : "table", 
        "title" : "Position operations", 
        "cols" : ["Column 1", "Column 2", "Action"], 
        "rows" : [
            ["abc", "def", {"type": "button", "cmd": "coverAll", "name": "Close out positions"}]
        ] 
    }
    LogStatus('`' + json.dumps(table) + '`')
    LogStatus('`' + json.dumps({"type": "button", "cmd": "coverAll", "name": "Close out positions"}) + '`')
    LogStatus('`' + json.dumps({"type": "button", "class": "btn btn-xs btn-danger", "cmd": "coverAll", "name": "Close out positions"}) + '`')
void main() {
    json table = R"({"type": "table", "title": "Position information", "cols": ["Column 1", "Column 2"], "rows": [["abc", "def"], ["ABC", "support color #ff0000"]]})"_json;
    LogStatus("`" + table.dump() + "`");
    LogStatus("First line of message\n`" + table.dump() + "`\n third line of message");
    json arr = R"([])"_json;
    arr.push_back(table);
    arr.push_back(table);
    LogStatus("`" + arr.dump() + "`");            

    table = R"({
        "type" : "table", 
        "title" : "Position operations", 
        "cols" : ["Column 1", "Column 2", "Action"], 
        "rows" : [
            ["abc", "def", {"type": "button", "cmd": "coverAll", "name": "Close out positions"}]
        ] 
    })"_json;
    LogStatus("`" + table.dump() + "`");
    LogStatus("`" + R"({"type": "button", "cmd": "coverAll", "name": "Close out positions"})"_json.dump() + "`");
    LogStatus("`" + R"({"type": "button", "class": "btn btn-xs btn-danger", "cmd": "coverAll", "name": "Close out positions"})"_json.dump() + "`");
}

حالت بار میں ڈیٹا آؤٹ پٹ کا مثال:

function main() {
    var table = {
        type: "table",
        title: "status bar button style",
        cols: ["default", "original", "success", "info", "warning", "danger"], 
        rows: [
            [
                {"type":"button", "class": "btn btn-xs btn-default", "name": "default"},
                {"type":"button", "class": "btn btn-xs btn-primary", "name": "original"},
                {"type":"button", "class": "btn btn-xs btn-success", "name": "success"},
                {"type":"button", "class": "btn btn-xs btn-info", "name": "info"},
                {"type":"button", "class": "btn btn-xs btn-warning", "name": "warning"},
                {"type":"button", "class": "btn btn-xs btn-danger", "name": "danger"}
            ]
        ]
    }
    LogStatus("`" + JSON.stringify(table) + "`")
}
import json
def main():
    table = {
        "type": "table",
        "title": "status bar button style",
        "cols": ["default", "original", "success", "info", "warning", "danger"], 
        "rows": [
            [
                {"type":"button", "class": "btn btn-xs btn-default", "name": "default"},
                {"type":"button", "class": "btn btn-xs btn-primary", "name": "original"},
                {"type":"button", "class": "btn btn-xs btn-success", "name": "success"},
                {"type":"button", "class": "btn btn-xs btn-info", "name": "info"},
                {"type":"button", "class": "btn btn-xs btn-warning", "name": "warning"},
                {"type":"button", "class": "btn btn-xs btn-danger", "name": "danger"}
            ]
        ]
    }
    LogStatus("`" + json.dumps(table) + "`")
void main() {
    json table = R"({
        "type": "table",
        "title": "status bar button style",
        "cols": ["default", "original", "success", "info", "warning", "danger"], 
        "rows": [
            [
                {"type":"button", "class": "btn btn-xs btn-default", "name": "default"},
                {"type":"button", "class": "btn btn-xs btn-primary", "name": "original"},
                {"type":"button", "class": "btn btn-xs btn-success", "name": "success"},
                {"type":"button", "class": "btn btn-xs btn-info", "name": "info"},
                {"type":"button", "class": "btn btn-xs btn-warning", "name": "warning"},
                {"type":"button", "class": "btn btn-xs btn-danger", "name": "danger"}
            ]
        ]
    })"_json;
    LogStatus("`" + table.dump() + "`");
}

یہ اسٹیٹس بار (پرانے بٹن کی ساخت) میں بٹن کنٹرولز ڈیزائن کرنے کے لئے حمایت کرتا ہے:

function main() {
    var table = {
        type: "table",
        title: "Status bar button disable, description function test",
        cols: ["Column 1", "Column 2", "Column 3"], 
        rows: []
    }
    var button1 = {"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button"}
    var button2 = {"type": "button", "name": "button2", "cmd": "button2", "description": "This is the second button, set to disabled", "disabled": true}
    var button3 = {"type": "button", "name": "button3", "cmd": "button3", "description": "This is the third button, set to enable", "disabled": false}
    table.rows.push([button1, button2, button3])
    LogStatus("`" + JSON.stringify(table) + "`")
}
import json
def main():
    table = {
        "type": "table",
        "title": "Status bar button disable, description function test",
        "cols": ["Column 1", "Column 2", "Column 3"], 
        "rows": []
    }
    button1 = {"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button"}
    button2 = {"type": "button", "name": "button2", "cmd": "button2", "description": "This is the second button, set to disabled", "disabled": True}
    button3 = {"type": "button", "name": "button3", "cmd": "button3", "description": "This is the third button, set to enable", "disabled": False}
    table["rows"].append([button1, button2, button3])
    LogStatus("`" + json.dumps(table) + "`")
void main() {
    json table = R"({
        "type": "table",
        "title": "Status bar button disable, description function test",
        "cols": ["Column 1", "Column 2", "Column 3"], 
        "rows": []
    })"_json;
    json button1 = R"({"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button"})"_json;
    json button2 = R"({"type": "button", "name": "button2", "cmd": "button2", "description": "This is the second button, set to disabled", "disabled": true})"_json;
    json button3 = R"({"type": "button", "name": "button3", "cmd": "button3", "description": "This is the third button, set to enable", "disabled": false})"_json;
    json arr = R"([])"_json;
    arr.push_back(button1);
    arr.push_back(button2);
    arr.push_back(button3);
    table["rows"].push_back(arr);
    LogStatus("`" + table.dump() + "`");
}

حالت بار بٹن (پرانے بٹن کی ساخت) کی غیر فعال، وضاحت تقریب مقرر کریں:

function test1() {
    Log("Calling custom functions")
}            

function main() {
    while (true) {
        var table = {
            type: 'table',
            title: 'operation',
            cols: ['column1', 'column2', 'Action'],
            rows: [
                ['a', '1', {
                    'type': 'button',                       
                    'cmd': "CoverAll",                      
                    'name': 'Close out positions'                           
                }],
                ['b', '1', {
                    'type': 'button',
                    'cmd': 10,                              
                    'name': 'Send values'
                }],
                ['c', '1', {
                    'type': 'button',
                    'cmd': _D(),                          
                    'name': 'Calling functions'
                }],
                ['d', '1', {
                    'type': 'button',
                    'cmd': 'test1',       
                    'name': 'Calling custom functions'
                }]
            ]
        }
        LogStatus(_D(), "\n", '`' + JSON.stringify(table) + '`')            

        var str_cmd = GetCommand()
        if (str_cmd) {
            Log("Received interaction data str_cmd:", "type:", typeof(str_cmd), "value:", str_cmd)
            if(str_cmd == "test1") {
                test1()
            }
        }            

        Sleep(500)
    }
}
import json
def test1():
    Log("Calling custom functions")            

def main():
    while True:
        table = {
            "type": "table", 
            "title": "operation", 
            "cols": ["column1", "column2", "Action"],
            "rows": [
                ["a", "1", {
                    "type": "button", 
                    "cmd": "CoverAll",
                    "name": "Close out positions"
                }],
                ["b", "1", {
                    "type": "button",
                    "cmd": 10,
                    "name": "Send values" 
                }], 
                ["c", "1", {
                    "type": "button",
                    "cmd": _D(),
                    "name": "Calling functions" 
                }],
                ["d", "1", {
                    "type": "button",
                    "cmd": "test1",
                    "name": "Calling custom functions" 
                }]
            ]
        }            

        LogStatus(_D(), "\n", "`" + json.dumps(table) + "`")
        str_cmd = GetCommand()
        if str_cmd:
            Log("Received interaction data str_cmd:", "type:", typeof(str_cmd), "value:", str_cmd)
            if str_cmd == "test1":
                test1()
        Sleep(500)
void test1() {
    Log("Calling custom functions");
}            

void main() {
    while(true) {
        json table = R"({
            "type": "table", 
            "title": "operation", 
            "cols": ["column1", "column2", "Action"],
            "rows": [
                ["a", "1", {
                    "type": "button", 
                    "cmd": "CoverAll",
                    "name": "Close out positions"
                }],
                ["b", "1", {
                    "type": "button",
                    "cmd": 10,
                    "name": "Send values" 
                }], 
                ["c", "1", {
                    "type": "button",
                    "cmd": "",
                    "name": "Calling functions" 
                }],
                ["d", "1", {
                    "type": "button",
                    "cmd": "test1",
                    "name": "Calling custom functions" 
                }]
            ]
        })"_json;
        table["rows"][2][2]["cmd"] = _D();
        LogStatus(_D(), "\n", "`" + table.dump() + "`");
        auto str_cmd = GetCommand();
        if(str_cmd != "") {
            Log("Received interaction data str_cmd:", "type:", typeof(str_cmd), "value:", str_cmd);
            if(str_cmd == "test1") {
                test1();
            }
        }
        Sleep(500);
    }
}

کے ساتھ مل کرGetCommand()فنکشن، اسٹیٹس بار بٹن انٹرایکشن فنکشن (پرانے بٹن کی ساخت) کی تعمیر:

function main() {
    var tbl = {
        type: "table",
        title: "operation",
        cols: ["column1", "column2"],
        rows: [
            ["Open position operation", {"type": "button", "cmd": "open", "name": "open position", "input": {"name": "number of open positions", "type": "number", "defValue": 1}}],
            ["Close position operation", {"type": "button", "cmd": "coverAll", "name": "close all positions"}]
        ] 
    }            

    LogStatus(_D(), "\n", "`" + JSON.stringify(tbl) + "`")
    while (true) {
        var cmd = GetCommand()
        if (cmd) {
            Log("cmd:", cmd)
        }
        Sleep(1000)
    }
}
import json            

def main():
    tbl = {
        "type": "table", 
        "title": "operation", 
        "cols": ["column1", "column2"],
        "rows": [
            ["Open position operation", {"type": "button", "cmd": "open", "name": "open position", "input": {"name": "number of open positions", "type": "number", "defValue": 1}}],
            ["Close position operation", {"type": "button", "cmd": "coverAll", "name": "close all positions"}]
        ]
    }            

    LogStatus(_D(), "\n", "`" + json.dumps(tbl) + "`")
    while True:
        cmd = GetCommand()
        if cmd:
            Log("cmd:", cmd)
        Sleep(1000)
void main() {
    json tbl = R"({
        "type": "table", 
        "title": "operation", 
        "cols": ["column1", "column2"],
        "rows": [
            ["Open position operation", {"type": "button", "cmd": "open", "name": "open position", "input": {"name": "number of open positions", "type": "number", "defValue": 1}}],
            ["Close position operation", {"type": "button", "cmd": "coverAll", "name": "close all positions"}]
        ]
    })"_json;            

    LogStatus(_D(), "\n", "`" + tbl.dump() + "`");
    while(true) {
        auto cmd = GetCommand();
        if(cmd != "") {
            Log("cmd:", cmd);
        }
        Sleep(1000);
    }
}

ان پٹ ڈیٹا بھی تعاون یافتہ ہے جب انٹرایکشن کے لئے حالت بار بٹن کی تعمیر، اور انٹرایکشن کے احکامات کی طرف سے قبضہ کر رہے ہیںGetCommand()فنکشن بالآخر. شامل کریںinputاشیاء (پرانے بٹن کی ساخت) حالت بار میں بٹن کنٹرول کے اعداد و شمار کی ساخت میں، مثال کے طور پر شامل کرنے"input": {"name": "number of open positions", "type": "number", "defValue": 1}کرنے کے لئے{"type": "button", "cmd": "open", "name": "open position"}جب بٹن پر کلک کیا جاتا ہے تو ان پٹ باکس کنٹرول کے ساتھ ایک پاپ اپ ظاہر ہو جائے گا (ان پٹ باکس میں ڈیفالٹ قدر 1 ہے، جو کہ ڈیٹا کی طرف سے مقرر کیا جاتا ہےdefValueآپ بٹن کمانڈ کے ساتھ ساتھ بھیجنے کے لئے ڈیٹا درج کرسکتے ہیں۔ مثال کے طور پر ، جب مندرجہ ذیل ٹیسٹ کوڈ چلتا ہے ، "اوپن پوزیشن" بٹن پر کلک کرنے کے بعد ، ان پٹ باکس کے ساتھ ایک پاپ اپ ونڈو پاپ اپ ہوجاتی ہے۔ ان پٹ باکس میں 111 درج کریں اور اوکے پر کلک کریں۔GetCommand()فنکشن اس کے بعد پیغام کو پکڑ لے گا:open:111.

function main() {
    var tbl = {
        type: "table",
        title: "Demonstrate grouping button control",
        cols: ["operation"],
        rows: []
    }

    // Creating a grouping button control structure
    var groupBtn = {
        type: "button",
        cmd: "open",
        name: "open positions",
        group: [
            {"name": "orderType", "description": "下单方式|order type", "type": "selected", "defValue": "market order|pending order"},
            {"name": "tradePrice@orderType==1", "description": "交易价格|trade price", "type": "number", "defValue": 100},
            {"name": "orderAmount", "description": "委托数量|order amount", "type": "string", "defValue": 100},
            {"name": "boolean", "description": "yes/no|boolean", "type": "boolean", "defValue": true}
        ]
    }

    // test button 1
    var testBtn1 = {"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button."}
    var testBtn2 = {"type": "button", "name": "button2", "cmd": "button2", "description": "This is the second button.", "input": {"name": "number of positions opened", "type": "number", "defValue": 1}}

    // Add groupBtn to tbl
    tbl.rows.push([groupBtn])
    // It supports multiple buttons in a cell of a status bar table, i.e. the data in a cell is an array of button structures: [testBtn1, testBtn2].
    tbl.rows.push([[testBtn1, testBtn2]])

    while (true) {
        LogStatus("`" + JSON.stringify(tbl) + "`", "\n", "The grouping button control can also be set directly on the status bar in addition to being set on the status bar form:", "`" + JSON.stringify(groupBtn) + "`")
        var cmd = GetCommand()
        if (cmd) {
            Log("cmd:", cmd)
        }
        Sleep(5000)
    }
}
import json

def main():
    tbl = {
        "type": "table",
        "title": "Demonstrate grouping button control",
        "cols": ["operation"],
        "rows": []
    }

    groupBtn = {
        "type": "button",
        "cmd": "open",
        "name": "open positions",
        "group": [
            {"name": "orderType", "description": "下单方式|order type", "type": "selected", "defValue": "market order|pending order"},
            {"name": "tradePrice@orderType==1", "description": "交易价格|trade price", "type": "number", "defValue": 100},
            {"name": "orderAmount", "description": "委托数量|order amount", "type": "string", "defValue": 100},
            {"name": "boolean", "description": "yes/no|boolean", "type": "boolean", "defValue": True}
        ]
    }

    testBtn1 = {"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button."}
    testBtn2 = {"type": "button", "name": "button2", "cmd": "button2", "description": "This is the second button.", "input": {"name": "number of positions opened", "type": "number", "defValue": 1}}

    tbl["rows"].append([groupBtn])
    tbl["rows"].append([[testBtn1, testBtn2]])

    while True:
        LogStatus("`" + json.dumps(tbl) + "`", "\n", "The grouping button control can also be set directly on the status bar in addition to being set on the status bar form:", "`" + json.dumps(groupBtn) + "`")
        cmd = GetCommand()
        if cmd:
            Log("cmd:", cmd)
        Sleep(5000)
void main() {
    json tbl = R"({
        "type": "table", 
        "title": "Demonstrate grouping button control", 
        "cols": ["operation"],
        "rows": []
    })"_json;

    json groupBtn = R"({
        "type": "button", 
        "name": "open positions", 
        "cmd": "open", 
        "group": [
            {"name": "orderType", "description": "下单方式|order type", "type": "selected", "defValue": "market order|pending order"},
            {"name": "tradePrice@orderType==1", "description": "交易价格|trade price", "type": "number", "defValue": 100},
            {"name": "orderAmount", "description": "委托数量|order amount", "type": "string", "defValue": 100},
            {"name": "boolean", "description": "yes/no|boolean", "type": "boolean", "defValue": true}
    ]})"_json;

    json testBtn1 = R"({"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button."})"_json;
    json testBtn2 = R"({"type": "button", "name": "button2", "cmd": "button2", "description": "This is the second button.", "input": {"name": "number of positions opened", "type": "number", "defValue": 1}})"_json;
    
    tbl["rows"].push_back({groupBtn});
    tbl["rows"].push_back({{testBtn1, testBtn2}});
    
    while(true) {
        LogStatus("`" + tbl.dump() + "`", "\n", "The grouping button control can also be set directly on the status bar in addition to being set on the status bar form:", "`" + groupBtn.dump() + "`");
        auto cmd = GetCommand();
        if(cmd != "") {
            Log("cmd:", cmd);
        }
        Sleep(5000);
    }
}

یہ گروپ بٹن کنٹرولز کے لئے حمایت کرتا ہے (پرانے بٹن کی ساخت)اعداد و شمار کے اندراج کی حمایت کرنے والے حالت بار بٹن(input فیلڈ کا استعمال کرتے ہوئے مقرر). انٹرایکٹو احکامات بالآخر کی طرف سے قبضہ کر رہے ہیںGetCommand()فنکشن. فرق یہ ہے کہ کے ساتھ"group"فیلڈ کی ترتیب، جب بٹن پر کلک کیا جاتا ہے تعامل کو متحرک کرنے کے لئے، صفحے پر پاپ اپ کہ ڈائیلاگ ایک سیٹ پر مشتملگروپان پٹ کنٹرولز کے ایک بار میں اعداد و شمار کے ایک گروپ میں داخل کرنے کے لئے مقرر. کے بارے میں نوٹ کرنے کے لئے چند نکات"group"حالت بار بٹن کنٹرول اور گروپ بٹن کنٹرول کی ساخت میں فیلڈ:

  • کےtypeگروپ میں پراپرٹی صرف مندرجہ ذیل چار اقسام کی حمایت کرتا ہے، اورdefValueپراپرٹی ڈیفالٹ ویلیو ہے۔ selected: ایک ڈراپ ڈاؤن باکس کنٹرول|ایک ڈراپ ڈاؤن باکس میں ہر اختیار کو الگ کرنے کے لئے علامت کے طور پر یہ مقرر کیا جاتا ہے. نومبر: عددی ان پٹ باکس کنٹرول. string: سٹرنگ ان پٹ باکس کنٹرول. boolean: چیک باکس کنٹرول، (بولین) سچ کے لئے چیک کیا، (بولین) غلط کے لئے چیک نہیں کیا.
  • انٹرایکٹو ان پٹ سپورٹ انحصار کی ترتیبات پر کنٹرول: مثال کے طور پر، مندرجہ ذیل مثال میں:"name": "tradePrice@orderType==1"ترتیب، جس سےتجارت قیمتان پٹ کنٹرول صرف اس وقت دستیاب ہے جبآرڈرٹائپڈراپ ڈاؤن کنٹرول ایک کے طور پر منتخب کیا جاتا ہےزیر التوا حکم.
  • Bilingual control name support for interactive inputs دو لسانی کنٹرول ناموں کی حمایت مثال کے طور پر، مندرجہ ذیل مثال میں: description: ایک ہی طریقے سے order type setting, use|علامتوں کو چینی اور انگریزی میں تفصیل کے مواد کو الگ کرنے کے لئے.
  • name, descriptionگروپ میں اورname, descriptionبٹن کی ساخت میں ایک ہی تعریف نہیں ہے اگرچہ وہ ایک ہی فیلڈ کے نام ہیں. کی تعریفnameگروپ میں بھی تعریف سے مختلف ہےnameان پٹ میں.
  • جب گروپ بٹن کنٹرول کو ٹرگر کیا جاتا ہے تو ، تعامل کا مواد بٹن کی cmd فیلڈ ویلیو اور گروپ فیلڈ کے متعلقہ ڈیٹا کی شکل میں بھیجا جاتا ہے ، جیسے آؤٹ پٹLog("cmd:", cmd)مندرجہ ذیل مثال ٹیسٹ میں بیان:cmd: open:{"orderType":1,"tradePrice":99,"orderAmount":"99","boolean":true}، یعنی، کیا واپس کیا جاتا ہےGetCommand()جب ایک تعامل ہوتا ہے تو فنکشن:open:{"orderType":1,"tradePrice":99,"orderAmount":"99","boolean":true}.
  • کےtypeبٹن کنٹرول کی خصوصیت صرف حمایت کرتا ہے:"button". بٹن کنٹرولز جو ان پٹ ڈیٹا کی حمایت کرتے ہیں، یعنی کنٹرولزinputپراپرٹی سیٹ،typeکی ترتیب کی معلومات میں خصوصیاتinputمیدان متعدد کنٹرول اقسام کی حمایت کرتا ہے. مندرجہ ذیل مثالوں کا حوالہ دیں:
function main() {
    // Status bar button control (set input field to implement) testBtn1 button triggered by the page in the drop-down box control using the options field to set options, using the defValue field to set the default options. This is different from the other examples in this chapter, which use defValue to set the options directly.
    var testBtn1 = {
        type: "button",
        name: "testBtn1",
        cmd: "cmdTestBtn1",
        input: {name: "testBtn1ComboBox", type: "selected", options: ["A", "B"], defValue: 1}
    }

    /* 
      Status bar button control (set input field implementation) testBtn2 button triggered by the page in the drop-down box control using the options field to set the options, options field in the options field not only supports the string,
      the use of the ```{text: "description", value: "value"}``` structure is also supported. Use the defValue field to set the default option, which can be multiple choice (multiple choice via array structure). Multiple choice requires setting the additional field multiple to a true value.
    */
    var testBtn2 = {
        type: "button", 
        name: "testBtn2",
        cmd: "cmdTestBtn2",
        input: {
            name: "testBtn2MultiComboBox", 
            type: "selected", 
            description: "Implementing dropdown box multi-selection", 
            options: [{text: "Option A", value: "A"}, {text: "Option B", value: "B"}, {text: "Option C", value: "C"}],
            defValue: ["A", "C"],
            multiple: true
        }
    }

    // Status bar grouping button control (set group field implementation) testBtn3 button triggered by the page in the drop-down box control using the options field to set options, also supports the direct use of defValue set options.
    var testBtn3 = {
        type: "button",                     
        name: "testBtn3",
        cmd: "cmdTestBtn3", 
        group: [
            {name: "comboBox1", label: "labelComboBox1", description: "Dropdown box 1", type: "selected", defValue: 1, options: ["A", "B"]}, 
            {name: "comboBox2", label: "labelComboBox2", description: "Dropdown box 2", type: "selected", defValue: "A|B"}, 
            {name: "comboBox3", label: "labelComboBox3", description: "Dropdown box 3", type: "selected", defValue: [0, 2], multiple: true, options: ["A", "B", "C"]}, 
            {
                name: "comboBox4", 
                label: "labelComboBox4", 
                description: "Dropdown box 4", 
                type: "selected", 
                defValue: ["A", "C"], 
                multiple: true, 
                options: [{text: "Option A", value: "A"}, {text: "Option B", value: "B"}, {text: "Option C", value: "C"}, {text: "Option D", value: "D"}]
            }
        ]
    }
    while (true) {
        LogStatus("`" + JSON.stringify(testBtn1) + "`\n", "`" + JSON.stringify(testBtn2) + "`\n", "`" + JSON.stringify(testBtn3) + "`\n")
        var cmd = GetCommand()
        if (cmd) {
            Log(cmd)
        }
        Sleep(5000)
    }
}
import json

def main():
    testBtn1 = {
        "type": "button",
        "name": "testBtn1",
        "cmd": "cmdTestBtn1",
        "input": {"name": "testBtn1ComboBox", "type": "selected", "options": ["A", "B"], "defValue": 1}
    }

    testBtn2 = {
        "type": "button", 
        "name": "testBtn2",
        "cmd": "cmdTestBtn2",
        "input": {
            "name": "testBtn2MultiComboBox", 
            "type": "selected", 
            "description": "Implementing dropdown box multi-selection", 
            "options": [{"text": "Option A", "value": "A"}, {"text": "Option B", "value": "B"}, {"text": "Option C", "value": "C"}],
            "defValue": ["A", "C"],
            "multiple": True
        }
    }

    testBtn3 = {
        "type": "button",                     
        "name": "testBtn3",
        "cmd": "cmdTestBtn3", 
        "group": [
            {"name": "comboBox1", "label": "labelComboBox1", "description": "Dropdown box 1", "type": "selected", "defValue": 1, "options": ["A", "B"]}, 
            {"name": "comboBox2", "label": "labelComboBox2", "description": "Dropdown box 2", "type": "selected", "defValue": "A|B"}, 
            {"name": "comboBox3", "label": "labelComboBox3", "description": "Dropdown box 3", "type": "selected", "defValue": [0, 2], "multiple": True, "options": ["A", "B", "C"]}, 
            {
                "name": "comboBox4", 
                "label": "labelComboBox4", 
                "description": "Dropdown box 4", 
                "type": "selected", 
                "defValue": ["A", "C"], 
                "multiple": True, 
                "options": [{"text": "Option A", "value": "A"}, {"text": "Option B", "value": "B"}, {"text": "Option C", "value": "C"}, {"text": "Option D", "value": "D"}]
            }
        ]
    }

    while True:
        LogStatus("`" + json.dumps(testBtn1) + "`\n", "`" + json.dumps(testBtn2) + "`\n", "`" + json.dumps(testBtn3) + "`\n")
        cmd = GetCommand()
        if cmd:
            Log(cmd)
        Sleep(5000)
void main() {
    json testBtn1 = R"({
        "type": "button",
        "name": "testBtn1",
        "cmd": "cmdTestBtn1",
        "input": {"name": "testBtn1ComboBox", "type": "selected", "options": ["A", "B"], "defValue": 1}
    })"_json;
    
    json testBtn2 = R"({
        "type": "button", 
        "name": "testBtn2",
        "cmd": "cmdTestBtn2",
        "input": {
            "name": "testBtn2MultiComboBox", 
            "type": "selected", 
            "description": "Implementing dropdown box multi-selection", 
            "options": [{"text": "Option A", "value": "A"}, {"text": "Option B", "value": "B"}, {"text": "Option C", "value": "C"}],
            "defValue": ["A", "C"],
            "multiple": true
        }
    })"_json;
    
    json testBtn3 = R"({
        "type": "button",                     
        "name": "testBtn3",
        "cmd": "cmdTestBtn3", 
        "group": [
            {"name": "comboBox1", "label": "labelComboBox1", "description": "Dropdown box 1", "type": "selected", "defValue": 1, "options": ["A", "B"]}, 
            {"name": "comboBox2", "label": "labelComboBox2", "description": "Dropdown box 2", "type": "selected", "defValue": "A|B"}, 
            {"name": "comboBox3", "label": "labelComboBox3", "description": "Dropdown box 3", "type": "selected", "defValue": [0, 2], "multiple": true, "options": ["A", "B", "C"]}, 
            {
                "name": "comboBox4", 
                "label": "labelComboBox4", 
                "description": "Dropdown box 4", 
                "type": "selected", 
                "defValue": ["A", "C"], 
                "multiple": true, 
                "options": [{"text": "Option A", "value": "A"}, {"text": "Option B", "value": "B"}, {"text": "Option C", "value": "C"}, {"text": "Option D", "value": "D"}]
            }
        ]
    })"_json;
    
    while (true) {
        LogStatus("`" + testBtn1.dump() + "`\n", "`" + testBtn2.dump() + "`\n", "`" + testBtn3.dump() + "`\n");
        auto cmd = GetCommand();
        if (cmd != "") {
            Log(cmd);
        }
        Sleep(5000);
    }
}

جب حالت بار گروپ بٹن کنٹرول (کی ترتیب کی طرف سے لاگوgroupفیلڈ) اور حالت بار بٹن کنٹرول (کی ترتیب کی طرف سے لاگو کیا جاتا ہےinputفیلڈ) پر کلک کیا جاتا ہے تاکہ تعامل کو متحرک کیا جاسکے (پرانا بٹن ڈھانچہ) ، صفحے پر پاپ اپ ہونے والے ڈائیلاگ باکس میں ڈراپ ڈاؤن باکس کنٹرول متعدد انتخابوں کی بھی حمایت کرتا ہے۔ مندرجہ ذیل مثال میں دکھایا گیا ہے کہ متعدد انتخاب کے اختیارات کے ساتھ ڈراپ ڈاؤن باکس کنٹرول کو کس طرح ڈیزائن کیا جائے:

var symbols = ["BTC_USDT.swap", "ETH_USDT.swap", "LTC_USDT.swap", "BNB_USDT.swap", "SOL_USDT.swap"]

function createBtn(tmp, group) {
    var btn = JSON.parse(JSON.stringify(tmp))

    _.each(group, function(eleByGroup) {
        btn["group"].unshift(eleByGroup)
    })

    return btn
}

function main() {
    var arrManager = []

    _.each(symbols, function(symbol) {
        arrManager.push({
            "symbol": symbol,
        })
    })

    // Btn
    var tmpBtnOpen = {
        "type": "button",
        "cmd": "open",
        "name": "Open a position and place an order",
        "group": [{
            "type": "selected",
            "name": "tradeType",
            "label": "Order type",
            "description": "Market order, limit order",
            "default": 0,
            "group": "Trading setup",
            "settings": {
                "options": ["Market order", "Limit order"],
                "required": true,
            }
        }, {
            "type": "selected",
            "name": "direction",
            "label": "Trading direction",
            "description": "Buy, sell",
            "default": "buy",
            "group": "Trading setup",
            "settings": {
                "render": "segment",
                "required": true,
                "options": [{"name": "buy", "value": "buy"}, {"name": "sell", "value": "sell"}],
            }
        }, {
            "type": "number",
            "name": "price",
            "label": "price",
            "description": "The price of the order",
            "group": "Trading setup",
            "filter": "tradeType==1",
            "settings": {
                "required": true,
            }
        }, {
            "type": "number",
            "name": "amount",
            "label": "Order quantity",
            "description": "Order quantity",
            "group": "Trading setup",
            "settings": {
                "required": true,
            }
        }],
    }

    while (true) {
        var tbl = {"type": "table", "title": "dashboard", "cols": ["symbol", "actionOpen"], "rows": []}

        _.each(arrManager, function(m) {
            var btnOpen = createBtn(tmpBtnOpen, [{"type": "string", "name": "symbol", "label": "Trading instruments", "default": m["symbol"], "settings": {"required": true}}])
            tbl["rows"].push([m["symbol"], btnOpen])
        })

        var cmd = GetCommand()
        if (cmd) {
            Log("Receive interaction:", cmd)

            // Parsing interaction messages: open:{"symbol":"LTC_USDT.swap","tradeType":0,"direction":"buy","amount":111}
            // According to the first colon: the previous instruction determines which button template triggers the message
            var arrCmd = cmd.split(":", 2)
            if (arrCmd[0] == "open") {
                var msg = JSON.parse(cmd.slice(5))
                Log("Trading instruments:", msg["symbol"], ", Trading direction:", msg["direction"], ", Order type:", msg["tradeType"] == 0 ? "Market order" : "Limit order", msg["tradeType"] == 0 ? ", Order price: current market price" : ", Order price:" + msg["price"], ", Order quantity:", msg["amount"])
            }
        }

        LogStatus(_D(), "\n", "`" + JSON.stringify(tbl) + "`")
        Sleep(1000)
    }
}
import json

symbols = ["BTC_USDT.swap", "ETH_USDT.swap", "LTC_USDT.swap", "BNB_USDT.swap", "SOL_USDT.swap"]

def createBtn(tmp, group):
    btn = json.loads(json.dumps(tmp))
    for eleByGroup in group:
        btn["group"].insert(0, eleByGroup)
    return btn

def main():
    arrManager = []

    for symbol in symbols:
        arrManager.append({"symbol": symbol})

    # Btn
    tmpBtnOpen = {
        "type": "button",
        "cmd": "open",
        "name": "Open a position and place an order",
        "group": [{
            "type": "selected",
            "name": "tradeType",
            "label": "Order type",
            "description": "Market order, limit order",
            "default": 0,
            "group": "Trading setup",
            "settings": {
                "options": ["Market order", "Limit order"],
                "required": True,
            }
        }, {
            "type": "selected",
            "name": "direction",
            "label": "Trading direction",
            "description": "Buy, sell",
            "default": "buy",
            "group": "Trading Setup",
            "settings": {
                "render": "segment",
                "required": True,
                "options": [{"name": "买入", "value": "buy"}, {"name": "卖出", "value": "sell"}],
            }
        }, {
            "type": "number",
            "name": "price",
            "label": "price",
            "description": "The price of the order",
            "group": "Trading Setup",
            "filter": "tradeType==1",
            "settings": {
                "required": True,
            }
        }, {
            "type": "number",
            "name": "amount",
            "label": "Order quantity",
            "description": "Order quantity",
            "group": "Trading Setup",
            "settings": {
                "required": True,
            }
        }],
    }

    while True:
        tbl = {"type": "table", "title": "dashboard", "cols": ["symbol", "actionOpen"], "rows": []}
        for m in arrManager:
            btnOpen = createBtn(tmpBtnOpen, [{"type": "string", "name": "symbol", "label": "交易品种", "default": m["symbol"], "settings": {"required": True}}])
            tbl["rows"].append([m["symbol"], btnOpen])

        cmd = GetCommand()

        if cmd != "" and cmd != None:
            Log("Receive interaction:", cmd) 

            # Parsing interaction messages: open:{"symbol":"LTC_USDT.swap","tradeType":0,"direction":"buy","amount":111}
            # According to the first colon: the previous instruction determines which button template triggers the message
            arrCmd = cmd.split(":")
            if arrCmd[0] == "open":
                msg = json.loads(cmd[5:])
                Log("Trading instruments:", msg["symbol"], ", Trading direction:", msg["direction"], ", Order type:", "Market order" if msg["tradeType"] == 0 else "Limit order", ", Order price: current market price" if msg["tradeType"] == 0 else ", Order price:" + str(msg["price"]), ", Order quantity:", msg["amount"])
        
        # Output status bar information
        LogStatus(_D(), "\n", "`" + json.dumps(tbl) + "`")
        Sleep(1000)
// Omit...

اسٹیٹس بار ٹیبل میں بٹن بنانے کے لئے تازہ ترین بٹن ڈھانچے کا استعمال کریں۔ جب تعامل شروع کرنے کے لئے بٹن پر کلک کریں تو ، ایک ملٹی کنٹرول پاپ اپ ونڈو پاپ اپ ہوگی۔ مزید تفصیلات کے لیے ملاحظہ کریں:صارف گائیڈ - حالت بار میں انٹرایکٹو کنٹرولز.

function main() {
    var table = { 
        type: 'table', 
        title: 'position operation', 
        cols: ['column1', 'column2', 'Action'], 
        rows: [ 
            ['abc', 'def', {'type':'button', 'cmd': 'coverAll', 'name': 'close positions'}]
        ]
    } 
    var ticker = exchange.GetTicker()
    // Add a row of data, merge the first and second cells, and output the ticker variable in the merged cell
    table.rows.push([{body : JSON.stringify(ticker), colspan : 2}, "abc"])    
    LogStatus('`' + JSON.stringify(table) + '`')
}
import json
def main():
    table = {
        "type" : "table",
        "title" : "position operation",
        "cols" : ["column1", "column2", "Action"],
        "rows" : [
            ["abc", "def", {"type": "button", "cmd": "coverAll", "name": "close positions"}]
        ]
    }
    ticker = exchange.GetTicker()
    table["rows"].append([{"body": json.dumps(ticker), "colspan": 2}, "abc"])
    LogStatus("`" + json.dumps(table) + "`")
void main() {
    json table = R"({
        "type" : "table",
        "title" : "position operation",
        "cols" : ["column1", "column2", "Action"],
        "rows" : [
            ["abc", "def", {"type": "button", "cmd": "coverAll", "name": "close positions"}]
        ]
    })"_json;            

    auto ticker = exchange.GetTicker();
    json jsonTicker = R"({"Buy": 0, "Sell": 0, "High": 0, "Low": 0, "Volume": 0, "Last": 0, "Time": 0})"_json;
    jsonTicker["Buy"] = ticker.Buy;
    jsonTicker["Sell"] = ticker.Sell;
    jsonTicker["Last"] = ticker.Last;
    jsonTicker["Volume"] = ticker.Volume;
    jsonTicker["Time"] = ticker.Time;
    jsonTicker["High"] = ticker.High;
    jsonTicker["Low"] = ticker.Low;            

    json arr = R"([{"body": {}, "colspan": 2}, "abc"])"_json;
    arr[0]["body"] = jsonTicker;
    table["rows"].push_back(arr);
    LogStatus("`" + table.dump() + "`");
}

کی طرف سے تیار ٹیبل کے اندر اندر خلیات کے افقی ضمLogStatus()فنکشن:

function main() {
    var table = { 
        type: 'table', 
        title: 'table demo', 
        cols: ['columnA', 'columnB', 'columnC'], 
        rows: [ 
            ['A1', 'B1', {'type':'button', 'cmd': 'coverAll', 'name': 'C1'}]
        ]
    }             

    var ticker = exchange.GetTicker()
    var name = exchange.GetName()            

    table.rows.push([{body : "A2 + B2:" + JSON.stringify(ticker), colspan : 2}, "C2"])
    table.rows.push([{body : "A3 + A4 + A5:" + name, rowspan : 3}, "B3", "C3"])
    // A3 is merged by the first cell in the previous row
    table.rows.push(["B4", "C4"])
    // A2 is merged by the first cell of the previous row
    table.rows.push(["B5", "C5"])                                            
    table.rows.push(["A6", "B6", "C6"])
    LogStatus('`' + JSON.stringify(table) + '`')
}
import json
def main():
    table = {
        "type" : "table", 
        "title" : "table demo", 
        "cols" : ["columnA", "columnB", "columnC"], 
        "rows" : [
            ["A1", "B1", {"type": "button", "cmd": "coverAll", "name": "C1"}]
        ]
    }
    
    ticker = exchange.GetTicker()
    name = exchange.GetName()
    
    table["rows"].append([{"body": "A2 + B2:" + json.dumps(ticker), "colspan": 2}, "C2"])
    table["rows"].append([{"body": "A3 + A4 + A5:" + name, "rowspan": 3}, "B3", "C3"])
    table["rows"].append(["B4", "C4"])
    table["rows"].append(["B5", "C5"])
    table["rows"].append(["A6", "B6", "C6"])
    LogStatus("`" + json.dumps(table) + "`")
void main() {
    json table = R"({
        "type" : "table", 
        "title" : "table demo", 
        "cols" : ["columnA", "columnB", "columnC"], 
        "rows" : [
            ["A1", "B1", {"type": "button", "cmd": "coverAll", "name": "C1"}]
        ]
    })"_json;
    // For testing purposes, the code is short and easy to read, and the constructed data is used here
    json jsonTicker = R"({"High": 0, "Low": 0, "Buy": 0, "Sell": 0, "Last": 0, "Time": 0, "Volume": 0})"_json;
    auto name = exchange.GetName();
    json arr1 = R"([{"body": "", "colspan": 2}, "C2"])"_json;
    arr1[0]["body"] = "A2 + B2:" + jsonTicker.dump();
    json arr2 = R"([{"body": "", "rowspan": 3}, "B3", "C3"])"_json;
    arr2[0]["body"] = "A3 + A4 + A5:" + name;
    table["rows"].push_back(arr1);
    table["rows"].push_back(arr2);
    table["rows"].push_back(R"(["B4", "C4"])"_json);
    table["rows"].push_back(R"(["B5", "C5"])"_json);
    table["rows"].push_back(R"(["A6", "B6", "C6"])"_json);
    LogStatus("`" + table.dump() + "`");
}

عمودی طور پر خلیات کی طرف سے تیار ٹیبل میں ضمLogStatus()فنکشن:

function main() {
    var table1 = {type: 'table', title: 'table1', cols: ['column1', 'column2'], rows: [ ['abc', 'def'], ['ABC', 'support color #ff0000']]}
    var table2 = {type: 'table', title: 'table2', cols: ['column1', 'column2'], rows: [ ['abc', 'def'], ['ABC', 'support color #ff0000']]}
    LogStatus('`' + JSON.stringify([table1, table2]) + '`')
}
import json
def main():
    table1 = {"type": "table", "title": "table1", "cols": ["column1", "column2"], "rows": [ ["abc", "def"], ["ABC", "support color #ff0000"]]}
    table2 = {"type": "table", "title": "table2", "cols": ["column1", "column2"], "rows": [ ["abc", "def"], ["ABC", "support color #ff0000"]]}
    LogStatus("`" + json.dumps([table1, table2]) + "`")
void main() {
    json table1 = R"({"type": "table", "title": "table1", "cols": ["column1", "column2"], "rows": [ ["abc", "def"], ["ABC", "support color #ff0000"]]})"_json;
    json table2 = R"({"type": "table", "title": "table2", "cols": ["column1", "column2"], "rows": [ ["abc", "def"], ["ABC", "support color #ff0000"]]})"_json;
    json arr = R"([])"_json;
    arr.push_back(table1);
    arr.push_back(table2);
    LogStatus("`" + arr.dump() + "`");
}

اسٹیٹس بار ٹیبل صفحہ بندی دکھائیں:

function main(){
    var tab1 = {
        type : "table",
        title : "table1",
        cols : ["1", "2"],
        rows : []
    }
    var tab2 = {
        type : "table",
        title : "table2",
        cols : ["1", "2", "3"],
        rows : []
    }
    var tab3 = {
        type : "table",
        title : "table3",
        cols : ["A", "B", "C"],
        rows : []
    }            

    tab1.rows.push(["jack", "lucy"])
    tab2.rows.push(["A", "B", "C"])
    tab3.rows.push(["A", "B", "C"])            

    LogStatus('`' + JSON.stringify(tab1) + '`\n' + 
        '`' + JSON.stringify(tab2) + '`\n' +
        '`' + JSON.stringify(tab3) + '`')
  
    Log("exit")
}
import json
def main():
    tab1 = {
        "type": "table", 
        "title": "table1", 
        "cols": ["1", "2"], 
        "rows": []
    }
    tab2 = {
        "type": "table", 
        "title": "table2", 
        "cols": ["1", "2", "3"], 
        "rows": []
    }
    tab3 = {
        "type": "table", 
        "title": "table3", 
        "cols": ["A", "B", "C"], 
        "rows": []
    }            

    tab1["rows"].append(["jack", "lucy"])
    tab2["rows"].append(["A", "B", "C"])
    tab3["rows"].append(["A", "B", "C"])
    LogStatus("`" + json.dumps(tab1) + "`\n" + 
        "`" + json.dumps(tab2) + "`\n" + 
        "`" + json.dumps(tab3) + "`")
void main() {
    json tab1 = R"({
        "type": "table", 
        "title": "table1", 
        "cols": ["1", "2"], 
        "rows": []
    })"_json;
    json tab2 = R"({
        "type": "table", 
        "title": "table2", 
        "cols": ["1", "2", "3"], 
        "rows": []
    })"_json;
    json tab3 = R"({
        "type": "table", 
        "title": "table3", 
        "cols": ["A", "B", "C"], 
        "rows": []
    })"_json;
    tab1["rows"].push_back(R"(["jack", "lucy"])"_json);
    tab2["rows"].push_back(R"(["A", "B", "C"])"_json);
    tab3["rows"].push_back(R"(["A", "B", "C"])"_json);
    LogStatus("`" + tab1.dump() + "`\n" + 
        "`" + tab2.dump() + "`\n" +
        "`" + tab3.dump() + "`");
}

صفحات میں ٹیبلز کی نمائش کے علاوہ، متعدد ٹیبلز کو اوپر سے نیچے کے حکم میں بھی دکھایا جا سکتا ہے:

function main() {
    var tbl = {
        type : "table",
        title : "test scroll",
        scroll : "auto",
        cols : ["col 0", "col 1", "col 2", "col 3", "col 4", "col 5", "col 6", "col 7", "col 8", "col 9", "col 10", 
            "col 11", "col 12", "col 13", "col 14", "col 15", "col 16", "col 17", "col 18", "col 19", "col 20"],
        rows : []
    }

    for (var i = 1 ; i < 100 ; i++) {
        tbl.rows.push([i, "1," + i, "2," + i, "3," + i, "4," + i, "5," + i, "6," + i, "7," + i, "8," + i, "9," + i, "10," + i, 
            "11," + i, "12," + i, "13," + i, "14," + i, "15," + i, "16," + i, "17," + i, "18," + i, "19," + i, "20," + i])
    }
    
    LogStatus("`" + JSON.stringify(tbl) + "`")
}
import json

def main():
    tbl = {
        "type" : "table",
        "title" : "test scroll",
        "scroll" : "auto",
        "cols" : ["col 0", "col 1", "col 2", "col 3", "col 4", "col 5", "col 6", "col 7", "col 8", "col 9", "col 10", 
            "col 11", "col 12", "col 13", "col 14", "col 15", "col 16", "col 17", "col 18", "col 19", "col 20"],
        "rows" : []
    }

    for index in range(1, 100):
        i = str(index)
        tbl["rows"].append([i, "1," + i, "2," + i, "3," + i, "4," + i, "5," + i, "6," + i, "7," + i, "8," + i, "9," + i, "10," + i, 
            "11," + i, "12," + i, "13," + i, "14," + i, "15," + i, "16," + i, "17," + i, "18," + i, "19," + i, "20," + i])
    
    LogStatus("`" + json.dumps(tbl) + "`")
void main() {
    json table = R"({
        "type" : "table",
        "title" : "test scroll",
        "scroll" : "auto",
        "cols" : ["col 0", "col 1", "col 2", "col 3", "col 4", "col 5", "col 6", "col 7", "col 8", "col 9", "col 10", 
            "col 11", "col 12", "col 13", "col 14", "col 15", "col 16", "col 17", "col 18", "col 19", "col 20"],
        "rows" : []
    })"_json;

    for (int index = 1; index < 100; ++index) {
        std::string i = std::to_string(index);
        table["rows"].push_back({i, "1," + i, "2," + i, "3," + i, "4," + i, "5," + i, "6," + i, "7," + i, "8," + i, "9," + i, "10," + i,
            "11," + i, "12," + i, "13," + i, "14," + i, "15," + i, "16," + i, "17," + i, "18," + i, "19," + i, "20," + i});
    }

    LogStatus("`" + table.dump() + "`");
}

اسٹیٹس بار ٹیبل کے افقی اور عمودی سکرول موڈ کو سیٹ کرنے کے لئے سپورٹ.scrollکے لئے وصف"auto"، جب اسٹیٹس بار ٹیبل کی عمودی صفوں کی تعداد 20 صفوں سے زیادہ ہو تو مواد سکرول کیا جائے گا۔ جب افقی کالموں کی تعداد صفحے کی نمائش کے دائرے سے زیادہ ہو تو ،scrollاس خصوصیت کا استعمال براہ راست تجارت کے دوران بڑی مقدار میں اعداد و شمار کو اسٹیٹس بار میں لکھنے کے تاخیر کے مسئلے کو کم کرنے کے لئے کیا جاسکتا ہے۔ مندرجہ ذیل ٹیسٹ کی مثال دیکھیں:

معلومات کی پیداوارLogStatus()جب لائیو ٹریڈنگ چل رہی ہے تو اس فنکشن کو لائیو ٹریڈنگ ڈیٹا بیس میں محفوظ نہیں کیا جاتا ہے، لیکن یہ صرف موجودہ لائیو ٹریڈنگ کی حیثیت بار کے مواد کو اپ ڈیٹ کرتا ہے۔ کےLogStatus()تقریب پرنٹنگ کی حمایت کرتا ہےbase64کوڈ شدہ تصاویر، کے ساتھ شروع`اور اس کے ساتھ ختم`مثلاً:LogStatus("`data:image/png;base64,AAAA`"). کےLogStatus()فنکشن گزرنے کی حمایت کرتا ہےmatplotlib.pyplotاشیاء براہ راست میںPython، جب تک کہ اعتراض میں شامل ہےsavefigطریقہ کار، یہ ایک پیرامیٹر کے طور پر منتقل کیا جا سکتا ہےLogStatus()فنکشن، مثال کے طور پر:

import matplotlib.pyplot as plt 
def main():
    plt.plot([3,6,2,4,7,1])
    LogStatus(plt) 

جب حکمت عملی رواں تجارت چل رہی ہے ، اگر آپ رواں تجارت کے صفحے پر تاریخ کے ذریعے جاتے ہیں تو ، اسٹیٹس بار سوتے ہیں اور اپ ڈیٹ کرنا بند کردیتے ہیں۔ جب لاگ پہلے صفحے پر ہوتا ہے تو صرف اسٹیٹس بار کے ڈیٹا کو تازہ دم کیا جاتا ہے۔ یہ آؤٹ پٹ کی حمایت کرتا ہےbase64حالت بار میں انکوڈ تصاویر، اور یہ بھی پیداوار کی حمایت کرتا ہےbase64اسٹیٹس بار میں دکھائے جانے والے ٹیبل میں کوڈت تصاویر۔ چونکہ کوڈت تصویر کا سٹرنگ ڈیٹا عام طور پر بہت لمبا ہوتا ہے ، لہذا نمونہ کوڈ نہیں دکھایا جاتا ہے۔

{@fun/Global/GetCommand GetCommand} {@fun/Global/GetCommand GetCommand} {@fun/Global/GetCommand GetCommand} {@گلوبل/GetCommand GetCommand} {@گلوبل/GetCommand GetCommand} {@گلوبل/GetCommand GetCommand}

EnableLog کو فعال کریں

آرڈر کی معلومات کی لاگنگ کو آن یا آف کریں۔

EnableLog (قابل عمل)

اگرenableپیرامیٹر ایک غلط قدر پر مقرر کیا جاتا ہے، مثال کے طور پرfalse، آرڈر لاگ (یعنی جیسے افعال کی طرف سے پیدا لاگexchange.Buy()) پرنٹ نہیں کیا جاتا ہے اور براہ راست تجارت کے ڈیٹا بیس میں نہیں لکھا جاتا ہے۔ قابل بنانا سچ بول

function main() {
    EnableLog(false)
}
def main():
    EnableLog(False)
void main() {
    EnableLog(false);
}

{@fun/Trade/exchange.Buy exchange.Buy}، {@fun/Trade/exchange.Sell exchange.Sell}، {@fun/Trade/exchange.CancelOrder exchange.CancelOrder}، {@fun/Trade/exchange.Buy exchange.Buy}، {@fun/Trade/exchange.Buy}، {@fun/Trade/exchange.Buy}، {@fun/Trade/exchange.Buy.Exchange.Buy}، {@fun/Trade/exchange.Buy.Exchange.Buy}، {@fun/Trade/exchange.Buy.Exchange.Buy}، {@fun/Trade/exchange.Sell exchange.Sell exchange.Sell}، {@fun/Trade/exchange.Trade.Exchange.CancelOrder.Exchange.CancelOrder}، {@fun/Trade/Exchange.Exchange.Sell.Sell}، {@fun/Trade/Exchange.Sell}، {@fun/T

چارٹ

چارٹ ڈرائنگ فنکشن کو اپنی مرضی کے مطابق بنائیں.

چارٹ آبجیکٹ چیز

چارٹ (اختیارات)

کےoptionsپیرامیٹر چارٹ کی ترتیب ہے.Chart()فنکشن پیرامیٹرoptionsہےJSONسلسلہ بندیHighStocksپیرامیٹر کے لئےHighcharts.StockChartایک اضافی__isStockخصوصیت مقامی پیرامیٹر کے اوپر شامل کیا جاتا ہے، اور اگر__isStock:falseوضاحت کی گئی ہے تو، یہ ایک عام چارٹ کے طور پر دکھایا جاتا ہے.__isStockصفت ایک غلط قدر پر مقرر کیا جاتا ہے مثال کے طور پرfalse، یعنی استعمال شدہ چارٹ ایکHighchartsچارٹ.__isStockصفت ایک حقیقی قدر پر مقرر کیا جاتا ہے مثال کے طور پرtrue، یعنی استعمال شدہ چارٹ ایکHighstocksچارٹ (ڈیفالٹ کے مطابق)__isStockدرست ہے مثلاًtrue) آپ کو پوچھ گچھ کر سکتے ہیںہائی اسٹاکس چارٹ لائبریری. اختیارات سچ آبجیکٹ، آبجیکٹ صف

function main() {
    var cfgA = {
        extension: {
            layout: 'single', // No grouping, display separately, default to group 'group'
            height: 300, // Specify the height
        },
        title: {
            text: 'handicap chart'
        },
        xAxis: {
            type: 'datetime'
        },
        series: [{
            name: 'buy one',
            data: [],
        }, {
            name: 'sell one',
            data: [],
        }]
    }
    var cfgB = {
        title: {
            text: 'spread chart'
        },
        xAxis: {
            type: 'datetime'
        },
        series: [{
            name: 'spread',
            type: 'column',
            data: [],
        }]
    }            

    var cfgC = {
        __isStock: false,
        title: {
            text: 'pie chart'
        },
        series: [{
            type: 'pie',
            name: 'one',
            data: [
                ["A", 25],
                ["B", 25],
                ["C", 25],
                ["D", 25],
            ]  // Instead of updating the initial data with the add function, the sequence can be updated by changing the chart configuration directly.
        }]
    };
    var cfgD = {
        extension: {
            layout: 'single',
            col: 8, // Specify the cell value for the width, the total value is 12
            height: '300px',
        },
        title: {
            text: 'handicap chart'
        },
        xAxis: {
            type: 'datetime'
        },
        series: [{
            name: 'buy one',
            data: [],
        }, {
            name: 'sell one',
            data: [],
        }]
    }
    var cfgE = {
        __isStock: false,
        extension: {
            layout: 'single',
            col: 4,
            height: '300px',
        },
        title: {
            text: 'pie chart2'
        },
        series: [{
            type: 'pie',
            name: 'one',
            data: [
                ["A", 25],
                ["B", 25],
                ["C", 25],
                ["D", 25],
            ]
        }]
    };            

    var chart = Chart([cfgA, cfgB, cfgC, cfgD, cfgE]);
    chart.reset()
        // Add a number of points to the pie chart, add can only update the data points added by add, built-in data points cannot be updated later.
    chart.add(3, {
        name: "ZZ",
        y: Math.random() * 100
    });
    while (true) {
        Sleep(1000)
        var ticker = exchange.GetTicker()
        if (!ticker) {
            continue;
        }
        var diff = ticker.Sell - ticker.Buy
        cfgA.subtitle = {
            text: 'buy one ' + ticker.Buy + ', sell one ' + ticker.Sell,
        };
        cfgB.subtitle = {
            text: 'spread ' + diff,
        };            

        chart.add([0, [new Date().getTime(), ticker.Buy]]);
        chart.add([1, [new Date().getTime(), ticker.Sell]]);
        // Equivalent to updating the first data series of the second chart
        chart.add([2, [new Date().getTime(), diff]]);
        chart.add(4, [new Date().getTime(), ticker.Buy]);
        chart.add(5, [new Date().getTime(), ticker.Buy]);
        cfgC.series[0].data[0][1] = Math.random() * 100;
        cfgE.series[0].data[0][1] = Math.random() * 100;
        // update is actually the same as resetting the chart's configuration
        chart.update([cfgA, cfgB, cfgC, cfgD, cfgE]);
    }
}            
import random
import time
def main():
    cfgA = {
        "extension" : {
            "layout" : "single", 
            "height" : 300,
            "col" : 8
        }, 
        "title" : {
            "text" : "handicap chart"
        },
        "xAxis" : {
            "type" : "datetime" 
        }, 
        "series" : [{
            "name" : "buy one",
            "data" : []
        }, {
            "name" : "sell one", 
            "data" : []
        }]
    }                

    cfgB = {
        "title" : {
            "text" : "spread chart"
        }, 
        "xAxis" : {
            "type" : "datetime",
        }, 
        "series" : [{
            "name" : "spread", 
            "type" : "column", 
            "data" : []
        }]
    }                

    cfgC = {
        "__isStock" : False,
        "title" : {
            "text" : "pie chart"
        }, 
        "series" : [{
            "type" : "pie", 
            "name" : "one", 
            "data" : [
                ["A", 25],
                ["B", 25],
                ["C", 25],
                ["D", 25],
            ]
        }]
    }                

    cfgD = {
        "extension" : {
            "layout" : "single",
            "col" : 8,
            "height" : "300px"
        }, 
        "title" : {
            "text" : "handicap chart"
        }, 
        "series" : [{
            "name" : "buy one", 
            "data" : []
        }, {
            "name" : "sell one",
            "data" : []
        }]
    }                

    cfgE = {
        "__isStock" : False, 
        "extension" : {
            "layout" : "single", 
            "col" : 4,
            "height" : "300px"
        }, 
        "title" : {
            "text" : "pie chart2"
        },
        "series" : [{
            "type" : "pie",
            "name" : "one", 
            "data" : [
                ["A", 25], 
                ["B", 25], 
                ["C", 25], 
                ["D", 25]
            ]
        }]
    }
    
    chart = Chart([cfgA, cfgB, cfgC, cfgD, cfgE])
    chart.reset()
    chart.add(3, {
        "name" : "ZZ",
        "y" : random.random() * 100
    })
    
    while True:
        Sleep(1000)
        ticker = exchange.GetTicker()
        if not ticker :
            continue
        diff = ticker["Sell"] - ticker["Buy"]
        cfgA["subtitle"] = {
            "text" : "buy one" + str(ticker["Buy"]) + "sell one" + str(ticker["Sell"])
        }
        cfgB["subtitle"] = {
            "text" : "spread " + str(diff)
        }
        
        chart.add(0, [time.time() * 1000, ticker["Buy"]])
        chart.add(1, [time.time() * 1000, ticker["Sell"]])
        chart.add(2, [time.time() * 1000, diff])
        chart.add(4, [time.time() * 1000, ticker["Buy"]])
        chart.add(5, [time.time() * 1000, ticker["Buy"]])
        cfgC["series"][0]["data"][0][1] = random.random() * 100
        cfgE["series"][0]["data"][0][1] = random.random() * 100
void main() {
    json cfgA = R"({
        "extension" : {
            "layout" : "single", 
            "height" : 300,
            "col" : 8
        }, 
        "title" : {
            "text" : "handicap chart"
        },
        "xAxis" : {
            "type" : "datetime" 
        }, 
        "series" : [{
            "name" : "buy one",
            "data" : []
        }, {
            "name" : "sell one", 
            "data" : []
        }]
    })"_json;                

    json cfgB = R"({
        "title" : {
            "text" : "spread chart"
        }, 
        "xAxis" : {
            "type" : "datetime"
        }, 
        "series" : [{
            "name" : "spread", 
            "type" : "column", 
            "data" : []
        }]
    })"_json;    
    
    json cfgC = R"({
        "__isStock" : false,
        "title" : {
            "text" : "pie chart"
        }, 
        "series" : [{
            "type" : "pie", 
            "name" : "one", 
            "data" : [
                ["A", 25],
                ["B", 25],
                ["C", 25],
                ["D", 25]
            ]
        }]
    })"_json;    
    
    json cfgD = R"({
        "extension" : {
            "layout" : "single",
            "col" : 8,
            "height" : "300px"
        }, 
        "title" : {
            "text" : "handicap chart"
        }, 
        "series" : [{
            "name" : "buy one", 
            "data" : []
        }, {
            "name" : "sell one",
            "data" : []
        }]
    })"_json;    
    
    json cfgE = R"({
        "__isStock" : false, 
        "extension" : {
            "layout" : "single", 
            "col" : 4,
            "height" : "300px"
        }, 
        "title" : {
            "text" : "pie chart2"
        },
        "series" : [{
            "type" : "pie",
            "name" : "one", 
            "data" : [
                ["A", 25], 
                ["B", 25], 
                ["C", 25], 
                ["D", 25]
            ]
        }]
    })"_json;            

    auto chart = Chart({cfgA, cfgB, cfgC, cfgD, cfgE});
    chart.reset();
    json zz = R"({
        "name" : "ZZ", 
        "y" : 0
    })"_json;
    zz["y"] = rand() % 100;
    chart.add(3, zz);
    
    while(true) {
        Sleep(1000);
        auto ticker = exchange.GetTicker();
        if(!ticker.Valid) {
            continue;
        }
        auto diff = ticker.Sell - ticker.Buy;
        json cfgASubTitle = R"({"text" : ""})"_json;
        cfgASubTitle["text"] = format("buy one %f , sell one %f", ticker.Buy, ticker.Sell);
        cfgA["subtitle"] = cfgASubTitle;
        
        json cfgBSubTitle = R"({"text" : ""})"_json;
        cfgBSubTitle["text"] = format("spread %f", diff);
        cfgB["subtitle"] = cfgBSubTitle;            

        chart.add(0, {Unix() * 1000, ticker.Buy});
        chart.add(1, {Unix() * 1000, ticker.Sell});
        chart.add(2, {Unix() * 1000, diff});
        chart.add(4, {Unix() * 1000, ticker.Buy});
        chart.add(5, {Unix() * 1000, ticker.Buy});
        cfgC["series"][0]["data"][0][1] = rand() % 100;
        cfgE["series"][0]["data"][0][1] = rand() % 100;
        chart.update({cfgA, cfgB, cfgC, cfgD, cfgE});
    }
}

کثیر چارٹ ڈرائنگ ترتیب:

  • extension.layoutصفت اگر صفت قدر single کے ساتھ مقرر کی گئی ہے تو ، چارٹ اسٹیک نہیں کیے جائیں گے (ٹیبز کے طور پر نہیں دکھائے جائیں گے) ، لیکن الگ الگ دکھائے جائیں گے (ٹائلڈ) ۔
  • extension.heightصفت یہ خصوصیت چارٹ کی اونچائی کو ایک عددی قدر کے طور پر یا 300px کے طور پر مقرر کرنے کے لئے استعمال کیا جاتا ہے.
  • extension.colصفت صفات چارٹ کی چوڑائی مقرر کرنے کے لئے استعمال کیا جاتا ہے، صفحے کی چوڑائی 12 خلیات میں تقسیم کیا جاتا ہے، سیٹ 8، یعنی، چارٹ 8 خلیات کی چوڑائی پر قبضہ.
// This chart is an object in the JavaScript language, and before using the Chart function, we need to declare an object variable chart to configure the chart. var chart = {                                           
    // This field marks whether the chart is a general chart or not, if you are interested, you can change it to false and run it.
    __isStock: true,                                    
    // Scaling tool
    tooltip: {xDateFormat: '%Y-%m-%d %H:%M:%S, %A'},    
    // title
    title : { text : 'spread analysis chart'},                       
    // selection range
    rangeSelector: {                                    
        buttons:  [{type: 'hour',count: 1, text: '1h'}, {type: 'hour',count: 3, text: '3h'}, {type: 'hour', count: 8, text: '8h'}, {type: 'all',text: 'All'}],
        selected: 0,
        inputEnabled: false
    },
    // Coordinate axis horizontal axis that is: x-axis, the current setting type is: time
    xAxis: { type: 'datetime'},                         
    // Coordinate axis vertical axis that is: y-axis, default value adjusted with the size of the data
    yAxis : {                                           
        // title
        title: {text: 'spread'},                           
        // Whether to enable the right vertical axis
        opposite: false                                 
    },
    // Data series, this sttribute holds the individual data series (lines, K-charts, labels, etc...)
    series : [                                          
        // The index is 0, and the data array holds the data of the index series
        {name : "line1", id : "line1,buy1Price", data : []},                          
        // Index is 1, set dashStyle:'shortdash' i.e.: set the dashed line
        {name : "line2", id : "line2,lastPrice", dashStyle : 'shortdash', data : []}  
    ]
} function main(){
    // Call the Chart function to initialize the chart
    var ObjChart = Chart(chart)         
    // Clear out
    ObjChart.reset()                      
    while(true){
        // Gets the timestamp of this poll, i.e. a millisecond timestamp. It's used to determine the position of the X-axis written to the chart.
        var nowTime = new Date().getTime()
        // Get the ticker data
        var ticker = _C(exchange.GetTicker)
        // Get buy one price from the return value of the ticker data
        var buy1Price = ticker.Buy    
        // To obtain the final transaction price, we add 1 in order not to overlap the 2 lines
        var lastPrice = ticker.Last + 1
        // Data sequence with timestamp as X-value and buy one price as Y-value passed into index 0
        ObjChart.add(0, [nowTime, buy1Price])
        // ditto
        ObjChart.add(1, [nowTime, lastPrice])
        Sleep(2000)
    }
}```
```python
import time
chart = {
    "__isStock" : True,
    "tooltip" : {"xDateFormat" : "%Y-%m-%d %H:%M:%S, %A"},  
    "title" : {"text" : "spread analysis chart"}, 
    "rangeSelector" : {
        "buttons" : [{"type": "count", "count": 1, "text": "1h"}, {"type": "hour", "count": 3, "text": "3h"}, {"type": "hour", "count": 8, "text": "8h"}, {"type": "all", "text": "All"}], 
        "selected": 0,
        "inputEnabled": False 
    }, 
    "xAxis": {"type": "datetime"}, 
    "yAxis": {
        "title": {"text": "spread"},
        "opposite": False
    },
    "series": [{
        "name": "line1", "id": "line1,buy1Price", "data": []
    }, {
        "name": "line2", "id": "line2,lastPrice", "dashStyle": "shortdash", "data": []
    }]
}
def main():
    ObjChart = Chart(chart)
    ObjChart.reset()
    while True:
        nowTime = time.time() * 1000
        ticker = exchange.GetTicker()
        buy1Price = ticker["Buy"]
        lastPrice = ticker["Last"] + 1
        ObjChart.add(0, [nowTime, buy1Price])
        ObjChart.add(1, [nowTime, lastPrice])
        Sleep(2000)
void main() {
    // When writing strategies in C++, try not to declare global variables that are not of the base type, so the chart configuration object is declared inside the main function.
    json chart = R"({
        "__isStock" : true,
        "tooltip" : {"xDateFormat" : "%Y-%m-%d %H:%M:%S, %A"},  
        "title" : {"text" : "spread analysis chart"}, 
        "rangeSelector" : {
            "buttons" : [{"type": "count", "count": 1, "text": "1h"}, {"type": "hour", "count": 3, "text": "3h"}, {"type": "hour", "count": 8, "text": "8h"}, {"type": "all", "text": "All"}], 
            "selected": 0,
            "inputEnabled": false 
        }, 
        "xAxis": {"type": "datetime"}, 
        "yAxis": {
            "title": {"text": "spread"},
            "opposite": false
        },
        "series": [{
            "name": "line1", "id": "line1,buy1Price", "data": []
        }, {
            "name": "line2", "id": "line2,lastPrice", "dashStyle": "shortdash", "data": []
        }]
    })"_json;
    auto ObjChart = Chart(chart);
    ObjChart.reset();
    while(true) {
        auto nowTime = Unix() * 1000;
        auto ticker = exchange.GetTicker();
        auto buy1Price = ticker.Buy;
        auto lastPrice = ticker.Last + 1.0;
        ObjChart.add(0, {nowTime, buy1Price});
        ObjChart.add(1, {nowTime, lastPrice});
        Sleep(2000);
    }
}

ایک سادہ ڈرائنگ کا مثال:

// Objects used to initialize the chart
var chart = {                                   
    // Chart title
    title: {text: "line value triggers the plotLines value"},   
    // Y-axis related settings
    yAxis: {                                    
        // A horizontal line perpendicular to the Y-axis, used as a trigger line, is a structural array that can set multiple trigger lines
        plotLines: [{                           
            // The value of the trigger line, how much it set, this line will be displayed in the corresponding value position
            value: 0,                           
            // Set the color of the trigger line
            color: 'red',                       
            // Width
            width: 2,                           
            // Displaying labels
            label: {                            
                // Label text
                text: 'Trigger value',                  
                // Centered label position
                align: 'center'                 
            }
        }]
    },
    // X-axis related settings, here the setting type is time axis
    xAxis: {type: "datetime"},                  
    series: [
        {name: "sin", type: "spline", data: []},
        // This is an important data series, you can set multiple data series, according to the array index control
        {name: "cos", type: "spline", data: []}
    ]  
}
function main(){
    // Circumference
    var pi = 3.1415926535897
    // Variables for recording timestamps
    var time = 0                   
    // Angle
    var angle = 0                        
    // Coordinate y values for receiving sine and cosine values
    var y = 0          
    // Call the API interface to initialize the chart with the chart object
    var objChart = Chart(chart)        
    // Initially, clear the chart
    objChart.reset()
    // Set the value of the trigger line to 1
    chart.yAxis.plotLines[0].value = 1
    // Loop
    while(true){                          
        // Get the timestamp of the current moment
        time = new Date().getTime() 
        // Angle increases by 5 degrees every 500ms and calculates the sine value
        y = Math.sin(angle * 2 * pi / 360)
        // Write the calculated y value to the data series of the corresponding index of the chart, the first parameter of the add function is the specified data series index
        objChart.add(0, [time, y])
        // Calculate the cosine value
        y = Math.cos(angle * 2 * pi / 360)
        objChart.add(1, [time, y])
        // Increase by 5 degrees
        angle += 5
        // Pause for 5 seconds to avoid drawing too often and growing data too fast
        Sleep(5000)     
    }
}
import math
import time
chart = {
    "title": {"text": "line value triggers the plotLines value"}, 
    "yAxis": {
        "plotLines": [{
            "value": 0,
            "color": "red",
            "width": 2,
            "label": {
                "text": "trigger value", 
                "align": "center"
            }
        }]
    },
    "xAxis": {"type": "datetime"},
    "series": [{"name": "sin", "type": "spline", "data": []},
               {"name": "cos", "type": "spline", "data": []}]
}
def main():
    pi = 3.1415926535897
    ts = 0
    angle = 0
    y = 0
    objChart = Chart(chart)
    objChart.reset()
    chart["yAxis"]["plotLines"][0]["value"] = 1
    while True:
        ts = time.time() * 1000
        y = math.sin(angle * 2 * pi / 360)
        objChart.add(0, [ts, y])
        y = math.cos(angle * 2 * pi / 360)
        objChart.add(1, [ts, y])
        angle += 5
        Sleep(5000)
void main() {
    json chart = R"({
        "title": {"text": "line value triggers the plotLines value"}, 
        "yAxis": {
            "plotLines": [{
                "value": 0,
                "color": "red",
                "width": 2,
                "label": {
                    "text": "trigger value", 
                    "align": "center"
                }
            }]
        },
        "xAxis": {"type": "datetime"},
        "series": [{"name": "sin", "type": "spline", "data": []},
                   {"name": "cos", "type": "spline", "data": []}]     
    })"_json;            

    auto pi = 3.1415926535897;
    auto ts = 0;
    auto angle = 0.0;
    auto y = 0.0;
    auto objChart = Chart(chart);
    objChart.reset();
    chart["yAxis"]["plotLines"][0]["value"] = 1;
    while(true) {
        ts = Unix() * 1000;
        y = sin(angle * 2 * pi / 360);
        objChart.add(0, {ts, y});
        y = cos(angle * 2 * pi / 360);
        objChart.add(1, {ts, y});
        angle += 5;
        Sleep(5000);
    }
}

مثلثاتی منحنی ڈرائنگ کا مثال:

/*backtest
start: 2020-03-11 00:00:00
end: 2020-04-09 23:59:00
period: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/            

var chartCfg = {
    subtitle: {
        text: "subtitle",
    },
    yAxis: [{
        height: "40%",
        lineWidth: 2,
        title: {
            text: 'PnL',
        },
        tickPixelInterval: 20,
        minorGridLineWidth: 1,
        minorTickWidth: 0,
        opposite: true,
        labels: {
            align: "right",
            x: -3,
        }
    }, {
        title: {
            text: 'Profit',
        },
        top: "42%",
        height: "18%",
        offset: 0,
        lineWidth: 2
    }, {
        title: {
            text: 'Vol',
        },
        top: '62%',
        height: '18%',
        offset: 0,
        lineWidth: 2
    }, {
        title: {
            text: 'Asset',
        },
        top: '82%',
        height: '18%',
        offset: 0,
        lineWidth: 2
    }],
    series: [{
        name: 'PnL',
        data: [],
        id: 'primary',
        tooltip: {
            xDateFormat: '%Y-%m-%d %H:%M:%S'
        },
        yAxis: 0
    }, {
        type: 'column',
        lineWidth: 2,
        name: 'Profit',
        data: [],
        yAxis: 1,
    }, {
        type: 'column',
        name: 'Trade',
        data: [],
        yAxis: 2
    }, {
        type: 'area',
        step: true,
        lineWidth: 0,
        name: 'Long',
        data: [],
        yAxis: 2
    }, {
        type: 'area',
        step: true,
        lineWidth: 0,
        name: 'Short',
        data: [],
        yAxis: 2
    }, {
        type: 'line',
        step: true,
        color: '#5b4b00',
        name: 'Asset',
        data: [],
        yAxis: 3
    }, {
        type: 'pie',
        innerSize: '70%',
        name: 'Random',
        data: [],
        center: ['3%', '6%'],
        size: '15%',
        dataLabels: {
            enabled: false
        },
        startAngle: -90,
        endAngle: 90,
    }],
};            

function main() {
    let c = Chart(chartCfg);
    let preTicker = null;
    while (true) {
        let t = exchange.GetTicker();
        
        c.add(0, [t.Time, t.Last]); // PnL
        c.add(1, [t.Time, preTicker ? t.Last - preTicker.Last : 0]); // profit
        let r = Math.random();
        var pos = parseInt(t.Time/86400);
        c.add(2, [t.Time, pos/2]); // Vol
        c.add(3, [t.Time, r > 0.8 ? pos : null]); // Long
        c.add(4, [t.Time, r < 0.8 ? -pos : null]); // Short
        c.add(5, [t.Time, Math.random() * 100]); // Asset
        // update pie
        chartCfg.series[chartCfg.series.length-1].data = [
            ["A", Math.random()*100],
            ["B", Math.random()*100],
         ];
        c.update(chartCfg)
        preTicker = t;
    }
}
'''backtest
start: 2020-03-11 00:00:00
end: 2020-04-09 23:59:00
period: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
'''            

import random            

chartCfg = {
    "subtitle": {
        "text": "subtitle"
    },
    "yAxis": [{
        "height": "40%",
        "lineWidth": 2,
        "title": {
            "text": 'PnL'
        },
        "tickPixelInterval": 20,
        "minorGridLineWidth": 1,
        "minorTickWidth": 0,
        "opposite": True,
        "labels": {
            "align": "right",
            "x": -3
        }
    }, {
        "title": {
            "text": 'Profit'
        },
        "top": "42%",
        "height": "18%",
        "offset": 0,
        "lineWidth": 2
    }, {
        "title": {
            "text": 'Vol'
        },
        "top": '62%',
        "height": '18%',
        "offset": 0,
        "lineWidth": 2
    }, {
        "title": {
            "text": 'Asset'
        },
        "top": '82%',
        "height": '18%',
        "offset": 0,
        "lineWidth": 2
    }],
    "series": [{
        "name": 'PnL',
        "data": [],
        "id": 'primary',
        "tooltip": {
            "xDateFormat": '%Y-%m-%d %H:%M:%S'
        },
        "yAxis": 0
    }, {
        "type": 'column',
        "lineWidth": 2,
        "name": 'Profit',
        "data": [],
        "yAxis": 1
    }, {
        "type": 'column',
        "name": 'Trade',
        "data": [],
        "yAxis": 2
    }, {
        "type": 'area',
        "step": True,
        "lineWidth": 0,
        "name": 'Long',
        "data": [],
        "yAxis": 2
    }, {
        "type": 'area',
        "step": True,
        "lineWidth": 0,
        "name": 'Short',
        "data": [],
        "yAxis": 2
    }, {
        "type": 'line',
        "step": True,
        "color": '#5b4b00',
        "name": 'Asset',
        "data": [],
        "yAxis": 3
    }, {
        "type": 'pie',
        "innerSize": '70%',
        "name": 'Random',
        "data": [],
        "center": ['3%', '6%'],
        "size": '15%',
        "dataLabels": {
            "enabled": False
        },
        "startAngle": -90,
        "endAngle": 90
    }]
}            

def main():
    c = Chart(chartCfg)
    preTicker = None
    while True:
        t = exchange.GetTicker()
        c.add(0, [t["Time"], t["Last"]])
        profit = t["Last"] - preTicker["Last"] if preTicker else 0
        c.add(1, [t["Time"], profit])
        r = random.random()
        pos = t["Time"] / 86400
        c.add(2, [t["Time"], pos / 2])
        long = pos if r > 0.8 else None
        c.add(3, [t["Time"], long])
        short = -pos if r < 0.8 else None
        c.add(4, [t["Time"], short])
        c.add(5, [t["Time"], random.random() * 100])            

        # update pie
        chartCfg["series"][len(chartCfg["series"]) - 1]["data"] = [
            ["A", random.random() * 100], 
            ["B", random.random() * 100]
        ]
        c.update(chartCfg)
        preTicker = t
/*backtest
start: 2020-03-11 00:00:00
end: 2020-04-09 23:59:00
period: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/            

void main() {
    json chartCfg = R"({
        "subtitle": {
            "text": "subtitle"
        },
        "yAxis": [{
            "height": "40%",
            "lineWidth": 2,
            "title": {
                "text": "PnL"
            },
            "tickPixelInterval": 20,
            "minorGridLineWidth": 1,
            "minorTickWidth": 0,
            "opposite": true,
            "labels": {
                "align": "right",
                "x": -3
            }
        }, {
            "title": {
                "text": "Profit"
            },
            "top": "42%",
            "height": "18%",
            "offset": 0,
            "lineWidth": 2
        }, {
            "title": {
                "text": "Vol"
            },
            "top": "62%",
            "height": "18%",
            "offset": 0,
            "lineWidth": 2
        }, {
            "title": {
                "text": "Asset"
            },
            "top": "82%",
            "height": "18%",
            "offset": 0,
            "lineWidth": 2
        }],
        "series": [{
            "name": "PnL",
            "data": [],
            "id": "primary",
            "tooltip": {
                "xDateFormat": "%Y-%m-%d %H:%M:%S"
            },
            "yAxis": 0
        }, {
            "type": "column",
            "lineWidth": 2,
            "name": "Profit",
            "data": [],
            "yAxis": 1
        }, {
            "type": "column",
            "name": "Trade",
            "data": [],
            "yAxis": 2
        }, {
            "type": "area",
            "step": true,
            "lineWidth": 0,
            "name": "Long",
            "data": [],
            "yAxis": 2
        }, {
            "type": "area",
            "step": true,
            "lineWidth": 0,
            "name": "Short",
            "data": [],
            "yAxis": 2
        }, {
            "type": "line",
            "step": true,
            "color": "#5b4b00",
            "name": "Asset",
            "data": [],
            "yAxis": 3
        }, {
            "type": "pie",
            "innerSize": "70%",
            "name": "Random",
            "data": [],
            "center": ["3%", "6%"],
            "size": "15%",
            "dataLabels": {
                "enabled": false
            },
            "startAngle": -90,
            "endAngle": 90
        }]
    })"_json;
    
    Chart c = Chart(chartCfg);
    Ticker preTicker;
    while(true) {
        auto t = exchange.GetTicker();
        c.add(0, {t.Time, t.Last});
        auto profit = preTicker.Valid ? t.Last - preTicker.Last : 0;
        c.add(1, {t.Time, profit});    
        auto r = rand() % 100;
        auto pos = t.Time / 86400.0;
        c.add(2, {t.Time, pos / 2.0});
        auto longPos = r > 0.8 ? pos : NULL;
        c.add(3, {t.Time, longPos});
        auto shortPos = r < 0.8 ? -pos : NULL;
        c.add(4, {t.Time, shortPos});
        c.add(5, {t.Time, rand() % 100});
        
        // update pie 
        json pie = R"([["A", 0], ["B", 0]])"_json;
        pie[0][1] = rand() % 100;
        pie[1][1] = rand() % 100;
        chartCfg["series"][chartCfg["series"].size() - 1]["data"] = pie;
        
        c.update(chartCfg);
        preTicker = t;
    }
}            

ہائبرڈ چارٹس کے استعمال کی پیچیدہ مثالیں:

// update pie
chartCfg.series[chartCfg.series.length-1].data = [
    ["A", Math.random()*100],
    ["B", Math.random()*100],
];
c.update(chartCfg)
# update pie
chartCfg["series"][len(chartCfg["series"]) - 1]["data"] = [
    ["A", random.random() * 100], 
    ["B", random.random() * 100]
]
c.update(chartCfg)
// update pie 
json pie = R"([["A", 0], ["B", 0]])"_json;
pie[0][1] = rand() % 100;
pie[1][1] = rand() % 100;
chartCfg["series"][chartCfg["series"].size() - 1]["data"] = pie;
c.update(chartCfg);

ٹائپ چارٹpieایک ٹائم لائن کے بغیر چارٹ ہیں، اور آپ کو اعداد و شمار کو اپ ڈیٹ کرتے وقت براہ راست چارٹ کی ترتیب کو اپ ڈیٹ کرنے کی ضرورت ہے. مثال کے طور پر مندرجہ بالا مثال میں کوڈ کا استعمال کرتے ہوئے چارٹ اپ ڈیٹ کرتا ہےc.update(chartCfg)اعداد و شمار کو اپ ڈیٹ کرنے کے بعد، مندرجہ ذیل:

کےChart()فنکشن چارٹ آبجیکٹ واپس کرتا ہے جس میں 4 طریقے ہیں:add(), reset(), update(), del().

    1. کےupdate()طریقہ: کےupdate()طریقہ کار چارٹ کی تشکیل کی معلومات کو اپ ڈیٹ کرسکتا ہے۔ اس طریقہ کار کا پیرامیٹر چارٹ کی تشکیل آبجیکٹ (JSON) ہے۔
    1. کےdel()طریقہ: کےdel()طریقہ کار منظور شدہ سیریز پیرامیٹر کی بنیاد پر مخصوص انڈیکس کے ڈیٹا سیریز کو حذف کر سکتے ہیں.
    1. کےadd()طریقہ: کےadd()طریقہ کار مندرجہ ذیل پیرامیٹرز کے ساتھ، چارٹ پر ڈیٹا لکھ سکتے ہیں:
    • series: اعداد و شمار سیریز انڈیکس مقرر کرنے کے لئے استعمال کیا جاتا ہے، جو ایک عدد ہے.
    • data: مخصوص اعداد و شمار کو لکھنے کے لئے مقرر کرنے کے لئے استعمال کیا جاتا ہے، یہ ایک صف ہے.
    • index(اختیاری): ڈیٹا انڈیکس کو ترتیب دینے کے لئے استعمال کیا جاتا ہے ، یہ ایک عدد ہے۔ ترمیم شدہ ڈیٹا کی مخصوص انڈیکس پوزیشن کی وضاحت کریں ، اور یہ منفی نمبروں کی حمایت کرتا ہے ، ترتیب یہ ہے-1ڈیٹا سیٹ کے آخری اعداد و شمار سے مراد ہے۔ مثال کے طور پر، ایک لائن ڈرائنگ کرتے وقت، لائن کے آخری نقطہ پر ڈیٹا کو تبدیل کریں:chart.add(0, [1574993606000, 13.5], -1)، یعنی، چارٹ کے آخری آخری نقطہ پر اعداد و شمار کو تبدیلseries[0].data. کےindexپیرامیٹر مقرر نہیں کیا گیا ہے، جس کا مطلب ہے کہ اعداد و شمار کو موجودہ ڈیٹا سیریز کے آخری نقطہ پر شامل کیا جاتا ہے.
    1. کےreset()طریقہ: کےreset()چارٹ کے اعداد و شمار کو خالی کرنے کے لئے استعمال کیا جاتا ہے.reset()طریقہ کار ایک پیرامیٹر لے سکتے ہیںremainرکھنے کے لئے اندراجات کی تعداد کی وضاحت کرنے کے لئے. کوئی پیرامیٹرremainتمام اعداد و شمار کو صاف کرنے کے لئے منظور کیا جاتا ہے.

{@fun/Log/KLineChart KLineChart} {@fun/Log/KLineChart KLineChart} {@fun/Log/KLineChart KLineChart}

KLineChart

فنکشن حکمت عملی رن ٹائم میں اپنی مرضی کے مطابق ڈرائنگ کے لئے استعمال کیا جاتا ہےPine language.

چارٹ آبجیکٹ.KLineChart()تقریب کئی طریقوں کے ساتھ ایک چارٹ اعتراض لوٹاتا ہے، جن میں سے آپ کو توجہ دینے کی ضرورت ہےbegin()اورclose()۔ ڈرائنگ آپریشن ایک کے ساتھ شروع کرنا ضروری ہےbegin()فنکشن کال اور ایک کے ساتھ ختمclose()فنکشن کال جب کلائین ڈیٹا پر عبور کرتے ہوئے ڈرائنگ آپریشن انجام دیتے ہیں۔ چیز

KLineChart (اختیارات)

کےoptionsپیرامیٹر چارٹ کی ترتیب ہے. اختیارات سچ آبجیکٹ، آبجیکٹ صف

function main() {
    // Call the KLineChart function to create a chart control object c
    let c = KLineChart({
        overlay: true
    })            

    // Use the Spot Exchange object test to get K-line data. If you use the futures exchange object test, you need to set up the contract first.
    let bars = exchange.GetRecords()
    if (!bars) {
        return
    }            
    
    // Execute the drawing operation by traversing over the K-line data. The drawing operation must start with the ```c.begin(bar)``` function call and end with the ```c.close()``` function call.
    bars.forEach(function(bar, index) {
        c.begin(bar)
        c.barcolor(bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(0, 0, 0, 0.2)')
        if (bar.Close > bar.Open) {
            c.bgcolor('rgba(0, 255, 0, 0.5)')
        }
        let h = c.plot(bar.High, 'high')
        let l = c.plot(bar.Low, 'low')            

        c.fill(h, l, {
            color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0.2)'
        })
        c.hline(bar.High)
        c.plotarrow(bar.Close - bar.Open)
        c.plotshape(bar.Low, {
            style: 'diamond'
        })
        c.plotchar(bar.Close, {
            char: 'X'
        })
        c.plotcandle(bar.Open*0.9, bar.High*0.9, bar.Low*0.9, bar.Close*0.9)
        if (bar.Close > bar.Open) {
            // long/short/closelong/closeshort
            c.signal("long", bar.High, 1.5)
        } else if (bar.Close < bar.Open) {
            c.signal("closelong", bar.Low, 1.5)
        }
        c.close()
    })
}
def main():
    # Call the KLineChart function to create a chart control object c
    c = KLineChart({
        "overlay": True
    })            

    # Use the Spot Exchange object test to get K-line data. If you use the futures exchange object test, you need to set up the contract first.
    bars = exchange.GetRecords()
    if not bars:
        return            

    for bar in bars:
        c.begin(bar)
        c.barcolor('rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(0, 0, 0, 0.2)')
        if bar.Close > bar.Open:
            c.bgcolor('rgba(0, 255, 0, 0.5)')            

        h = c.plot(bar.High, 'high')
        l = c.plot(bar.Low, 'low')            

        c.fill(h, l, 'rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(255, 0, 0, 0.2)')
        c.hline(bar.High)
        c.plotarrow(bar.Close - bar.Open)        
        c.plotshape(bar.Low, style = 'diamond')
        c.plotchar(bar.Close, char = 'X')
        c.plotcandle(bar.Open*0.9, bar.High*0.9, bar.Low*0.9, bar.Close*0.9)
        if bar.Close > bar.Open:
            # long/short/closelong/closeshort
            c.signal("long", bar.High, 1.5)
        elif bar.Close < bar.Open:
            c.signal("closelong", bar.Low, 1.5)            

        c.close()
// Not supported for now

اگر ایک چارٹ کنٹرول آبجیکٹ کی حکمت عملی اپنی مرضی کے مطابق ڈرائنگ کے علاقے میں ڈرائنگ کرنے کے لئے ضروری ہے تو،KLineChart()اعتراض تخلیق کرنے کے لئے تقریب.KLineChart()فنکشن ایک چارٹ ترتیب کی ساخت ہے، حوالہ کوڈ میں استعمال کیا جاتا ہے سادہ ہے:{overlay: true}. یہ چارٹ ترتیب کی ساخت صرف مرکزی چارٹ پر آؤٹ پٹ کرنے کے لئے ڈرائنگ مواد مقرر کرتا ہے.overlayایک غلط قدر پر مقرر کیا جاتا ہے، مثال کے طور پرfalse، چارٹ پر مواد ثانوی چارٹ پر آؤٹ پٹ ہے. اگر آپ کو مرکزی چارٹ پر ڈرائنگ کرنے کے لئے ایک ڈرائنگ تقریب کی وضاحت کرنے کی ضرورت ہے، آپ کو بھی پیرامیٹر کی وضاحت کر سکتے ہیںoverlayمخصوص فنکشن کال میں ایک حقیقی قدر کے طور پر، مثال کے طور پر:true.

c.barcolor(bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(0, 0, 0, 0.2)')   // Use the example illustrated in the reference code in this example, without further ado
c.barcolor('rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(0, 0, 0, 0.2)')
//  Not supported for now

ڈرائنگ انٹرفیس کے افعالPineڈرائنگ آپریشن میں حمایت زبان ہیں:barcolor، جو K لائن رنگ مقرر کرتا ہے.

barcolor ((رنگ، آفسیٹ، قابل تدوین، show_last، عنوان، ڈسپلے) ڈسپلے پیرامیٹرز اختیاری ہیں: کوئی نہیں، تمام

c.bgcolor('rgba(0, 255, 0, 0.5)')
c.bgcolor('rgba(0, 255, 0, 0.5)')
// Not supported for now

bgcolor، مخصوص رنگ کے ساتھ K لائن کے پس منظر کو بھرتا ہے.

bgcolor ((رنگ، آفسیٹ، قابل تدوین، show_last، عنوان، ڈسپلے، اوورلے) ڈسپلے پیرامیٹرز اختیاری ہیں: کوئی نہیں، تمام

c.plot(bar.High, 'high')
c.plot(bar.Open < bar.Close ? NaN : bar.Close, "Close", {style: "linebr"})  // Support for drawing discontinuous data lines
h = c.plot(bar.High, 'high')
h = c.plot(None if bar.Open < bar.Close else bar.Close, "Close", style = "linebr")  # Support for drawing discontinuous data lines
// Not supported for now

plot، ایک چارٹ پر اعداد و شمار کی ایک سیریز پلاٹ.

پلاٹ (سیریز، عنوان، رنگ، لائن کی چوڑائی، انداز، ٹریک قیمت، ہسٹ بیس، آفسیٹ، جوائن، قابل تدوین، شو_لاسٹ، ڈسپلے) سٹائل پیرامیٹرز اختیاری ہیں: stepline_diamond, stepline, cross, areabr, area, circles, columns, histogram, linebr, line ڈسپلے پیرامیٹرز اختیاری ہیں: کوئی نہیں، سبھی

let h = c.plot(bar.High, 'high')
let l = c.plot(bar.Low, 'low')

c.fill(h, l, {color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0.2)'})
h = c.plot(bar.High, 'high')
l = c.plot(bar.Low, 'low')

c.fill(h, l, color = 'rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(255, 0, 0, 0.2)'})
// Not supported for now

fill، دو پلاٹ کے درمیان پس منظر کو بھرنے یاhlineفراہم کردہ رنگوں کے ساتھ.

بھریں (صفحہ1،صفحہ2، رنگ، عنوان، قابل تدوین، خالی جگہوں کو بھریں، دکھائیں) ڈسپلے پیرامیٹرز اختیاری ہیں: کوئی نہیں، تمام

کے بعدJavaScriptزبان فنکشن کے ناموں کی بنیاد پر آنے والے پیرامیٹرز کی وضاحت نہیں کر سکتے ہیں رسمی پیرامیٹرز، اس مسئلے کو حل کرنے کے لئے، آپ کو ایک استعمال کر سکتے ہیں{key: value}ایک مخصوص رسمی پیرامیٹر نام پر منتقل کیا جا کرنے کے لئے پیرامیٹرز کی وضاحت کرنے کی ساخت. مثال کے طور پر، حوالہ کوڈ استعمال کرتا ہے{color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0, 0.2)'}وضاحت کرتا ہےcolorپیرامیٹرfillفنکشن. اگر آپ کو ایک کے بعد ایک فارم پیرامیٹر ناموں کے ساتھ ایک سے زیادہ پیرامیٹرز کی وضاحت کرنے کی ضرورت ہے تو، آپ استعمال کر سکتے ہیں{key1: value1, key2: value2, key3: value3}. مثال کے طور پر، اس مثال میں، ایک اضافیtitleپیرامیٹر کی وضاحت کی گئی ہے:{color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0, 0.2)', title: 'fill'}. رنگ کی قدر کے لئے، آپ کے ساتھ مقرر کر سکتے ہیں'rgba(255, 0, 0, 0, 0.2)'یا ساتھ'#FF0000'.

c.hline(bar.High)
c.hline(bar.High)
// Not supported for now

hline، افقی لائن ایک مقررہ مقررہ قیمت کی سطح پر پیش کی جاتی ہے.

hline ((قیمت، عنوان، رنگ، لائن سٹائل، لائن کی چوڑائی، قابل تدوین، ڈسپلے) لائن سٹائل پیرامیٹرز اختیاری ہیں: ڈیشڈ، ڈاٹڈ، سولیڈ ڈسپلے پیرامیٹرز اختیاری ہیں: کوئی نہیں، تمام

c.plotarrow(bar.Close - bar.Open)
c.plotarrow(bar.Close - bar.Open)
// Not supported for now

plotarrow، چارٹ پر اوپر اور نیچے تیریں دکھائیں.

پلاٹرا (سیریز، عنوان، رنگ، رنگ ڈاؤن، آفسیٹ، مائن ہائیٹ، میکس ہائیٹ، قابل تدوین، شو_لاسٹ، ڈسپلے) ڈسپلے پیرامیٹرز اختیاری ہیں: کوئی نہیں، تمام

c.plotshape(bar.Low, {style: 'diamond'})
c.plotshape(bar.Low, style = 'diamond')
// Not supported for now

plotshape، چارٹ پر بصری شکلیں بنائیں۔

plotshape ((سیریز، عنوان، انداز، مقام، رنگ، آفسیٹ، متن، textcolor، قابل تدوین، سائز، show_last، ڈسپلے) سٹائل پیرامیٹرز اختیاری ہیں: diamond, square, label_down, label_up, arrow_down, arrow_up, circle, flag, triangle_down, triangle_up, cross, xcross مقام پیرامیٹرز اختیاری ہیں: اوپربار، نیچےبار، اوپر، نیچے، مطلق سائز پیرامیٹرز اختیاری ہیں: 10px, 14px, 20px, 40px, 80px, سائز کا موازنہ کریں.تنی, سائز.چھوٹا, سائز.عام, سائز.بڑا, سائز.بڑا پائن زبان میں.size.autoہے سائز.چھوٹا. ڈسپلے پیرامیٹرز اختیاری ہیں: کوئی نہیں، تمام

c.plotchar(bar.Close, {char: 'X'})
c.plotchar(bar.Close, char = 'X')
// Not supported for now

plotchar، کسی بھی دیئے گئے یونیکوڈ کردار کا استعمال کرتے ہوئے چارٹ پر بصری شکلیں ڈرا.

plotchar ((سیریز، عنوان، چار، مقام، رنگ، آفسیٹ، متن، textcolor، قابل تدوین، سائز، show_last، ڈسپلے) مقام پیرامیٹرز اختیاری ہیں: اوپربار، نیچےبار، اوپر، نیچے، مطلق سائز کے پیرامیٹرز اختیاری ہیں: 10px، 14px، 20px، 40px، 80px، سائز.ٹنی، سائز.چھوٹا، سائز.عام، سائز.بڑا، سائز.بڑا کا موازنہ پائن زبان میں۔size.autoہے سائز.چھوٹا. ڈسپلے پیرامیٹرز اختیاری ہیں: کوئی نہیں، تمام

c.plotcandle(bar.Open*0.9, bar.High*0.9, bar.Low*0.9, bar.Close*0.9)
c.plotcandle(bar.Open*0.9, bar.High*0.9, bar.Low*0.9, bar.Close*0.9)
// Not supported for now

plotcandle، ایک چارٹ پر ایک K لائن چارٹ پلاٹ.

plotcandle ((کھولیں، اعلی، کم، قریب، عنوان، رنگ، wickcolor، قابل تدوین، show_last، bordercolor، ڈسپلے) ڈسپلے پیرامیٹرز اختیاری ہیں: کوئی نہیں، تمام

c.signal("long", bar.High, 1.5)
c.signal("long", bar.High, 1.5)
// Not supported for now

signal، پائن زبان میں دستیاب نہیں ایک فنکشن، خریدنے اور فروخت سگنل یہاں ڈرائنگ کے لئے استعمال کیا جاتا ہے.

سگنل ((نقطہ، قیمت، مقدار، شناخت) پیرامیٹر long ٹرانزیکشن کی سمت کی نشاندہی کرنے میں منتقل کیا جاتا ہے، آپ long، closelong، short، closeshort منتخب کر سکتے ہیں. پیرامیٹرbar.Highمارکر سگنل کی Y محور کی پوزیشن ہے۔ منظور شدہ پیرامیٹر 1.5 سگنل کے لین دین کی تعداد کی نشاندہی کرتا ہے۔ چوتھا پیرامیٹر تیار کردہ ڈیفالٹ ٹیکسٹ مواد کی جگہ لے سکتا ہے ، اور تیار کردہ سگنل مارکر کا ڈیفالٹ متن لین دین کی سمت ہے ، مثال کے طور پر closelong۔

c.reset()
c.reset()
// Not supported for now

reset، ایک فنکشن پائن زبان میں دستیاب نہیں ہے، چارٹ کے اعداد و شمار کو خالی کرنے کے لئے استعمال کیا جاتا ہے.

ری سیٹ (باقی) کےreset()طریقہ کار ایک پیرامیٹر لے سکتا ہے،remain، رکھنے کے لئے ڈیٹا کی تعداد کی وضاحت کرنے کے لئے.remainیعنی تمام ڈیٹا کو صاف کرنا۔

حکمت عملی اپنی مرضی کے مطابق ڈرائنگ صرف کے طریقوں میں سے ایک کا استعمال کر سکتے ہیںKLineChart()فنکشن یاChart()فنکشن کے لئے. کچھ رنگ اور سٹائل کی ترتیبات میں استعمالKLineChart()فنکشن کال، براہ مہربانی ملاحظہ کریںحکمت عملی ڈرائنگ ڈیزائن آسان بنانے کے لئے KLineChart تقریب کا استعمال کریں.

{@fun/Log/چارٹ چارٹ}

لاگ ری سیٹ کریں

لکڑی صاف.

لاگ ری سیٹ (باقی)

کےremainپیرامیٹر استعمال کیا جاتا ہے تازہ ترین لاگ اندراجات کی تعداد کو برقرار رکھنے کے لئے مقرر کرنے کے لئے. رہنا غلط نمبر

function main() {
    // Keep the last 10 logs and clear the rest
    LogReset(10)     
}
def main():
    LogReset(10)
void main() {
    LogReset(10);
}

حکمت عملی کے ہر آغاز کے لئے اسٹارٹ اپ لاگ کو ایک کے طور پر شمار کیا جاتا ہے ، لہذا اگر کوئی پیرامیٹر منتقل نہیں ہوتا ہے اور حکمت عملی کے آغاز میں کوئی لاگ آؤٹ پٹ نہیں ہوتا ہے تو ، ڈوکر لاگ کی واپسی کا انتظار کرتے ہوئے ، کوئی لاگ بالکل ظاہر نہیں ہوگا (کوئی استثناء نہیں) ۔

{@fun/LogLog}، {@fun/Log/LogVacuum LogVacuum}، {@fun/LogLog}، {@fun/Log/LogVacuum LogVacuum}، {@fun/Log/LogVacuum}، {@fun/Log/LogVacuum LogVacuum}، {@fun/Log/LogVacuum}،

لاگ ویکیوم

ذخیرہ کرنے کی جگہ پر قبضہ کرنے کے لئے استعمال کیاایس کیو ایلائٹڈیٹا کو کال کرنے کے بعد حذف کرتے وقتLogReset()لاگ صاف کرنے کے لئے تقریب.

لوگ ویکیوم

function main() {
    LogReset()
    LogVacuum()
}
def main():
    LogReset()
    LogVacuum()
void main() {
    LogReset()
    LogVacuum()
}

وجہ یہ ہے کہSQLiteڈیٹا کو حذف کرتے وقت مقبوضہ جگہ واپس نہیں کرتا، اور اسے چلانے کی ضرورت ہےVACUUMٹیبل کو صاف کرنے اور جگہ کو آزاد کرنے کے لئے۔ فائل منتقل کرنے کا عمل اس فنکشن کو بلانے پر ہوتا ہے ، اور تاخیر بڑی ہے ، لہذا مناسب وقت کے وقفے پر کال کرنے کی سفارش کی جاتی ہے۔

{@fun/Log/LogReset لاگ ریسیٹ}

console.log

یہ براہ راست ٹریڈنگ کے صفحے میں debug information کالم میں ڈیبگنگ کی معلومات کو آؤٹ پٹ کرنے کے لئے استعمال کیا جاتا ہے۔ مثال کے طور پر اگر براہ راست ٹریڈنگ ID ہے123456،console.logتقریب آؤٹ پٹ لائیو ٹریڈنگ کے صفحے پر معلومات ڈیبگنگ، اور ایک ہی وقت میں، توسیع کے ساتھ ایک لاگ فائل تخلیق.logاور میں ڈیبگنگ کی معلومات لکھیں/logs/storage/123456/اس ڈائرکٹری میں جس میں ڈوکر کا تعلق ہے، جس میں فائل نام کے ساتھstdout_.

کنسول.لوگ ((...msgs)

پیرامیٹرmsgپیداوار کا مواد ہے، اور پیرامیٹرmsgایک سے زیادہ پاس کیا جا سکتا ہے. پی ایس جی غلط string، number، bool، object، array، null اور نظام کی حمایت کی دیگر اقسام.

function main() {
    console.log("test console.log")
}
# Not supported
// Not supported
  • صرفJavaScriptزبان اس فنکشن کی حمایت کرتا ہے.
  • یہ فنکشن صرف لائیو ٹریڈنگ کی طرف سے حمایت کی جاتی ہے، لیکن Debugging Tools یا Backtesting System کی طرف سے نہیں.
  • آؤٹ پٹ ایک اعتراض تار میں تبدیل کیا جاتا ہے[object Object]، تو جتنا ممکن ہو سکے کے طور پر پڑھنے کے قابل معلومات کی پیداوار کرنے کی کوشش کریں.

{@fun/Log/console.error کنسول.error}

console.error

براہ راست ٹریڈنگ کے صفحے پر Debug message فیلڈ میں غلطی آؤٹ پٹ کے لئے استعمال کیا جاتا ہے۔ مثال کے طور پر اگر براہ راست ٹریڈنگ ID ہے123456،console.errorفنکشن توسیع کے ساتھ ایک لاگ فائل تخلیق کرتا ہے.logمیں/logs/storage/123456/ڈاکر کی ڈائرکٹری جہاں لائیو ٹریڈنگ کا تعلق ہے، اور پریفیکس کے ساتھ غلطی پیداوار لکھتا ہےstderr_.

کنسول.غلطی...msgs

پیرامیٹرmsgپیداوار کا مواد ہے، اور پیرامیٹرmsgایک سے زیادہ پاس کیا جا سکتا ہے. پی ایس جی غلط string، number، bool، object، array، null اور نظام کی حمایت کی دیگر اقسام.

function main() {
    console.error("test console.error")
}
# Not supported
// Not supported
  • صرفJavaScriptزبان اس فنکشن کی حمایت کرتا ہے.
  • یہ فنکشن صرف لائیو ٹریڈنگ کی طرف سے حمایت کی جاتی ہے، لیکن Debugging Tools یا Backtesting System کی طرف سے نہیں.
  • آؤٹ پٹ ایک اعتراض تار میں تبدیل کیا جاتا ہے[object Object]، تو جتنا ممکن ہو سکے کے طور پر پڑھنے کے قابل معلومات کی پیداوار کرنے کی کوشش کریں.

{@fun/Log/console.log کنسول.log}

عالمی بازار