بلاکچین مقداری سرمایہ کاری سیریز کورس (3) کیلنڈر اسپریڈ ثالثی

مصنف:روبی, تخلیق: 2018-08-27 16:49:50, تازہ کاری:

NO.1 1987 میں سوروس کی تحریر کردہ کتاب فنانشل الکیمیا میں ایک اہم تجویز پیش کی گئی تھی: میرا خیال ہے کہ مارکیٹ کی قیمتیں ہمیشہ اس لحاظ سے غلط ہوتی ہیں کہ وہ مستقبل کا ایک متعصب نظریہ پیش کرتی ہیں۔ مارکیٹ کی موزونیت کا مفروضہ صرف ایک نظریاتی مفروضہ ہے۔ در حقیقت ، مارکیٹ کے شرکاء ہمیشہ عقلی نہیں ہوتے ہیں ، اور ہر وقت ، شرکاء پوری طرح سے حاصل نہیں کرسکتے ہیں اور ہر معلومات کی معروضی تشریح نہیں کرسکتے ہیں۔ یہاں تک کہ اگر یہ ایک ہی معلومات ہے تو ، ہر ایک کی رائے مختلف ہوتی ہے۔

دوسرے الفاظ میں ، قیمت میں خود مارکیٹ کے شرکاء کی غلط توقعات موجود ہیں ، لہذا جوہر میں مارکیٹ کی قیمت ہمیشہ غلط ہوتی ہے۔ یہ ثالثوں کے لئے منافع کا ذریعہ ہوسکتا ہے۔

img

NO.2 مندرجہ بالا اصولوں کی بنیاد پر، ہم یہ بھی جانتے ہیں کہ غیر موثر فیوچر مارکیٹ میں، مختلف ادوار میں ترسیل کے معاہدوں کے مارکیٹ کے اثرات ہمیشہ مطابقت پذیر نہیں ہوتے ہیں، اور قیمتوں کا تعین مکمل طور پر مؤثر نہیں ہے.

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

مثال کے طور پر ، فرض کریں کہ ETC ہفتہ اور ETC سہ ماہی کے مابین پھیلاؤ طویل عرصے تک 5 کے ارد گرد برقرار رہتا ہے۔ اگر پھیلاؤ 7 تک پہنچ جاتا ہے تو ، ہم توقع کرتے ہیں کہ پھیلاؤ مستقبل میں کسی وقت 5 پر واپس آجائے گا۔ پھر آپ ETC ہفتہ بیچ سکتے ہیں اور ETC سہ ماہی خرید سکتے ہیں تاکہ پھیلاؤ کو مختصر کریں۔ اور اس کے برعکس۔

NO.3 اگرچہ یہ پھیلاؤ موجود ہے ، لیکن دستی آپریشن کے وقت طلب ، ناقص درستگی اور قیمتوں میں تبدیلی کے اثرات کی وجہ سے دستی arbitrage میں اکثر بہت سی غیر یقینی صورتحال ہوتی ہے۔

مقداری ماڈل کے ذریعے ثالثی کے مواقع کو حاصل کرنے اور ثالثی کی تجارتی حکمت عملیوں کو تیار کرنے کے ساتھ ساتھ پروگرام کے الگورتھم خود بخود تبادلے میں تجارتی احکامات جاری کرتے ہیں ، تاکہ مواقع کو تیزی سے اور درست طریقے سے حاصل کیا جاسکے اور موثر انداز میں آمدنی حاصل کی جاسکے ، جو کہ مقداری ثالثی کا سحر ہے۔

img

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

NO.4 ایک ڈیجیٹل کرنسی انٹرٹیمپورل آربراج کی حکمت عملی بنائیں مشکل: عام سطح اسٹریٹجک ماحول: لین دین کا ہدف: ایتھریم کلاسیکی (ETC) اسپریڈ ڈیٹا: ETC ہفتہ وار - ETC سہ ماہی تجارت کا دورانیہ: 5 منٹ پوزیشن میچ: 1:1 ٹرانزیکشن کی قسم: ایک ہی قسم کے درمیان وقت حکمت عملی منطق: لانگ اسپریڈ پوزیشن خریدنے کی شرائط: اگر کرنٹ اکاؤنٹ میں کوئی پوزیشن نہیں ہے، اور اسپریڈ بول اشارے کے نیچے کی راہ سے کم ہے، تو اسپریڈ آرڈر رکھیں، جو یہ ہے کہ: ہفتہ وار طویل ETC خریدیں، سہ ماہی ETC فروخت کریں.

