avatar of 发明者量化-小小梦 发明者量化-小小梦
پر توجہ دیں نجی پیغام
4
پر توجہ دیں
1271
پیروکار

اعلی تعدد تجارتی حکمت عملی کا تجزیہ - پینی جمپ

میں تخلیق کیا: 2023-11-03 17:36:56, تازہ کاری: 2023-11-03 22:19:32
comments   0
hits   2877

اعلی تعدد تجارتی حکمت عملی کا تجزیہ - پینی جمپ

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

پینی جمپ کی حکمت عملی کو سمجھنا

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

مثال کے طور پر، فرض کریں کہ سٹاک کی مارکیٹ کی گہرائی اس طرح نظر آتی ہے: \(1.01 x \)200 | پھر، ایک “ہاتھی” آیا اور \(1.01 میں 3,000 شیئرز خریدنے کا آرڈر دیا۔ اس وقت، مارکیٹ کی گہرائی \)1.01 x $200 ہو جائے گی۔ یہ عمل ایک “ہاتھی” کو متعارف کروانے کے مترادف ہے جو مارکیٹ میں دیگر شرکاء کی توجہ کا مرکز بن جاتا ہے۔

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

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

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

پینی جمپ حکمت عملی کا بنیادی خیال

پینی جمپ کی حکمت عملی کا بنیادی خیال یہ ہے کہ ایک بار جب ایک ہاتھی مارکیٹ میں ظاہر ہوتا ہے اور ایک مخصوص قیمت (مثال کے طور پر، \(1.01) کو سپورٹ کرتا ہے، تو اعلی تعدد والے تاجر تیزی سے اپنی بولیوں کو ایک سینٹ بڑھا دیتے ہیں، مثال کے طور پر \)1.02 تک۔ اس کی وجہ یہ ہے کہ اعلی تعدد والے تاجر یہ سمجھتے ہیں کہ ہاتھی کی ظاہری شکل کا مطلب ہے کہ قیمت کی سطح پر مضبوط خرید سپورٹ ہے، اس لیے وہ اس امید پر عمل کرنے کی کوشش کرتے ہیں کہ قیمت بڑھے گی۔ جب قیمت \(1.03 x \)1.05 تک بڑھ جاتی ہے، تو ہائی فریکوئنسی تاجر تیزی سے فروخت کر سکتا ہے، جس سے $0.01 کا منافع ہوتا ہے۔

یہی نہیں، اعلیٰ تعدد والے تاجر خریدنے کے بعد منافع بھی کما سکتے ہیں چاہے قیمت نہ بھی بڑھے۔ کیونکہ وہ جانتے ہیں کہ ہاتھی نیچے کی قیمت کو سپورٹ کرتا ہے، اس لیے وہ جلدی سے ہاتھی کو اپنے حصص بیچ سکتے ہیں اور فرق پر تھوڑا سا منافع کما سکتے ہیں۔

پینی جمپ اسٹریٹجی کوڈ کو پارس کرنا

حکمت عملی کا ماخذ کوڈ: https://www.fmz.com/strategy/358

اوپر فراہم کردہ حکمت عملی کوڈ ایک مثال ہے جو Penny Jump کی حکمت عملی کو نافذ کرتی ہے۔ یہاں کوڈ کی تفصیلی وضاحت ہے تاکہ ابتدائی افراد سمجھ سکیں کہ یہ کیسے کام کرتا ہے:

var Counter = {
    i: 0,
    w: 0,
    f: 0
};

// Variables
var InitAccount = null;

function CancelAll() {
    while (true) {
        var orders = _C(exchange.GetOrders);
        if (orders.length == 0) {
            break;
        }
        for (var i = 0; i < orders.length; i++) {
            exchange.CancelOrder(orders[i].Id);
        }
        Sleep(Interval);
    }
}

function updateStatus(msg) {
    LogStatus("调戏次数:", Counter.i, "成功:", Counter.w, "失败:", Counter.f, "\n"+msg+"#0000ff\n"+new Date());
}

