4
ফোকাস
1271
অনুসারী

উচ্চ-ফ্রিকোয়েন্সি ট্রেডিং কৌশল বিশ্লেষণ - পেনি জাম্প

তৈরি: 2023-11-03 17:36:56, আপডেট করা হয়েছে: 2023-11-03 22:19:32
comments   0
hits   2877

উচ্চ-ফ্রিকোয়েন্সি ট্রেডিং কৌশল বিশ্লেষণ - পেনি জাম্প

উচ্চ-ফ্রিকোয়েন্সি ট্রেডিং একটি চ্যালেঞ্জিং এবং প্রতিযোগিতামূলক ক্ষেত্র যা দ্রুত বাণিজ্য সম্পাদন এবং বাজারের মাইক্রোস্ট্রাকচারের সংবেদনশীল অন্তর্দৃষ্টির উপর নির্ভর করে। উচ্চ-প্রোফাইল কৌশলগুলির মধ্যে একটি হল পেনি জাম্প, যা ছোট কিন্তু ঘন ঘন মুনাফা করার জন্য বাজারে “হাতি” শোষণের উপর দৃষ্টি নিবদ্ধ করে। এই নিবন্ধে, আমরা পেনি জাম্প কৌশলটি কীভাবে কাজ করে তা বিস্তারিতভাবে ব্যাখ্যা করব, পাশাপাশি কৌশল কোডের বিশদ বিবরণে ডুব দেব যাতে নতুনরা বুঝতে পারে এটি কীভাবে কাজ করে।

পেনি জাম্প কৌশল বোঝা

স্টক মার্কেটে, “হাতি” বলতে সাধারণত সেই প্রাতিষ্ঠানিক বিনিয়োগকারীদের বোঝায় যারা প্রচুর পরিমাণে স্টক কিনতে বা বিক্রি করতে চায় কিন্তু বাজার মূল্যে ব্যবসা করতে ইচ্ছুক নয়। পরিবর্তে, তারা তাদের উদ্দেশ্য নির্দেশ করার জন্য বাজারে প্রচুর পরিমাণে সীমা অর্ডার, বা মুলতুবি অর্ডারগুলি রাখতে বেছে নেয়। এই আচরণটি বাজারে ব্যাপক মনোযোগ আকর্ষণ করেছে, কারণ বৃহৎ ব্যবসা বাজারে একটি উল্লেখযোগ্য প্রভাব ফেলতে পারে।