شارٹ سیلز اسپریڈ پوزیشن کی شرائط: اگر کرنٹ اکاؤنٹ میں کوئی پوزیشن نہیں ہے اور اسپریڈ بول اشارے کے اپ ریل سے زیادہ ہے تو ، اسپریڈ آرڈر دیں ، جو یہ ہے: ہفتہ وار مختصر ETC فروخت کریں ، سہ ماہی میں طویل ETC خریدیں۔

خریدنے کے لئے طویل پھیلاؤ پوزیشن کی شرط بند کرنا: اگر کرنٹ اکاؤنٹ میں ایک طویل ETC ہفتہ وار پوزیشن ہے اور ایک مختصر ETC سہ ماہی پوزیشن ہے، اور پھیلاؤ بول اشارے کے وسط ریل سے زیادہ ہے، تو ایک قریبی پھیلاؤ آرڈر رکھیں، جو ہے: ETC ہفتہ وار فروخت، ETC سہ ماہی کو ڈھکنے کے لئے خریدیں.

شارٹ سیلز اسپریڈ پوزیشن کی شرط بند کرنا: اگر کرنٹ اکاؤنٹ میں ہفتہ وار ETC مختصر پوزیشن اور سہ ماہی ETC طویل پوزیشن ہے، اور اسپریڈ بول اشارے کے وسط ریل سے کم ہے، تو ایک قریبی اسپریڈ آرڈر رکھیں، یعنی: ETC کو ڈھکنے کے لیے ہفتہ وار خریدیں، ETC کو سہ ماہی فروخت کریں۔

NO.5 مندرجہ بالا ڈیجیٹل کرنسی intertemporal arbitrage حکمت عملی منطق کی ایک سادہ وضاحت ہے، تو کس طرح پروگرام میں اپنے خیالات کو لاگو کرنے کے لئے؟ ہم FMZ مقداری ٹریڈنگ پلیٹ فارم پر سب سے پہلے فریم ورک کی تعمیر کرنے کی کوشش کی. حکمت عملی کا فریم ورک:

img

اسٹریٹجک فریم ورک کو اسٹریٹجک سوچ اور لین دین کے عمل کے مطابق آسانی سے بنایا جاسکتا ہے۔ پوری حکمت عملی کو تین مراحل میں آسان بنایا جاسکتا ہے۔

  1. ٹرانزیکشن سے پہلے پری پروسیسنگ۔
  2. اعداد و شمار حاصل کریں اور حساب لگائیں.
  3. حکم دیں اور پیروی کریں.

NO.6 اگلا، ہمیں اصل لین دین کے عمل اور لین دین کی تفصیلات کی بنیاد پر حکمت عملی کے فریم ورک میں ضروری تفصیلات کو بھرنے کی ضرورت ہے۔

سب سے پہلے، لین دین سے پہلے پیشگی پروسیسنگ پہلا مرحلہ: عالمی ماحول میں ضروری عالمی متغیرات کا اعلان کریں۔ ایک چارٹ آبجیکٹ کا اعلان کریں جو چارٹ کو ترتیب دیتا ہے Var چارٹ = { } چارٹ کو شروع کرنے کے لئے چارٹ فنکشن کو کال کریں Var ObjChart = چارٹ (چارٹ) پھیلاؤ ترتیب کو ذخیرہ کرنے کے لئے ایک خالی صف کا اعلان کریں Var بار = [ ] ایک ٹائم اسٹیمپ متغیر کا اعلان کریں جو تاریخی ڈیٹا ریکارڈ کرتا ہے Var oldTime = 0 مرحلہ 2: حکمت عملی کے لئے بیرونی پیرامیٹرز کو ترتیب دیں.

img

مرحلہ 3: ڈیٹا پروسیسنگ فنکشن کی وضاحت کریں بنیادی ڈیٹا فنکشن: ڈیٹا ()) ایک کنسٹرکٹر ڈیٹا بنائیں اور اس کی داخلی خصوصیات کی وضاحت کریں ، بشمول: اکاؤنٹ ڈیٹا ، پوزیشن ڈیٹا ، K لائن ڈیٹا ٹائم اسٹیمپ ، آربیٹریج معاہدے A / B کی تازہ ترین خرید / فروخت کی قیمت ، مثبت / ریورس آربیٹریج اسپریڈ

