এফএমজেড কোয়ান্ট প্ল্যাটফর্ম কৌশল লেখার জন্য প্রাথমিক টিউটোরিয়াল

লেখক:নিনাবাদাস, সৃষ্টিঃ ২০২২-০৩-১৮ ০৯ঃ০০ঃ৪৬, আপডেটঃ ২০২২-০৪-০২ ১১ঃ৪৮ঃ১৫

আপনি পাইথন ব্যবহার করে সরাসরি ডাটাবেসে লিখতে পারেন।

function onexit(){
    _G('profit', profit)
}
function main(){
    _G("num", 1); // Set a global variable num, with a value of 1 second 
    _G("num", "ok"); // Change a global variable num, whose value is the string "ok"
    _G("num", null); // Delete the global variable num 
    _G("num"); // Return the value of the global variable num; if it does not exist, return null

    var profit = 0
    if(_G('profit')){
        profit = _G('profit')
    }
}

_N

অর্ডার দেওয়ার সময়, মূল্য এবং ভলিউমের নির্ভুলতা সাধারণত নিয়ন্ত্রণ করা প্রয়োজন; উদাহরণস্বরূপ, সংরক্ষণ করা দশমিক স্থান নির্ধারণের জন্য FMZ _N ফাংশনে নির্মিত হয়েছে;_N(4.253,2)৪.২৫।

_C

প্ল্যাটফর্ম এপিআই কল করা প্রতিটি সময় অ্যাক্সেসের সফলতার গ্যারান্টি দিতে পারে না, এবং _সি একটি স্বয়ংক্রিয় পুনরায় চেষ্টা ফাংশন। এটি সফলভাবে ফিরে না আসা পর্যন্ত এটি সর্বদা নির্দিষ্ট ফাংশনগুলি কল করবে (ফাংশনটি যদি এটি শূন্য বা মিথ্যা ফেরত দেয় তবে পুনরায় চেষ্টা করবে); উদাহরণস্বরূপ,_C(exchange.GetTicker), ডিফল্ট পুনরায় চেষ্টা ব্যবধান 3 সেকেন্ডের সাথে, এবং আপনি _CDelay ফাংশন কল করতে পারেন পুনরায় চেষ্টা ব্যবধান নিয়ন্ত্রণ করতে, যেমন _CDelay(1000), যার অর্থ _C ফাংশন পুনরায় চেষ্টা ব্যবধান 1 সেকেন্ডে পরিবর্তন করা।GetTicker(), exchange.GetDepth, GetTrade, GetRecords, GetAccount, GetOrdersএবংGetOrderঅ্যাক্সেস ব্যর্থতার কারণে প্রোগ্রামের বিচ্ছিন্নতা রোধ করতে।

CancelOrder_C ফাংশন ব্যবহার করতে পারবেন না, কারণ একটি অর্ডার বাতিল করতে ব্যর্থতার বিভিন্ন কারণ রয়েছে। যদি একটি অর্ডার কার্যকর করা হয়, তাহলে অর্ডার বাতিল করা ব্যর্থতা ফিরিয়ে দেবে, এবং _C ফাংশন ব্যবহারের ফলে সব সময় পুনরায় চেষ্টা করা হবে। _C ফাংশনটি প্যারামিটারগুলিতেও পাস করতে পারে এবং কাস্টম ফাংশনেও ব্যবহৃত হয়।

function main(){
    var ticker = _C(exchange.GetTicker)
    var depth = _C(exchange.GetDepth)
    var records = _C(exchange.GetRecords, PERIOD_D1) // Pass in the parameters
}

_D

ডাকছে_D()direct বর্তমান টাইম স্ট্রিং ফেরত দেবে, যেমনঃ2019-08-15 03:46:14. যদি এটি ব্যাকটেস্টের সময় কল করা হয়, তাহলে ব্যাকটেস্টের সময় ফেরত দেওয়া হবে। আপনি _D ফাংশন ব্যবহার করে সময় বিচার করতে পারেন, যেমনঃ_D().slice(11) > '09:00:00':. _D(timestamp, fmt), ms টাইমস্ট্যাম্পকে একটি টাইম স্ট্রিংয়ে রূপান্তর করবে, যেমন_D(1565855310002). fmt পরামিতি সময় বিন্যাস, এবং ডিফল্ট হয়yyyy-MM-dd hh:mm:ss.

TA নির্দেশক ফাংশন