উদাহরণস্বরূপ, ধরুন একটি স্টকের বাজার গভীরতা মূলত এইরকম দেখাচ্ছিল: ২০০ | \(১.০১ x \)১.০৩ | ২০০। তারপর, একটি “হাতি” এসে \(1.01 এ 3,000 শেয়ার কেনার অর্ডার দিল। এই মুহুর্তে, বাজারের গভীরতা হবে ৩,২০০ | \)১.০১ x $১.০৩ | ২০০। এই পদক্ষেপটি এমন একটি “হাতি” প্রবর্তনের মতো যা বাজারের অন্যান্য অংশগ্রহণকারীদের মনোযোগ আকর্ষণ করে।

  • প্রতিযোগিতামূলক বাজার উচ্চ-ফ্রিকোয়েন্সি ব্যবসায়ীদের জন্য, তাদের লাভ আসে প্রাথমিকভাবে বাজারের মাইক্রোস্ট্রাকচার বিশ্লেষণ করে অন্য ব্যবসায়ীদের উদ্দেশ্য সম্পর্কে অনুমান করার জন্য। একবার একটি হাতি আবির্ভূত হলে, উচ্চ-ফ্রিকোয়েন্সি ব্যবসায়ীরা ছোট দামের ওঠানামা ক্যাপচার করার জন্য দ্রুত অবস্থান স্থাপন করবে। তাদের লক্ষ্য হল অল্প সময়ের মধ্যে ঘন ঘন বাণিজ্য করা এবং অল্প কিন্তু ক্রমবর্ধমান মুনাফা সংগ্রহ করা।

  • হাতির দুর্দশা যদিও হাতিরা বাজারে স্কেলে কাজ করতে ইচ্ছুক হতে পারে, তাদের আচরণ তাদের ট্রেডিং অভিপ্রায়ও প্রকাশ করে, উচ্চ-ফ্রিকোয়েন্সি ব্যবসায়ীদের লক্ষ্য করে। উচ্চ-ফ্রিকোয়েন্সি ব্যবসায়ীরা আগে থেকেই অবস্থান তৈরি করার চেষ্টা করবে এবং তারপর দামের ওঠানামা থেকে লাভবান হবে। বাজারে একটি হাতির উপস্থিতি প্রতিযোগিতামূলক বাজারে প্রতিক্রিয়া সৃষ্টি করতে পারে, যার ফলে এর ব্যবসায়িক কৌশল প্রভাবিত হয়।

  • বাজারে প্রতারণা বাস্তবে, বড় প্রাতিষ্ঠানিক বিনিয়োগকারীরা সাধারণত বাজারে বিপুল সংখ্যক ক্রয় বা বিক্রয়ের অর্ডার দেয় না, কারণ এই ধরনের আচরণের ফলে বাজারের অন্যান্য অংশগ্রহণকারীদের পাল্টা ব্যবস্থা নিতে বা এমনকি বাজারকে কারসাজি করতে পারে। অতএব, তারা মিথ্যা ইমপ্রেশন তৈরি করতে, বাজারে প্রবেশের জন্য উচ্চ-ফ্রিকোয়েন্সি ব্যবসায়ীদের আকৃষ্ট করার জন্য কৌশল অবলম্বন করতে পারে এবং তারপর দামের ওঠানামা থেকে লাভ পেতে দ্রুত বিক্রি বা কিনতে পারে।

পেনি জাম্প কৌশলের মূল ধারণা

পেনি জাম্প কৌশলটির মূল ধারণা হল যে একবার একটি হাতি বাজারে উপস্থিত হলে এবং একটি নির্দিষ্ট মূল্যকে সমর্থন করে (বলুন \(1.01), উচ্চ-ফ্রিকোয়েন্সি ব্যবসায়ীরা দ্রুত তাদের বিড এক সেন্ট বাড়িয়ে দেবে, বলুন \)1.02। এর কারণ হল উচ্চ-ফ্রিকোয়েন্সি ব্যবসায়ীরা বুঝতে পারে যে একটি হাতির চেহারা মানে এই দামে শক্তিশালী ক্রয় সমর্থন রয়েছে, তাই তারা দাম বাড়বে এই আশায় এটি অনুসরণ করার চেষ্টা করে। যখন দাম \(1.03 x \)1.05 এ বেড়ে যায়, তখন উচ্চ-ফ্রিকোয়েন্সি ব্যবসায়ী দ্রুত বিক্রি করতে পারে এবং $0.01 লাভ করতে পারে।

শুধু তাই নয়, উচ্চ-ফ্রিকোয়েন্সি ব্যবসায়ীরা ক্রয় করার পরেও লাভ করতে পারেন, এমনকি দাম না বাড়লেও। কারণ তারা জানে যে হাতি নীচের দামকে সমর্থন করে, তারা দ্রুত স্টকটি হাতির কাছে বিক্রি করতে পারে এবং দামের পার্থক্য থেকে সামান্য লাভ পেতে পারে।

পেনি জাম্প কৌশল কোড পার্সিং

কৌশল সোর্স কোড: https://www.fmz.com/strategy/358