img

پوزیشن فنکشن حاصل کریں: mp ()) پوزیشنوں کی پوری صف کے ذریعے چیک کریں، مخصوص معاہدے اور مخصوص سمت میں پوزیشنوں کی تعداد واپس. کوئی نہیں ہے تو غلط واپس.

img

K لائن اور اشارے کی تقریب: boll ()) مثبت / الٹ arbitrage پھیلاؤ کے اعداد و شمار کی بنیاد پر ایک نیا K لائن تسلسل کا تجزیہ کریں. اور بول اشارے کی طرف سے شمار اپ / وسط / نیچے ریل کے اعداد و شمار واپس.

img

آرڈر فنکشن: تجارت ()) آرڈر معاہدے کا نام اور تجارت کی قسم درج کریں ، پھر آرڈر کو آخری خریداری / فروخت کی قیمت میں رکھیں اور آرڈر دینے کے بعد نتیجہ واپس کریں۔ چونکہ آرڈرز کی دو مختلف سمتوں کو بیک وقت آرڈر کرنا ضروری ہے ، لہذا آرڈر معاہدے کے نام کے مطابق فنکشن کے اندر آخری خریداری / فروخت کی قیمت کو تبدیل کیا جاتا ہے۔

img

آرڈر منسوخ کریں فنکشن: cancelOrders ()) تمام زیر التواء احکامات کی صف حاصل کریں اور انہیں ایک ایک کرکے منسوخ کریں۔ اور اگر زیر التواء آرڈر ہے تو ، غلط لوٹائیں ، اور اگر کوئی نہیں ہے تو ، سچ لوٹائیں۔

img

پروسیسنگ ہولڈنگ واحد معاہدہ: isEven ()) ثالثی کی تجارت میں سنگل ٹانگ کی صورتحال کی صورت میں ، یہ براہ راست تمام پوزیشنوں کو بند کرکے سنبھالا جاتا ہے۔ یقینا ، آپ قیمت کا پیچھا کرنے میں بھی تبدیل ہوسکتے ہیں۔

img

ڈرائنگ چارٹ فنکشن: ڈرائنگ چارٹ ()) چارٹ میں ضروری مارکیٹ کے اعداد و شمار اور اشارے کے اعداد و شمار کو نکالنے کے لئے ObjChart.add () طریقہ کار کو کال کریں: اوپر ، وسط ، نیچے ریل ، مثبت / ریورس آربراجی اسپریڈ۔

img

مرحلہ 4: انٹری فنکشن مین () میں ، ٹرانزیکشن سے پہلے پری پروسیسنگ کوڈ کو انجام دیں ، جو پروگرام شروع ہونے کے بعد صرف ایک بار چلتا ہے ، بشمول:

کنسول میں غیر اہم معلومات کو فلٹر کریں SetErrorFilter ()) ڈیجیٹل کرنسی کی قسم مقرر کریں جس سے تجارت کی جائےexchange.IO()) پروگرام شروع کرنے سے پہلے ڈرائنگ چارٹس خالی کریں ObjChart.reset ()) پروگرام شروع کرنے سے پہلے حالت بار کی معلومات خالی کریں LogProfitReset ())

img

NO.7 ٹرانزیکشن سے پہلے مندرجہ بالا پری پروسیسنگ کی وضاحت کرنے کے بعد ، اگلے مرحلے پر آگے بڑھنا ضروری ہے ، پولنگ موڈ میں داخل ہوں ، اور onTick () فنکشن کو دہرائیں۔ اور پولنگ کے دوران نیند کا وقت مقرر کریں، کیونکہ کچھ ڈیجیٹل کرنسی ایکسچینج کے API میں ایک مخصوص مدت کے لئے داخلی رسائی کی حد ہوتی ہے۔

img

دوسرا، حاصل کریں اور اعداد و شمار کا حساب مرحلہ 1: تجارتی منطق کے لئے بنیادی ڈیٹا آبجیکٹ، اکاؤنٹ بیلنس اور بول اشارے کے اعداد و شمار حاصل کریں۔

img