function main() {
    if (DisableLog) {
        EnableLog(false);
    }
    CancelAll();
    InitAccount = _C(exchange.GetAccount);
    Log(InitAccount);
    var i = 0;
    var locks = 0;
    while (true) {
        Sleep(Interval);
        var depth = _C(exchange.GetDepth);
        if (depth.Asks.length === 0 || depth.Bids.length === 0) {
            continue;
        }
        updateStatus("搜索大象中.... 买一: " + depth.Bids[0].Price + ",  卖一:" + depth.Asks[0].Price + ", 锁定次数: " + locks);
        var askPrice = 0;
        for (i = 0; i < depth.Asks.length; i++) {
            if (depth.Asks[i].Amount >= Lot) {
                askPrice = depth.Asks[i].Price;
                break;
            }
        }
        if (askPrice === 0) {
            continue;
        }
        var elephant = null;
        // skip Bids[0]
        for (i = 1; i < depth.Bids.length; i++) {
            if ((askPrice - depth.Bids[i].Price) > ElephantSpace) {
                break;
            }
            if (depth.Bids[i].Amount >= ElephantAmount) {
                elephant = depth.Bids[i];
                break;
            }
        }

        if (!elephant) {
            locks = 0;
            continue;
        }
        locks++;
        if (locks < LockCount) {
            continue;
        }
        locks = 0;

        updateStatus("调戏大象中....大象在第" + i + "档, " + JSON.stringify(elephant));
        exchange.Buy(elephant.Price + PennyTick, Lot, "Bids[" + i + "]", elephant);
        var ts = new Date().getTime();
        while (true) {
            Sleep(CheckInterval);
            var orders = _C(exchange.GetOrders);
            if (orders.length == 0) {
                break;
            }
            if ((new Date().getTime() - ts) > WaitInterval) {
                for (var i = 0; i < orders.length; i++) {
                    exchange.CancelOrder(orders[i].Id);
                }
            }
        }
        var account = _C(exchange.GetAccount);
        var opAmount = _N(account.Stocks - InitAccount.Stocks);
        if (opAmount < 0.001) {
            Counter.f++;
            Counter.i++;
            continue;
        }
        updateStatus("买单得手: " + opAmount +", 开始出手...");
        exchange.Sell(elephant.Price + (PennyTick * ProfitTick), opAmount);
        var success = true;
        while (true) {
            var depth = _C(exchange.GetDepth);
            if (depth.Bids.length > 0 && depth.Bids[0].Price <= (elephant.Price-(STTick*PennyTick))) {
                success = false;
                updateStatus("没有得手, 开始止损, 当前买一: " + depth.Bids[0].Price);
                CancelAll();
                account = _C(exchange.GetAccount);
                var opAmount = _N(account.Stocks - InitAccount.Stocks);
                if (opAmount < 0.001) {
                    break;
                }
                exchange.Sell(depth.Bids[0].Price, opAmount);
            }
            var orders = _C(exchange.GetOrders);
            if (orders.length === 0) {
                break;
            }
            Sleep(CheckInterval);
        }
        if (success) {
            Counter.w++;
        } else {
            Counter.f++;
        }
        Counter.i++;
        var account = _C(exchange.GetAccount);
        LogProfit(account.Balance - InitAccount.Balance, account);
    }
}

میں آپ کی طرف سے فراہم کردہ حکمت عملی کوڈ کو دیکھوں گا تاکہ آپ کو یہ سمجھنے میں مدد ملے کہ یہ مزید تفصیل سے کیسے کام کرتا ہے۔

var Counter = {
    i: 0,
    w: 0,
    f: 0
};

یہ کوڈ کاؤنٹر نامی ایک چیز کو شروع کرتا ہے، جو حکمت عملی کے تجارتی اعدادوشمار کو ٹریک کرنے کے لیے استعمال ہوتا ہے۔ خاص طور پر، اس میں تین صفات شامل ہیں:

  • i: لین دین کی کل تعداد کی نشاندہی کرتا ہے۔
  • w: کامیاب لین دین کی تعداد کی نشاندہی کرتا ہے۔
  • f: ناکام ٹرانزیکشنز کی تعداد کی نشاندہی کرتا ہے۔

یہ اوصاف پالیسی پر عمل درآمد کے دوران ریکارڈ اور اپ ڈیٹ ہوتے ہیں۔

var InitAccount = null;

کوڈ کی یہ لائن InitAccount نامی ایک متغیر کو شروع کرتی ہے، جو حکمت عملی پر عمل درآمد شروع ہونے پر اکاؤنٹ کی معلومات کو ذخیرہ کرے گی۔

function CancelAll() {
    while (true) {
        var orders = _C(exchange.GetOrders);
        if (orders.length == 0) {
            break;
        }
        for (var i = 0; i < orders.length; i++) {
            exchange.CancelOrder(orders[i].Id);
        }
        Sleep(Interval);
    }
}