উপরে দেওয়া কৌশল কোড পেনি জাম্প কৌশল বাস্তবায়নের জন্য একটি উদাহরণ। নীচের কোডের একটি বিশদ ব্যাখ্যা দেওয়া হল যাতে এটি কীভাবে কাজ করে তা নতুনদের বুঝতে সক্ষম করে:

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): কোডের এই লাইনটি তার আইডি দ্বারা প্রতিটি অর্ডার বাতিল করতে 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 এবং lock শুরু করুন, যা পরবর্তী কৌশল যুক্তিতে ব্যবহার করা হবে।

  • 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): কোডের এই লাইনটি পলিসির স্থিতির তথ্য আপডেট করতে updateStatus ফাংশনকে কল করে। এটি ক্রয় মূল্য, বিক্রয় মূল্য এবং পূর্ববর্তী লক (লক) এর সংখ্যা সহ বর্তমান বাজারের অবস্থা রেকর্ড করে।

    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): শর্ত পূরণ করে এমন কোনো বিক্রয় আদেশ না পাওয়া গেলে (আস্কমূল্য এখনও 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 এ রিসেট করুন এবং অপেক্ষা করা চালিয়ে যান।

locks++: যদি একটি “হাতি” পাওয়া যায়, তালার সংখ্যা বৃদ্ধি করুন। এটি নিশ্চিত করার জন্য যে কৌশলটি কার্যকর করার আগে একটি নির্দিষ্ট সময়ের মধ্যে “হাতি” এর উপস্থিতি একাধিকবার নিশ্চিত করা হয়েছে।

  • 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)): পাওয়া “হাতি” এর স্টল এবং সম্পর্কিত তথ্য সহ কৌশলটির বর্তমান অবস্থা রেকর্ড করতে updateStatus ফাংশনটিতে কল করুন। এটি নীতির স্ট্যাটাস বারে প্রদর্শিত হবে।

  • exchange.Buy(elephant.Price + PennyTick, Lot, "Bids[" + i + "]", elephant): এক্সচেঞ্জ ব্যবহার করুন। পাওয়া “হাতি” কিনতে ফাংশন কিনুন। ক্রয় মূল্য হাতি[” + 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): একটি স্টপ লস অপারেশন সম্পাদন করুন এবং অবশিষ্ট সম্পদ বর্তমান বাজারের সর্বনিম্ন মূল্যে বিক্রি করুন।

পরিশেষে, লেনদেন সফল হয়েছে কি না তার উপর নির্ভর করে, সাফল্য এবং ব্যর্থতার সংখ্যা আপডেট করা হয় এবং লেনদেনের লাভ রেকর্ড করা হয়।

এটি সম্পূর্ণ কৌশলের একটি লাইন-বাই-লাইন ব্যাখ্যা। এই কৌশলের মূল ধারণা হল বাজারে “হাতি” (বড় ক্রয় আদেশ) খুঁজে বের করা, সেগুলি কেনা এবং অল্প লাভের জন্য বিক্রি করা। কৌশলটির আচরণ সামঞ্জস্য করার জন্য এতে বেশ কয়েকটি গুরুত্বপূর্ণ পরামিতি অন্তর্ভুক্ত রয়েছে, যেমন ক্রয়ের পরিমাণ (লট), ত্রুটি পুনঃচেষ্টা ব্যবধান (ব্যবধান), হাতির স্তর (এলিফ্যান্টঅ্যামাউন্ট), হাতির দূরত্ব (এলিফ্যান্টস্পেস) ইত্যাদি।

সাধারণভাবে, এই কৌশলটি একটি উচ্চ-ফ্রিকোয়েন্সি ট্রেডিং কৌশল যার লক্ষ্য বাজারের গভীরতার তথ্য কাজে লাগানো, বৃহৎ ক্রয় আদেশ সনাক্ত করা এবং অল্প সময়ের মধ্যে ক্রয়-বিক্রয় লেনদেন সম্পাদন করা। দ্রুত অল্প মুনাফা অর্জনের জন্য বাজারের উপর ক্রমাগত নজরদারি এবং ক্রয়-বিক্রয় কার্যক্রম পরিচালনা করা প্রয়োজন। তবে, এটি একটি উচ্চ-ঝুঁকিপূর্ণ কৌশলও কারণ এর জন্য বাজারের ওঠানামার দ্রুত প্রতিক্রিয়া প্রয়োজন, পাশাপাশি উল্লেখযোগ্য ক্ষতি এড়াতে ঝুঁকি ব্যবস্থাপনা এবং স্টপ-লস প্রক্রিয়া বিবেচনা করা প্রয়োজন।