কিছু সাধারণভাবে ব্যবহৃত সূচক ফাংশনের জন্য, যেমন MA\MACD\KDJ\BOLL এবং অন্যান্য সাধারণ সূচক, যা সরাসরি FMZ প্ল্যাটফর্ম দ্বারা নির্মিত হয়েছে, এবং নির্দিষ্ট সমর্থিত সূচকগুলি API নথিতে পাওয়া যাবে।

সূচক ফাংশন ব্যবহার করার আগে, K-লাইন দৈর্ঘ্য বিচার করা ভাল। যখন পূর্ববর্তী K-লাইন দৈর্ঘ্য গণনার জন্য প্রয়োজনীয় সময়কাল পূরণ করতে পারে না, ফলাফল হলnullউদাহরণস্বরূপ, যদি ইনপুট কে-লাইন দৈর্ঘ্য 100 হয় এবং এমএ গণনা করার সময়কাল 10 হয়, তবে প্রথম 9 মানগুলি সমস্ত শূন্য, এবং ফর্ম 9 মানগুলির পরে গণনা স্বাভাবিকভাবে করা হবে।

জাভাস্ক্রিপ্ট এছাড়াও একটি তৃতীয় পক্ষের লাইব্রেরি হিসাবে সম্পূর্ণ তালিব সমর্থন করে, যেমন কল পদ্ধতি সহtalib.CCI(records)অনুগ্রহ করে দেখুনhttp://ta-lib.org/function.html. পাইথনের জন্য, আপনি নিজের দ্বারা তালিব লাইব্রেরি ইনস্টল করতে পারেন। কম্পাইলের প্রয়োজনের কারণে, আপনি কেবল ইনস্টল করতে পিপ ব্যবহার করতে পারবেন না। আপনি নিজের দ্বারা ইনস্টলেশন পদ্ধতি অনুসন্ধান করতে পারেন।

সূচক ফাংশন শুধুমাত্র K-লাইন তথ্য পাস করতে পারে না, কিন্তু কোন অ্যারে পাস

function main(){
    var records = exchange.GetRecords(PERIOD_M30)
    if (records && records.length > 9) {
        var ma = TA.MA(records, 14)
        Log(ma)
    }
}

জাভাস্ক্রিপ্টে সাধারণভাবে ব্যবহৃত ফাংশন

এখানে আমরা কিছু সাধারণভাবে ব্যবহৃত জাভাস্ক্রিপ্ট ফাংশন বটগুলিতে পরিচয় করিয়ে দিচ্ছি।

  • Date.now()বর্তমান টাইমস্ট্যাম্প প্রদান করে;
  • parseFloat()সংখ্যাগুলিতে স্ট্রিং স্থানান্তর করে, যেমনঃparseFloat("123.21");
  • parseInt()স্ট্রিংগুলোকে পূর্ণসংখ্যায় রূপান্তর করে;
  • num.toString()সংখ্যাগুলিকে স্ট্রিংয়ে স্থানান্তর করে, সংখ্যা ভেরিয়েবল num সহ;
  • JSON.parse()ফরম্যাট Json স্ট্রিং, যেমনJSON.parse(exchange.GetRawJSON());
  • জাভাস্ক্রিপ্ট এর নিজস্ব গণিত ফাংশন রয়েছে, যেমন সাধারণ গণিত অপারেশন,Math.max(), Math.abs()ইত্যাদি; রেফারেন্সঃhttps://www.w3school.com.cn/jsref/jsref_obj_math.asp ;
  • FMZ দ্বারা ব্যবহৃত তৃতীয় পক্ষের গণিতের লাইব্রেরি; রেফারেন্সঃhttps://mathjs.org/ ;
  • এফএমজেড দ্বারা ব্যবহৃত জাভাস্ক্রিপ্টের তৃতীয় পক্ষের আন্ডারস্কোর লাইব্রেরি, যা সম্পর্কে জ্ঞান থাকার পরামর্শ দেওয়া হয় এবং যা ক্লান্তিকর জেএস অপারেশনগুলিকে আরও সুবিধাজনক করে তোলে; রেফারেন্সঃhttps://underscorejs.org/.

টেমপ্লেট

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