یہ ایک ہےCancelAll()اس فنکشن کا مقصد مارکیٹ پر تمام اوپن آرڈرز کو منسوخ کرنا ہے۔ آئیے قدم بہ قدم اس کی فعالیت کی وضاحت کریں:

  • while (true): یہ ایک لامحدود لوپ ہے جو اس وقت تک عمل میں آئے گا جب تک کہ کوئی بقایا آرڈر نہ ہوں۔
  • var orders = _C(exchange.GetOrders): کوڈ کی یہ لائن کرنٹ اکاؤنٹ کے تمام زیر التواء آرڈرز حاصل کرنے کے لیے exchange.GetOrders فنکشن کا استعمال کرتی ہے اور انہیں آرڈرز متغیر میں اسٹور کرتی ہے۔
  • if (orders.length == 0): کوڈ کی یہ لائن چیک کرتی ہے کہ آیا کوئی نامکمل آرڈرز ہیں۔ اگر آرڈرز کی صف کی لمبائی 0 ہے تو اس کا مطلب ہے کہ کوئی نامکمل آرڈرز نہیں ہیں اور لوپ ٹوٹ جائے گا۔
  • for (var i = 0; i < orders.length; i++): یہ ایک لوپ ہے جو تمام بقایا آرڈرز کے ذریعے دہرایا جاتا ہے۔
  • exchange.CancelOrder(orders[i].Id): کوڈ کی یہ لائن ہر آرڈر کو اس کی آرڈر ID کے ذریعے منسوخ کرنے کے لیے exchange.CancelOrder() فنکشن کا استعمال کرتی ہے۔
  • Sleep(Interval): کوڈ کی یہ لائن ایک انتظار کا دور متعارف کراتی ہے، ایک مخصوص مدت (ملی سیکنڈ میں) کا انتظار کرتے ہوئے اس بات کو یقینی بنانے کے لیے کہ آرڈر کینسلیشن آپریشن زیادہ بار بار نہ ہو۔

اس فنکشن کا مقصد اس بات کو یقینی بنانا ہے کہ مرکزی حکمت عملی کو عملی جامہ پہنانے سے پہلے، مرکزی حکمت عملی پر عمل درآمد میں مداخلت سے بچنے کے لیے کوئی بقایا احکامات موجود نہ ہوں۔

function updateStatus(msg) {
    LogStatus("调戏次数:", Counter.i, "成功:", Counter.w, "失败:", Counter.f, "\n" + msg + "#0000ff\n" + new Date());
}

یہ ایک ہےupdateStatus(msg)ایک فنکشن جو لین دین کی حیثیت کی معلومات کو اپ ڈیٹ کرتا ہے اور اسے ریکارڈ کرتا ہے۔ یہ ایک msg پیرامیٹر کو قبول کرتا ہے جس میں عام طور پر مارکیٹ کی موجودہ صورتحال کے بارے میں معلومات ہوتی ہیں۔ فنکشن کے مخصوص آپریشنز میں شامل ہیں:

استعمال کریںLogStatus()جب حکمت عملی چل رہی ہو تو فنکشن اسٹیٹس بار میں دکھائی جانے والی معلومات کو ریکارڈ کرتا ہے۔ یہ لین دین، کامیابیوں اور ناکامیوں کی تعداد کے بارے میں متن دکھاتا ہے۔ منسلکmsgپیرامیٹرز جن میں مارکیٹ کی موجودہ صورتحال کے بارے میں معلومات ہوتی ہیں۔ موجودہ ٹائم اسٹیمپ شامل کیا گیا ہے (new Date()وقت کی معلومات ظاہر کرنے کے لیے۔ اس فنکشن کا مقصد حکمت عملی پر عمل درآمد کے دوران نگرانی اور تجزیہ کے لیے تجارتی حیثیت کی معلومات کو ریکارڈ اور اپ ڈیٹ کرنا ہے۔

function main() {
    if (DisableLog) {
        EnableLog(false);
    }
    CancelAll();
    InitAccount = _C(exchange.GetAccount);
    Log(InitAccount);
    var i = 0;
    var locks = 0;
    while (true) {
        Sleep(Interval);
        var depth = _C(exchange.GetDepth);
        if (depth.Asks.length === 0 || depth.Bids.length === 0) {
            continue;
        }
        updateStatus("搜索大象中.... 买一: " + depth.Bids[0].Price + ",  卖一:" + depth.Asks[0].Price + ", 锁定次数: " + locks);
        var askPrice = 0;
        for (i = 0; i < depth.Asks.length; i++) {
            if (depth.Asks[i].Amount >= Lot) {
                askPrice = depth.Asks[i].Price;
                break;
            }
        }
        if (askPrice === 0) {
            continue;
        }
        var elephant = null;
        // skip Bids[0]
        for (i = 1; i < depth.Bids.length; i++) {
            if ((askPrice - depth.Bids[i].Price) > ElephantSpace) {
                break;
            }
            if (depth.Bids[i].Amount >= ElephantAmount) {
                elephant = depth.Bids[i];
                break;
            }
        }

        if (!elephant) {
            locks = 0;
            continue;
        }
        locks++;
        if (locks < LockCount) {
            continue;
        }
        locks = 0;

        updateStatus("调戏大象中....大象在第" + i + "档, " + JSON.stringify(elephant));
        exchange.Buy(elephant.Price + PennyTick, Lot, "Bids[" + i + "]", elephant);
        var ts = new Date().getTime();
        while (true) {
            Sleep(CheckInterval);
            var orders = _C(exchange.GetOrders);
            if (orders.length == 0) {
                break;
            }
            if ((new Date().getTime() - ts) > WaitInterval) {
                for (var i = 0; i < orders.length; i++) {
                    exchange.CancelOrder(orders[i].Id);
                }
            }
        }
        var account = _C(exchange.GetAccount);
        var opAmount = _N(account.Stocks - InitAccount.Stocks);
        if (opAmount < 0.001) {
            Counter.f++;
            Counter.i++;
            continue;
        }
        updateStatus("买单得手: " + opAmount +", 开始出手...");
        exchange.Sell(elephant.Price + (PennyTick * ProfitTick), opAmount);
        var success = true;
        while (true) {
            var depth = _C(exchange.GetDepth);
            if (depth.Bids.length > 0 && depth.Bids[0].Price <= (elephant.Price-(STTick*PennyTick))) {
                success = false;
                updateStatus("没有得手, 开始止损, 当前买一: " + depth.Bids[0].Price);
                CancelAll();
                account = _C(exchange.GetAccount);
                var opAmount = _N(account.Stocks - InitAccount.Stocks);
                if (opAmount < 0.001) {
                    break;
                }
                exchange.Sell(depth.Bids[0].Price, opAmount);
            }
            var orders = _C(exchange.GetOrders);
            if (orders.length === 0) {
                break;
            }
            Sleep(CheckInterval);
        }
        if (success) {
            Counter.w++;
        } else {
            Counter.f++;
        }
        Counter.i++;
        var account = _C(exchange.GetAccount);
        LogProfit(account.Balance - InitAccount.Balance, account);
    }
}

یہ حکمت عملی کا اہم عمل ہے۔main()، جو حکمت عملی کی بنیادی منطق پر مشتمل ہے۔ آئیے اس کے آپریشن لائن کو لائن کے ذریعے بیان کرتے ہیں:

  • if (DisableLog): کوڈ کی یہ لائن چیک کرتی ہے کہ آیا DisableLog متغیر درست ہے، اور اگر ایسا ہے تو، یہ لاگنگ کو غیر فعال کر دیتا ہے۔ یہ یقینی بنانا ہے کہ پالیسی غیر ضروری معلومات کو لاگ نہیں کرتی ہے۔

  • CancelAll(): CancelAll() فنکشن کو کال کریں جس کی پہلے وضاحت کی گئی تھی اس بات کو یقینی بنانے کے لیے کہ کوئی نامکمل آرڈرز موجود نہیں ہیں۔

  • InitAccount = _C(exchange.GetAccount): کوڈ کی یہ لائن کرنٹ اکاؤنٹ کی معلومات حاصل کرتی ہے اور اسے InitAccount متغیر میں اسٹور کرتی ہے۔ اس کا استعمال اکاؤنٹ کی حالت کو ریکارڈ کرنے کے لیے کیا جائے گا جب حکمت عملی پر عمل درآمد شروع ہو جائے گا۔

  • var i = 0; اورvar locks = 0;: دو متغیر i اور locks شروع کریں، جو بعد میں حکمت عملی کی منطق میں استعمال ہوں گے۔

  • while (true): یہ ایک لامحدود لوپ ہے، جو بنیادی طور پر حکمت عملیوں کے مسلسل نفاذ کے لیے استعمال ہوتا ہے۔

اگلا، ہم سطر بہ سطر کی وضاحت کریں گے۔while (true)لوپ کے اندر مرکزی حکمت عملی کی منطق۔

while (true) {
    Sleep(Interval);
    var depth = _C(exchange.GetDepth);
    if (depth.Asks.length === 0 || depth.Bids.length === 0) {
        continue;
    }
    updateStatus("搜索大象中.... 买一: " + depth.Bids[0].Price + ",  卖一:" + depth.Asks[0].Price + ", 锁定次数: " + locks);
  • Sleep(Interval): کوڈ کی یہ لائن حکمت عملی کے عمل درآمد کی فریکوئنسی کو کنٹرول کرنے کے لیے حکمت عملی کو ایک مدت تک سونے کی اجازت دیتی ہے۔ وقفہ پیرامیٹر نیند کے وقفہ کو ملی سیکنڈ میں بیان کرتا ہے۔

  • var depth = _C(exchange.GetDepth): موجودہ مارکیٹ کی گہرائی سے متعلق معلومات حاصل کریں، بشمول فروخت اور خرید کے آرڈرز کی قیمت اور مقدار۔ یہ معلومات ڈیپتھ متغیر میں محفوظ کی جائیں گی۔

  • if (depth.Asks.length === 0 || depth.Bids.length === 0): کوڈ کی یہ لائن مارکیٹ کی گہرائی سے متعلق معلومات کو چیک کرتی ہے تاکہ اس بات کو یقینی بنایا جا سکے کہ آرڈر فروخت اور خرید دونوں موجود ہیں۔ اگر ان میں سے کوئی ایک موجود نہیں ہے، تو اس کا مطلب ہے کہ مارکیٹ میں کافی تجارتی معلومات نہیں ہوسکتی ہیں، اور حکمت عملی انتظار کرتی رہے گی۔

  • updateStatus("搜索大象中.... 买一: " + depth.Bids[0].Price + ", 卖一:" + depth.Asks[0].Price + ", 锁定次数: " + locks): کوڈ کی یہ لائن حکمت عملی کی حیثیت کی معلومات کو اپ ڈیٹ کرنے کے لیے اپڈیٹ اسٹیٹس فنکشن کو کال کرتی ہے۔ یہ موجودہ مارکیٹ کی حیثیت کو ریکارڈ کرتا ہے، بشمول بولی کی قیمت، پوچھنے کی قیمت، اور پچھلے تالے کی تعداد۔

    var askPrice = 0;
    for (i = 0; i < depth.Asks.length; i++) {
        if (depth.Asks[i].Amount >= Lot) {
            askPrice = depth.Asks[i].Price;
            break;
        }
    }
    if (askPrice === 0) {
        continue;
    }
    var elephant = null;

  • var askPrice = 0;: askPrice متغیر کو شروع کریں، جو شرائط کو پورا کرنے والی فروخت کے آرڈر کی قیمت کو ذخیرہ کرنے کے لیے استعمال کیا جائے گا۔

  • for (i = 0; i < depth.Asks.length; i++): یہ ایک فار لوپ ہے جو مارکیٹ سیل آرڈر کی قیمت اور مقدار کی معلومات پر اعادہ کرنے کے لیے استعمال ہوتا ہے۔

  • if (depth.Asks[i].Amount >= Lot): لوپ میں، چیک کریں کہ آیا ہر سیل آرڈر کی مقدار مخصوص لاٹ سے زیادہ ہے یا اس کے برابر ہے۔ اگر ایسا ہے تو، بیچ آرڈر کی قیمت کو askPrice میں اسٹور کریں اور لوپ کو ختم کریں۔

  • if (askPrice === 0): اگر کوئی اطمینان بخش سیل آرڈر نہیں ملتا ہے (askPrice اب بھی 0 ہے)، حکمت عملی انتظار کرنا جاری رکھے گی اور بعد کے آپریشنز کو چھوڑے گی۔

  • var elephant = null;: ہاتھی کے متغیر کو شروع کریں، جو “ہاتھی” کے نام سے شناخت شدہ خرید آرڈر کی معلومات کو ذخیرہ کرنے کے لیے استعمال کیا جائے گا۔

    for (i = 1; i < depth.Bids.length; i++) {
        if ((askPrice - depth.Bids[i].Price) > ElephantSpace) {
            break;
        }
        if (depth.Bids[i].Amount >= ElephantAmount) {
            elephant = depth.Bids[i];
            break;
        }
    }

    if (!elephant) {
        locks = 0;
        continue;
    }
    locks++;
    if (locks < LockCount) {
        continue;
    }
    locks = 0;

پہلے خرید آرڈر (بولیاں[0])。

  • if ((askPrice - depth.Bids[i].Price) > ElephantSpace): چیک کریں کہ آیا موجودہ قیمت خرید اور askPrice کے درمیان فرق ElephantSpace سے زیادہ ہے۔ اگر ایسا ہے تو اس کا مطلب ہے کہ یہ “ہاتھی” سے کافی دور ہے اور حکمت عملی تلاش جاری نہیں رکھے گی۔

  • if (depth.Bids[i].Amount >= ElephantAmount): چیک کریں کہ کیا موجودہ خرید آرڈر کی رقم ElephantAmount سے زیادہ ہے یا اس کے برابر ہے، تو خرید آرڈر کی معلومات کو ہاتھی کے متغیر میں محفوظ کریں۔

  • if (!elephant): اگر “ہاتھی” نہیں ملتا ہے، تو لاک گنتی کو 0 پر سیٹ کریں اور انتظار جاری رکھیں۔

تالے ++: اگر “ہاتھی” پایا جاتا ہے، تو تالے کی تعداد میں اضافہ کیا جائے گا۔ یہ اس بات کو یقینی بنانا ہے کہ “ہاتھی” کے وجود کی ایک مدت کے دوران متعدد بار تصدیق ہونے کے بعد حکمت عملی پر عمل درآمد کیا جائے۔

  • if (locks < LockCount): چیک کریں کہ آیا تالے کی تعداد ضرورت تک پہنچتی ہے (لاک کاؤنٹ)۔ اگر ضروریات پوری نہیں ہوتی ہیں تو انتظار جاری رکھیں۔
    updateStatus("调戏大象中....大象在第" + i + "档, " + JSON.stringify(elephant));
    exchange.Buy(elephant.Price + PennyTick, Lot, "Bids[" + i + "]", elephant);
    var ts = new Date().getTime();
    while (true) {
        Sleep(CheckInterval);
        var orders = _C(exchange.GetOrders);
        if (orders.length == 0) {
            break;
        }
        if ((new Date().getTime() - ts) > WaitInterval) {
            for (var i = 0; i < orders.length; i++) {
                exchange.CancelOrder(orders[i].Id);
            }
        }
    }

  • updateStatus("调戏大象中....大象在第" + i + "档, " + JSON.stringify(elephant)): حکمت عملی کی موجودہ حیثیت کو ریکارڈ کرنے کے لیے اپڈیٹ اسٹیٹس فنکشن کو کال کریں، بشمول پائے گئے “ہاتھی” کی گیئر پوزیشن اور متعلقہ معلومات۔ اس کی نشاندہی پالیسی کے اسٹیٹس کالم میں کی جائے گی۔

  • exchange.Buy(elephant.Price + PennyTick, Lot, "Bids[" + i + "]", elephant): ملا “ہاتھی” خریدنے کے لیے exchange.buy فنکشن استعمال کریں۔ خریداری کی قیمت ہاتھی ہے۔ قیمت + پینی ٹک، خریداری کی مقدار لاٹ ہے، اور خریداری کے عمل کو “بولیاں” کے طور پر بیان کیا گیا ہے۔[” + i + “]“。

  • var ts = new Date().getTime(): وقت کے وقفوں کے بعد کے حساب کے لیے موجودہ وقت کا ٹائم اسٹیمپ حاصل کریں۔

  • while (true): “ہاتھی” خریدنے کے آرڈر پر عمل درآمد کا انتظار کرنے کے لیے ایک نیا لامحدود لوپ درج کریں۔

  • Sleep(CheckInterval): حکمت عملی ایک مدت کے لیے سوتی ہے تاکہ یہ کنٹرول کیا جا سکے کہ آرڈر کی حالت کتنی بار چیک کی جاتی ہے۔

  • var orders = _C(exchange.GetOrders): کرنٹ اکاؤنٹ کے آرڈر کی تمام معلومات حاصل کریں۔

  • if (orders.length == 0): چیک کریں کہ آیا کوئی نامکمل آرڈرز ہیں، اگر نہیں تو لوپ سے باہر جائیں۔

  • (new Date().getTime() - ts) > WaitInterval: موجودہ وقت اور “ہاتھی” کے خریدے جانے کے درمیان وقت کے وقفے کا حساب لگائیں اگر یہ انتظار کے وقفے سے زیادہ ہے، تو اس کا مطلب ہے کہ انتظار کا وقت ختم ہو گیا ہے۔

  • for (var i = 0; i < orders.length; i++): تمام نامکمل آرڈرز پر اعادہ کریں۔

  • exchange.CancelOrder(orders[i].Id): Exchange.CancelOrder فنکشن کا استعمال کرتے ہوئے ہر اوپن آرڈر کو منسوخ کریں۔

    var account = _C(exchange.GetAccount);
    var opAmount = _N(account.Stocks - InitAccount.Stocks);
    if (opAmount < 0.001) {
        Counter.f++;
        Counter.i++;
        continue;
    }
    updateStatus("买单得手: " + opAmount + ", 开始出手...");
    exchange.Sell(elephant.Price + (PennyTick * ProfitTick), opAmount);
    var success = true;
    while (true) {
        var depth = _C(exchange.GetDepth);
        if (depth.Bids.length > 0 && depth.Bids[0].Price <= (elephant.Price - (STTick * PennyTick))) {
            success = false;
            updateStatus("没有得手, 开始止损, 当前买一: " + depth.Bids[0].Price);
            CancelAll();
            account = _C(exchange.GetAccount);
            var opAmount = _N(account.Stocks - InitAccount.Stocks);
            if (opAmount < 0.001) {
                break;
            }
            exchange.Sell(depth.Bids[0].Price, opAmount);
        }
        var orders = _C(exchange.GetOrders);
        if (orders.length === 0) {
            break;
        }
        Sleep(CheckInterval);
    }
    if (success) {
        Counter.w++;
    } else {
        Counter.f++;
    }
    Counter.i++;
    var account = _C(exchange.GetAccount);
    LogProfit(account.Balance - InitAccount.Balance, account);
}

  • var account = _C(exchange.GetAccount): کرنٹ اکاؤنٹ کی معلومات حاصل کریں۔

  • var opAmount = _N(account.Stocks - InitAccount.Stocks): “ہاتھی” خریدنے کے بعد اکاؤنٹ میں اثاثوں میں ہونے والی تبدیلی کا حساب لگائیں۔ اگر تبدیلی 0.001 سے کم ہے، تو اس کا مطلب ہے کہ خریداری ناکام ہو گئی ہے، ناکامیوں کی تعداد میں اضافہ ہو جائے گا، اور اگلا سلسلہ جاری رہے گا۔

  • updateStatus("买单得手: " + opAmount + ", 开始出手..."): “ہاتھی” کی کامیاب خریداری کی معلومات کو ریکارڈ کرتا ہے، بشمول خریداری کی مقدار۔

  • exchange.Sell(elephant.Price + (PennyTick * ProfitTick), opAmount): منافع کمانے کے لیے کامیابی سے خریدے گئے “ہاتھی” کو فروخت کرنے کے لیے exchange.Sell فنکشن استعمال کریں۔ فروخت کی قیمت ہاتھی ہے۔ قیمت + (پینی ٹک * پرافٹ ٹک)۔

فروخت کے آرڈر کے نفاذ کے انتظار میں ایک نئے لامحدود لوپ میں داخل ہوتا ہے۔

  • var depth = _C(exchange.GetDepth): مارکیٹ کی گہرائی سے متعلق معلومات حاصل کریں۔

  • if (depth.Bids.length > 0 && depth.Bids[0].Price <= (elephant.Price - (STTick * PennyTick))): مارکیٹ کی گہرائی سے متعلق معلومات کو چیک کریں اگر مارکیٹ کی قیمت سٹاپ نقصان کی قیمت پر گر گئی ہے تو، سٹاپ نقصان کی کارروائی کو انجام دیں.

  • CancelAll(): پوزیشن کے خطرات سے بچنے کے لیے تمام نامکمل آرڈرز کو منسوخ کرنے کے لیے CancelAll() فنکشن کو کال کریں۔

  • if (opAmount < 0.001): خریداری کی مقدار دوبارہ چیک کریں اگر یہ 0.001 سے کم ہے، تو اس کا مطلب ہے کہ خریداری ناکام ہو گئی اور لوپ ختم ہو جائے گا۔

  • exchange.Sell(depth.Bids[0].Price, opAmount): ایک سٹاپ لاس آپریشن انجام دیں اور باقی اثاثوں کو موجودہ مارکیٹ کی سب سے کم قیمت پر فروخت کریں۔

آخر میں، اس بات پر منحصر ہے کہ آیا لین دین کامیاب ہے یا نہیں، کامیابیوں اور ناکامیوں کی تعداد کو اپ ڈیٹ کیا جاتا ہے، اور لین دین کا منافع ریکارڈ کیا جاتا ہے۔

یہ پوری حکمت عملی کی لائن بہ لائن وضاحت ہے۔ اس حکمت عملی کا بنیادی خیال بازار میں “ہاتھیوں” (بڑے خرید آرڈرز) کو تلاش کرنا، انہیں خریدنا اور چھوٹے منافع میں بیچنا ہے۔ حکمت عملی کے رویے کو ایڈجسٹ کرنے کے لیے اس میں کئی اہم پیرامیٹرز شامل ہیں، جیسے خریداری کی مقدار (لاٹ)، غلطی کی دوبارہ کوشش کا وقفہ (انٹرول)، ہاتھی کی سطح (ElephantAmount)، ہاتھی کا فاصلہ (ElephantSpace) وغیرہ۔

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

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

جیسا کہ آپ حکمت عملی پر عمل درآمد جاری رکھیں گے، یہ لوپ کرتا رہے گا اور درج ذیل کام کرے گا:

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

  2. اگلا، حکمت عملی ایک ایسے سیل آرڈر کو تلاش کرنے کی کوشش کرے گی جو شرائط کو پورا کرتا ہو، جہاں سیل آرڈر کی مقدار لاٹ سے زیادہ یا اس کے برابر ہو۔ اگر شرائط پر پورا اترنے والا سیلنگ آرڈر پایا جاتا ہے، تو سیلنگ آرڈر کی قیمت asskPrice کے طور پر ریکارڈ کی جائے گی۔

  3. اس کے بعد حکمت عملی “ہاتھیوں” (بڑے خریداری کے آرڈر) کی تلاش جاری رکھتی ہے۔ یہ مارکیٹ میں خریداری کے آرڈرز کے ذریعے دہرائے گا، پہلے خرید آرڈر کو چھوڑ کر (عام طور پر سب سے زیادہ قیمت والا خرید آرڈر)۔ اگر کوئی “ہاتھی” جو شرائط پر پورا اترتا ہے پایا جاتا ہے، تو “ہاتھی” کی معلومات کو ریکارڈ کیا جائے گا اور تالے کی تعداد میں اضافہ کیا جائے گا۔

  4. اگر کافی “ہاتھی” لگاتار پائے جاتے ہیں (لاک کاؤنٹ پیرامیٹر کے ذریعے کنٹرول کیا جاتا ہے)، تو حکمت عملی مزید مندرجہ ذیل کام انجام دے گی:

  • “ہاتھی” کی گیئر پوزیشن اور متعلقہ معلومات کو ریکارڈ کرنے کے لیے اپڈیٹ اسٹیٹس فنکشن کو کال کریں۔
  • “ہاتھی” خریدنے کے لیے exchange.buy فنکشن کا استعمال کریں، قیمت خرید ہاتھی ہے۔ قیمت + PennyTick، اور خریداری کی مقدار لاٹ ہے۔
  • خرید آرڈر کے نفاذ کے انتظار میں ایک نیا لامحدود لوپ شروع کرتا ہے۔
  • آرڈر کی حیثیت کو چیک کریں اور اگر آرڈر مکمل ہو گیا ہے تو، لوپ سے باہر نکلیں.
  • اگر انتظار کا وقت مقررہ انتظار کے وقفہ (WaitInterval) سے زیادہ ہو جاتا ہے، تو تمام نامکمل آرڈرز منسوخ کر دیے جائیں گے۔
  • کامیاب خریداری کے بعد اکاؤنٹ کے اثاثوں میں تبدیلی کا حساب لگائیں اگر تبدیلی 0.001 سے کم ہے، تو اس کا مطلب ہے کہ خریداری ناکام ہو گئی، ناکامیوں کی تعداد میں اضافہ، اور اگلے دور تک جاری رکھیں۔
  • “ہاتھیوں” کی کامیاب خریداری کی معلومات بشمول خریداری کی مقدار کو ریکارڈ کریں۔
  1. اگلا، حکمت عملی ایک نئے لامحدود لوپ میں داخل ہوتی رہے گی، فروخت کے آپریشن کے نفاذ کا انتظار کر رہی ہے۔ اس لوپ میں، یہ مندرجہ ذیل کام کرتا ہے:
  • مارکیٹ کی گہرائی سے متعلق معلومات حاصل کریں اور چیک کریں کہ آیا مارکیٹ کی قیمت سٹاپ نقصان کی سطح پر پہنچ گئی ہے۔
  • اگر مارکیٹ کی قیمت سٹاپ نقصان کی قیمت تک پہنچ جاتی ہے یا اس سے نیچے آتی ہے، تو سٹاپ نقصان کی کارروائی عمل میں لائی جائے گی، یعنی باقی اثاثے فروخت کر دیے جائیں گے۔
  • پوزیشن کے خطرات کو کم کرنے کے لیے تمام نامکمل آرڈرز کو منسوخ کرنے کے لیے CancelAll فنکشن کو کال کریں۔
  • خریداری کے کامیاب ہونے کے بعد اکاؤنٹ کے اثاثوں میں تبدیلی کو دوبارہ چیک کریں اگر تبدیلی 0.001 سے کم ہے، تو اس کا مطلب ہے کہ خریداری ناکام ہو گئی اور لوپ ختم ہو گیا۔
  • آخر میں، ریکارڈ کریں کہ آیا لین دین کامیاب ہے یا نہیں، اور لین دین کے نتائج کی بنیاد پر کامیابیوں اور ناکامیوں کی تعداد کو اپ ڈیٹ کریں۔

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

نتیجہ

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