অনুগ্রহ করে মনে রাখবেন যে এই কৌশলটি নির্দিষ্ট বাজার এবং ট্রেডিং প্ল্যাটফর্মের উপর ভিত্তি করে, এবং বিভিন্ন বাজার এবং এক্সচেঞ্জের জন্য উপযুক্ত সমন্বয় এবং অপ্টিমাইজেশনের প্রয়োজন হতে পারে। অনুশীলনে, বিনিয়োগকারীদের সাবধানে কৌশলটির কার্যকারিতা পরীক্ষা এবং মূল্যায়ন করতে হবে যাতে এটি বিনিয়োগের উদ্দেশ্য এবং ঝুঁকি সহনশীলতা পূরণ করে।

আপনি কৌশলটি চালানো চালিয়ে যাওয়ার সাথে সাথে এটি ক্রমাগত নিম্নলিখিত ক্রিয়াগুলির মাধ্যমে লুপ করে:

  1. প্রথমত, কৌশলটি বর্তমান বিক্রয় এবং ক্রয়ের অর্ডারগুলি বোঝার জন্য বাজারের গভীরতা পরীক্ষা করে।

  2. পরবর্তী, কৌশলটি শর্ত পূরণ করে এমন বিক্রয় আদেশগুলি খুঁজে বের করার চেষ্টা করবে নির্দিষ্ট শর্ত হল যে বিক্রয়ের আদেশের সংখ্যা লটের (লটের সংখ্যা) থেকে বেশি বা সমান। একটি যোগ্য বিক্রয় আদেশ পাওয়া গেলে, বিক্রয় আদেশের মূল্য askPrice হিসাবে রেকর্ড করা হবে।

  3. তারপরে কৌশলটি “হাতি” (বড় ক্রয়ের অর্ডার) সন্ধান করতে থাকে। এটি বাজারে ক্রয় আদেশের মাধ্যমে পুনরাবৃত্তি করে, প্রথম ক্রয় অর্ডারটি এড়িয়ে যায় (সাধারণত সর্বোচ্চ দামের ক্রয় অর্ডার)। শর্ত পূরণ করে এমন একটি “হাতি” পাওয়া গেলে, “হাতি” তথ্য রেকর্ড করা হবে এবং তালা (লক) সংখ্যা বাড়ানো হবে।

