গত 10 লগ এবং বাকি সাফ
লগ রিসেট ((10)
}
```Python
def main():
LogReset(10)
void main() {
LogReset(10);
}
LogVacuum()
, ডেকেLogReset()
লগ পরিষ্কার করার ফাংশন, দ্বারা দখল করা স্টোরেজ স্থান পুনরুদ্ধারএসকিউএলাইটযখন ডেটা মুছে ফেলা হয়। ফাংশনের কোন রিটার্ন মান নেই।
কারণটা হচ্ছে-SQLite
তথ্য মুছে ফেলার সময় দখল স্থান পুনরুদ্ধার না, তাই আপনি সঞ্চালন করতে হবেVACUUM
এই ফাংশনটি কল করা হলে, ফাইল স্থানান্তর অপারেশনটি একটি বড় বিলম্বের সাথে ঘটবে। এটি একটি উপযুক্ত সময় ব্যবধানে কল করার পরামর্শ দেওয়া হয়।
প্রধান বাজার ইন্টারফেস ফাংশনঃ
ফাংশনের নাম | বর্ণনা |
---|---|
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 কল ফেরত দিতে পারে যা সেট পরামিতি অনুযায়ী নেটওয়ার্কে অ্যাক্সেস করা হলে ঘটবে, এবং কিছু ব্যর্থ কলের ফেরত মান ফেরত দিতে পারে। আপনি দ্রুত বট মধ্যে প্রোগ্রামের দৃঢ়তা পরীক্ষা করতে পারেন।
কৌশল সম্পাদনা পৃষ্ঠায় ব্যাকটেস্ট সিস্টেম পৃষ্ঠায় স্যুইচ করুন, ক্লিক করুনউল্টানো ত্রিভুজ
exchange.GetTicker()
বর্তমান ট্রেডিং জোড়া এবং চুক্তির বর্তমান বাজার কোট পায়, রিটার্ন মান সহঃTicker
কাঠামো
ব্যাকটেস্ট সিস্টেমে,Ticker
তথ্য রিটার্নexchange.GetTicker()
ফাংশন, যেখানেHigh
এবংLow
হয় সিমুলেটেড মান, বর্তমান সময় থেকে নেওয়া 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
কেবলমাত্র উপরে বর্ণিত মানক সময়সীমা অতিক্রম করতে পারে, তবে সেকেন্ডের একক সংখ্যাও অতিক্রম করতে পারে।এর রিটার্ন মানexchange.GetRecords(Period)
ফাংশনঃ
রিটার্ন মান একটি অ্যারেRecord
কাঠামো, ফিরে K-লাইন তথ্য সময়ের সাথে সাথে জমা হবে, জমা K-লাইন বার উপরের সীমা দ্বারা প্রভাবিত হয়exchange.SetMaxBarLenফাংশন সেটিং। ডিফল্ট উপরের সীমা 5000 কে-লাইন বার যখন এটি সেট করা হয় না। যখন কে-লাইন ডেটা কে-লাইন বার জমে থাকা সীমাতে পৌঁছে যায়, এটি একটি কে-লাইন বার যুক্ত করে এবং প্রাথমিক কে-লাইন বারটি মুছে ফেলার মাধ্যমে আপডেট করা হবে (যেমন সারি ইন / আউট) । কিছু এক্সচেঞ্জ একটি কে-লাইন ইন্টারফেস সরবরাহ করে না, তারপরে ডকার কে-লাইন তৈরি করতে রিয়েল টাইমে বাজার লেনদেন রেকর্ড ডেটা সংগ্রহ করে।
ক-লাইন বার সংখ্যা যখন উদ্ধারGetRecords
ফাংশন প্রাথমিকভাবে বলা হয়.
এর জন্য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);
}
দ্য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");
}
দ্যexchange.SetMaxBarLen(Len)
এই ফাংশনটি ক্রিপ্টোকারেন্সি কৌশল চালানোর সময় দুটি দিককে প্রভাবিত করেঃ
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()
গত দ্বারা ফিরে 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()
বিনিময়তে বর্তমানে ব্যবহৃত মুদ্রার বিনিময় হার এবং বর্তমানে প্রদর্শিত মূল্য নির্ধারণের মুদ্রা প্রদান করে, এবং 1 এর ফেরত মানটি নির্দেশ করে যে বিনিময় হার রূপান্তর নিষ্ক্রিয় করা হয়েছে। ফেরত মানঃ সংখ্যাসূচক টাইপ।
নোটঃ
exchange.SetRate()
বিনিময় হার সেট করতে বলা হয় নি, বিনিময় হার মান দ্বারা ফিরেexchange.GetRate()
ডিফল্টরূপে 1 হয়, অর্থাৎ বর্তমানে প্রদর্শিত বিনিময় হার রূপান্তরটি বিনিময় করা হয়নি।exchange.SetRate()
একটি বিনিময় হার মান নির্ধারণের জন্য ব্যবহৃত হয়েছে, যেমন,exchange.SetRate(7)
, তাহলে ট্রেডিং প্ল্যাটফর্মের প্রচলিত মুদ্রার প্রতিনিধিত্বকারী বর্তমান বিনিময় বস্তুর সমস্ত মূল্যের তথ্য, যেমন কোট, গভীরতা, অর্ডার মূল্য ইত্যাদি, রূপান্তরের জন্য পূর্বে নির্ধারিত বিনিময় হার 7 দ্বারা গুণিত হবে।exchange
ডলারকে মূল্য নির্ধারণের মুদ্রা হিসেবে ব্যবহার করে বিনিময় করা হয়।exchange.SetRate(7)
, বট এর সব দাম 7 দ্বারা গুণিত দ্বারা CNY কাছাকাছি দাম রূপান্তর করা হবে। এই সময়ে বিনিময় হার মান ব্যবহার করে প্রাপ্তexchange.GetRate()
৭ হয়।exchange.GetUSDCNY()
মার্কিন ডলারের সর্বশেষ বিনিময় হার প্রদান করে (তথ্য উৎস প্রদান করে)yahoo
) রিটার্ন মানঃ সংখ্যাসূচক টাইপ।
দ্য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);
}
}
উপরের পরীক্ষার কোডটি চালানোর সময়, সংশ্লিষ্ট সময়ে সংশ্লিষ্ট তথ্য পাওয়া যাবে, যেমন চিত্রটিতে দেখানো হয়েছেঃ
আমরা দেখতে পাচ্ছি, টাইমস্ট্যাম্পের সংশ্লিষ্ট সময়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(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)
ফাংশন, আপনি মিলিসেকেন্ডে ক্যাশে টাইমআউট সেট করতে দ্বিতীয় প্যারামিটারটি পাস করতে পারেন। আসল বটে ডিফল্টটি এক মিনিটের ক্যাশে টাইমআউট। ব্যাকটেস্ট সিস্টেমে, যখন ডেটা অনুরোধ করার জন্য অ্যাক্সেস ইন্টারফেস ব্যবহার করা হয়, তখন ব্যাকটেস্ট সিস্টেম প্যারামিটারগুলি যুক্ত করবে
নিম্নলিখিত ফাংশনগুলি কল করা যেতে পারে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);
}
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()
শুধুমাত্র বর্তমানে নির্ধারিত চুক্তির অসম্পূর্ণ অর্ডার।
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("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 যোগ করা হয়নি যে ফাংশন প্রসারিত করতে (আপনি একটি জমা যখন প্যারামিটার এনক্রিপশন, স্বাক্ষর এবং যাচাইকরণ প্রক্রিয়া সম্পর্কে চিন্তা করতে হবে নাPOST
FMZ সম্পূর্ণরূপে নীচের স্তরে প্রক্রিয়া করা হয়েছে, তাই আপনি শুধুমাত্র সংশ্লিষ্ট পরামিতি পূরণ করতে হবে).
নোটঃ
যদি মূল মান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());
}
এইভাবে,ট্রেডিং জোড়াকনফিগার করাযখন বট যোগ করা হয়অথবাব্যাকটেস্ট চালানো হয়েছেকোডের মাধ্যমে স্যুইচ করা হবে।
নোটঃ
ETH_BTC
, যা শুধুমাত্রLTC_BTC
, নাLTC_USDT
.websocket
প্রোটোকল মোড Huobi স্পট এক্সচেঞ্জ বস্তুর উপর স্যুইচ করা হয়, আপনি ব্যবহার করতে পারবেন নাexchange.IO("currency", "XXX_YYY")
মুদ্রা বদল করতে।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")