রিসোর্স লোড হচ্ছে... লোডিং...

FMZ API নির্দেশাবলী

লেখক:শূন্য, তৈরিঃ 2020-04-20 10:19:00, আপডেটঃ 2023-04-12 14:44:56

গত 10 লগ এবং বাকি সাফ লগ রিসেট ((10)
}


```Python
def main():
    LogReset(10)
void main() {
    LogReset(10);
}

LogVacuum ((()

LogVacuum(), ডেকেLogReset()লগ পরিষ্কার করার ফাংশন, দ্বারা দখল করা স্টোরেজ স্থান পুনরুদ্ধারএসকিউএলাইটযখন ডেটা মুছে ফেলা হয়। ফাংশনের কোন রিটার্ন মান নেই। কারণটা হচ্ছে-SQLiteতথ্য মুছে ফেলার সময় দখল স্থান পুনরুদ্ধার না, তাই আপনি সঞ্চালন করতে হবেVACUUMএই ফাংশনটি কল করা হলে, ফাইল স্থানান্তর অপারেশনটি একটি বড় বিলম্বের সাথে ঘটবে। এটি একটি উপযুক্ত সময় ব্যবধানে কল করার পরামর্শ দেওয়া হয়।

মার্কেট কোটেশন API

প্রধান বাজার ইন্টারফেস ফাংশনঃ

ফাংশনের নাম বর্ণনা
GetTicker টিক কোট ডেটা পান
GetRecords কে-লাইন ডেটা পান
গভীরতা পান অর্ডার বুক ডেটা (অর্ডার গভীরতা ডেটা) পান
GetTrades বাজারের সর্বশেষ ট্রেডিং রেকর্ড পান

নিম্নলিখিত ফাংশনগুলি মাধ্যমে কল করা যেতে পারেexchangeঅথবাexchanges[0]বস্তু; উদাহরণস্বরূপঃ ফাংশন, যেমনexchange.GetTicker();অথবাexchanges[0].GetTicker();, বর্তমান ট্রেডিং জোড়া এবং সেটিং চুক্তির বাজার কোট প্রদান করে।

নেটওয়ার্ক অ্যাক্সেস সহ API ফাংশন কল করার জন্য গুরুত্বপূর্ণ টিপসঃযে কোন API ফাংশন কল করার সময় যা একটি প্ল্যাটফর্ম ইন্টারফেস অ্যাক্সেস করে (যেমনexchange.GetTicker(), exchange.Buy(Price, Amount), exchange.CancelOrder(Id), ইত্যাদি), অ্যাক্সেসের ব্যর্থতা সম্ভবত বিভিন্ন কারণে সৃষ্ট হয়। অতএব, আমরা এই ফাংশন কল জন্য ত্রুটি সহনশীল প্রক্রিয়াকরণ করতে হবে। উদাহরণস্বরূপঃexchange.GetTicker()বাজারের তথ্য সংগ্রহের জন্য একটি ফাংশন, প্ল্যাটফর্ম সার্ভারের সমস্যা এবং নেটওয়ার্ক ট্রান্সমিশন সমস্যা ইত্যাদির কারণে, বাজারের রিটার্ন মানের ফলাফল হতে পারেexchange.GetTicker()ফাংশন হলnull. তারপর, রিটার্ন মানexchange.GetTicker()ত্রুটি সহনশীল প্রক্রিয়াকরণ দ্বারা পরিচালিত করা আবশ্যক।

তথ্য রিটার্নexchange.GetTicker()নিম্নলিখিত কোডের ফাংশনটি নিয়োগ করা হয়tickerপরিবর্তনশীল, এবং আমরা ব্যবহার করার আগে ত্রুটি সহনশীলতা মোকাবেলা করতে হবেticker variable.

function main() {
    var ticker = exchange.GetTicker()
    if(!ticker){
        // Recall once, or use other processing logic
        ticker = exchange.GetTicker()
    }
}
def main():
    ticker = exchange.GetTicker()
    if not ticker:
        ticker = exchange.GetTicker()
void main() {
    auto ticker = exchange.GetTicker();
    if(!ticker.Valid) {
        ticker = exchange.GetTicker();
        Log("Test");
    }
}

এছাড়াও, কৌশলটির ত্রুটি-সমর্থন কর্মক্ষমতা পরীক্ষার জন্য, FMZ বিশেষভাবে একটি অনন্য যোগ করেছেত্রুটি সহনশীল মোডbacktest. backtest সিস্টেম এলোমেলোভাবে কিছু API কল ফেরত দিতে পারে যা সেট পরামিতি অনুযায়ী নেটওয়ার্কে অ্যাক্সেস করা হলে ঘটবে, এবং কিছু ব্যর্থ কলের ফেরত মান ফেরত দিতে পারে। আপনি দ্রুত বট মধ্যে প্রোগ্রামের দৃঢ়তা পরীক্ষা করতে পারেন। কৌশল সম্পাদনা পৃষ্ঠায় ব্যাকটেস্ট সিস্টেম পৃষ্ঠায় স্যুইচ করুন, ক্লিক করুনউল্টানো ত্রিভুজStart Backtest বোতামের ডানদিকে ড্রপ ডাউন কন্ট্রোল, এবং Backtest Fault Tolerant বোতামটি পপ আপ হবে।

বিনিময়.GetTicker ((()

exchange.GetTicker()বর্তমান ট্রেডিং জোড়া এবং চুক্তির বর্তমান বাজার কোট পায়, রিটার্ন মান সহঃTickerকাঠামো ব্যাকটেস্ট সিস্টেমে,Tickerতথ্য রিটার্নexchange.GetTicker()ফাংশন, যেখানেHighএবংLowহয় সিমুলেটেড মান, বর্তমান সময় থেকে নেওয়া বিক্রয় 1 এবং ক্রয় 1 বট মধ্যে. বাস্তব চলমান cryptocurrency হয় সর্বোচ্চ মূল্য এবং বিনিময় দ্বারা সংজ্ঞায়িত একটি নির্দিষ্ট সময়ের মধ্যে সর্বনিম্ন মূল্যTick interface.

function main(){
    var ticker = exchange.GetTicker()
    /*
        The platform interface may not be accessible due to network problems (even if the device's docker program can open the platform website, the API may not be accessible)
        At this time, ticker is null, when accessing ticker. When it is "High", it will cause an error; so when testing, ensure that you can access the platform interface
    */
    Log("High:", ticker.High, "Low:", ticker.Low, "Sell:", ticker.Sell, "Buy:", ticker.Buy, "Last:", ticker.Last, "Volume:", ticker.Volume)
}
def main():
    ticker = exchange.GetTicker()
    Log("High:", ticker["High"], "Low:", ticker["Low"], "Sell:", ticker["Sell"], "Buy:", ticker["Buy"], "Last:", ticker["Last"], "Volume:", ticker["Volume"])
void main() {
    auto ticker = exchange.GetTicker();
    Log("High:", ticker.High, "Low:", ticker.Low, "Sell:", ticker.Sell, "Buy:", ticker.Buy, "Last:", ticker.Last, "Volume:", ticker.Volume);
}

বাস্তব বট (ব্যাকটেস্ট নয়),Infoঅ্যাট্রিবিউট রিটার্ন মানexchange.GetTicker()ফাংশন ইন্টারফেস কল করার সময় ফিরে আসা মূল তথ্য সংরক্ষণ করে।

এক্সচেঞ্জ.গ্রেট ডিপথ ((()

exchange.GetDepth()বর্তমান ট্রেডিং জোড়া এবং চুক্তির বিনিময় অর্ডার বইয়ের তথ্য পায়। রিটার্ন মানঃDepth structure.

Depthকাঠামো দুটি কাঠামোর অ্যারে রয়েছে, যথাঃAsks[]এবংBids[], AsksএবংBidsনিম্নলিখিত কাঠামোগত ভেরিয়েবল ধারণ করেঃ

ডেটা টাইপ ভেরিয়েবল নাম বর্ণনা
সংখ্যা দাম দাম
সংখ্যা পরিমাণ পরিমাণ

উদাহরণস্বরূপ, যদি আমি বর্তমান বিক্রয় দ্বিতীয় মূল্য পেতে চান, আমি এই মত কোড লিখতে পারেনঃ

function main(){
    var depth = exchange.GetDepth()
    /*
       The platform interface may not be accessible due to network reasons (even if the device's docker program can open the platform website, the API may not be accessible)
       At this time, depth is null. When accessing depth.Asks[1].Price, it will cause an error; so when testing, ensure that you can access the platform interface
    */
    var price = depth.Asks[1].Price
    Log("Sell 2 price is:", price)
}
def main():
    depth = exchange.GetDepth()
    price = depth["Asks"][1]["Price"]
    Log("Sell 2 price is:", price)
void main() {
    auto depth = exchange.GetDepth();
    auto price = depth.Asks[1].Price;
    Log("Sell 2 price is:", price);
}

এক্সচেঞ্জ.গেটট্রেডস ((()

exchange.GetTrades()প্ল্যাটফর্ম ট্রেডিং ইতিহাস পায় (আপনার নিজের নয়) । রিটার্ন মানঃTradeকিছু এক্সচেঞ্জ এটি সমর্থন করে না। নির্দিষ্ট তথ্য নির্দিষ্ট পরিস্থিতিতে অনুযায়ী, পরিসীমা মধ্যে ট্রেডিং রেকর্ড উপর নির্ভর করে ফিরে। ফেরত দেওয়া তথ্য একটি অ্যারে, যেখানে প্রতিটি উপাদানের সময় ক্রম একই হয় ফেরত তথ্য ক্রমexchange.GetRecordsফাংশন, অর্থাৎ, অ্যারের শেষ উপাদানটি বর্তমান সময়ের নিকটতম তথ্য।

// In the simulated backtest, the data is empty; to have a trading history, there must be a real bot running
function main(){
    var trades = exchange.GetTrades()
    /*
        The platform interface may not be accessible due to network reasons (even if the device's docker program can open the platform website, the API may not be accessible)
        At this time, "trades" is null. When accessing trades[0].Id, it will cause an error; so when testing, ensure that you can access the platform interface
    */
    Log("id:", trades[0].Id, "time:", trades[0].Time, "Price:", trades[0].Price, "Amount:", trades[0].Amount, "type:", trades[0].Type)
}
def main():
    trades = exchange.GetTrades()
    Log("id:", trades[0]["Id"], "time:", trades[0]["Time"], "Price:", trades[0]["Price"], "Amount:", trades[0]["Amount"], "type:", trades[0]["Type"])
void main() {
    auto trades = exchange.GetTrades();
    Log("id:", trades[0].Id, "time:", trades[0].Time, "Price:", trades[0].Price, "Amount:", trades[0].Amount, "type:", trades[0].Type);
}

এক্সচেঞ্জ.গেট রেকর্ডস ((()

exchange.GetRecords(Period)K-লাইন সময়কাল বট তৈরি করার সময় নির্দিষ্ট করা হয়; যদি আপনি পরামিতি নির্দিষ্ট যখনexchange.GetRecords()ফাংশনটি কল করা হলে, প্রাপ্ত ডেটা হবে প্যারামিটার সময়ের সাথে সম্পর্কিত কে-লাইন ডেটা। যদি নির্দিষ্ট প্যারামিটার না থাকে তবে বট প্যারামিটারগুলিতে সেট করা কে-লাইন সময়কাল বা ব্যাকটেস্ট পৃষ্ঠায় সেট করা কে-লাইন সময়কাল অনুযায়ী কে-লাইন ডেটা ফেরত দেওয়া হয়।

প্যারামিটারPeriod:

  • PERIOD_M1: ১ মিনিটকে বোঝায়
  • PERIOD_M5: ৫ মিনিটের কথা বলছে
  • PERIOD_M15: ১৫ মিনিটের কথা বলছে
  • PERIOD_M30: ৩০ মিনিট বোঝায়
  • PERIOD_H1: 1 ঘন্টা বোঝায়
  • PERIOD_D1: ১ দিনের জন্য প্যারামিটার মানPeriodকেবলমাত্র উপরে বর্ণিত মানক সময়সীমা অতিক্রম করতে পারে, তবে সেকেন্ডের একক সংখ্যাও অতিক্রম করতে পারে।

এর রিটার্ন মানexchange.GetRecords(Period)ফাংশনঃ রিটার্ন মান একটি অ্যারেRecordকাঠামো, ফিরে K-লাইন তথ্য সময়ের সাথে সাথে জমা হবে, জমা K-লাইন বার উপরের সীমা দ্বারা প্রভাবিত হয়exchange.SetMaxBarLenফাংশন সেটিং। ডিফল্ট উপরের সীমা 5000 কে-লাইন বার যখন এটি সেট করা হয় না। যখন কে-লাইন ডেটা কে-লাইন বার জমে থাকা সীমাতে পৌঁছে যায়, এটি একটি কে-লাইন বার যুক্ত করে এবং প্রাথমিক কে-লাইন বারটি মুছে ফেলার মাধ্যমে আপডেট করা হবে (যেমন সারি ইন / আউট) । কিছু এক্সচেঞ্জ একটি কে-লাইন ইন্টারফেস সরবরাহ করে না, তারপরে ডকার কে-লাইন তৈরি করতে রিয়েল টাইমে বাজার লেনদেন রেকর্ড ডেটা সংগ্রহ করে।

ক-লাইন বার সংখ্যা যখন উদ্ধারGetRecordsফাংশন প্রাথমিকভাবে বলা হয়.

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

এর জন্যexchange.GetRecords(Period)ফাংশন, বট এবং ব্যাকটেস্টক্রিপ্টোকারেন্সিউভয় কাস্টম সময়কাল সমর্থন, এবং পরামিতিPeriodসেকেন্ডের সংখ্যা। উদাহরণস্বরূপঃ

function main() {
    // Print K-line data with a K-line period of 120 seconds (2 minutes)
    Log(exchange.GetRecords(60 * 2))         
    // Print K-line data with a K-line period of 5 minutes
    Log(exchange.GetRecords(PERIOD_M5))      
}
def main():
    Log(exchange.GetRecords(60 * 2))
    Log(exchange.GetRecords(PERIOD_M5))
void main() {
    Log(exchange.GetRecords(60 * 2)[0]);
    Log(exchange.GetRecords(PERIOD_M5)[0]);
}

সেটিংPeriodপ্যারামিটার 5 হল 5 সেকেন্ডের একটি সময়ের সাথে K-লাইন ডেটা অনুরোধ করা। যদিPeriodপ্যারামিটার সমানভাবে 60 দ্বারা বিভক্ত করা হয় না (যেমন প্রতিনিধিত্ব সময়কাল একটি সময়কাল অনুপলব্ধ মিনিট), সিস্টেমের নীচের স্তর প্রাসঙ্গিক ইন্টারফেস ব্যবহার করেGetTradesট্রেডিং রেকর্ডের তথ্য পেতে এবং প্রয়োজনীয় কে-লাইন ডেটা সংকলন করতে। যদিPeriodপ্যারামিটারটি সমানভাবে ৬০ দ্বারা ভাগ করা হয়, তারপর প্রয়োজনীয় কে-লাইন ডেটা কমপক্ষে ১ মিনিটের কে-লাইন ডেটা ব্যবহার করে সংশ্লেষণ করা হয় (যদি সম্ভব হয় তবে প্রয়োজনীয় কে-লাইন ডেটা সংশ্লেষণের জন্য আরও বেশি সময় ব্যবহার করে) ।

function main(){
    var records = exchange.GetRecords(PERIOD_H1)
    /*
        The platform interface may not be accessible due to network reasons (even if the device's docker program can open the platform website, the API may not be accessible)
        At this time, "records" is null. When accessing records[0].Time, it will cause an error; so when testing, ensure that you can access the platform interface
    */
    Log("The first k-line data is, Time:", records[0].Time, "Open:", records[0].Open, "High:", records[0].High)
    Log("The second k-line data is, Time:", records[1].Time ,"Close:", records[1].Close)
    Log("Current K-line (latest)", records[records.length-1], "Current K-line (latest)", records[records.length-2])
}
def main():
    records = exchange.GetRecords(PERIOD_H1)
    Log("The first k-line data is, Time:", records[0]["Time"], "Open:", records[0]["Open"], "High:", records[0]["High"])
    Log("The second k-line data is, Time:", records[1]["Time"], "Close:", records[1]["Close"])
    Log("Current K-line (latest)", records[-1], "Current K-line (latest)", records[-2])
void main() {
    auto records = exchange.GetRecords(PERIOD_H1);
    Log("The first k-line data is, Time:", records[0].Time, "Open:", records[0].Open, "High:", records[0].High);
    Log("The second k-line data is, Time:", records[1].Time, "Close:", records[1].Close);
    Log("Current K-line (latest)", records[records.size() - 1], "Current K-line (latest)", records[records.size() - 2]);
}

exchange.GetRecords()এই ফাংশনটি K-লাইন ডেটা পাওয়ার জন্য দুটি শর্ত রয়েছেঃ

  • এক্সচেঞ্জটি একটি কে-লাইন ডেটা ইন্টারফেস সরবরাহ করে। এই ক্ষেত্রে, অর্জিত ডেটা হ'ল এক্সচেঞ্জ দ্বারা সরাসরি ফেরত দেওয়া ডেটা।

  • এক্সচেঞ্জ একটি কে-লাইন ডেটা ইন্টারফেস প্রদান করে না। এফএমজেড ডকার প্রোগ্রাম কৌশল প্রোগ্রাম কল প্রতিটি সময় এক্সচেঞ্জের সর্বশেষ ট্রেডিং রেকর্ড পায়exchange.GetRecords(), অর্থাৎ, এটিকে বলা হয়exchange.GetTrades()তথ্য সংগ্রহ এবং কে-লাইন ডেটা সংশ্লেষণ করার জন্য ফাংশন।

সিস্টেমের সিমুলেশন-স্তরের ব্যাকটেস্টের প্রয়োজনঅন্তর্নিহিত কে-লাইন সময়কাল(যখন ব্যাকটেস্টিং সিস্টেম ব্যাকটেস্টিংয়ের মাত্রা সিমুলেট করে, তখন সেট অনুযায়ী টিক ডেটা তৈরি করতে সংশ্লিষ্ট কে-লাইন ডেটা ব্যবহার করা হয়)অন্তর্নিহিত কে-লাইন সময়কাল); লক্ষ্য করা উচিত যে কৌশলটিতে প্রাপ্ত কে-লাইন ডেটার সময়কাল কম হতে পারে নাঅন্তর্নিহিত কে-লাইন সময়কালকারণ সিমুলেশন স্তরের ব্যাকটেস্টে, প্রতিটি সময়ের কে-লাইন ডেটা ব্যাকটেস্ট সিস্টেমের অন্তর্নিহিত কে-লাইন সময়ের সাথে সম্পর্কিত কে-লাইন ডেটা দ্বারা সংশ্লেষিত হয়।

ভিতরেcppভাষা, যদি আপনি আপনার নিজস্ব K-লাইন তথ্য নির্মাণ করতে হবে, নিম্নলিখিত কোড উদাহরণ আছেঃ

#include <sstream>
void main() { 
    Records r;
    r.Valid = true;
    for (auto i = 0; i < 10; i++) {
        Record ele;
        ele.Time = i * 100000;
        ele.High = i * 10000;
        ele.Low = i * 1000;
        ele.Close = i * 100;
        ele.Open = i * 10;
        ele.Volume = i * 1;
        r.push_back(ele);
    }
    // Output display: Records[10]
    Log(r);                      
    auto ma = TA.MA(r,10);       
    // Output display: [nan,nan,nan,nan,nan,nan,nan,nan,nan,450]
    Log(ma);                     
}

বিনিময়.GetPeriod ((()

দ্যexchange.GetPeriod()ফাংশনটি FMZ প্ল্যাটফর্মের ওয়েবসাইট পৃষ্ঠায় সেট করা K-লাইন সময়কাল ফেরত দেয় যখনব্যাকটেস্টএবংবট. রিটার্ন মান সেকেন্ডের একক একটি পূর্ণসংখ্যা. রিটার্ন মানঃ সংখ্যাসূচক টাইপ.

function main() {
    // For example, in the backtest and bot, set the K-line period on the website page of FMZ platform to 1 hour
    var period = exchange.GetPeriod()
    Log("K-line period:", period / (60 * 60), "hour")
}
def main():
    period = exchange.GetPeriod()
    Log("K-line period:", period / (60 * 60), "hour")
void main() {
    auto period = exchange.GetPeriod();
    Log("K-line period:", period / (60 * 60.0), "hour");
}

বিনিময়.SetMaxBarLen(Len)

দ্যexchange.SetMaxBarLen(Len)এই ফাংশনটি ক্রিপ্টোকারেন্সি কৌশল চালানোর সময় দুটি দিককে প্রভাবিত করেঃ

  • প্রথমবারের জন্য প্রাপ্ত কে-লাইন বার (BAR) এর সংখ্যাকে প্রভাবিত করে।
  • K-লাইন বার (BAR) এর উপরের সীমাকে প্রভাবিত করে।
function main() {
    exchange.SetMaxBarLen(50)
    var records = exchange.GetRecords()
    Log(records.length, records)
}
def main():
    exchange.SetMaxBarLen(50)
    r = exchange.GetRecords()
    Log(len(r), r)
void main() {
    exchange.SetMaxBarLen(50);
    auto r = exchange.GetRecords();
    Log(r.size(), r[0]);
}

exchange.GetRawJSON (()

exchange.GetRawJSON()গত দ্বারা ফিরে raw content (স্ট্রিং) প্রদান করেবিশ্রামrequest, যা নিজের দ্বারা ডেটা বিশ্লেষণ করতে ব্যবহার করা যেতে পারে। রিটার্ন মানঃ স্ট্রিং টাইপ, শুধুমাত্র ক্রিপ্টোকারেন্সি লাইভ ট্রেডিং পরিবেশে বৈধ। ব্যাকটেস্ট ফাংশন সমর্থন করে না। কৌশলগুলিcppভাষা ফাংশন সমর্থন করে না.

function main(){
    exchange.GetAccount(); 
    var obj = JSON.parse(exchange.GetRawJSON());
    Log(obj);
}
import json
def main():
    exchange.GetAccount()
    obj = json.loads(exchange.GetRawJSON())
    Log(obj)
void main() {
    auto obj = exchange.GetAccount();
    // C++ doe not support "GetRawJSON" function
    Log(obj);
}

exchange.GetRate ((()

exchange.GetRate()বিনিময়তে বর্তমানে ব্যবহৃত মুদ্রার বিনিময় হার এবং বর্তমানে প্রদর্শিত মূল্য নির্ধারণের মুদ্রা প্রদান করে, এবং 1 এর ফেরত মানটি নির্দেশ করে যে বিনিময় হার রূপান্তর নিষ্ক্রিয় করা হয়েছে। ফেরত মানঃ সংখ্যাসূচক টাইপ।

নোটঃ

  • যদিexchange.SetRate()বিনিময় হার সেট করতে বলা হয় নি, বিনিময় হার মান দ্বারা ফিরেexchange.GetRate()ডিফল্টরূপে 1 হয়, অর্থাৎ বর্তমানে প্রদর্শিত বিনিময় হার রূপান্তরটি বিনিময় করা হয়নি।
  • যদিexchange.SetRate()একটি বিনিময় হার মান নির্ধারণের জন্য ব্যবহৃত হয়েছে, যেমন,exchange.SetRate(7), তাহলে ট্রেডিং প্ল্যাটফর্মের প্রচলিত মুদ্রার প্রতিনিধিত্বকারী বর্তমান বিনিময় বস্তুর সমস্ত মূল্যের তথ্য, যেমন কোট, গভীরতা, অর্ডার মূল্য ইত্যাদি, রূপান্তরের জন্য পূর্বে নির্ধারিত বিনিময় হার 7 দ্বারা গুণিত হবে।
  • যদিexchangeডলারকে মূল্য নির্ধারণের মুদ্রা হিসেবে ব্যবহার করে বিনিময় করা হয়।exchange.SetRate(7), বট এর সব দাম 7 দ্বারা গুণিত দ্বারা CNY কাছাকাছি দাম রূপান্তর করা হবে। এই সময়ে বিনিময় হার মান ব্যবহার করে প্রাপ্তexchange.GetRate()৭ হয়।

বিনিময়.GetUSDCNY()

exchange.GetUSDCNY()মার্কিন ডলারের সর্বশেষ বিনিময় হার প্রদান করে (তথ্য উৎস প্রদান করে)yahoo) রিটার্ন মানঃ সংখ্যাসূচক টাইপ।

exchange.SetData ((কী, মান)

দ্যexchange.SetData(Key, Value)ফাংশনটি কৌশলটি চালানোর সময় লোড করা ডেটা সেট করতে ব্যবহৃত হয়, যা কোনও অর্থনৈতিক সূচক, শিল্পের ডেটা, প্রাসঙ্গিক সূচক ইত্যাদি হতে পারে। এটি ট্রেডিং কৌশলগুলির জন্য সমস্ত পরিমাণযুক্ত তথ্য পরিমাপ করতে ব্যবহার করা যেতে পারে এবং ব্যাকটেস্ট সিস্টেমে ব্যবহার করতে সহায়তা করতে পারে।

কলিং পদ্ধতিexchange.SetData(Key, Value)ফাংশনঃ

  • তথ্য সরাসরি কৌশল লিখুন ডাটা ফরম্যাটের প্রয়োজন হয়dataনিম্নলিখিত উদাহরণে ভেরিয়েবল।

    /*backtest
    start: 2020-01-21 00:00:00
    end: 2020-02-12 00:00:00
    period: 1d
    basePeriod: 1d
    exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
    */
    function main() {
        var data = [
            [1579536000000, "abc"],
            [1579622400000, 123],
            [1579708800000, {"price": 123}],
            [1579795200000, ["abc", 123, {"price": 123}]]
        ]
        exchange.SetData("test", data)
        while(true) {
            Log(exchange.GetData("test"))
            Sleep(1000)
        }
    }
    
    '''backtest
    start: 2020-01-21 00:00:00
    end: 2020-02-12 00:00:00
    period: 1d
    basePeriod: 1d
    exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
    '''  
    
    def main():
        data = [
            [1579536000000, "abc"],
            [1579622400000, 123],
            [1579708800000, {"price": 123}],
            [1579795200000, ["abc", 123, {"price": 123}]]
        ]
        exchange.SetData("test", data)
        while True:
            Log(exchange.GetData("test"))
            Sleep(1000)
    
    /*backtest
    start: 2020-01-21 00:00:00
    end: 2020-02-12 00:00:00
    period: 1d
    basePeriod: 1d
    exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
    */  
    
    void main() {
        json data = R"([
            [1579536000000, "abc"],
            [1579622400000, 123],
            [1579708800000, {"price": 123}],
            [1579795200000, ["abc", 123, {"price": 123}]]
        ])"_json;
        
        exchange.SetData("test", data);
        while(true) {
            Log(exchange.GetData("test"));
            Sleep(1000);
        }
    }
    

    উপরের পরীক্ষার কোডটি চালানোর সময়, সংশ্লিষ্ট সময়ে সংশ্লিষ্ট তথ্য পাওয়া যাবে, যেমন চিত্রটিতে দেখানো হয়েছেঃ

    img

    আমরা দেখতে পাচ্ছি, টাইমস্ট্যাম্পের সংশ্লিষ্ট সময়1579622400000হয়2020-01-22 00: 00: 00; যখন কৌশল প্রোগ্রাম এই সময় পরে চালানো হয়, পরবর্তী তথ্য সময় স্ট্যাম্প আগে1579708800000, অর্থাৎ, সময় আগে2020-01-23 00: 00: 00, কল করুনexchange.GetData(Source)তথ্য পেতে ফাংশন. সব পাওয়া হয়[1579622400000, 123]. প্রোগ্রাম চলতে থাকে এবং সময় পরিবর্তন, তথ্য টুকরা টুকরা তথ্য এই মত পেতে.

  • বাহ্যিক লিঙ্কগুলির মাধ্যমে তথ্য অনুরোধ করুন

    অনুরোধকৃত তথ্য বিন্যাস

    {
        "schema":["time","data"],
        "data":[
            [1579536000000, "abc"],
            [1579622400000, 123],
            [1579708800000, {"price": 123}],
            [1579795200000, ["abc", 123, {"price": 123}]]
        ]
    }
    

    কোথায়schemaলোড করা ডেটার প্রধান অংশে প্রতিটি রেকর্ডের ডেটা ফর্ম্যাট, ফর্ম্যাটটি যেমন স্থির করা হয়["time", "data"], যা সমতুল্যdataতথ্যের বৈশিষ্ট্য বিন্যাস একের পর এক.dataঅ্যাট্রিবিউট ডাটাবেসের মূল অংশ সংরক্ষণ করে, এবং ডাটাবেসের প্রতিটি টুকরো মিলিসেকেন্ড স্তরের টাইমস্ট্যাম্প এবং ডেটা সামগ্রী দ্বারা গঠিত (ডেটা সামগ্রী যে কোনও JSON এনকোড করা ডেটা হতে পারে) ।

    পরীক্ষার জন্য পরিষেবা প্রোগ্রাম লিখিত হয়Goভাষা:

    package main
    import (
        "fmt"
        "net/http"
        "encoding/json"
    )  
    
    func Handle (w http.ResponseWriter, r *http.Request) {
        defer func() {
            fmt.Println("req:", *r)
            ret := map[string]interface{}{
                "schema": []string{"time","data"},
                "data": []interface{}{
                    []interface{}{1579536000000, "abc"},
                    []interface{}{1579622400000, 123},
                    []interface{}{1579708800000, map[string]interface{}{"price":123}},
                    []interface{}{1579795200000, []interface{}{"abc", 123, map[string]interface{}{"price":123}}},
                },
            }
            b, _ := json.Marshal(ret)
            w.Write(b)
        }()
    }  
    
    func main () {
        fmt.Println("listen http://localhost:9090")
        http.HandleFunc("/data", Handle)
        http.ListenAndServe(":9090", nil)
    }
    

    অনুরোধটি পাওয়ার পর, প্রোগ্রামটি ডেটাতে সাড়া দেয়ঃ

    {
        "schema":["time","data"],
        "data":[
            [1579536000000, "abc"],
            [1579622400000, 123],
            [1579708800000, {"price": 123}],
            [1579795200000, ["abc", 123, {"price": 123}]]
        ]
    }
    

    পরীক্ষার কৌশল কোডঃ

    /*backtest
    start: 2020-01-21 00:00:00
    end: 2020-02-12 00:00:00
    period: 1d
    basePeriod: 1d
    exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
    */
    function main() {
        while(true) {
            Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
            Sleep(1000)
        }
    }
    
    '''backtest
    start: 2020-01-21 00:00:00
    end: 2020-02-12 00:00:00
    period: 1d
    basePeriod: 1d
    exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
    '''  
    
    def main():
        while True:
            Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
            Sleep(1000)
    
    /*backtest
    start: 2020-01-21 00:00:00
    end: 2020-02-12 00:00:00
    period: 1d
    basePeriod: 1d
    exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
    */  
    
    void main() {
        while(true) {
            Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"));
            Sleep(1000);
        }
    }
    

exchange.GetData ((উত্স)

দ্যexchange.GetData(Source)ফাংশন দ্বারা লোড করা তথ্য পেতে ব্যবহার করা হয়exchange.SetData(Key, Value)ব্যাকটেস্ট সিস্টেমে ব্যবহার করা যেতে পারে। ব্যাকটেস্টের সময় একবারে তথ্য পাওয়া যায় এবং প্রকৃত ট্রেডিংয়ের সময় এক মিনিটের জন্য ডেটা ক্যাশে করা হয়।

  • সরাসরি লিখিত তথ্যের কলিং পদ্ধতি পাওয়া

    /*backtest
    start: 2020-01-21 00:00:00
    end: 2020-02-12 00:00:00
    period: 1d
    basePeriod: 1d
    exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
    */
    function main() {
        exchange.SetData("test", [[1579536000000, _D(1579536000000)], [1579622400000, _D(1579622400000)], [1579708800000, _D(1579708800000)]])
        while(true) {
            Log(exchange.GetData("test"))
            Sleep(1000 * 60 * 60 * 24)
        }
    }
    
    '''backtest
    start: 2020-01-21 00:00:00
    end: 2020-02-12 00:00:00
    period: 1d
    basePeriod: 1d
    exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
    '''  
    def main():
        exchange.SetData("test", [[1579536000000, _D(1579536000000/1000)], [1579622400000, _D(1579622400000/1000)], [1579708800000, _D(1579708800000/1000)]])
        while True:
            Log(exchange.GetData("test"))
            Sleep(1000 * 60 * 60 * 24)
    
    /*backtest
    start: 2020-01-21 00:00:00
    end: 2020-02-12 00:00:00
    period: 1d
    basePeriod: 1d
    exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
    */    
    void main() {
        json arr = R"([[1579536000000, ""], [1579622400000, ""], [1579708800000, ""]])"_json;
        arr[0][1] = _D(1579536000000);
        arr[1][1] = _D(1579622400000);
        arr[2][1] = _D(1579708800000);
        exchange.SetData("test", arr);
        while(true) {
            Log(exchange.GetData("test"));
            Sleep(1000 * 60 * 60 * 24);
        }
    }
    
  • বাহ্যিক লিঙ্ক থেকে ডেটা কল করার পদ্ধতি

    function main() {
        Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
        Log(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json"))
    }
    
    def main():
        Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
        Log(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json"))
    
    void main() {
        Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"));
        Log(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json"));
    }
    
  • প্ল্যাটফর্ম ডেটা সেন্টারের মৌলিক তথ্য ব্যবহার করুন ব্যবহার করুনexchange.GetData(Source)ফাংশন পেতেমৌলিক তথ্য.

যখন কলexchange.GetData(Source)ফাংশন, আপনি মিলিসেকেন্ডে ক্যাশে টাইমআউট সেট করতে দ্বিতীয় প্যারামিটারটি পাস করতে পারেন। আসল বটে ডিফল্টটি এক মিনিটের ক্যাশে টাইমআউট। ব্যাকটেস্ট সিস্টেমে, যখন ডেটা অনুরোধ করার জন্য অ্যাক্সেস ইন্টারফেস ব্যবহার করা হয়, তখন ব্যাকটেস্ট সিস্টেম প্যারামিটারগুলি যুক্ত করবে from (টাইমস্ট্যাম্প সেকেন্ড), থেকে (টাইমস্ট্যাম্প সেকেন্ড), সময়কাল (অন্তর্নিহিত কে-লাইন সময়কাল, টাইমস্ট্যাম্প মিলিসেকেন্ড) এবং অন্যান্য প্যারামিটার স্বয়ংক্রিয়ভাবে অনুরোধে, প্রাপ্ত হওয়া ডেটার সময়সীমা নির্ধারণ করতে।

ট্রেডিং এপিআই

নিম্নলিখিত ফাংশনগুলি কল করা যেতে পারেexchangeঅথবাexchanges[0]উদাহরণস্বরূপঃexchange.Sell(100, 1);নির্দেশ করে যে পরবর্তী অর্ডারটি এক্সচেঞ্জে 100 এর দাম এবং 1 এর পরিমাণের সাথে বিক্রয় অর্ডার।

বিনিময়. কেনা ((দাম, পরিমাণ)

exchange.Buy(Price, Amount)একটি ক্রয় অর্ডার স্থাপন এবং একটি অর্ডার আইডি ফেরত ব্যবহার করা হয়। পরামিতি মানঃPriceঅর্ডারের মূল্য সংখ্যা টাইপ, এবংAmountঅর্ডারের পরিমাণটি সংখ্যার ধরনে। রিটার্ন ভ্যালুঃ স্ট্রিং টাইপ বা সংখ্যাগত টাইপ (নির্দিষ্ট টাইপ প্রতিটি এক্সচেঞ্জ প্ল্যাটফর্মের রিটার্ন টাইপের উপর নির্ভর করে) ।

ফেরত অর্ডার নম্বরটি অর্ডার তথ্য অনুসন্ধান এবং অর্ডার বাতিল করতে ব্যবহার করা যেতে পারে।

function main() {
    var id = exchange.Buy(100, 1);
    Log("id:", id);
}
def main():
    id = exchange.Buy(100, 1)
    Log("id:", id)
void main() {
    auto id = exchange.Buy(100, 1);
    Log("id:", id);
}
  • ফিউচার অর্ডার

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

    // The following is the wrong call
    function main() {
        exchange.SetContractType("quarter")
      
        // Set short direction
        exchange.SetDirection("sell")     
        // Place a buy order, and you will get an error, so you can only sell short
        var id = exchange.Buy(50, 1)      
    
        // Set short direction
        exchange.SetDirection("buy")      
        // Place a sell order, and you will get an error, so you can only buy long
        var id2 = exchange.Sell(60, 1)    
      
        // Set close long position direction
        exchange.SetDirection("closebuy")    
        // Place a buy order, and you will get an error, so you can only sell short
        var id3 = exchange.Buy(-1, 1)        
      
        // Set close short position direction
        exchange.SetDirection("closesell")   
        // Place a sell order, and you will get an error, so you can only buy long
        var id4 = exchange.Sell(-1, 1)       
    }
    
    # The following is the wrong call
    def main():
        exchange.SetContractType("quarter")
        exchange.SetDirection("sell")
        id = exchange.Buy(50, 1)
        exchange.SetDirection("buy")
        id2 = exchange.Sell(60, 1)
        exchange.SetDirection("closebuy")
        id3 = exchange.Buy(-1, 1)
        exchange.SetDirection("closesell")
        id4 = exchange.Sell(-1, 1)
    
    // The following is the wrong call
    void main() {
        exchange.SetContractType("quarter");
        exchange.SetDirection("sell");
        auto id = exchange.Buy(50, 1);
        exchange.SetDirection("buy");
        auto id2 = exchange.Sell(60, 1);
        exchange.SetDirection("closebuy");
        auto id3 = exchange.Buy(-1, 1);
        exchange.SetDirection("closesell");
        auto id4 = exchange.Sell(-1, 1);
    }
    

    ত্রুটি বার্তাঃ

    direction is sell, invalid order type Buy
    direction is buy, invalid order type Sell
    direction is closebuy, invalid order type Buy
    direction is closesell, invalid order type Sell
    
  • বাজার ব্যবস্থা

    দ্রষ্টব্যঃ এক্সচেঞ্জ অর্ডার ইন্টারফেস বাজার অর্ডার সমর্থন করার জন্য প্রয়োজন হয় (যখন অর্ডার টাইপ একটি কিনতে অর্ডার হয়, অর্ডার পরিমাণ পরামিতি উদ্ধৃতি মুদ্রা পরিমাণ হয়), এবং ক্রিপ্টোকারেন্সি ফিউচার বাজার অর্ডার পদ্ধতি অর্ডার স্থাপন করতে ব্যবহৃত হয়, এবং পরিমাণ পরামিতি ইউনিট হয়চুক্তির সংখ্যাকিছু লাইভ ট্রেডিং এক্সচেঞ্জ ডিজিটাল মুদ্রার জন্য মার্কেট অর্ডার ইন্টারফেস সমর্থন করে না।

    // For example, trading pairs: ETH_BTC, bought in by market order
    function main() {
        // Buy a market order, and buy ETH coins equal to 0.1 BTC (quote currency) 
        exchange.Buy(-1, 0.1)    
    }
    
    def main():
        exchange.Buy(-1, 0.1)
    
    void main() {
        exchange.Buy(-1, 0.1);
    }
    

বিনিময়.বিক্রয় ((দাম, পরিমাণ)

exchange.Sell(Price, Amount)একটি বিক্রয় অর্ডার দেয় এবং একটি অর্ডার আইডি ফেরত দেয়। প্যারামিটার মানঃPriceঅর্ডার মূল্য, সংখ্যাসূচক টাইপ।Amountঅর্ডার পরিমাণ, সংখ্যাগত প্রকার। রিটার্ন মানঃ স্ট্রিং টাইপ বা সংখ্যাগত টাইপ (নির্দিষ্ট টাইপ প্রতিটি বিনিময় রিটার্ন টাইপ উপর নির্ভর করে) ।

ফেরত অর্ডার নম্বর, যা অর্ডার তথ্য অনুসন্ধান এবং অর্ডার বাতিল করতে ব্যবহার করা যেতে পারে।

function main(){
    var id = exchange.Sell(100, 1)
    Log("id:", id)
}
def main():
    id = exchange.Sell(100, 1)
    Log("id:", id)
void main() {
    auto id = exchange.Sell(100, 1);
    Log("id:", id);
}
  • ফিউচার অর্ডার

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

  • মার্কেট অর্ডার

    দ্রষ্টব্যঃ প্ল্যাটফর্ম অর্ডার প্লেসমেন্ট ইন্টারফেস বাজার অর্ডার সমর্থন করার জন্য প্রয়োজন হয়। (যখন অর্ডার টাইপ একটি বিক্রয় অর্ডার হয়, অর্ডার পরিমাণ পরামিতি বিক্রি অপারেটিং কয়েন সংখ্যা), এবং ক্রিপ্টোকারেন্সি ফিউচার বাজার আদেশ ফর্ম দ্বারা অর্ডার স্থান এবং অর্ডার পরিমাণ পরামিতি ইউনিট হয়চুক্তির সংখ্যা. কিছু ডিজিটাল মুদ্রা বিনিময় বাস্তব ট্রেডিং বাজারের অর্ডার ইন্টারফেস সমর্থন করে না.

    // For example, trading pairs: ETH_BTC, sold out by market order 
    function main() {
        // Note: Sell by a market order, and sell 0.2 ETH coins 
        exchange.Sell(-1, 0.2)   
    }
    
    def main():
        exchange.Sell(-1, 0.2)
    
    void main() {
        exchange.Sell(-1, 0.2);
    }
    

বিনিময়.অর্ডার বাতিল করুন ((আইডি)

exchange.CancelOrder(orderId), এই ফাংশনটির উদ্দেশ্য হল আইডি দিয়ে একটি অর্ডার বাতিল করা। প্যারামিটার মানঃIdহল অর্ডার নম্বর, স্ট্রিং টাইপ বা সংখ্যাগত টাইপ (নির্দিষ্ট টাইপ প্রতিটি প্ল্যাটফর্মে অর্ডার দেওয়ার সময় রিটার্ন টাইপের উপর নির্ভর করে); রিটার্ন মানঃ bool টাইপ।

অপারেশনের ফলাফল ফেরত দিন;trueঅর্ডার বাতিলের অনুরোধ সফলভাবে পাঠানো হয়েছে;falseমানে বাতিল আদেশ অনুরোধ পাঠাতে ব্যর্থ হয় (ফিরে মান শুধুমাত্র পাঠানোর অনুরোধ সফল বা না হয় কিনা তা নির্দেশ করে, তাই এটি কল করা ভালexchange.GetOrders()প্ল্যাটফর্মটি অর্ডারটি বাতিল করে কিনা তা পরীক্ষা করার জন্য) ।

function main(){
    var id = exchange.Sell(99999, 1)
    exchange.CancelOrder(id)
}
def main():
    id = exchange.Sell(99999, 1)
    exchange.CancelOrder(id)
void main() {
    auto id = exchange.Sell(99999, 1);
    exchange.CancelOrder(id);
}

এফএমজেডের এপিআই ফাংশন, যা লগ আউটপুট ফাংশন তৈরি করতে পারে, যেমনLog(...), exchange.Buy(Price, Amount)এবংexchange.CancelOrder(Id). আপনি কিছু অতিরিক্ত আউটপুট পরামিতি সঙ্গে প্রয়োজনীয় পরামিতি অনুসরণ করতে পারেন, যেমনexchange.CancelOrder(orders[j].Id, orders[j]). এই ভাবে, এটা বাতিল করা হয়orders[j]অর্ডার যে এই অর্ডার তথ্য আউটপুট দ্বারা সহগামী হয়, যথাOrderগঠনorders[j].

function main() {
    Log("data1", "data2", "data3", "...")
    var data2 = 200
    var id = exchange.Sell(100000, 0.1, "Incidental data1", data2, "...")
    exchange.CancelOrder(id, "Incidental data1", data2, "...")
    LogProfit(100, "Incidental data1", data2, "...")
}
def main():
    Log("data1", "data2", "data3", "...")
    data2 = 200
    id = exchange.Sell(100000, 0.1, "Incidental data1", data2, "...")
    exchange.CancelOrder(id, "Incidental data1", data2, "...")
    LogProfit(100, "Incidental data1", data2, "...")
void main() {
    Log("data1", "data2", "data3", "...");
    int data2 = 200;
    auto id = exchange.Sell(100000, 0.1, "Incidental data1", data2, "...");
    exchange.CancelOrder(id, "Incidental data1", data2, "...");
    LogProfit(100, "Incidental data1", data2, "...");
}

এক্সচেঞ্জ.গেটঅর্ডার (আইডি)

exchange.GetOrder(orderId)অর্ডার নম্বর অনুযায়ী অর্ডার বিবরণ পায়। পরামিতি মানঃIdঅর্ডার করা ক্রমিক নম্বর, এবংIdস্ট্রিং বা সংখ্যাগত টাইপ (নির্দিষ্ট টাইপ প্রতিটি এক্সচেঞ্জের রিটার্ন টাইপের উপর নির্ভর করে) । রিটার্ন মানঃOrderকাঠামো (কিছু এক্সচেঞ্জ দ্বারা সমর্থিত নয়)

  • Orderগঠন
  • AvgPriceগড় কার্যকর মূল্য নির্দেশ করে (কিছু এক্সচেঞ্জ এই ক্ষেত্রটি সমর্থন করে না; যদি তারা সমর্থন না করে তবে এটিকে 0 এ সেট করুন) ।
function main(){
    var id = exchange.Sell(1000, 1)
    // The parameter id is the order number, you need to fill in the number of the order you want to query
    var order = exchange.GetOrder(id)      
    Log("Id:", order.Id, "Price:", order.Price, "Amount:", order.Amount, "DealAmount:",
        order.DealAmount, "Status:", order.Status, "Type:", order.Type)
}
def main():
    id = exchange.Sell(1000, 1)
    order = exchange.GetOrder(id)
    Log("Id:", order["Id"], "Price:", order["Price"], "Amount:", order["Amount"], "DealAmount:", 
        order["DealAmount"], "Status:", order["Status"], "Type:", order["Type"])
void main() {
    auto id = exchange.Sell(1000, 1);
    auto order = exchange.GetOrder(id);
    Log("Id:", order.Id, "Price:", order.Price, "Amount:", order.Amount, "DealAmount:", 
        order.DealAmount, "Status:", order.Status, "Type:", order.Type);
}

বিনিময়.GetOrders ((()

exchange.GetOrders()সব অসম্পূর্ণ অর্ডার পায়। রিটার্ন মানঃOrderকাঠামো অ্যারে। জন্যOrderকাঠামো, দয়া করে পড়ুনexchange.GetOrder()যখন অ্যাকাউন্ট বিনিময় বস্তুর দ্বারা প্রতিনিধিত্ব করা হয়exchangeকোন আদেশ নেই, কল করুনexchange.GetOrders()একটি ফাঁকা অ্যারে ফেরত দিতে, যথাঃ[].

function main(){
    exchange.Sell(1000, 1)
    exchange.Sell(1000, 1)
    var orders = exchange.GetOrders()
    Log("Information for unfinished order 1, ID:", orders[0].Id, "Price:", orders[0].Price, "Amount:", orders[0].Amount,
        "DealAmount:", orders[0].DealAmount, "type:", orders[0].Type)
    Log("Information for unfinished order 2, ID:", orders[1].Id, "Price:", orders[1].Price, "Amount:", orders[1].Amount,
        "DealAmount:", orders[1].DealAmount, "type:", orders[1].Type)
}
def main():
    exchange.Sell(1000, 1)
    exchange.Sell(1000, 1)
    orders = exchange.GetOrders()
    Log("Information for unfinished order 1, ID:", orders[0]["Id"], "Price:", orders[0]["Price"], "Amount:", orders[0]["Amount"], 
        "DealAmount:", orders[0]["DealAmount"], "type:", orders[0]["Type"])
    Log("Information for unfinished order 2, ID:", orders[1]["Id"], "Price:", orders[1]["Price"], "Amount:", orders[1]["Amount"],
        "DealAmount:", orders[1]["DealAmount"], "type:", orders[1]["Type"])
void main() {
    exchange.Sell(1000, 1);
    exchange.Sell(1000, 1);
    auto orders = exchange.GetOrders();
    Log("Information for unfinished order 1, ID:", orders[0].Id, "Price:", orders[0].Price, "Amount:", orders[0].Amount, 
        "DealAmount:", orders[0].DealAmount, "type:", orders[0].Type);
    Log("Information for unfinished order 2, ID:", orders[1].Id, "Price:", orders[1].Price, "Amount:", orders[1].Amount,
        "DealAmount:", orders[1].DealAmount, "type:", orders[1].Type);
}

দ্যexchange.GetOrders()ফাংশন বর্তমানে সেট অসম্পূর্ণ আদেশ তথ্য পায়ট্রেডিং জুটিএটা লক্ষ করা উচিত যে ক্রিপ্টোকারেন্সি ফিউচারগুলির মধ্যে কেবল ট্রেডিং জোড়া নয়, চুক্তি কোডগুলির মধ্যেও পার্থক্য রয়েছে।

// Test OKX contract tradings, to know whether "GetOrders" gets all unfinished contract orders
function main(){
    // The next weekly buy order; the price of the order minus 50 guarantees no execution; pending orders
    exchange.SetContractType("this_week")
    exchange.SetDirection("buy")
    var ticker = exchange.GetTicker()
    Log(ticker)
    exchange.Buy(ticker.Last - 50, 1)

    // The next quarterly sell order; the price plus 50 guarantees that it will not be executed, and the pending order has been switched to a quarterly contract
    exchange.SetContractType("quarter")
    exchange.SetDirection("sell")
    ticker = exchange.GetTicker()
    Log(ticker)
    exchange.Sell(ticker.Last + 50, 1)

    // Get the unfinished orders
    Log("orders", exchange.GetOrders())
}
def main():
    exchange.SetContractType("this_week")
    exchange.SetDirection("buy")
    ticker = exchange.GetTicker()
    Log(ticker)
    exchange.Buy(ticker["Last"] - 50, 1)

    exchange.SetContractType("quarter")
    exchange.SetDirection("sell")
    ticker = exchange.GetTicker()
    Log(ticker)
    exchange.Sell(ticker["Last"] + 50, 1)

    Log("orders", exchange.GetOrders())
void main() {
    exchange.SetContractType("this_week");
    exchange.SetDirection("buy");
    auto ticker = exchange.GetTicker();
    Log(ticker);
    exchange.Buy(ticker.Last - 50, 1);

    exchange.SetContractType("quarter");
    exchange.SetDirection("sell");
    ticker = exchange.GetTicker();
    Log(ticker);
    exchange.Sell(ticker.Last + 50, 1);

    Log("orders", exchange.GetOrders());
}

অর্ডার সংক্রান্ত অপূর্ণ তথ্যঃ

[{"Id":17116430886,"Amount":1,"Price":808.4,"DealAmount":0,"AvgPrice":0,"Status":0,"Type":1,"ContractType":"quarter"}]

এটা দেখা যায় যে, ক্রিপ্টোকারেন্সি ট্রেডিংয়ে, অর্ডারগুলিexchange.GetOrders()শুধুমাত্র বর্তমানে নির্ধারিত চুক্তির অসম্পূর্ণ অর্ডার।

বিনিময়.SetPrecision(...)

exchange.SetPrecision(PricePrecision, AmountPrecision)দামের দশমিক নির্ভুলতা এবং প্রতীক অর্ডার পরিমাণ সেট করে; সেটিংয়ের পরে এটি স্বয়ংক্রিয়ভাবে কাটা হবে। পরামিতি মানঃPricePrecisionদামের তথ্যে দশমিকের সংখ্যা নিয়ন্ত্রণ করতে ব্যবহৃত সংখ্যা প্রকারের;AmountPrecisionঅর্ডার পরিমাণের পরে দশমিক বিন্দু নিয়ন্ত্রণ করতে ব্যবহৃত হয়। উভয়PricePrecisionএবংAmountPrecisionব্যাকটেস্ট ফাংশন সমর্থন করে না, এবং ব্যাকটেস্ট সংখ্যাগত নির্ভুলতা স্বয়ংক্রিয়ভাবে প্রক্রিয়া করা হবে।

function main(){
    // Set the decimal precision of the price to 2 digits, and set the precision of the quantity of the symbol order to 3 digits
    exchange.SetPrecision(2, 3)
}    
def main():
    exchange.SetPrecision(2, 3)
void main() {
    exchange.SetPrecision(2, 3);
}

বিনিময়.সেট রেট ((রেট)

exchange.SetRate(Rate)এক্সচেঞ্জে প্রচলিত মুদ্রার বিনিময় হার নির্ধারণ করে। পরামিতি মানঃRateএরnumberটাইপ. রিটার্ন মানঃnumber type.

function main(){
    Log(exchange.GetTicker())
    // Set the exchange rate conversion
    exchange.SetRate(7)
    Log(exchange.GetTicker())
    // Set to 1, without conversion
    exchange.SetRate(1)
}
def main():
    Log(exchange.GetTicker())
    exchange.SetRate(7)
    Log(exchange.GetTicker())
    exchange.SetRate(1)
void main() {
    Log(exchange.GetTicker());
    exchange.SetRate(7);
    Log(exchange.GetTicker());
    exchange.SetRate(1);
}

নোটঃ

  • যদি আপনি বিনিময় হার মান ব্যবহার করে সেটexchange.SetRate(Rate), যেমন 7, তাহলে, বর্তমান বাজারের মূল্য, গভীরতা, এবং অর্ডার মূল্য সহ বর্তমান মুদ্রার প্রতিনিধিত্বকারী মুদ্রার সমস্ত মূল্য তথ্যexchangeবস্তুর, রূপান্তরের জন্য নির্ধারিত বিনিময় হার 7 দ্বারা গুণিত হবে।

  • উদাহরণস্বরূপexchangeমার্কিন ডলারে মুদ্রা বিনিময় হার।exchange.SetRate(7)এই সূচকে বলা হয়, প্রকৃত ব্যবসায়ের সমস্ত মূল্য ৭ দ্বারা গুণিত হবে এবং CNY-এর কাছাকাছি মূল্যগুলিতে রূপান্তরিত হবে।

exchange.IO(…)

exchange.IO("api", httpMethod, resource, params, raw), এক্সচেঞ্জের অন্যান্য কার্যকরী ইন্টারফেস কল করুন। প্যারামিটার মানঃhttpMehodস্ট্রিং টাইপ; এটি অনুরোধ টাইপ পূরণ করে, যেমনঃPOSTঅথবাGET. resourceস্ট্রিং টাইপ, এটি অনুরোধ পাথ পূরণ করে।paramsস্ট্রিং টাইপ, এটি অনুরোধ পরামিতি পূরণ করে।rawমূল JSON স্ট্রিং প্যারামিটার এবং এটি বাদ দেওয়া যেতে পারে।exchange.IO("api", httpMethod, resource, params, raw)ফাংশন কল এক্সচেঞ্জ ইন্টারফেস অ্যাক্সেস করবে। যখন একটি ত্রুটি ঘটে এবং কল ব্যর্থ হয়, এটি একটি শূন্য মান (নেটওয়ার্ক অনুরোধের সাথে ফাংশন, যেমনGetTicker()এবংGetAccount(), ইত্যাদি কল ব্যর্থ হলে শূন্য মান ফেরত) শুধুমাত্র লাইভ ট্রেডিং কল সমর্থন করেexchange.IO("api", ...) function.

OKX ব্যাচ অর্ডার উদাহরণ জন্য, পরামিতি ব্যবহার করুনrawঅর্ডার প্যারামিটার পাস করতেঃ

function main() {
    var arrOrders = [
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"},
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"2","posSide":"long"}
    ]
    
    // Call exchange.IO to directly access the platform batch ordering interface
    var ret = exchange.IO("api", "POST", "/api/v5/trade/batch-orders", "", JSON.stringify(arrOrders))
    Log(ret)
}
import json
def main():
    arrOrders = [
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"}, 
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"2","posSide":"long"}
    ]
    ret = exchange.IO("api", "POST", "/api/v5/trade/batch-orders", "", json.dumps(arrOrders))
    Log(ret)
void main() {
    json arrOrders = R"([
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"},
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"2","posSide":"long"}
    ])"_json;
    auto ret = exchange.IO("api", "POST", "/api/v5/trade/batch-orders", "", arrOrders.dump());
    Log(ret);
}

এই ফাংশনটি ব্যবহার করার জন্য, আপনি এক্সচেঞ্জ যেতে হবে বুঝতেAPIএক্সচেঞ্জের ইন্টারফেস FMZ যোগ করা হয়নি যে ফাংশন প্রসারিত করতে (আপনি একটি জমা যখন প্যারামিটার এনক্রিপশন, স্বাক্ষর এবং যাচাইকরণ প্রক্রিয়া সম্পর্কে চিন্তা করতে হবে নাPOSTFMZ সম্পূর্ণরূপে নীচের স্তরে প্রক্রিয়া করা হয়েছে, তাই আপনি শুধুমাত্র সংশ্লিষ্ট পরামিতি পূরণ করতে হবে).

নোটঃ যদি মূল মানparamsপ্যারামিটার (অর্থাৎ, Http অনুরোধ প্যারামিটার) একটি স্ট্রিং, এটি একক উদ্ধৃতি দিয়ে আবৃত করা প্রয়োজন (প্রতীক') প্যারামিটার মান উভয় পক্ষের উপর। উদাহরণস্বরূপঃbitfinex exchange.

var amount = 1
var price = 10
var basecurrency = "ltc"
function main () {
    // Notice that amount.toString() and price.toString() both have a ' character on the left and right
    var message = "symbol=" + basecurrency + "&amount='" + amount.toString() + "'&price='" + price.toString() + "'&side=buy" + "&type=limit"
    var id = exchange.IO("api", "POST", "/v1/order/new", message)
}
amount = 1
price = 10
basecurrency = "ltc"
def main():
    message = "symbol=" + basecurrency + "&amount='" + str(amount) + "'&price='" + str(price) + "'&side=buy" + "&type=limit"
    id = exchange.IO("api", "POST", "/v1/order/new", message)
void main() {
    auto amount = 1.0;
    auto price = 10.0;
    auto basecurrency = "ltc";
    string message = format("symbol=%s&amount=\"%.1f\"&price=\"%.1f\"&side=buy&type=limit", basecurrency, amount, price);
    auto id = exchange.IO("api", "POST", "/v1/order/new", message);
}

অ্যাক্সেসের উদাহরণOKXইন্টারফেসঃ

function main(){
    var ret = exchange.IO("api", "GET", "/api/v5/trade/orders-pending", "instType=SPOT")
    Log(ret)
}
def main():
    ret = exchange.IO("api", "GET", "/api/v5/trade/orders-pending", "instType=SPOT")
    Log(ret)
void main() {
    auto ret = exchange.IO("api", "GET", "/api/v5/trade/orders-pending", "instType=SPOT");
    Log(ret);
}

পরীক্ষার সময় ফেরত দেওয়া তথ্যঃ

{"code":"0","data":[],"msg":""}

অন্যান্য সেটিংসexchange.IOফাংশনঃ

  • বর্তমান এক্সচেঞ্জের ট্রেডিং জোড়া পরিবর্তন করুন

    exchange.IO("currency", "ETH_BTC")

    function main() {
        // For example, set the current trading pair of the exchange object on the bot to BTC_USDT, and print the current trading pair market
        Log(exchange.GetTicker())
        // Switch trading pair to LTC_BTC      
        exchange.IO("currency", "LTC_BTC")
        Log(exchange.GetTicker())
    }
    
    def main():
        Log(exchange.GetTicker())
        exchange.IO("currency", "LTC_BTC")
        Log(exchange.GetTicker())
    
    void main() {
        Log(exchange.GetTicker());
        exchange.IO("currency", "LTC_BTC");
        Log(exchange.GetTicker());
    }
    

    এইভাবে,ট্রেডিং জোড়াকনফিগার করাযখন বট যোগ করা হয়অথবাব্যাকটেস্ট চালানো হয়েছেকোডের মাধ্যমে স্যুইচ করা হবে।

    নোটঃ

      1. ব্যাকটেস্ট সিস্টেম এখন ট্রেডিং জোড়া স্যুইচিং সমর্থন করে (শুধুমাত্র ক্রিপ্টোকারেন্সির স্পট এক্সচেঞ্জ অবজেক্টগুলি) । ব্যাকটেস্টের সময়, এটি লক্ষ করা উচিত যে একই কোট মুদ্রার কেবল ট্রেডিং জোড়া স্যুইচ করা যায়। উদাহরণস্বরূপ, বর্তমান ট্রেডিং জোড়াটি হলETH_BTC, যা শুধুমাত্রLTC_BTC, নাLTC_USDT.
      1. যদিwebsocketপ্রোটোকল মোড Huobi স্পট এক্সচেঞ্জ বস্তুর উপর স্যুইচ করা হয়, আপনি ব্যবহার করতে পারবেন নাexchange.IO("currency", "XXX_YYY")মুদ্রা বদল করতে।
      1. ক্রিপ্টোকারেন্সি ফিউচার এক্সচেঞ্জের ক্ষেত্রে, যদি ট্রেডিং জুটিগুলি স্যুইচ করা হয়, তাহলে আপনাকে কোন চুক্তি দিয়ে ট্রেড করতে চান তা নির্ধারণ করতে আপনাকে আবার চুক্তিটি সেট আপ করতে হবে।
      1. আপনি নতুনexchange.SetCurrency(Symbol)ট্রেডিং জোড়া স্যুইচ করার ফাংশন, এবং ব্যবহারexchange.IO("currency","XXX_YYY")সামঞ্জস্য বজায় রাখার পদ্ধতি।
  • exchange.IOফাংশনটি এক্সচেঞ্জ এপিআই বেস ঠিকানা পরিবর্তন করে (রিসেট চুক্তি; কিছু এক্সচেঞ্জ এটি সমর্থন করে না) । এখন এর ব্যবহারexchange.SetBase(Base)এক্সচেঞ্জ এপিআই বেস ঠিকানা পরিবর্তন এবং ব্যবহার করার জন্য ফাংশন সমর্থিত হয়েছেexchange.IO("base","https://xxx.xxx.xxx")সামঞ্জস্য বজায় রাখার পদ্ধতি।

    উদাহরণস্বরূপঃ যখন এক্সচেঞ্জ অবজেক্টটি ক্যাপসুল করা হয়, তখন ডিফল্ট বেস ঠিকানাটি হলhttps://api.huobipro.com, এর পরিবর্তেঃhttps://api.huobi.pro, নিচের কোডটি ব্যবহার করুন।

    function main () {
        // exchanges[0] is the first exchange object added when the bot is added 
        exchanges[0].IO("base", "https://api.huobi.pro")        
    }
    
    def main():
        exchanges[0].IO("base", "https://api.huobi.pro")
    
    void main() {
        exchanges[0].IO("base", "https://api.huobi.pro");
    }
    

    বেস ঠিকানা পুনরায় পরিবর্তন করুনঃhttps://api.huobipro.com.

    function main () {
        exchanges[0].IO("base", "https://api.huobipro.com")
    }
    
    def main():
        exchanges[0].IO("base", "https://api.huobipro.com")
    

আরো