৪. যদি পরপর পর্যাপ্ত “হাতি” পাওয়া যায় (লককাউন্ট প্যারামিটার দ্বারা নিয়ন্ত্রিত), তাহলে কৌশলটি নিম্নলিখিত ক্রিয়াকলাপগুলি আরও সম্পাদন করবে:

  • “হাতি” এর গিয়ার অবস্থান এবং সম্পর্কিত তথ্য রেকর্ড করতে আপডেট স্ট্যাটাস ফাংশনটিতে কল করুন।
  • “হাতি” কিনতে এক্সচেঞ্জ ব্যবহার করুন৷ কিনুন ফাংশনটি, ক্রয় মূল্য হল হাতি৷ মূল্য + পেনিটিক, এবং ক্রয়ের পরিমাণ হল লট৷
  • ক্রয় আদেশ কার্যকর করার জন্য অপেক্ষা করে একটি নতুন অসীম লুপ শুরু করে।
  • অর্ডারের স্থিতি পরীক্ষা করুন এবং অর্ডারটি সম্পূর্ণ হয়ে গেলে লুপ থেকে বেরিয়ে আসুন।
  • অপেক্ষার সময় সেট অপেক্ষার ব্যবধান (ওয়েটইন্টারভাল) অতিক্রম করলে, সমস্ত বকেয়া অর্ডার বাতিল করা হবে।
  • ক্রয় সফল হওয়ার পরে অ্যাকাউন্ট সম্পদের পরিবর্তন গণনা করুন যদি পরিবর্তনটি 0.001 এর কম হয়, তাহলে এর অর্থ ক্রয় ব্যর্থ হয়েছে, ব্যর্থতার সংখ্যা বৃদ্ধি করা হয়েছে এবং পরবর্তী চক্রটি চালিয়ে যাওয়া।
  • “হাতি” সফলভাবে ক্রয়ের তথ্য, ক্রয়ের পরিমাণ সহ লিপিবদ্ধ করুন।
  1. এর পরে, কৌশলটি একটি নতুন অসীম লুপে প্রবেশ করতে থাকবে, বিক্রয় অপারেশন সম্পাদনের জন্য অপেক্ষা করছে। এই লুপে, এটি নিম্নলিখিতগুলি করে:
  • বাজারের গভীরতার তথ্য পান এবং বাজার মূল্য স্টপ লস পর্যায়ে পৌঁছেছে কিনা তা পরীক্ষা করুন।
  • যদি বাজার মূল্য স্টপ লস মূল্যে পৌঁছায় বা তার নিচে নেমে যায়, তাহলে স্টপ লস অপারেশন কার্যকর করা হবে, অর্থাৎ, অবশিষ্ট সম্পদ বিক্রি করা হবে।
  • অবস্থানের ঝুঁকি কমাতে সমস্ত বকেয়া অর্ডার বাতিল করতে CancelAll ফাংশনে কল করুন।
  • ক্রয় সফল হওয়ার পরে অ্যাকাউন্ট সম্পদে পরিবর্তনটি আবার পরীক্ষা করুন যদি পরিবর্তনটি 0.001-এর কম হয়, এর অর্থ ক্রয় ব্যর্থ হয়েছে এবং চক্রটি ভেঙে গেছে৷
  • অবশেষে, লেনদেনের সাফল্য বা ব্যর্থতা রেকর্ড করুন এবং লেনদেনের ফলাফলের উপর ভিত্তি করে সাফল্য এবং ব্যর্থতার সংখ্যা আপডেট করুন।

যতটা সম্ভব “হাতি” ধরতে এবং অল্প লাভ করতে পুরো কৌশলটি ক্রমাগত একটি লুপে উপরের অপারেশনগুলি সম্পাদন করে। এটি একটি উচ্চ-ফ্রিকোয়েন্সি ট্রেডিং কৌশল যার জন্য বাজারের পরিবর্তনের জন্য দ্রুত প্রতিক্রিয়া প্রয়োজন, যখন ঝুঁকি ব্যবস্থাপনা এবং স্টপ-লস মেকানিজমকে মূলধন রক্ষার জন্য বিবেচনা করা প্রয়োজন। বিনিয়োগকারীদের সাবধানে এই কৌশলটি ব্যবহার করা উচিত, বিশেষ করে অত্যন্ত অস্থির বাজারে।

উপসংহার

পেনি জাম্প কৌশল উচ্চ-ফ্রিকোয়েন্সি ট্রেডিংয়ের একটি সর্বোত্তম উদাহরণ, যা বাজার অংশগ্রহণকারীদের মধ্যে সূক্ষ্ম খেলা এবং প্রতিযোগিতা প্রদর্শন করে। এই কৌশলটি ক্রিপ্টোকারেন্সি বাজারে বিশেষভাবে উল্লেখযোগ্য, যেখানে অস্থিরতা বেশি এবং প্রাতিষ্ঠানিক বিনিয়োগকারী এবং উচ্চ-ফ্রিকোয়েন্সি ব্যবসায়ীরা দ্রুত লাভের সন্ধান করছেন। তবে, এটি বাজারকে চ্যালেঞ্জিং করে তোলে, প্রতিযোগি