تیسرا، آرڈر دیں اور اس پر کارروائی کریں مرحلہ 1: اوپر کی حکمت عملی کی منطق کے مطابق خرید و فروخت کا عمل انجام دیں۔ پہلے ، چیک کریں کہ کیا قیمت اور اشارے کی شرائط درست ہیں ، اور پھر دیکھیں کہ آیا پوزیشن کی شرائط درست ہیں ، اور آخر میں تجارت () آرڈر فنکشن کو انجام دیں۔

img

مرحلہ 2: آرڈر دینے کے بعد ، غیر معمولی حالات جیسے زیر التوا آرڈرز اور واحد معاہدے کو سنبھالنا اور چارٹ تیار کرنا ضروری ہے۔

img

نمبر8 مندرجہ بالا، ہم نے 200 سے زائد لائنوں کے ذریعے ایک سادہ ڈیجیٹل کرنسی انٹرٹیمپورل آربراجی حکمت عملی بنائی ہے۔ مکمل کوڈ مندرجہ ذیل ہے:

img

NO.9 یہ حکمت عملی صرف ایک ٹرگر کی حیثیت سے کام کرتی ہے۔ حقیقی مارکیٹ اتنی آسان نہیں ہے ، لیکن آپ اس مثال کو اپنے تخیل کے ساتھ کھیلنے کے لئے استعمال کرسکتے ہیں۔

اس بات کو یاد دلانا ضروری ہے کہ میرے محدود تجربے کی بنیاد پر، خالص مدت کی ثالثی کی حکمت عملی بنیادی طور پر موجودہ ڈیجیٹل کرنسی مارکیٹ کی صورت حال میں چلانے کے قابل نہیں ہے، چاہے یہ خطرہ سے پاک مثلث ثالثی ہو یا کراس مارکیٹ ثالثی.

اس کی وجہ یہ ہے کہ اس سے کوئی فرق نہیں پڑتا ہے کہ کس ڈیجیٹل کرنسی ایکسچینج میں فیوچر مارکیٹ ہے ، مارجن فئیےٹ نہیں ہے۔ تقریبا all تمام ڈیجیٹل کرنسیوں میں سال کے آغاز سے اب تک تقریبا 70 70 فیصد کمی واقع ہوئی ہے۔ دوسرے الفاظ میں ، حکمت عملی ہمیشہ کرنسی بنانا ہے ، لیکن کرنسی کی قیمت گر رہی ہے۔

ایک وسیع نقطہ نظر پر غور کریں، ڈیجیٹل کرنسی مارکیٹ نے پہلے ہی بلاکچین کو چھوڑ دیا ہے۔ اس وقت ٹیولپ کی طرح، قیمت ہمیشہ لوگوں کی توقعات اور اعتماد سے آتی ہے، اور اعتماد قیمت سے آتا ہے...

یہاں مکمل کوڈ حاصل کرنے کے لئے:

// global variable
// Declare a chart object that configures the chart
var chart = {
    __isStock: true,
    tooltip: {
        xDateFormat: '%Y-%m-%d %H:%M:%S, %A'
    },
    title: {
        text: 'Profit and loss chart(detail)'
    },
    rangeSelector: {
        buttons: [{
            type: 'hour',
            count: 1,
            text: '1h'
        }, {
            type: 'hour',
            count: 2,
            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: "up",
        id: "line1,up",
        data: []
    }, {
        name: "middle",
        id: "line2,middle",
        data: []
    }, {
        name: "down",
        id: "line3,down",
        data: []
    }, {
        name: "basb",
        id: "line4,basb",
        data: []
    }, {
        name: "sabb",
        id: "line5,sabb",
        data: []
    }]
};
var ObjChart = Chart(chart); // Drawing object
var bars = []; // Store spread sequence
var oldTime = 0; // Record historical data timestamp

// Parameter
var tradeTypeA = "this_week"; // Arbitrage contract A
var tradeTypeB = "quarter"; // Arbitrage contract B
var dataLength = 10; //Length of indicator cycle
var timeCycle = 1; // The cycle of K-line
var name = "ETC"; // Currency type
var unit = 1; // Quantity of orders

// Basic data
function Data(tradeTypeA, tradeTypeB) { // input arbitrage contract A&B
    this.accountData = _C(exchange.GetAccount); // get account data
    this.positionData = _C(exchange.GetPosition); // get position data
    var recordsData = _C(exchange.GetRecords); //get k-line data
    exchange.SetContractType(tradeTypeA); // subscribe arbitrage contract A
    var depthDataA = _C(exchange.GetDepth); // deep data of arbitrage contract A
    exchange.SetContractType(tradeTypeB); // subscribe arbitrage contract B
    var depthDataB = _C(exchange.GetDepth); // deep data of arbitrage contract B
    this.time = recordsData[recordsData.length - 1].Time; // get the latest time data
    this.askA = depthDataA.Asks[0].Price; // the latest selling price of arbitrage contract A
    this.bidA = depthDataA.Bids[0].Price; // the latest buying price of arbitrage contract A
    this.askB = depthDataB.Asks[0].Price; // the latest selling price of arbitrage contract B
    this.bidB = depthDataB.Bids[0].Price; // the latest buying price of arbitrage contract B
    // Positive arbitrage spread(the latest selling price of contract A -the latest buying price of contract B )
    this.basb = depthDataA.Asks[0].Price - depthDataB.Bids[0].Price;
    // Reverse arbitrage spread(the latest buying price of contract A -the latest selling price of contract B )
    this.sabb = depthDataA.Bids[0].Price - depthDataB.Asks[0].Price;
}

// get position information
Data.prototype.mp = function (tradeType, type) {
    var positionData = this.positionData; // get position data
    for (var i = 0; i < positionData.length; i++) {
        if (positionData[i].ContractType == tradeType) {
            if (positionData[i].Type == type) {
                if (positionData[i].Amount > 0) {
                    return positionData[i].Amount;
                }
            }
        }
    }
    return false;
}

// Synthetize new K-line data and boll indicator data
Data.prototype.boll = function (num, timeCycle) {
    var self = {}; // Temporary object
    // the median of Positive arbitrage spread and reverse arbitrage spread
    self.Close = (this.basb + this.sabb) / 2;
    if (this.timeA == this.timeB) {
        self.Time = this.time;
    } // Comparing two depth data timestamps
    if (this.time - oldTime > timeCycle * 60000) {
        bars.push(self);
        oldTime = this.time;
    } // According to the specified time period, insert the spread data object in the K-line array.
    if (bars.length > num * 2) {
        bars.shift(); // Control K-line array length
    } else {
        return;
    }
    var boll = TA.BOLL(bars, num, 2); // Call the boll indicator in the Talib Library
    return {
        up: boll[0][boll[0].length - 1], // up rail of boll indicator
        middle: boll[1][boll[1].length - 1], // middle rail of boll indicator
        down: boll[2][boll[2].length - 1] // down rail of boll indicator
    } // Return a processed boll indicator data.
}

// place order
Data.prototype.trade = function (tradeType, type) {
    exchange.SetContractType(tradeType); // Resubscribe contract before placing order
    var askPrice, bidPrice;
    if (tradeType == tradeTypeA) { // if it's contract A
        askPrice = this.askA; // set askPrice
        bidPrice = this.bidA; // set bidPrice
    } else if (tradeType == tradeTypeB) { // if it's contract B
        askPrice = this.askB; // set askPrice
        bidPrice = this.bidB; // set bidPrice
    }
    switch (type) { // Match order mode
        case "buy":
            exchange.SetDirection(type); // Set order mode
            return exchange.Buy(askPrice, unit);
        case "sell":
            exchange.SetDirection(type); // Set order mode
            return exchange.Sell(bidPrice, unit);
        case "closebuy":
            exchange.SetDirection(type); // Set order mode
            return exchange.Sell(bidPrice, unit);
        case "closesell":
            exchange.SetDirection(type); // Set order mode
            return exchange.Buy(askPrice, unit);
        default:
            return false;
    }
}

// cancel order
Data.prototype.cancelOrders = function () {
    Sleep(500); // delay before canceling, because some exchanges you know...
    var orders = _C(exchange.GetOrders); // Get the array of pending orders
    if (orders.length > 0) { // if there is pending order
        for (var i = 0; i < orders.length; i++) { //check through the array of pending orders
            exchange.CancelOrder(orders[i].Id); //cancel pending orders one by one
            Sleep(500); //Delay 0.5 seconds
        }
        return false; // return false if pending orders have been cancelled
    }
    return true; //return true if there is no pending order
}

// handle holding single contract
Data.prototype.isEven = function () {
    var positionData = this.positionData; // get position data
    var type = null; // converse position direction 
    // If the length of the position array divided by some number and the remainder is 2, the result is not equal to 0 or the length of the position array is not equal to 2
    if (positionData.length % 2 != 0 || positionData.length != 2) {
        for (var i = 0; i < positionData.length; i++) { // check through the array of positions
            if (positionData[i].Type == 0) { // if it's long position
                type = 10; // Set order parameters
            } else if (positionData[i].Type == 1) { // if it's short position
                type = -10; // Set order parameters
            }
            // close all positions
            this.trade(positionData[i].ContractType, type, positionData[i].Amount);
        }
    }
}

// drawing chart
Data.prototype.drawingChart = function (boll) {
    var nowTime = new Date().getTime();
    ObjChart.add([0, [nowTime, boll.up]]);
    ObjChart.add([1, [nowTime, boll.middle]]);
    ObjChart.add([2, [nowTime, boll.down]]);
    ObjChart.add([3, [nowTime, this.basb]]);
    ObjChart.add([4, [nowTime, this.sabb]]);
    ObjChart.update(chart);
}

// trading condition
function onTick() {
    var data = new Data(tradeTypeA, tradeTypeB); // Create a base data object
    var accountStocks = data.accountData.Stocks; // account balance
    var boll = data.boll(dataLength, timeCycle); // get boll indicator data
    if (!boll) return; // return if there is no boll data
    // Spread description
    // basb = (the latest selling price of contract A - the latest buying price of contract B)
    // sabb = (the latest buying price of contract A - the latest selling price of contract B)
    if (data.sabb > boll.middle && data.sabb < boll.up) { // if sabb is higher than the middle rail
        if (data.mp(tradeTypeA, 0)) { // check if contract A has long positon before placing order
            data.trade(tradeTypeA, "closebuy"); // close long position of contract A
        }
        if (data.mp(tradeTypeB, 1)) { // check if contract B has short positon before placing order
            data.trade(tradeTypeB, "closesell"); // close short position of contract B
        }
    } else if (data.basb < boll.middle && data.basb > boll.down) { // if basb is lower than the middle rail
        if (data.mp(tradeTypeA, 1)) { // check if contract A has short positon before placing order
            data.trade(tradeTypeA, "closesell"); // close short position of contract A
        }
        if (data.mp(tradeTypeB, 0)) { // check if contract B has long positon before placing order
            data.trade(tradeTypeB, "closebuy"); // close long position of contract B
        }
    }
    if (accountStocks * Math.max(data.askA, data.askB) > 1) { // If there is balance in the account
        if (data.basb < boll.down) { // if basb spread is lower than the down rail
            if (!data.mp(tradeTypeA, 0)) { // check if contract A has long positon before placing order
                data.trade(tradeTypeA, "buy"); // open long position of contract A
            }
            if (!data.mp(tradeTypeB, 1)) { // check if contract B has short positon before placing order
                data.trade(tradeTypeB, "sell"); // open short position of contract B
            }
        } else if (data.sabb > boll.up) { // if sabb spread is higher than the up rail
            if (!data.mp(tradeTypeA, 1)) { // check if contract A has short positon before placing order
                data.trade(tradeTypeA, "sell"); // open short position of contract A
            }
            if (!data.mp(tradeTypeB, 0)) { // check if contract B has long positon before placing order
                data.trade(tradeTypeB, "buy"); // open long position of contract B
            }
        }
    }
    data.cancelOrders(); // cancel orders
    data.drawingChart(boll); // drawing chart
    data.isEven(); // process holding single contract
}

//enter function
function main() {
    // filter the information that is not very important in the console
    SetErrorFilter("429|GetRecords:|GetOrders:|GetDepth:|GetAccount|:Buy|Sell|timeout|Futures_OP");
    exchange.IO("currency", name + '_USDT'); //Set the cryptocurrency type to be traded
    ObjChart.reset(); //Empty the drawn charts before the program starts
    LogProfitReset(); //Empty the status bar information before the program starts
    while (true) { // Enter polling mode
        onTick(); // Execute onTick function
        Sleep(500); // sleep for o.5 seconds
    }
}


مزید

چھوٹا سا خواباچھا!