জাভাস্ক্রিপ্ট ক্রিপ্টোকারেন্সি ট্রেডিং লাইব্রেরি এবং কমোডিটি ফিউচার ট্রেডিং লাইব্রেরি ডিফল্টরূপে অন্তর্নির্মিত এবং অনুলিপি করার প্রয়োজন নেই। অন্যান্য টেমপ্লেট লাইব্রেরি কৌশল Square (https://www.fmz.com/square/20/1) টেমপ্লেট লাইব্রেরি কপি এবং সংরক্ষণ করুন, এবং আপনার নিজস্ব কৌশল তৈরি করার সময় ব্যবহার করা লাইব্রেরি চেক করুন.

জাভাস্ক্রিপ্ট টেমপ্লেট ফাংশন সব দিয়ে শুরু$, যখন পাইথন সব দিয়ে শুরুext.

ক্রিপ্টোকারেন্সি ট্রেডিং লাইব্রেরি

উৎস কোড ঠিকানাঃhttps://www.fmz.com/strategy/10989, যা ইতিমধ্যে অন্তর্নির্মিত, তাই কপি করার প্রয়োজন নেই। নির্দিষ্ট ফাংশন বাস্তবায়ন সরাসরি উৎস কোড উল্লেখ করতে পারেন।

অ্যাকাউন্ট পানঃ

$.GetAccount(e)

Log($.GetAccount()); // Obtain the account information, with fault tolerance function 
Log($.GetAcccount(exchanges[1]));

অর্ডার স্থাপন ও বাতিলকরণঃ

$.Buy/Sell(e, amount)
$.Buy(0.3); // The main platform buys 0.3 coin
$.Sell(0.2); // The main platform sells 0.2 coin
$.Sell(exchanges[1], 0.1); // The secondary platform sells 0.1 coin
$.CancelPendingOrders(e, orderType)

$.CancelPendingOrders(); // Cancel all entrusted orders of the main platform 
$.CancelPendingOrders(ORDER_TYPE_BUY); // Cancel all buy orders of the main platform
$.CancelPendingOrders(exchanges[1]); // Cancel all orders of the secondary platform
$.CancelPendingOrders(exchanges[1], ORDER_TYPE_SELL); // Cancel all sell orders of the secondary platforom 

ক্রুশের বিচার করো:

$.Cross(periodA, periodB) / $.Cross(arr1, arr2);

var n = $.Cross(15, 30);
var m = $.Cross([1,2,3,2.8,3.5], [3,1.9,2,5,0.6])
If n = 0, it means that the current prices of exactly 15-period EMA and 30-period EMA are equal. 
If n > 0, such as 5, it means that the 15-period EMA up-crosses the 30-period EMA by 5 periods (Bar)
If n < 0, such as -12, it means that the 15-period EMA down-crosses the 30-period EMA by 12 periods (Bar)
If it is not an array passed to the Cross, the function automatically obtains the K-line for moving average calculation.
If an array is passed to Cross, compare directly.

$.withdraw ((e, মুদ্রা, ঠিকানা, পরিমাণ, ফি, পাসওয়ার্ড) ফাংশনঃ

$.withdraw(exchange, "btc", "0x.........", 1.0, 0.0001, "***")

কমোডিটি ফিউচার ট্রেডিং লাইব্রেরি

পণ্যের ফিউচার ট্রেডিং লাইব্রেরি ব্যবহারের জন্য খুব স্থিতিশীল, এটি সুপারিশ করা হয়। উৎস কোড ঠিকানাঃhttps://www.fmz.com/strategy/12961, যা ইতিমধ্যে অন্তর্নির্মিত, তাই কপি করার প্রয়োজন নেই। নির্দিষ্ট ফাংশন বাস্তবায়ন সরাসরি উৎস কোড উল্লেখ করতে পারেন।

সিটিএ লাইব্রেরি

  • বট স্বয়ংক্রিয়ভাবে সূচককে প্রধান অবিচ্ছিন্ন চুক্তিতে ম্যাপ করবে;
  • এটি স্বয়ংক্রিয়ভাবে সরানো পরিচালনা করবে;
  • আপনি ব্যাকটেস্টের জন্য ম্যাপিং নির্দিষ্ট করতে পারেন, যেমন rb000/rb888, যা মূল অবিচ্ছিন্ন চুক্তির ট্রেডিংয়ের জন্য rb সূচকের k-লাইন ম্যাপ করতে হবে;
  • এটি অন্যান্য চুক্তির সাথেও ম্যাপ করা যেতে পারে; উদাহরণস্বরূপ, rb000/MA888 হল MA প্রধান অবিচ্ছিন্ন চুক্তিটি ট্রেড করার জন্য rb সূচকের K-লাইনটি দেখতে হবে।
function main() {
    $.CTA("rb000,M000", function(r, mp) {
        if (r.length < 20) {
            return
        }
        var emaSlow = TA.EMA(r, 20)
        var emaFast = TA.EMA(r, 5)
        var cross = $.Cross(emaFast, emaSlow);
        if (mp <= 0 && cross > 2) {
            Log("Golden cross period", cross, "the moment position", mp);
            return 1
        } else if (mp >= 0 && cross < -2) {
            Log("Death cross period", cross, "the moment position", mp);
            return -1
        }
    });
}

ইনভোকেশন লাইব্রেরির উদাহরণ

function main() {
    var p = $.NewPositionManager();
    p.OpenShort("MA609", 1);
    p.OpenShort("MA701", 1);
    Log(p.GetPosition("MA609", PD_SHORT));
    Log(p.GetAccount());
    Log(p.Account());
    Sleep(60000 * 10);
    p.CoverAll("MA609");
    LogProfit(p.Profit());
    Log($.IsTrading("MA609"));
    // Multiple varieties use the trading queue to complete the non-blocking trading task
    var q = $.NewTaskQueue();
    q.pushTask(exchange, "MA701", "buy", 3, function(task, ret) {
        Log(task.desc, ret)
    })
    while (true) {
        // Call "poll" to execute the unfinished tasks in the spare time
        q.poll()
        Sleep(1000)
    }
}

অঙ্কন গ্রন্থাগার

অঙ্কন জন্য কাঁচা ফাংশন জন্য খুব জটিল, যা পরবর্তী টিউটোরিয়ালে চালু করা হবে, আমরা অঙ্কন লাইব্রেরি ব্যবহার, খুব সহজ লাইন চার্ট এবং কে-লাইন চার্ট আঁকা ইত্যাদি জন্য নতুনদের সুপারিশ। সহজ অঙ্কন লাইব্রেরি FMZ মধ্যে নির্মিত হয়েছে, যা কৌশল সম্পাদনা পৃষ্ঠায় দেখা যাবে; যদি লাইব্রেরি এখনো নির্মিত হয় না, ব্যবহারকারীদের কপি এবং সংরক্ষণ করতে হবে, চেক এবং কৌশল লাইব্রেরী ব্যবহার করতে.

img

জাভাস্ক্রিপ্ট সংস্করণ অঙ্কন লাইব্রেরির কপি ঠিকানাঃhttps://www.fmz.com/strategy/27293পাইথন সংস্করণ অঙ্কন লাইব্রেরির কপি ঠিকানাঃhttps://www.fmz.com/strategy/39066

নির্দিষ্ট উদাহরণঃ

function main() {
    while (true) {
        var ticker = exchange.GetTicker()
        if (ticker) {
            $.PlotLine('Last', ticker.Last) // You can draw two lines at the samw time, "Last" is the name of the line
            $.PlotLine('Buy', ticker.Buy)
        }
        Sleep(6000)
    }
}

কৌশল পরামিতি সেটিংস

Edit Strategy এর অধীনে, কৌশল পরামিতি সেটিংস রয়েছে, যা কৌশলটির গ্লোবাল ভেরিয়েবলের সমান, এবং কোডের যে কোনও স্থানে অ্যাক্সেস করা যায়। কৌশল পরামিতিগুলি বট পৃষ্ঠায় সংশোধন করা যেতে পারে, এবং তারা পুনরায় চালু হওয়ার পরে বৈধ হবে। অতএব, কিছু ভেরিয়েবলগুলি পরামিতিগুলিতে সেট করা যেতে পারে এবং কৌশলটি সংশোধন না করে প্যারামিটারগুলি সংশোধন করা যেতে পারে।
img

  • পরিবর্তনশীল নাম: যথা, উপরের ছবিতে সংখ্যা, স্ট্রিং এবং কমবক্স ইত্যাদি,যা সরাসরি কৌশল গ্রুপে ব্যবহার করা যেতে পারে।
  • বর্ণনা: কৌশল ইন্টারফেসে একটি পরামিতির নাম, ব্যবহারকারীদের জন্য প্যারামিটারের অর্থ বোঝার জন্য আরও সুবিধাজনক।
  • মন্তব্য: একটি প্যারামিটারের বিস্তারিত ব্যাখ্যা, যা মাউসটি প্যারামিটারের উপরে থাকলে প্রদর্শিত হবে।
  • প্রকার: একটি পরামিতির ধরন, যা পরে বিস্তারিতভাবে উপস্থাপন করা হবে।
  • ডিফল্ট: a প্যারামিটারের ডিফল্ট।

এটা বোঝা খুব সহজ এবং স্ট্রিং টাইপ এবং সংখ্যা টাইপ. যা খুব সাধারণভাবে ব্যবহৃত ধরনের. কম্বো বক্স প্যারামিটার ইন্টারফেসের বাক্সে অপশন প্রদর্শন করবে. উদাহরণস্বরূপ, আপনি SYMBOL প্যারামিটার সেট করতে পারেনBTC|USDT|ETHকম্বো বাক্সে; যদি আপনি পৃষ্ঠার বাক্সে ইউএসডিটি নির্বাচন করেন, তবে কৌশলটির SYMBOL মানটি ইউএসডিটি সূচক 1। চেক বিকল্পগুলি একটি ঐচ্ছিক চেকবক্সকে বোঝায়; চেক মানে সত্য, যখন কোনও চেক মানে মিথ্যা।

সেটিংসের জন্য আরো প্যারামিটার আছে; রেফারেন্সঃhttps://www.fmz.com/api.

কৌশল ব্যাকটেস্ট

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

ব্যাকটেস্ট মেকানিজম

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

এফএমজেডের ব্যাকটেস্টে দুটি প্রকার রয়েছে, যথা সিমুলেশন স্তরের ব্যাকটেস্ট এবং বাস্তব বাজারের স্তরের ব্যাকটেস্ট। সিমুলেশন স্তরের ব্যাকটেস্ট আন্ডারলেয়ার কে-লাইন সময় অনুসারে সিমুলেটেড টিক তৈরি করতে পারে এবং প্রতিটি আন্ডারলেয়ার কে-লাইন সময় 14 ব্যাকটেস্ট সময় পয়েন্ট তৈরি করবে।যাইহোক, বাস্তব বাজারের স্তরের ব্যাকটেস্ট আসলে প্রতি কয়েক সেকেন্ডে টিক সংগ্রহ করবে, এবং এখন এটি বাস্তব গভীরতা (২০ টি স্তর সহ) সমর্থন করে, এবং tarde দ্বারা বাস্তব কার্যকর বাণিজ্য।তারিখ ভলিউম বেশ বিশাল, এবং ব্যাকটেস্ট গতি খুব ধীর, তাই ব্যাকটেস্ট দীর্ঘ সময়ের মধ্যে চালানো যাবে না. FMZ ব্যাকটেস্ট প্রক্রিয়া এক কে-লাইন উপর startegy একাধিক ট্রেড উপলব্ধি করতে পারেন, পরিস্থিতি যে ট্রেডিং শুধুমাত্র বন্ধ মূল্য দ্বারা সম্পাদিত হতে পারে প্রতিরোধ, এবং এছাড়াও ক্রমবর্ধমান লক্ষ্য এবং ব্যাকটেস্ট গতি যত্ন নিতে. আরো বিস্তারিত নির্দেশাবলীর জন্যঃhttps://www.fmz.com/bbs-topic/9126.

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

ব্যাকটেস্ট মেলে

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

ব্যাকটেস্ট পাতা সেটিংস

img

  • ১. Backtest এর পাতা নির্বাচন করা, যার বাম দিকে Edit Strategy পাতা রয়েছে;
  • 2.ব্যাকটেস্টের শুরু এবং শেষ সময়; তথ্য অসম্পূর্ণ হতে পারে, ব্যাকটেস্ট সরাসরি সেই সময় থেকে শুরু হতে পারে যখন তথ্য বিদ্যমান থাকে;
  • 3.ব্যাকটেস্টিংয়ের ডিফল্ট সময়কালGetRecords()ফাংশন; আপনি কোডে একটি সময় প্যারামিটারও নির্দিষ্ট করতে পারেন;
  • ৪.ব্যাকটেস্ট প্রক্রিয়া নির্বাচন করা;
  • ৫.আরও ব্যাকটেস্ট সেটিংস প্রদর্শন বা লুকিয়ে রাখা;
  • ৬.অত্যধিক পরিমাণ তথ্যের কারণে ব্রাউজারকে ব্যাহত হতে বাধা দেওয়ার জন্য লগ পয়েন্ট, মুনাফা লগ পয়েন্ট এবং চার্ট লগ পয়েন্টের সর্বোচ্চ সংখ্যা;
  • ৭. K-লাইন অনুযায়ী নিচের স্তরের টিক দ্বারা উৎপন্ন সময়কাল;
  • ৮. ট্রেনিং স্লিপপয়েন্ট;
  • ৯. ত্রুটি সহনশীলতা, যা যখন API অনুরোধটি ভুল হয় তখন পরিস্থিতি অনুকরণ করবে এবং কৌশলটির ত্রুটি সহনশীলতার ক্ষমতা পরীক্ষা করবে;
  • 10.বাজার চার্ট আঁকতে হবে কিনা; যদি ব্যাকটেস্টে একটি TA সূচক ফাংশন ব্যবহার করা হয়, তাহলে ফাংশনটি স্বয়ংক্রিয়ভাবে চার্টে প্রদর্শিত হবে, এবং ক্রয় এবং বিক্রয়ও চিহ্নিত করা হবে;
  • ১১.সেবা ফি নির্ধারণ;
  • ১২. প্ল্যাটফর্ম যোগ করা - ট্রেডিং জুটি ও সম্পদ;
  • 13.backtest প্যারামিটার সেটিংস; যদি প্যারামিটারগুলি সংখ্যা হয় এবং এক-কী অপ্টিমাইজেশন সমর্থন করে, প্যারামিটারগুলি স্বয়ংক্রিয়ভাবে ব্যাকটেস্টে একটি নির্দিষ্ট পরিসরে অতিক্রম করা হবে।

বট এবং ব্যাকটেস্টের মধ্যে পার্থক্য

  • ১.ব্যাকটেস্টে একমাত্র বৈধ বাজার কোট শুধুমাত্র GetTicker এবং GetRecords থেকে; অন্যান্য যেমন GetDepth এবং GetTrades বাস্তব নয় (ডাটা ভলিউম বিশাল, এবং যদিও বাস্তব বাজার স্তরের ব্যাকটেস্ট এখন ইতিমধ্যে ডেটা সমর্থন করে, এটি শুধুমাত্র সর্বশেষ ডেটা সমর্থন করে);
  • 2.ব্যাকটেস্টে যোগ করা প্ল্যাটফর্মগুলি সবই পৃথক অ্যাকাউন্ট; ট্রেডিং জোড়াগুলি সরাসরি স্যুইচ করা সমর্থিত নয়; অতএব, আপনি এক অ্যাকাউন্টে দুটি ট্রেডিং জোড়া পরিচালনা করতে পারবেন না;
  • ৩. নেটওয়ার্ক অনুরোধ ব্যাকটেস্টে ব্যবহার করা যাবে না;
  • 4.IOব্যাকটেস্টে এক্সটেনশন ব্যবহার করা যাবে না এবং শুধুমাত্র বেসিক এপিআই ব্যবহার করা যাবে।
  • ৫.ব্যাকটেস্টে শুধুমাত্র স্ট্যান্ডার্ড ডেটা পাওয়া যায়, এবং বট সম্পর্কিত তথ্যের মতো ডেটা নেই;
  • ৬.ব্যাকটেস্টে বিলম্ব করা সম্ভব না এবং স্থগিত অর্ডারের পরিস্থিতিতে মনোযোগ দিতে হবে;
  • 7.inকমোডিটি ফিউচারের ব্যাকটেস্ট, মার্কেট অর্ডার সমর্থিত নয়।

কৌশল ত্রুটি সহনশীলতা এবং সাধারণ ভুল

যেমনটি আমরা আগে উল্লেখ করেছি, বট একটি API ইন্টারফেস ব্যবহার করে অ্যাক্সেস এবং ফিরে ব্যর্থ হতে পারেnull; যদি আপনি এখনও এর ডেটা ব্যবহার করেন, তাহলে একটি ত্রুটি রিপোর্ট করা হবে এবং বট বন্ধ হয়ে যাবে। অতএব, কৌশল ত্রুটি সহনশীলতা ভাল করতে হবে।

দোষ সহ্য করার সাধারণ উপায়

সাধারণ কারণঃ

  • এপিআই অ্যাক্সেস নেটওয়ার্ক ত্রুটি; ইন্টারফেস অ্যাক্সেসের টাইমআউট nunll ফেরত দেয়, এবং একটি ত্রুটি রিপোর্ট করা হবে।

  • প্ল্যাটফর্ম থেকে সীমাবদ্ধতার ত্রুটি, যেমন আইপি সীমাবদ্ধতা, অর্ডার নির্ভুলতা, অ্যাক্সেস ফ্রিকোয়েন্সি, প্যারামিটার ত্রুটি, সম্পদ অভাব, বাজার ট্রেডিং ব্যর্থতা, কার্যকর আদেশ বাতিল ইত্যাদি; ভুল কোড অনুযায়ী এপিআই নথিতে বিশদ অনুসন্ধান করা যেতে পারে।

  • প্ল্যাটফর্ম ডেটা ফেরত ত্রুটি; এটি কখনও কখনও ঘটে, যেমন শূন্য গভীরতা ফেরত, বিলম্বিত অ্যাকাউন্ট তথ্য এবং বিলম্বিত অর্ডার অবস্থা ইত্যাদি

  • প্রোগ্রাম লজিক্যাল ত্রুটি.

আপনি API এর ফিরে আসা ডেটা ব্যবহার করার আগে, আপনি ডেটা শূন্য কিনা তা বিচার করা উচিত, এবং সাধারণ পদ্ধতি নিম্নরূপ চালু করা হয়ঃ

//1.judge the data is null and handle 
var ticker = exchange.GetTicker();
while(ticker == null){
     Log('ticker obtain error');
     ticker = exchange.GetTicker();
 }
 Log(ticker.Last);
 // 2. judge the data is not null, and use 
 var ticker = exchange.GetTicker();
 if(!ticker){
     Log(ticker.Last);
 }
 // 3.retry _C() function 
 var ticker = _C(exchange.GetTicker);
 Log(ticker.Last);
 // 4.try cache fault tolerance
 try{
     var ticker = exchange.GetTicker();
     Log(ticker.Last);
 }
 catch(err){
     Log('ticker obtain error');
 } 

আপনি যদি ত্রুটির তথ্য পেতে চান, আপনি ব্যবহার করতে পারেনGetLastError(), এবং শেষবারের ত্রুটি তথ্যের স্ট্রিংগুলি ফেরত দেওয়া হবে, এবং ত্রুটিগুলি পার্থক্য দ্বারা প্রক্রিয়া করা যেতে পারে।

প্রায়শই জিজ্ঞাসিত প্রশ্ন

ফোরামের শীর্ষ পোস্টগুলিতে সাধারণ ত্রুটির সংক্ষিপ্তসারঃhttps://www.fmz.com/bbs-topic/9158. এখানে আমরা সংক্ষেপে এটি পরিচয় করিয়ে দিচ্ছি; আপনি যখন সমস্যায় পড়বেন তখন অনুসন্ধান করতে Ctrl+F ব্যবহার করতে পারেন।

ডকার কিভাবে স্থাপন করা যায়?

ডকার যোগ করার বিষয়ে বিস্তারিত ভূমিকা আছে।

আমি কি কাউকে বলতে পারি আমার জন্য কৌশল লিখতে?

উপরhttps://www.fmz.com/markets, কিছু লোক আছে যারা অন্যদের জন্য কৌশল লেখার সেবা প্রদান করে, অথবা আপনি চ্যাট গ্রুপে জিজ্ঞাসা করতে পারেন; মনে রাখবেন যে এই ধরনের পরিষেবাগুলির সাথে আপনার নিজের সাথে যোগাযোগ করা উচিত, এবং আপনার সচেতন হওয়া উচিত যে ঝুঁকিটিও আপনার নিজের দ্বারা বহন করা উচিত।

সমস্ত ইন্টারফেস প্রম্পট টাইমআউট যখন অ্যাক্সেস

এটি অ্যাক্সেস করা প্ল্যাটফর্ম ইন্টারফেসের টাইমআউটকে বোঝায়; যদি টাইমআউট মাঝে মাঝে ঘটে তবে এটি কোনও সমস্যা নয়; যদি টাইমআউটটি সর্বদা অনুরোধ করা হয় তবে এর অর্থ সমস্ত নেটওয়ার্কে অ্যাক্সেস করা যায় না এবং বিদেশী সার্ভারের প্রয়োজন হয়।

ERR_INVALID_POSITION

যদি ব্যাকটেস্ট একটি ত্রুটি রিপোর্ট করে, এটি সাধারণত একটি লেখার ত্রুটি; যখন আপনি একটি অবস্থান বন্ধ করার জন্য একটি অর্ডার স্থাপন করার চেষ্টা করেন, যখন কোনও অবস্থান নেই বা অবস্থান ভলিউম যথেষ্ট নয়, তখন একটি ত্রুটি রিপোর্ট করা হবে।

প্রতীক সেট করা নেই

কোডে কোন চুক্তি সেট নেই, ফিউচার প্ল্যাটফর্মের ব্যাকটেস্টের সময়। exchange.SetContractType ফাংশনটি দেখুন।

BITMEX 429error,{error:{message:Rate limit exceeded re-try in 1 seconds......}}

প্ল্যাটফর্ম ইন্টারফেসের অ্যাক্সেস ফ্রিকোয়েন্সি খুব বেশি।

{status:6004,msg:timestamp is out of range} {status:6004,msg:timestamp is out of range} {status:6004,msg:timestamp is out of range} {status:6004,msg:timestamp is out of range}

সার্ভারের টাইমস্ট্যাম্প সার্ভার আপডেট করার সময়সীমা অতিক্রম করে, এবং অতিক্রম করা সময় খুব দীর্ঘ হতে পারে না।

GetOrder ((455284455): ত্রুটিঃ অবৈধ অর্ডার আইডি বা অর্ডার বাতিল করা হয়েছে।

যদি কোনও প্ল্যাটফর্মের অর্ডার বাতিল করা হয়, তাহলে প্ল্যাটফর্ম আর অর্ডার তথ্য বজায় রাখবে না, তাই তথ্য পাওয়া যাবে না।

GetOrders: 400: {কোড:-1121,msg:অবৈধ প্রতীক.}

অবৈধ ট্রেডিং জোড়া; ট্রেডিং জোড়ার সেটিং ভুল কিনা তা পরীক্ষা করুন।

সিক্রেট কী ডিক্রিপ্ট ব্যর্থ হয়েছে

APIKEY বিশ্লেষণ ব্যর্থ হয়েছে। যদি APIKEY কনফিগার করার পরে FMZ পাসওয়ার্ড পরিবর্তন করা হয়েছে, FMZ এ একটি প্ল্যাটফর্ম পৃষ্ঠা যুক্ত করার চেষ্টা করুন এবং প্ল্যাটফর্ম APIKEY পুনরায় কনফিগার করুন।

স্বাক্ষরটি বৈধ নয়ঃ জমা দেওয়ার সময়টি বৈধ নয় বা সময়ের বিন্যাসটি ভুল

আমি আপনাকে লিনাক্স সার্ভার ব্যবহার করার পরামর্শ দিচ্ছি, অথবা এই উইন্ডোজ সিস্টেমে টাইম সিঙ্ক্রোনাইজেশন সফটওয়্যার ইনস্টল করুন যেখানে এই সমস্যাটি ঘটে।

কেন ডকার এখনও একটি গ্লোবাল প্রক্সি সেট করা হয় যখন প্ল্যাটফর্ম API অ্যাক্সেস করতে পারবেন না?

গ্লোবাল প্রক্সির কোনও প্রক্সি ডকার নেটওয়ার্ক পোর্ট নেই। বিলম্ব সমস্যার কারণে, বিদেশী সার্ভারের ডকার স্থাপন করা ভাল।

কিভাবে স্থানীয়ভাবে একটি কৌশল সংরক্ষণ করবেন, এটি FMZ এ আপলোড করবেন না?

পাইথন ব্যবহার করে, এবং আপনি স্থানীয় ফাইল আমদানি করতে পারেন, একটি ফাইল হিসাবে FMZ API দ্বারা লিখিত কৌশল সংরক্ষণ করুন এবং এটি আপনার নিজের সার্ভারে এক্সিকিউশন পাথে রাখুন, এবং আপনি সরাসরি পড়তে এবং এটি চালাতে পারেন।

#!python2.7

def run(runfile):
      with open(runfile,"r") as f:
            exec(f.read())
            
def main():
    run('my.py')

কিভাবে একটি প্ল্যাটফর্মের টেস্টনেট বা কিভাবে এপিআই বেস ঠিকানা পরিবর্তন করবেন?

সংশ্লিষ্ট এপিআই বেস ঠিকানায় সরাসরি স্যুইচ করতে exchange.SetBase( ব্যবহার করুন। উদাহরণস্বরূপঃ

exchange.SetBase("https://www.okex.me")

আরো