এই টিউটোরিয়ালটি নীতিমালা লেখার প্রাথমিক জ্ঞান নিয়ে গঠিত, যার মধ্যে রয়েছে এপিআই উপস্থাপনা, পর্যালোচনা, চার্ট ইত্যাদি। এই মৌলিক টিউটোরিয়ালটি শেখার পরে, ব্যবহারকারীরা মৌলিক এপিআই ব্যবহার করতে এবং স্থিতিশীল রিয়েল-ডিস্ক নীতিমালা লিখতে সক্ষম হবেন। এই টিউটোরিয়ালটি শেখার আগে, প্রথমে শিখতে হবেএফএমজেড ইনভেন্টরস কোয়ান্টাম প্ল্যাটফর্ম ব্যবহারের সূচনা 。
পুরাতন টিউটোরিয়ালঃইনভেন্টর কোয়ান্টাম (FMZ.COM) কৌশল সম্পূর্ণ ব্যবহারের ম্যানুয়াল ২.০ (টিউটোরিয়াল), এই টিউটোরিয়ালটি অনেকগুলি পোস্টের সূচক দেয়, যা দেখার পরামর্শ দেওয়া হচ্ছে।
নীতিমালার প্রাথমিক বিবরণ
এপিআই সম্পর্কে
প্রোগ্রামাইজড লেনদেন হল একটি অ্যাপ্লিকেশন যা API এবং এক্সচেঞ্জের মাধ্যমে সংযুক্ত হয়, যা পরিকল্পিত উদ্দেশ্য অনুসারে স্বয়ংক্রিয়ভাবে কেনা-বেচা বা অন্যান্য কার্যকারিতা বাস্তবায়ন করে।
বর্তমানে ডিজিটাল মুদ্রা এক্সচেঞ্জের প্রধানত দুটি ইন্টারফেস প্রোটোকল রয়েছেঃ REST এবং Websocket। REST প্রোটোকলটি প্রতিবার ডেটা পাওয়ার জন্য একবার অ্যাক্সেস করা প্রয়োজন। উদাহরণস্বরূপ, সিমুলেশন এক্সচেঞ্জ Wex.app এর এপিআই, সরাসরি ব্রাউজারে https://api.wex.app/api/v1/public/ticker?market=BTC_USDT খুলুন এবং ফলাফলঃ
{"data:{"buy":"11351.73","high":"11595.77","last":"11351.85","low":"11118.45","open":"11358.74","quoteVol":"95995607137.00903936","sell":"11356.02","time":1565593489318,"vol":"3552.5153"}}
এটি বিটিসি_ইউএসডিটি জোড়ার সাথে লেনদেনের সর্বশেষ অবস্থা দেখায়, যা প্রতিবারই পরিবর্তিত হয়।market=এর পরে নির্দিষ্ট লেনদেনের জোড়া প্যারামিটার রয়েছে, যা অন্যান্য লেনদেনের জোড়া ডেটা পাওয়ার জন্য পরিবর্তন করা যেতে পারে। পাবলিক ইন্টারফেসের জন্য, যেমন বাজারের প্রবণতা, সবাই অ্যাক্সেস করতে পারে, তাই যাচাইকরণের প্রয়োজন হয় না, এবং কিছু ইন্টারফেস যেমন অর্ডার এবং অ্যাকাউন্ট অ্যাক্সেস করতে ব্যবহারকারীর পরিচয় নিশ্চিত করতে হবে, তখন এপিআই-কি ব্যবহার করে স্বাক্ষর করতে হবে। ওয়েবসকেট একটি সাবস্ক্রিপশন মোড, সাবস্ক্রিপশন প্রয়োজন এমন সামগ্রী প্রেরণের পরে, এক্সচেঞ্জটি আপডেট হওয়া ডেটা প্রোগ্রামটিতে প্রেরণ করে, প্রতিবার পুনরায় অ্যাক্সেস করার প্রয়োজন হয় না, তাই আরও দক্ষ।
FMZ কোয়ান্টাম ট্রেডিং প্ল্যাটফর্মটি বিভিন্ন এক্সচেঞ্জের REST ইন্টারফেসকে প্যাকেজ করে, একটি ইউনিফাইড পদ্ধতিতে কল এবং ডেটা ফর্ম্যাট ব্যবহার করে, যা কৌশলগুলিকে আরও সহজ এবং সাধারণ করে তোলে। FMZ প্ল্যাটফর্মটি ওয়েবসকেটকে সমর্থন করে, যা পরবর্তী টিউটোরিয়ালে বিস্তারিতভাবে বর্ণনা করা হবে।
বিভিন্ন প্রোগ্রামিং ভাষা
এফএমজেড প্ল্যাটফর্ম এপিআই ডকুমেন্টেশনের বেশিরভাগ উদাহরণ জাভাস্ক্রিপ্টের উপর ভিত্তি করে, তবে প্যাকেজিংয়ের কারণে, বিভিন্ন ভাষার মধ্যে প্রায় কোনও পার্থক্য নেই, কেবল ব্যাকরণগত সমস্যার দিকে মনোযোগ দেওয়া দরকার। C ++ কিছুটা বিশেষ, পরবর্তী টিউটোরিয়ালগুলিতে বিশেষ ভূমিকা থাকবে। Js তুলনামূলকভাবে সহজ এবং সামঞ্জস্যের সমস্যা নেই, তাই নতুনদের ব্যবহারের পরামর্শ দেওয়া হয়। এফএমজেড কোয়ান্টেশন প্ল্যাটফর্ম সম্পূর্ণ পাইথন সমর্থন করে, বিভিন্ন প্যাকেজগুলি অবাধে ইনস্টল করা যায় এবং কিছু প্রোগ্রামিং বেসিক ব্যবহারের পরামর্শ দেওয়া হয়।
Python এর বিভিন্ন সংস্করণ রয়েছে, তাই এটি প্রোগ্রামের শুরুতে নির্দিষ্ট করা যেতে পারে, যেমন#!Python2,#!Python3❚ নোট করুন যে জাভাস্ক্রিপ্ট সম্প্রতি ইএস 6 ব্যাকরণ আপগ্রেড করেছে, আগ্রহীরা এটি জানতে পারেন। নীচে একই ফাংশনগুলির জন্য পাইথন এবং জাভাস্ক্রিপ্ট কোড প্রদর্শিত হয়েছে, কেবল ব্যাকরণগত পার্থক্য রয়েছে, সুতরাং এপিআই ডকুমেন্টেশনটি কেবল জাভাস্ক্রিপ্টের উদাহরণ দেয়। এই টিউটোরিয়ালটি পাইথনের বিশেষ ব্যবহারের ক্ষেত্রেও কাজ করবে ❚
#python代码
def main():
while True:
Log(exchange.GetAccount().Balance)
Sleep(2000)
#相应的Js代码
function main(){
while(true){
Log(exchange.GetAccount().Balance)
Sleep(2000)
}
}
তথ্যসূত্র
- এফএমজেড প্ল্যাটফর্ম এপিআই ডকুমেন্টেশন, এই টিউটোরিয়ালটি প্রতিটি ইন্টারফেস সম্পর্কে বিস্তারিতভাবে আলোচনা করবে না, এই ডকুমেন্টেশনটি দেখুনঃ https://www.fmz.com/api
- আপনি যদি ট্রেডিংভিউয়ের সিগন্যাল পেতে চান, তাহলে FMZ-এ ট্রেডিং করতে চাইলে এই নিবন্ধটি দেখুনঃ https://www.fmz.com/digest-topic/5533
- জাভাস্ক্রিপ্ট, পাইথন দ্রুত শুরু, সহজ কৌশল লিখতে জটিল ব্যাকরণ প্রয়োজন হয় না, শুধুমাত্র কিছু মৌলিক ধারণা মাস্টার প্রয়োজন, আপনি প্রোগ্রামিং শিখতে পারেন, এই টিউটোরিয়ালটি শেখার সময়ঃ https://www.fmz.com/bbs-topic/382 https://www.fmz.com/bbs-topic/417
- ম্যাক ভাষায় ডকুমেন্টেশন, ট্রেন্ডিং কৌশলগুলির জন্য ম্যাক ভাষায়ও সুবিধাজনক।
- একটি C++ কলের উদাহরণ, C++ সম্পর্কে আগ্রহীরা দেখতে পারেন, কিন্তু এটি একটি ব্যাখ্যামূলক ভাষা নয়, ডিবাগ করা কঠিন, এটি ব্যবহারের জন্য সুপারিশ করা হয় নাঃhttps://www.fmz.com/strategy/61533
- নেটইজ ক্লাউড ক্লাসরুমের ডিজিটাল মুদ্রার পরিমাণগত লেনদেনের কোর্স, এফএমজেড অফিসিয়াল পণ্য, মাত্র ২০ ইউয়ান, বিষয়বস্তু বিশদভাবে সমৃদ্ধ, হালকা থেকে গভীর, নতুনদের জন্য উপযুক্তকোর্সের লিংক
- কিছু শিক্ষণ কৌশল, প্রাথমিক শিক্ষার জন্য উপযুক্ত, যখন আপনি প্রাথমিক বর্ধিতকরণ কৌশল শিখছেনঃhttps://www.fmz.com/square/s:tag:教学/1
- কৌশল সম্পর্কে বিস্তারিত কোড বিবরণঃ https://www.fmz.com/bbs/s:tag: %E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/1
ডিবাগিং টুল
FMZ কোয়ান্টাম প্ল্যাটফর্মটি API ইন্টারফেসটি ডিবাগ করার জন্য একটি ডিবাগিং সরঞ্জাম সরবরাহ করে,https://www.fmz.com/m/debug 。 ডিবাগিং সরঞ্জামটি কেবল জাভাস্ক্রিপ্ট সমর্থন করে, এটি কেবলমাত্র একটি সময়কালের জন্য চালানো যেতে পারে, কোনও রিয়েল-টাইম তৈরি না করে এক্সচেঞ্জ ইন্টারফেসটি ডিবাগ করা যেতে পারে。 রিটার্নের ডেটা ফলাফল হিসাবে ফিরে আসবে, ডিবাগিং সরঞ্জামের কোড সংরক্ষণ করা হবে না。 এই টিউটোরিয়ালটি শেখার সময়, আপনি একই সাথে ডিবাগিং সরঞ্জামটি ব্যবহার করে পরীক্ষা করতে পারেন。

কৌশলগত প্রোগ্রাম আর্কিটেকচার
নীতিমালাগুলির মতোই, কোডের ক্রম অনুসারে কার্যকর করার জন্য একটি প্রধান ফাংশন থাকা আবশ্যক। যেহেতু কৌশলগুলি অবিচ্ছিন্নভাবে চলতে হবে, তাই সাধারণত একটি চক্রের সাথে ঘুমের সময় প্রয়োজন। যেহেতু সমস্ত লেনদেনের এপিআই অ্যাক্সেসের ফ্রিকোয়েন্সি সীমাবদ্ধ, তাই ঘুমের সময়টি সামঞ্জস্য করতে হবে। এই আর্কিটেকচারটি সাধারণত স্থির বিরতিতে কার্যকর করা হয়। ওয়েবসকটও ব্যবহার করা যেতে পারে ইভেন্ট-চালিত কৌশল লেখার জন্য, যেমন গভীরতা পরিবর্তন হলে তাৎক্ষণিকভাবে কার্যকর করা হবে, যা অগ্রগতি টিউটোরিয়ালে উপস্থাপিত হবে।
অন্যান্য বিশেষ ফাংশন নিম্নরূপঃ
- onexit ((() স্বাভাবিক প্রস্থান কুলুঙ্গি কুলুঙ্গি ফাংশন, সর্বোচ্চ 5 মিনিটের জন্য, যদি সময় অতিক্রম করা হয় তবে একটি interrupt ত্রুটি রিপোর্ট করা হবে। প্রস্থান প্রক্রিয়ার সময় কিছু ফলাফল সংরক্ষণ করা যেতে পারে।
- onerror() অপ্রত্যাশিত হিসাবে ফাংশন থেকে প্রস্থান করুন, সর্বোচ্চ 5 মিনিটের জন্য, ঘোষণা করা যাবে না।
- init (() একটি প্রারম্ভিককরণ ফাংশন হিসাবে, নীতি প্রোগ্রামটি স্বয়ংক্রিয়ভাবে চালানোর সময় ডাকা হয়, তবে ঘোষণা করা যায় না।
function onTick(){
var ticker = exchange.GetTicker()
var account = exchange.GetAccount()
//在这里写策略逻辑,将会每6s调用一次
}
function main(){
while(true){
onTick()
Sleep(6000)
}
}
পূর্ববর্তী উদাহরণে যদি নেটওয়ার্ক অ্যাক্সেসের ত্রুটিটি সরাসরি নীতিটি বন্ধ করতে পারে, যদি আপনি এমন একটি নীতি চান যা স্বয়ংক্রিয় পুনরায় চালু না হয়, তবে আপনি রিয়েল-ডিস্ক নীতিটি ব্যবহার করতে পারেন try catch ত্রুটি-সহিষ্ণু প্রধান চক্র (ব্যাকআপ ব্যবহার করবেন না) । অবশ্যই, কেবলমাত্র যখন নীতিটি স্থিতিশীল থাকে তখনই এই অপারেশনটি সুপারিশ করা উচিত, অন্যথায় সমস্ত ত্রুটিগুলি রিপোর্ট করা হবে না, কৌশলটির সমস্যাগুলি নির্ণয় করা কঠিন।
function onTick(){
var ticker = exchange.GetTicker()
var account = exchange.GetAccount()
//在这里写策略逻辑,将会每6s调用一次
}
function main(){
try{
while(true){
onTick()
Sleep(6000)
}
}catch(err){
Log(err)
}
}
এক্সচেঞ্জ এপিআই
এক্সচেঞ্জ এবং ট্রেডিং জোড়া সেটআপ
যেকোনো এক্সচেঞ্জের সাথে সম্পর্কিত API-কে কল করার সময়, এক্সচেঞ্জ এবং লেনদেনের জোড়া নির্দিষ্ট করা প্রয়োজন।exchangeযেমনঃexchange.GetTicker()এই এক্সচেঞ্জ-এ ট্রেডিং জোড়ার ট্রেডিং টিকারটি পাওয়া যাবে।
FMZ প্ল্যাটফর্ম একই সময়ে একাধিক এক্সচেঞ্জ-ট্রেডিং জোড়া যোগ করার জন্য সমর্থন করে, যেমন একই এক্সচেঞ্জ অ্যাকাউন্টের বিটিসি এবং ইটিএইচ একই সাথে পরিচালনা করা যায়। নোট করুন যে একই এক্সচেঞ্জের বিভিন্ন অ্যাকাউন্ট একই সাথে যুক্ত করা যেতে পারে, এগুলি FMZ ওয়েবসাইটে যুক্ত লেবেলের ভিত্তিতে পৃথক করা হয়। যখন একাধিক এক্সচেঞ্জ-ট্রেডিং জোড়া থাকে, তখন ব্যবহার করা হয়exchangesএকটি অ্যারেকে বলা হয়, যা একটি রিয়েল ডিস্ক তৈরির ক্রম অনুসারে যোগ করা হয়।exchanges[0]、exchanges[1]... এবং এইভাবে, লেনদেনের ফর্ম্যাটটি হলBTC_USDTবিটিসি হল লেনদেনের মুদ্রা এবং ইউএসডিটি হল মূল্য নির্ধারণের মুদ্রা।
স্পষ্টতই, যদি আমরা অনেকগুলি লেনদেনের জোড়া নিয়ে কাজ করি তবে এই পদ্ধতিটি খুব ঝামেলার কারণ হতে পারে, তবে সেট কারেন্সি ব্যবহার করে লেনদেনের জোড়া পরিবর্তন করা যেতে পারে, যেমনexchange.SetCurrency("BTC_USDT")এই সময়ে,exchangeএই ক্ষেত্রে, আপনি যে জোড়াটি বন্ধন করেছেন তাBTC_USDTএই বার্তায় বলা হয়েছে যে, "অনুসন্ধানের পর, এই বার্তাটি কার্যকর থাকবে।নোট করুন যে পুনরাবৃত্তিমূলক ট্রান্সফার জোড়া সমর্থন করেএখানে একটি উদাহরণ দেওয়া হল।
var symbols = ["BTC_USDT", "LTC_USDT", "EOS_USDT", "ETH_USDT"]
var buyValue = 1000
function main(){
for(var i=0;i<symbols.length;i++){
exchange.SetCurrency(symbols[i])
var ticker = exchange.GetTicker()
var amount = _N(buyValue/ticker.Sell, 3)
exchange.Buy(ticker.Sell, amount)
Sleep(1000)
}
}
পাবলিক ইন্টারফেস
উদাহরণস্বরূপ, ট্রেডিং ইন্টারফেসগুলি সাধারণত সর্বজনীন ইন্টারফেস হয়, যা সকলের জন্য উপলব্ধ। সাধারণ ট্রেডিং ইন্টারফেসগুলি হ'লঃ ট্রেডিং টিকার, গভীরতা গভীরতা, কে লাইন রেকর্ডস এবং লেনদেনের রেকর্ড ট্রেড। ট্রেডিং কৌশলটি ট্রেডিংয়ের বিচার করার ভিত্তি। নীচে একের পর এক উপস্থাপন করা হয়েছে, ডিবাগিং সরঞ্জামগুলিতে নিজেরাই চেষ্টা করা ভাল, বিস্তারিত ব্যাখ্যা প্রয়োজন এপিআই ডকুমেন্টেশন দেখুন।
ইন্টারফেস সাধারণত আছেInfoক্ষেত্র, যা এক্সচেঞ্জ দ্বারা ফেরত আসা মূল তথ্য স্ট্রিংকে নির্দেশ করে, যা অতিরিক্ত তথ্যের জন্য ব্যবহার করা যেতে পারে, যা আগে পার্স করা প্রয়োজন, জাভাস্ক্রিপ্ট ব্যবহার করেJSON.parse()পাইথন json লাইব্রেরি ব্যবহার করে।Timeএই ক্ষেত্রটি অনুরোধের সময়সীমা নির্দেশ করে, যা বিলম্বিত হওয়ার জন্য ব্যবহার করা যেতে পারে।
রিয়েল-ডিস্কে এপিআই ইন্টারফেস ব্যবহার করে অ্যাক্সেস ব্যর্থ হয়ে ফিরে আসতে পারেnullপাইথন ফিরে এসেছে।None, এর মধ্যে থাকা ডেটা ব্যবহার করলে ত্রুটি দেখা দেয় এবং রিয়েল ডিস্ক বন্ধ হয়ে যায়, তাই ত্রুটি-সহনশীলতা অত্যন্ত গুরুত্বপূর্ণ ৷ এই টিউটোরিয়ালটি আলাদাভাবে এটি সম্পর্কে আলোচনা করবে ৷
GetTicker
বাজারের বর্তমান অবস্থা পেতে, সম্ভবত সবচেয়ে বেশি ব্যবহৃত ইন্টারফেস, আপনি সর্বশেষ লেনদেনের মূল্য, ক্রয়-বিক্রয় মূল্য, সাম্প্রতিক লেনদেনের পরিমাণ ইত্যাদি তথ্য পেতে পারেন। অর্ডার দেওয়ার আগে, আপনি টিকার তথ্যের ভিত্তিতে লেনদেনের মূল্য নির্ধারণ করতে পারেন। একটি বাস্তব ফেরতের উদাহরণ{"Info:{}, "High":5226.69, "Low":5086.37,"Sell":5210.63, "Buy":5208.5, "Last":5208.51, "Volume":1703.1245, "OpenInterest":0, "Time":1554884195976}。
function main() {
var ticker = exchange.GetTicker()
Log(ticker) //在调试工具中 return ticker 。可以看到具体的结果。
Log('上次成交价: ',ticker.Last, '买一价: ', ticker.Buy)
}
GetDepth
যদিও GetTicker-এ ক্রয় ও বিক্রয় সম্পর্কিত গভীর তথ্য রয়েছে, তবে আপনি যদি আরও গভীরভাবে অনুসন্ধান করতে চান তবে আপনি এই ইন্টারফেসটি ব্যবহার করতে পারেন, আপনি সাধারণত পরবর্তী 200 টি হ্যাং লিস্ট দেখতে পাবেন। আপনি এই ইন্টারফেসটি ব্যবহার করে আঘাতের দাম গণনা করতে পারেন। নীচে একটি সত্যিকারের প্রত্যাবর্তন ফলাফল রয়েছে।
{
"Info":null,
"Asks":[
{"Price":5866.38,"Amount":0.068644},
{"Price":5866.39,"Amount":0.263985},
......
]
"Bids":[
{"Price":5865.13,"Amount":0.001898},
{"Price":5865,"Amount":0.085575},
......
],
"Time":1530241857399
}
উদাহরণস্বরূপঃ
function main() {
var depth = exchange.GetDepth()
Log('买一价个: ', depth.Bids[0].Price, '卖一价格: ', depth.Asks[0].Price)
}
GetRecords
K লাইন, সবচেয়ে বেশি ব্যবহৃত ইন্টারফেসগুলির মধ্যে একটি, যা একসাথে দীর্ঘ সময়ের মূল্যের তথ্য ফেরত দেয়, বিভিন্ন সূচকের ভিত্তি গণনা করে। K লাইন চক্রটি যদি নির্দিষ্ট না করা হয় তবে ডিফল্ট চক্রটি ব্যবহার করা হবে যখন শারীরিক ডিস্ক যুক্ত করা হবে। K লাইন দৈর্ঘ্যটি নির্দিষ্ট করা যায় না, যা সময়ের সাথে সাথে ক্রমাগত বৃদ্ধি পায়, সর্বোচ্চ 2000 রুট, প্রথমবারের জন্য প্রায় 200 রুট (বিভিন্ন এক্সচেঞ্জগুলি ফেরত দেয়) । শেষ K লাইনটি সর্বশেষতম K লাইন, তাই ডেটা ক্রমাগত পরিবর্তিত হয়, প্রথম K লাইনটি সবচেয়ে পুরানো ডেটা।
**exchange.SetMaxBarLen(Len)প্রথমবারের জন্য K-লাইন কমানোর জন্য একটি সেট করা যেতে পারে (কিছু এক্সচেঞ্জ দ্বারা সমর্থিত) এবং সর্বোচ্চ K-লাইন কমানোর জন্য একটি সেট করা যেতে পারে।**যেমনঃexchange.SetMaxBarLen(500)
GetRecords সময়কাল নির্ধারণ করতে পারেঃ PERIOD_M1:1 মিনিট, PERIOD_M5:5 মিনিট, PERIOD_M15:15 মিনিট, PERIOD_M30:30 মিনিট, PERIOD_H1:1 ঘন্টা, PERIOD_D1:1 দিন।exchange.GetRecords(PERIOD_M1)。 সর্বশেষ হোস্ট আপগ্রেড করার পরে, কাস্টম চক্র সমর্থন করা হবে, চক্রের সেকেন্ডগুলি সরাসরি প্যারামিটার হিসাবে প্রেরণ করা হবে, মিনিটের স্তরের কাস্টমাইজেশন 1 মিনিটের K লাইন অনুসারে সংশ্লেষিত হবে, 1 মিনিটের নীচে K লাইন GetTrades ((() দ্বারা সংশ্লেষিত হবে, পণ্য ফিউচারগুলি টিকের উপর ভিত্তি করে সংশ্লেষিত হবে,。এই টিউটোরিয়ালের অন্যান্য অংশেও একই রকম ঘটনা ঘটতে পারে।PERIOD_M1এই ধরনের পূর্ণবর্ণিত ভেরিয়েবল, যা FMZ এর ডিফল্ট গ্লোবাল ভেরিয়েবল, আগ্রহীরা তাদের নির্দিষ্ট মানগুলি লগ করতে পারেন, যা সাধারণত সরাসরি ব্যবহার করা হয়।
রিটার্ন ডেটা উদাহরণঃ
[
{"Time":1526616000000,"Open":7995,"High":8067.65,"Low":7986.6,"Close":8027.22,"Volume":9444676.27669432},
{"Time":1526619600000,"Open":8019.03,"High":8049.99,"Low":7982.78,"Close":8027,"Volume":5354251.80804935},
{"Time":1526623200000,"Open":8027.01,"High":8036.41,"Low":7955.24,"Close":7955.39,"Volume":6659842.42025361},
......
]
উদাহরণস্বরূপঃ
function main(){
var close = []
var records = exchange.GetRecords(PERIOD_H1)
Log('total bars: ', records.length)
for(var i=0;i<records.length;i++){
close.push(records[i].Close)
}
return close
}
GetTrades
নির্দিষ্ট সময়সীমার জন্য লেনদেনের তথ্য পেতে (নিজের লেনদেনের তথ্য নয়), কিছু এক্সচেঞ্জ এটি সমর্থন করে না। এটি তুলনামূলকভাবে অস্বাভাবিক, এপিআই ডকুমেন্টেশনে বিস্তারিত তথ্য অনুসন্ধান করা যেতে পারে।
অ্যাকাউন্টের মাধ্যমে লেনদেন করুন
এই ইন্টারফেসগুলি অ্যাকাউন্টের সাথে সম্পর্কিত এবং সরাসরি অ্যাক্সেস করা যায় না, এপিআই-কি স্বাক্ষর ব্যবহার করা প্রয়োজন। এফএমজেড প্ল্যাটফর্মটি ব্যাকগ্রাউন্ডে ইউনিফাইড স্বয়ংক্রিয়ভাবে পরিচালিত হয়েছে এবং সরাসরি ব্যবহার করা যেতে পারে।
GetAccount অ্যাকাউন্ট পেতে
অ্যাকাউন্টের তথ্য পেতে. সবচেয়ে বেশি ব্যবহৃত ইন্টারফেসগুলির মধ্যে একটি, যাতে ব্যালেন্সের অভাব না হয়, অর্ডার দেওয়ার আগে এটি কল করতে হবে। ফলাফলগুলি হলঃ{"Stocks":0.38594816,"FrozenStocks":0,"Balance":542.858308,"FrozenBalance":0,"Info":{}}☞ যেখানে স্টকস হল ট্রেডিং জোড়ার ট্রেডিং মুদ্রার উপলব্ধ ব্যালেন্স, FrozenStocks হল অব্যবহৃত অর্ডারের হিমায়িত ব্যালেন্স, Balance হল মূল্য নির্ধারণের মুদ্রার উপলব্ধ ব্যালেন্স, FrozenBalance হল হিমায়িত ব্যালেন্স।BTC_USDTস্টক মানে বিটিসি, ব্যালেন্স মানে ইউএসডিটি।
নোট করুন যে রিটার্নের ফলাফলটি নির্দিষ্ট লেনদেনের জোড়ার ফলাফল, লেনদেনের অ্যাকাউন্টের অন্যান্য মুদ্রার তথ্য ইনফো ফিল্ডে রয়েছে, একাধিক লেনদেনের জোড়া পরিচালনা করার জন্য একাধিকবার কল করার দরকার নেই।
একটি ক্রমাগত প্রিন্ট করা বর্তমান লেনদেনের জোড়ার মোট মূল্যের একটি বাস্তব ডিস্কঃ
function main(){
while(true){
var ticker = exchange.GetTicker()
var account = exchange.GetAccount()
var price = ticker.Buy
var stocks = account.Stocks + account.FrozenStocks
var balance = account.Balance + account.FrozenBalance
var value = stocks*price + balance
Log('Account value is: ', value)
LogProfit(value)
Sleep(3000)//sleep 3000ms(3s), A loop must has a sleep, or the rate-limit of the exchange will be exceed
//when run in debug tool, add a break here
}
}
Buy এর অধীনে কিনুন
নিচের চার্জগুলোতে কল করুনঃexchange.Buy(Price, Amount)অথবাexchange.Buy(Price, Amount, Msg),Price হল মূল্য, Amount হল পরিমাণ,Msg হল একটি অতিরিক্ত স্ট্রিং যা রিয়েল-ডিস্ক লগগুলিতে প্রদর্শিত হতে পারে, তবে এটি বাধ্যতামূলক নয়। এই পদ্ধতিটি হ'ল আদেশের জন্য, যদি তাৎক্ষণিকভাবে সম্পূর্ণরূপে সম্পন্ন না হয় তবে এটি একটি অর্ডার তৈরি করে যা অবিলম্বে সম্পন্ন হয় না, অর্ডারটি সফলভাবে অর্ডার আইডি হিসাবে ফিরে আসে, ব্যর্থ হয়null, অর্ডার স্ট্যাটাস জানতে ব্যবহৃত হয়।
Price হল -1, Amount হল অর্ডার ভ্যালু, যেমনexchange.Buy(-1, 0.5)লেনদেন ঠিক আছেETH_BTC০.৫ বিটিসি-র ইটিএইচ কেনার জন্য ০.৫ বিটিসি-র বাজার মূল্যের প্রতিনিধিত্ব করে। কিছু এক্সচেঞ্জ বাজার মূল্য তালিকা এবং ফিউচার রিটার্নিং সমর্থন করে না।
সমস্ত দাম এবং পরিমাণের জন্য সঠিকতা প্রয়োজন, অংশে লেনদেন উপলব্ধ_N()সঠিকতা ফাংশন কন্ট্রোল করার জন্য। ফরওয়ার্ড ট্রেডিংয়ের জন্য Buy এবং Sell এর অতিরিক্ত অর্থ রয়েছে, যা আলাদাভাবে বর্ণনা করা হবে।
একটি উদাহরণ, যেখানে আপনি একই দামে কিনতে পারেনঃ
function main(){
while(true){
var ticker = exchange.GetTicker()
var price = ticker.Sell
if(price >= 7000){
exchange.Buy(_N(price+5,2), 1, 'BTC-USDT')
break
}
Sleep(3000)//Sleep 3000ms
}
Log('done')
}
বিক্রয় বিক্রয়
নিম্ন বিক্রয় কার্ড. প্যারামিটার এবং Buy একই. বাজার মূল্য কার্ডের প্যারামিটার অর্থ ভিন্ন, বাজার মূল্য বিক্রয় কার্ড যেমনexchange.Sell(-1, 0.2), যার অর্থ ০.২ ইটিএইচ।
GetOrder অর্ডার পেতে
অর্ডার আইডি থেকে অর্ডার তথ্য পেতে। সাধারণ ইন্টারফেস, কল পদ্ধতিexchange.GetOrder(OrderId),OrderId হল অর্ডার আইডি, যা অর্ডার দেওয়ার সময় ফেরত দেওয়া হয়।**অর্ডারের ধরন লক্ষ্য করুনTypeফিল্ড এবং অর্ডার অবস্থাStatusপ্রকৃত মানগুলি সংখ্যাযুক্ত, যা বিভিন্ন অর্থের প্রতিনিধিত্ব করে, তবে স্মৃতিশক্তির পক্ষে অনুকূল নয়, এফএমজেড এই মানগুলিকে বিশ্বব্যাপী ধ্রুবক হিসাবে প্রতিনিধিত্ব করে, যেমন অর্ডার না দেওয়া অর্ডারStatusএর মান 0।ORDER_STATE_PENDING, এই সমস্ত গ্লোবাল কনস্ট্যান্টগুলি ডকুমেন্টেশনে পাওয়া যাবে।**◦ ফলাফল ফেরত দিনঃ
{
"Id":125723661, //订单id
"Amount":0.01, //订单数量
"Price":7000, //订单价格
"DealAmount":0, //已成交数量
"AvgPrice":0, //成交均价
"Status":0, // 0:未完全成交, 1:已成交, 2:已撤单
"Type":1,// 订单类型,0:买单, 1:卖单
"ContractType":"",//合约类型,用于期货交易
"Info":{} //交易所返回原始信息
}
}
একটি নির্দিষ্ট সংখ্যক কয়েন কেনার কৌশলঃ
function main(){
while(true){
var amount = exchange.GetAccount().Stocks
var ticker = exchange.GetTicker()
var id = null
if(5-amount>0.01){
id = exchange.Buy(ticker.Sell, Math.min(5-amount,0.2))
}else{
Log('Job completed')
return //return the main function, bot will stop
}
Sleep(3000) //Sleep 3000ms
if(id){
var status = exchange.GetOrder(id).Status
if(status == 0){ //这里也可以用 status == ORDER_STATE_PENDING 来判断。
exchange.CancelOrder(id)
}
}
}
}
GetOrders অর্ডার জমা দেয়নি
GetOrder-এর মত অর্ডার লিস্টের নির্দিষ্ট ফলাফল।
উদাহরণস্বরূপ, যদি আপনি একটি অর্ডার বাতিল করে দেন, তবে সমস্ত অর্ডারের জন্য বর্তমান লেনদেন বাতিল করুনঃ
function CancelAll(){
var orders = exchange.GetOrders()
for(var i=0;i<orders.length;i++){
exchange.CancelOrder(orders[i].Id) // cancel order by orderID
}
}
function main(){
CancelAll()
while(true){
//do something
Sleep(10000)
}
}
অর্ডার বাতিল করুন
অর্ডার id অনুযায়ী অর্ডার বাতিল করুনexchange.CancelOrder(OrderId)☞ প্রত্যাহার সফল true, অন্যথায় false ☞ লক্ষ্য করুন যে অর্ডার সম্পূর্ণরূপে অর্ডার করা হয়েছে। ব্যর্থতা প্রত্যাহার করবে ☞
ফরচার্ড এবং স্থায়ী চুক্তি
ডিজিটাল মুদ্রা ফিউচার ট্রেডিং এবং ক্যাশ ট্রেডিং থেকে কিছুটা আলাদা, উপরের ক্যাশ ট্রেডিংয়ের ফাংশনটি ফিউচার, একক ফিউচার ট্রেডিংয়ের জন্যও প্রযোজ্য। ডিজিটাল মুদ্রা ফিউচার প্রোগ্রামিং ট্রেডিং করার আগে, ওয়েবসাইটটিতে ম্যানুয়াল অপারেশন সম্পর্কে পরিচিত হওয়া উচিত এবং মৌলিক ধারণাগুলি বুঝতে হবে, যেমন পজিশন খোলার, পজিশনিং, পজিশনিং, পজিশনিং, পজিশনিং, লিভারেজ, পজিশনিং ক্ষতি, ফ্লোটিং রিটার্নস, ওয়ারেন্টি ইত্যাদির মতো ধারণাগুলি এবং সংশ্লিষ্ট গণনা সূত্র। প্রতিটি ফিউচার এক্সচেঞ্জে প্রাসঙ্গিক টিউটোরিয়াল পাওয়া যায়, নিজেরাই শিখতে হবে।
ফরমেট কন্ট্রাক্টের সাথে ফরওয়ার্ড কন্ট্রাক্টের সাদৃশ্য রয়েছে, তবে একই সময়ে একাধিক খালি থাকার ধারণা নেই।
যদি এক্সচেঞ্জ একই সাথে ফরোয়ার্ড-অ্যাশকে সমর্থন করে, যেমন OKEX এবং Huobi ফরোয়ার্ড, তাহলে এক্সচেঞ্জের ইন্টারফেসে আলাদাভাবে OKEX ফরোয়ার্ড কার্টন এবং Huobi ফরোয়ার্ড কার্টন যুক্ত করতে হবে, যা FMZ-এ ফরোয়ার্ড-অ্যাশের চেয়ে আলাদা এক্সচেঞ্জ হিসাবে বিবেচিত হবে।
SetContractType চুক্তি সেট করুন
ফিউচার ট্রেডিংয়ের প্রথম ধাপটি হ'ল ট্রেডিংয়ের জন্য চুক্তিটি সেট করা, উদাহরণস্বরূপ, ওকেএক্স ফিউচার, রিয়েল-টাইম বা পুনরাবৃত্তি তৈরি করার সময় বিটিসি ট্রেডিং জোড়া নির্বাচন করুন, কোডে এটি সেট করতে হবে যে এই সপ্তাহ, পরের সপ্তাহ বা ত্রৈমাসিক চুক্তি। যদি সেট না করা হয় তবে জিজ্ঞাসা করা হবেinvalid contract type。**ক্যাশ ট্রেডিং জোড়ার বিপরীতে, ফিউচার কন্ট্রাক্টগুলি প্রায়শই বিটিসির মতো ট্রেডিং-ট্রেডিং মুদ্রার সাথে জামানত হয়। বিটিসি-তে যুক্ত বিটিসি সাধারণত বিটিসি-তে জামানতযুক্ত বিটিসি_ইউএসডি ট্রেডিং জোড়ার প্রতিনিধিত্ব করে। যদি ইউএসডিটি-তে জামানতযুক্ত ফিউচার থাকে, তবে একটি বাস্তব ডিস্ক তৈরি করতে হবে যা বিটিসি_ইউএসডিটি ট্রেডিং জোড়া যুক্ত করবে। যেমন মুদ্রা ওকেএক্স ফিউচারগুলি একই সাথে মুদ্রা বেস এবং ইউএসডিটি বেস পুনর্নবীকরণের প্রয়োজন।**ট্রেডিং জোড়া সেট করার পরে, নির্দিষ্ট ধরনের চুক্তি যেমন স্থায়ী, সাপ্তাহিক, পরবর্তী ইত্যাদি সেট করতে হবে। চুক্তিটি সেট করার পরে, ক্রয়-বিক্রয় এবং অন্যান্য ক্রিয়াকলাপের ব্যবস্থা করা যেতে পারে।
বিটকয়েন, ওকেএক্স, হুওবিডিএম ইত্যাদির মধ্যে বিটকয়েন এবং ইউএসডিটি-ভিত্তিক চুক্তি রয়েছে। এই চুক্তিগুলিকে একটি নির্দিষ্ট সেটিং যোগ করার সময় পার্থক্য করা প্রয়োজন।
//OKEX期货
exchange.SetContractType("swap") // 设置为永续合约
exchange.SetContractType("this_week") // 设置为当周合约
exchange.SetContractType("next_week") // 设置为次周合约
exchange.SetContractType("quarter") // 设置为季度合约
//HuobiDM
exchange.SetContractType("this_week") // 设置为当周合约
exchange.SetContractType("next_week") // 设置为次周合约
exchange.SetContractType("quarter") // 设置为季度合约
exchange.SetContractType("swap") // 设置为永续合约
//币安期货
exchange.SetContractType("swap") // 设置为永续合约,注意币本位和USDT本位都存在永续
exchange.SetContractType("quarter") // 设置为当季合约
exchange.SetContractType("next_quarter") // 设置为次季合约
//BitMEX
exchange.SetContractType("XBTUSD") // 设置为永续合约
exchange.SetContractType("XBTM19") // 具体某个时间结算的合约,详情登录BitMEX查询各个合约代码
//GateIO
exchange.SetContractType("swap") // 设置为永续合约,不设置默认为swap永续合约。
//Deribit
exchange.SetContractType("BTC-27APR18") // 具体某个时间结算的合约,详情参看Deribit官网。
GetPosition পজিশন ধারণ
বর্তমান হোল্ডিং তথ্যের একটি তালিকা পেতে, OKEX ((OKCOIN) ফরচার্ডগুলি একটি প্যারামিটার পাস করতে পারে, যা প্রাপ্ত করার জন্য চুক্তির ধরন নির্দিষ্ট করে। যদি কোনও হোল্ডিং না থাকে তবে খালি তালিকাটি ফিরে আসে[]☞ হোল্ডিং রিটার্নের তথ্য নিম্নরূপ, এখানে অনেক তথ্য রয়েছে, যার জন্য ট্রেডিং-এর বিশ্লেষণ প্রয়োজন।
| ডাটা টাইপ | পরিবর্তনশীল নাম | চিত্রিত করা |
|---|
"Object HDID Info HDID এক্সচেঞ্জ দ্বারা প্রত্যাবর্তিত প্রাথমিক কাঠামো"
<unk>number <unk>Margin <unk>Level <unk>দরজা <unk>দরজা আকার <unk>OKCoin <unk>10 অথবা <unk>20, <unk>OK ফিউচার <unk>ফোরক্লোজ মোড <unk>ফিক্সড <unk>10 ফেরত দেয়, কারণ নেটিভ API সমর্থন করে না <unk>
"number" অর্থ হল "Amount" অর্থ হল "হোল্ডিং", "OKCoin" অর্থ হল "কন্ট্রাক্টের শেয়ারের সংখ্যা" (একটি পূর্ণসংখ্যা যা 1 এর চেয়ে বড়)
"number of frozenAmount of frozen storage" "সংখ্যা হিমায়িত পরিমাণ" "সংখ্যা হিমায়িত পরিমাণ"
নাম্বারডাইরেক্টরপ্রাইসডাইরেক্টরডাইরেক্টরহোল্ডারগড়মূল্য
নাম্বার ডেইজ মার্জিন ডেইজ ফ্রিজ গ্যারান্টি
[number] [Profit] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [number] [num
কনস্ট্যান্ট টাইপ ক্যাপিটালাইজেশনের জন্য PD_LONG একাধিক শীর্ষ অবস্থান (CTP-তে closebuy_today প্লেইন), PD_SHORT শূন্য শীর্ষ অবস্থান (CTP-তে closesell_today প্লেইন), (CTP-তে ফরওয়ার্ড) PD_LONG_YD গতকালের একাধিক শীর্ষ অবস্থান (closebuy প্লেইন), PD_SHORT_YD গতকালের শূন্য শীর্ষ অবস্থান (closesell প্লেইন)
string jQueryContractType jQuery ফরেক্স কন্ট্রাক্ট কোড, স্টক এক্সচেঞ্জ কোড_স্টক কোড কোড, নির্দিষ্ট প্যারামিটার SetContractType প্রেরণ টাইপ
function main(){
exchange.SetContractType("this_week");
var position = exchange.GetPosition();
if(position.length>0){ //特别要注意引用前要先判断position长度再引用,否则会出错
Log("Amount:", position[0].Amount, "FrozenAmount:", position[0].FrozenAmount, "Price:",
position[0].Price, "Profit:", position[0].Profit, "Type:", position[0].Type,"ContractType:", position[0].ContractType)
}
}
ফিউচার পজিশন খোলার
প্রথমত, লিভারের আকার নির্ধারণ করতে হবে, এবং কিভাবে এটি কল করতে হবেঃexchange.SetMarginLevel(10)10 মানে 10 গুণ লিভারেজ, লিভারেজ আকারের জন্য, আপনি যদি এই এক্সচেঞ্জের সাথে পরিচিত হন, তাহলে আপনি 10 এর সাথে লিভারেজ আকারের সাথে পরিচিত হতে পারেন।মনে রাখবেন যে লিভারেজটি এক্সচেঞ্জের সাথে সামঞ্জস্যপূর্ণ হওয়া উচিত, অন্যথায় এটি ভুল হতে পারে│ অথবা ডিফল্ট লেভেল ব্যবহার করে │
তারপর ট্রেডের দিকনির্দেশনা সেট করুন, এবং কল করুনঃexchange.SetDirection(Direction) "এটা আমার জন্য অনেক কষ্টের ব্যাপার।**ফরচার্ডের বিপরীতে, যদি স্থায়ী চুক্তিতে একই সাথে শূন্যতার ধারণা না থাকে, অর্থাৎ কোনও একক পজিশন রাখা অনুমোদিত নয়, তবে অতিরিক্ত খালি হওয়ার পরে স্বয়ংক্রিয়ভাবে শূন্য পজিশনটি খালি হয়ে যায়, যা কেবলমাত্র সেট করা দরকারbuyএবংsellউপলব্ধ। যদি দ্বি-মুখী হোল্ডিং সমর্থিত হয় তবে সেটিংস প্রয়োজনclosebuy,closebuy。**বিশেষ সম্পর্কঃ
| অপারেশন | SetDirection এর পরামিতি | নিম্নে অর্ডার ফাংশন |
|---|---|---|
| পজিশন খুলুন | exchange.SetDirection("buy") | exchange.Buy() |
| পিনডো পজিশন | exchange.SetDirection("closebuy") | exchange.Sell() |
| খালি পজিশন | exchange.SetDirection("sell") | exchange.Sell() |
| খালি পজিশন | exchange.SetDirection("closesell") | exchange.Buy() |
অবশেষে, নির্দিষ্ট খোলার এবং খোলার কোড, নিম্নলিখিত আদেশের পরিমাণ বিভিন্ন এক্সচেঞ্জের মধ্যে পরিবর্তিত হয়, যেমন হুবি ফিউচারগুলি সংখ্যার ভিত্তিতে হয়, একটি 100 ডলার। ফিউচার রিটার্নে মনোযোগ দিন যা বাজার মূল্যের তালিকা সমর্থন করে না।
function main(){
exchange.SetContractType("this_week") // 举例设置 为OKEX期货 当周合约
price = exchange.GetTicker().Last
exchange.SetMarginLevel(10) //设置杠杆为10倍
exchange.SetDirection("buy") //设置下单类型为做多
exchange.Buy(price+10, 20) // 合约数量为20下单
pos = exchange.GetPosition()
Log(pos)
Log(exchange.GetOrders()) //查看是否有未成交订单
exchange.SetDirection("closebuy"); //如果是永续合约,直接设置exchange.SetDirection("sell")
exchange.Sell(price-10, 20)
}
নিচে একটি নির্দিষ্ট উদাহরণ দেওয়া হল, যেখানে সম্পূর্ণভাবে পজিশনের জন্য পলিসির ব্যবহার করা হয়েছে।
function main(){
while(true){
var pos = exchange.GetPosition()
var ticker = exchange.GetTicekr()
if(!ticker){
Log('无法获取ticker')
return
}
if(!pos || pos.length == 0 ){
Log('已无持仓')
return
}
for(var i=0;i<pos.length;i++){
if(pos[i].Type == PD_LONG){
exchange.SetContractType(pos[i].ContractType)
exchange.SetDirection('closebuy')
exchange.Sell(ticker.Buy, pos[i].Amount - pos[i].FrozenAmount)
}
if(pos[i].Type == PD_SHORT){
exchange.SetContractType(pos[i].ContractType)
exchange.SetDirection('closesell')
exchange.Buy(ticker.Sell, pos[i].Amount - pos[i].FrozenAmount)
}
}
var orders = exchange.Getorders()
Sleep(500)
for(var j=0;j<orders.length;j++){
if(orders[i].Status == ORDER_STATE_PENDING){
exchange.CancelOrder(orders[i].Id)
}
}
}
}
ডিজিটাল মুদ্রার লিভারেজ
কোডের মধ্যে লিভারেজ অ্যাকাউন্টে স্যুইচ করতে হবে, অন্যটি নগদ লেনদেনের মতোই।
exchange.IO (("trade_margin") ব্যবহার করে অ্যাকাউন্টের মোডে স্যুইচ করুন। অ্যাকাউন্টের সম্পদ অর্ডার করার জন্য অ্যাকাউন্টের লিভারেজ ইন্টারফেসটি অ্যাক্সেস করুন।
exchange.IO (("trade_normal") ব্যবহার করে সাধারণ অ্যাকাউন্ট মোডে ফিরে যান।
সমর্থিত এক্সচেঞ্জঃ
- OKEX V3: লিভারেজ অ্যাকাউন্ট মোডের ট্রেডিং জোড়া সাধারণ থেকে আলাদা, কিছু ট্রেডিং জোড়া নাও থাকতে পারে।
- Bitcoin: লিভারেজ অ্যাকাউন্টের মডেলের ট্রেডিং জোড়া সাধারণের থেকে আলাদা, কিছু ট্রেডিং জোড়া নাও থাকতে পারে।
- ZB: তহবিল QC হিসাবে স্থানান্তরিত হতে পারে, লিভারেজযুক্ত ট্রেডিং প্ল্যাটফর্ম, বিভিন্ন ট্রেডিং জোড়ার মধ্যে তহবিলের স্বাধীনতা, অর্থাৎ ETH_QC ট্রেডিং জোড়ার অধীনে QC মুদ্রার সংখ্যা, যা BTC_QC এ দেখা যায় না
- FCoin
- বিনেন্স
পণ্য ফিউচার ট্রেডিং
কমোডিটি ফিউচার ট্রেডিং এবং ডিজিটাল মুদ্রা ফিউচার ট্রেডিংয়ের মধ্যে একটি বড় পার্থক্য রয়েছে। প্রথমত, কমোডিটি ফিউচারগুলির ট্রেডিংয়ের সময়টি খুব ছোট, ডিজিটাল মুদ্রা 24 ঘন্টা ট্রেড হয়; কমোডিটি ফিউচারগুলির চুক্তিগুলিও সাধারণ REST API নয়; কমোডিটি ফিউচারগুলির ট্রেডিং ফ্রিকোয়েন্সি এবং লিঙ্কের পরিমাণের সীমাবদ্ধতা, ডিজিটাল মুদ্রা খুব নরম, ইত্যাদি। তাই কমোডিটি ফিউচারগুলির অনেকগুলি বিশেষ মনোযোগের প্রয়োজন রয়েছে, সুপারিশ করা হয়েছে যে প্রচুর পরিমাণে ম্যানুয়াল অপারেশন অভিজ্ঞতা রয়েছে। FMZ সিম্নউ ফরচার্ড ফিউচার সিমুলেটর ডিস্ক সমর্থন করে, দেখুনঃ https://www.fmz.com/bbs-topic/325 。 কমোডিটি ফিউচার সংস্থা যোগ করেছেঃ https://www.fmz.com/bbs-topic/371
পণ্য ফরওয়ার্ডগুলি 2019 সালের জুন মাসে প্রয়োগ করা হয়েছিল, ব্যক্তিগত প্রোগ্রামিং ব্যক্তিগত ব্যবহারকারীদের জন্য অ্যাকাউন্ট খোলার জন্য ফিউচারার অ্যাপ্লিকেশন লাইসেন্স কোড ((নির্দিষ্ট আবেদন করার জন্য প্রয়োজনীয় তথ্যের টেম্পলেটটি উইকিমিডিয়া গ্রুপ বা কিউকিউ গ্রুপে প্রেরণ করা যেতে পারে), সাধারণত 4-5 দিন সময় লাগে, ধাপগুলি আরও জটিল। এফএমজেড কোয়ান্টামাইজড প্ল্যাটফর্মটি প্রোগ্রামিং ট্রেডিং সরবরাহকারী হিসাবে বিভিন্ন ফিউচার সার্ভারের কাছে সফ্টওয়্যার লাইসেন্সের জন্য আবেদন করেছে, ব্যবহারকারীরা সরাসরি আবেদন করতে পারবেন না, ফিউচার ফিউচারটি অনুসন্ধান করার জন্য ফরওয়ার্ড ফরওয়ার্ডগুলি অনুসন্ধান করুন। আপনি এফএমজেডের ইতিমধ্যে আবেদন করা তালিকা দেখতে পারেন। নির্দিষ্ট রেফারেন্স পোস্টঃ https://www.fmz.com/bbs-topic/3860 。 আপনার ফিউচারার যদি তালিকায় না থাকে তবে কেবল নিজেরাই আবেদন করতে পারেন, বা ট্রেডিং খোলার ক্ষেত্রে পুনরায় সমর্থন করতে পারেন, সাধারণত 2 দিনের ব্যবসায়ীদের প্রয়োজন। FMZ এবং কিছু ব্যবসায়
এফএমজেড প্ল্যাটফর্মের আর্কিটেকচারের সুবিধার কারণে, ব্যবহারকারীরা একাধিক ফিউচার মার্কেটার অ্যাকাউন্ট যুক্ত করতে পারেন এবং অন্যান্য পণ্য ফিউচার প্রোগ্রামিং ট্রেডিং সফ্টওয়্যার দ্বারা অসম্ভব কিছু কার্যকারিতা সম্পাদন করতে পারেন, যেমন উচ্চ-ফ্রিকোয়েন্সি টিকের সংমিশ্রণ, https://www.fmz.com/bbs-topic/1184
কৌশলগত কাঠামো
প্রথমত, যেহেতু এটি ২৪ ঘণ্টার লেনদেন নয় এবং এর জন্য লগইন অপারেশন প্রয়োজন, তাই লেনদেনের আগে লিঙ্কের অবস্থা নির্ধারণ করা প্রয়োজন।exchange.IO("status")জন্যtrueযদি লগইন সফল না হয় তবে এপিআই কল করুন, 'নট লগইন' জিজ্ঞাসা করবেন না। আপনি কৌশলটি শুরু করার পরে ঘুমাতে পারেন ((2000), লগইন করার জন্য একটি নির্দিষ্ট সময় দিন। আপনি সাবস্ক্রিপশন পুনরায় চেষ্টা করতে পারেন_C(exchange.SetContractType,"MA888")"এটা নিশ্চিত করে যে আমরা সফলভাবে অবতরণ করতে পারব।
পণ্য ফিউচারের প্রাপ্তি এবং লেনদেনের কোডগুলি ডিজিটাল মুদ্রার ফিউচারের সাথে একই, এখানে পার্থক্য এবং মনোযোগের বিষয়গুলি উপস্থাপন করা হবে।
function main(){
_C(exchange.SetContractType,"MA888") //没登陆成功是无法订阅合约的,最好重试一下
while(true){
if(exchange.IO("status")){
var ticker = exchange.GetTicker()
Log("MA888 ticker:", ticker)
LogStatus(_D(), "已经连接CTP !")//_D获取事件
} else {
LogStatus(_D(), "未连接CTP !")
Sleep(1000)
}
}
}
কমোডিটি ফরওয়ার্ডস লাইব্রেরি ট্রেডিং ব্যবহার করার পরামর্শ দেওয়া হচ্ছে (অনুসরণটি পরে দেওয়া হয়েছে) । এই সময়ে কোডটি খুব সহজ হবে, যাতে জটিল বিশদগুলির সাথে মোকাবিলা করার দরকার নেই।
function main() {
// 使用了商品期货类库的CTA策略框架
$.CTA(Symbols, function(st) {
var r = st.records
var mp = st.position.amount
var symbol = st.symbol
/*
r为K线, mp为当前品种持仓数量, 正数指多仓, 负数指空仓, 0则不持仓, symbol指品种名称
返回值如为n:
n = 0 : 指全部平仓(不管当前持多持空)
n > 0 : 如果当前持多仓,则加n个多仓, 如果当前为空仓则平n个空仓,如果n大于当前持仓, 则反手开多仓
n < 0 : 如果当前持空仓,则加n个空仓, 如果当前为多仓则平n个多仓,如果-n大于当前持仓, 则反手开空仓
无返回值表示什么也不做
*/
if (r.length < SlowPeriod) {
return
}
var cross = _Cross(TA.EMA(r, FastPeriod), TA.EMA(r, SlowPeriod));
if (mp <= 0 && cross > ConfirmPeriod) {
Log(symbol, "金叉周期", cross, "当前持仓", mp);
return Lots * (mp < 0 ? 2 : 1)
} else if (mp >= 0 && cross < -ConfirmPeriod) {
Log(symbol, "死叉周期", cross, "当前持仓", mp);
return -Lots * (mp > 0 ? 2 : 1)
}
});
}
সিটিপি ডেটা প্রাপ্তি মোড
পণ্যের ফিউচারগুলি সিটিপি প্রোটোকল ব্যবহার করে, সমস্ত ট্রেডিং এবং অর্ডার লেনদেন কেবলমাত্র পরিবর্তিত হওয়ার পরে অবহিত করা হয়, এবং অর্ডার, অ্যাকাউন্ট এবং হোল্ডিং অনুসন্ধান করা সক্রিয় অনুসন্ধান। তাই ইভেন্ট-চালিত উচ্চ-ফ্রিকোয়েন্সি কৌশলটি লেখার জন্য উপযুক্ত। ডিফল্ট মোড ট্রেডিংয়ের ইন্টারফেস যেমনGetTicker、GetDepth、GetRecordsসমস্ত ডেটা ক্যাশে করা থাকে যাতে সর্বশেষতম তথ্য পাওয়া যায়, ডেটা না থাকলে ডেটা না হওয়া পর্যন্ত অপেক্ষা করা হয়, তাই কৌশলটি ঘুম না করেও ব্যবহার করা যেতে পারে। যখন পরিস্থিতি পরিবর্তিত হয়, টিকার, গভীরতা এবং রেকর্ডগুলি আপডেট করা হয়, তখন যে কোনও ইন্টারফেসটি কল করা হয় তা অবিলম্বে ফিরে আসে, যে ইন্টারফেসটি কল করা হয়েছিল তার অবস্থা আপডেট মোডে অপেক্ষা করা হয়, পরের বার একই ইন্টারফেসটি কল করা হবে, নতুন ডেটা ফিরে আসার জন্য অপেক্ষা করা হবে। কিছু শীতল দরজা চুক্তি বা চুক্তির পতনের পরিস্থিতিতে দীর্ঘ সময়ের জন্য কোনও লেনদেন হবে না, এটি কৌশলটি দীর্ঘ সময়ের জন্য আটকে থাকা স্বাভাবিক।
আপনি যদি চান যে আপনি প্রতিবার আপনার তথ্য পেতে পারেন, এমনকি পুরানো তথ্য, আপনি তাৎক্ষণিক আপডেট মোডে পরিবর্তন করতে পারেন।exchange.IO("mode", 0)❚ এই সময়ে কৌশলটি ইভেন্ট-চালিত হিসাবে লিখতে পারে না, একটি স্লিপ ইভেন্ট যুক্ত করা দরকার, দ্রুত মৃত্যুর চক্র এড়াতে ❚ কিছু কম-ফ্রিকোয়েন্সি কৌশল এই মোডটি ব্যবহার করতে পারে, কৌশলটি সহজভাবে ডিজাইন করা হয়েছে ❚ ব্যবহারexchange.IO("mode", 1)ডিফল্ট ক্যাশে মোডে ফিরে যেতে পারবেন
একক চুক্তি পরিচালনা করার সময়, ডিফল্ট মোডটি ব্যবহার করা যেতে পারে। তবে যদি একাধিক চুক্তি হয় তবে একটি চুক্তি আপডেট না হওয়ার সম্ভাবনা রয়েছে, যার ফলে ক্রিয়াকলাপের ইন্টারফেসটি অবরুদ্ধ হয়ে যায় এবং অন্যান্য চুক্তির ক্রিয়াকলাপ আপডেটগুলিও পাওয়া যায় না। এই সমস্যাটি সমাধান করার জন্য, তাত্ক্ষণিক আপডেট মোড ব্যবহার করা যেতে পারে, তবে উচ্চ-ফ্রিকোয়েন্সি কৌশলটি লিখতে অসুবিধা হয়। এই সময়ে ইভেন্ট পুশ মোড ব্যবহার করা যেতে পারে, অর্ডার এবং ক্রিয়াকলাপের পুশিং পেতে। এটি সেট করা হয়েছেexchange.IO("wait")◦ যদি একাধিক এক্সচেঞ্জ অবজেক্ট যোগ করা হয়, যা পণ্যের ফিউচারগুলিতে বিরল, তবে এটি ব্যবহার করা যেতে পারেexchange.IO("wait_any")এই ক্ষেত্রে, সূচকটি প্রদর্শিত হবে এক্সচেঞ্জের সূচক।
ট্র্যাজেডি tick পরিবর্তন{Event:"tick", Index:交易所索引(按实盘上交易所添加顺序), Nano:事件纳秒级时间, Symbol:合约名称}
অর্ডার ফরোয়ার্ডঃ{Event:"order", Index:交易所索引, Nano:事件纳秒级时间, Order:订单信息(与GetOrder获取一致)}
এই সময়ে কৌশল কাঠামো এভাবে লেখা যেতে পারে:
function on_tick(symbol){
Log("symbol update")
exchange.SetContractType(symbol)
Log(exchange.GetTicker())
}
function on_order(order){
Log("order update", order)
}
function main(){
while(true){
if(exchange.IO("status")){ //判断链接状态
exchange.IO("mode", 0)
_C(exchange.SetContractType, "MA888")//订阅MA,只有第一次是真正的发出订阅请求,接下来都是程序切换,不耗时间。
_C(exchange.SetContractType, "rb888")//订阅rb
while(true){
var e = exchange.IO("wait")
if(e){
if(e.event == "tick"){
on_tick(e.Symbol)
}else if(e.event == "order"){
on_order(e.Order)
}
}
}
}else{
Sleep(10*1000)
}
}
}
কমোডিটি ফিউচার এবং ডিজিটাল মুদ্রার মধ্যে পার্থক্য
এছাড়াও, এটি লক্ষ করা উচিত যে পণ্যের ফিউচারগুলি ডিজিটাল মুদ্রা এক্সচেঞ্জের চেয়ে আলাদা। যেমন, গেটডেপথ আসলে কেবলমাত্র একটি স্তর গভীরতা ((5 স্তর গভীরতার চার্জ ব্যয়বহুল), গেটটট্রেডগুলিও লেনদেনের ইতিহাস পায় না ((এগুলি হোল্ডিং পরিবর্তনের উপর ভিত্তি করে সিমুলেটেড, কোনও আসল লেনদেনের রেকর্ড নেই)) । পণ্যের ফিউচারগুলিতে একটি ওঠানামা সীমাবদ্ধতা রয়েছে, যখন ওঠানামা হয়, গভীরতার বিক্রয় বিক্রয় মূল্য স্টপ মূল্য, অর্ডার পরিমাণ 0 হয়, যখন ওঠানামা হয়, ক্রয় ও ক্রয় মূল্য হ্রাস হয়, অর্ডার পরিমাণ 0 হয়।
চুক্তি স্থাপন
exchange.IO ((("instruments"): এক্সচেঞ্জের সমস্ত চুক্তির তালিকা {কন্ট্রাক্টের নামঃ বিস্তারিত} অভিধান ফর্ম্যাটে ফেরত দেয়, শুধুমাত্র শারীরিক ডিস্ক সমর্থন করে।
exchange.IO ((("products"): এক্সচেঞ্জের সকল পণ্যের তালিকা {পণ্যের নামঃ বিস্তারিত} অভিধান ফরম্যাটে ফেরত দেয়, শুধুমাত্র ফিক্সড ডিস্ক সমর্থন করে।
exchange.IO (("subscribed"): একটি সাবস্ক্রাইব করা কনট্র্যাক্ট ফেরত দেয়, একই ফরম্যাটে, শুধুমাত্র রিয়েল-ডিস্ক সমর্থন করে।
ঐতিহ্যগত CTP ফিউচারContractTypeঅর্থাৎ, কন্ট্রাক্ট আইডি, বড় এবং ছোট হাতের অক্ষর দিয়ে আলাদা করুন।exchange.SetContractType("au1506")কন্ট্রাক্ট সেটআপ সফল হওয়ার পরে কন্ট্রাক্টের বিস্তারিত তথ্য যেমন সর্বনিম্ন কত কিনেছে, হ্যান্ডলিং ফি, ডেলিভারি সময় ইত্যাদি। একাধিক কন্ট্রাক্ট সাবস্ক্রাইব করার সময়, কেবলমাত্র প্রথমবারের মতো একটি আসল সাবস্ক্রিপশন অনুরোধ পাঠানো হয়, তারপরে কেবল কোড স্তরে লেনদেনের জোড়াটি স্যুইচ করা হয়, সময় ব্যয় করে না। প্রধান ক্রমাগত চুক্তিটি 888 এর মতো ক্রমাগত সূচক চুক্তি হিসাবে MA888 ক্রমাগত সূচক চুক্তি হিসাবে MA000, 888 এবং 000 কেবলমাত্র ভার্চুয়াল চুক্তির জন্য ট্রেডিং সমর্থন করে।কিন্তু ম্যাক প্রোগ্রামিং ভাষায়, আপনি যদি প্রধান চুক্তিটি পরিচালনা করতে পারেন, তবে প্রোগ্রামটি স্বয়ংক্রিয়ভাবে পজিশন পরিবর্তন করবে, অর্থাৎ, অ-প্রধান পজিশনটি মুছে ফেলা হবে এবং প্রধান পজিশনে একটি নতুন পজিশন খুলবে।
লগইন সফল না হলে কন্ট্রাক্ট সেট করা সম্ভব হবে না, তবে তাৎক্ষণিকভাবে ফিরে আসবে, তাই সিটিপি লগইন সম্পন্ন হয়েছে জেনে আপনি আবার চেষ্টা করতে পারেন। লগইন সফল হওয়ার পরে, আবার কন্ট্রাক্ট সেট করা সময় সাশ্রয়ী এবং সত্যিকারের নেটওয়ার্ক অ্যাক্সেস তৈরি করে না।
পজিশন খোলার
SetDirectionDirection থেকে পাওয়া যায়buy, closebuy, sell, closesellচারটি প্যারামিটার, কমোডিটি ফরওয়ার্ডসclosebuy_todayএবংclosesell_today"এখন আমি মনে করি, এটা আমার জন্য যথেষ্ট নয়।closebuy/closesellগতকালের পজিশনের জন্য, কেবলমাত্র পূর্ববর্তী প্রজাতিগুলিকে গতকাল এবং আজকে পজিশনে বিভক্ত করা হয়, যা প্রক্রিয়াজাতকরণ ফিকে প্রভাবিত করতে পারে, তাই গতকালের পজিশনে অগ্রাধিকার দেওয়া প্রয়োজন। সিটিপি প্রচলিত ফিউচারগুলির জন্য, দ্বিতীয় প্যারামিটারটি 1 বা 2 বা 3 টন সেট করা যেতে পারে, যা যথাক্রমে স্পেকটেকশন কভার, সুদের কভার, এবং সুরক্ষার কভার, ডিফল্ট স্পেকটেকশন সেট না করে।ক্রয়-বিক্রয়, পজিশন গ্রহণ, অর্ডার গ্রহণ, ইনভয়েস প্রত্যাহার, অ্যাকাউন্ট গ্রহণ ইত্যাদির মতো ক্রিয়াকলাপগুলি ডিজিটাল মুদ্রার ফিউচার লেনদেনের মতোই, পূর্ববর্তী অধ্যায়টি দেখুন।
| অপারেশন | SetDirection এর পরামিতি | নিম্নে অর্ডার ফাংশন |
|---|---|---|
| পজিশন খুলুন | exchange.SetDirection("buy") | exchange.Buy() |
| পিনডো পজিশন | exchange.SetDirection("closebuy") | exchange.Sell() |
| খালি পজিশন | exchange.SetDirection("sell") | exchange.Sell() |
| খালি পজিশন | exchange.SetDirection("closesell") | exchange.Buy() |
নিচের উদাহরণটি হল একটি নির্দিষ্ট প্লেইন ফাংশন, তবে মনে রাখবেন যে এই উদাহরণটি খুব সহজ, তবে ট্রেডিংয়ের সময় কিনা তা বিবেচনা করা দরকার, সম্পূর্ণরূপে ট্রেডিং করা হয়নি কীভাবে একটি আদেশের ভারী পরীক্ষা করা যায়, সর্বোচ্চ ডাউন অর্ডার পরিমাণ কত, ফ্রিকোয়েন্সিটি খুব বেশি কিনা, বিশেষত মূল্য বা বন্ধের দরজা ইত্যাদি ইত্যাদি। কেবলমাত্র রেফারেন্সের জন্য।**ফিক্সড ডিস্কের খালি গুদামটি প্ল্যাটফর্মের সাথে ভালভাবে আবৃত শ্রেণীকক্ষ ব্যবহার করার পরামর্শ দেয়। https://www.fmz.com/strategy/12961**│ লাইব্রেরী অধ্যায়ের বিস্তারিত বিবরণ রয়েছে এবং লাইব্রেরির সোর্স কোডটি শিখতে পরামর্শ দেওয়া হচ্ছে│
function Cover(contractType, amount, slide) {
for (var i = 0; i < positions.length; i++) {
if (positions[i].ContractType != contractType) {
continue;
}
var depth = _C(e.GetDepth);
if (positions[i].Type == PD_LONG || positions[i].Type == PD_LONG_YD) {
exchange.SetDirection(positions[i].Type == PD_LONG ? "closebuy_today" : "closebuy");
exchange.Sell(depth.Bids[0]-slide, amount, contractType, positions[i].Type == PD_LONG ? "平今" : "平昨", 'Bid', depth.Bids[0]);
} else {
exchange.SetDirection(positions[i].Type == PD_SHORT ? "closesell_today" : "closesell");
exchange.Buy(depth.Asks[0]+slide, amount, contractType, positions[i].Type == PD_SHORT ? "平今" : "平昨", 'Ask', depth.Asks[0]);
}
}
}
পণ্য ফিউচার কাস্টম অর্ডার টাইপ সমর্থন করে (ফিক্সড ডিস্ক সমর্থন করে, ব্যাকমেকিং সমর্থন করে না), পরে কুলুঙ্গি পদ্ধতি নির্দিষ্ট করে, কুলুঙ্গিতে সংযুক্ত_উদাহরণস্বরূপঃ
exchange.SetDirection("buy_ioc");
exchange.SetDirection("sell_gtd-20170111")
বিশেষভাবে, এর উপসর্গগুলি হলঃ
- ioc অবিলম্বে সম্পন্ন, অন্যথায় THOST_FTDC_TC_IOC বাতিল
- gfs এই বিভাগটি THOST_FTDC_TC_GFS বৈধ
- gfd বর্তমান কার্যকর THOST_FTDC_TC_GFD
- gtd নির্দিষ্ট তারিখের আগে বৈধ THOST_FTDC_TC_GTD
- gtc প্রত্যাহারের আগে বৈধ THOST_FTDC_TC_GTC
- gfa সেট দরপত্র বৈধ THOST_FTDC_TC_GFA
ইশান ইন্টারফেস
কমোডিটি ফরওয়ার্ড ট্রেডারগুলিতে ডিফল্টরূপে চালু করা হয় সিটিপি ইন্টারফেস, যদি অনুরোধ করা হয় তবে এটি ইশেন ইন্টারফেসে পরিবর্তন করা যেতে পারে। এফএমজেডের প্যাকেজিংয়ের মাধ্যমে, কল করার পদ্ধতি একই। পার্থক্যটি হ'ল অ্যাকাউন্ট, অর্ডার এবং হোল্ডিংগুলি একটি ধাক্কা মোড, তাই ট্রাস্টি স্থানীয়ভাবে এই ডেটা রক্ষণাবেক্ষণ করে এবং যখন সংশ্লিষ্ট ইন্টারফেসটি কল করা হয় তখন তা অবিলম্বে ফিরে আসে, প্রকৃতপক্ষে কোনও অনুরোধ করা হয় না।
ইশশেন প্রোটোকল কাস্টমাইজড অর্ডার প্রকারগুলি নিম্নরূপঃ
- gfd বর্তমান কার্যকর TAPI_ORDER_TIMEINFORCE_GFD
- gtc প্রত্যাহারের আগে কার্যকর TAPI_ORDER_TIMEINFORCE_GTC
- gtd নির্দিষ্ট তারিখের আগে কার্যকর TAPI_ORDER_TIMEINFORCE_GTD
- ফাকের কিছু অংশের চুক্তি সম্পন্ন, বাকি অংশ বাতিল
- ioc অবিলম্বে সম্পন্ন, অন্যথায় বাতিল TAPI_ORDER_TIMEINFORCE_FAK
- ফোক সম্পূর্ণরূপে অর্ডার করতে ব্যর্থ, সব বাতিল TAPI_ORDER_TIMEINFORCE_FOK
সাধারণ গ্লোবাল ফাংশন
লগ লগ এবং উইকিপিডিয়া
রিয়েল-ডিস্ক ইন্টারফেসে লগ একটি লগ, স্ট্রিংয়ের পরে @ অক্ষর যুক্ত করা হয় যাতে বার্তাটি ধাক্কা দেওয়ার ক্যুতে প্রবেশ করতে পারে, উইকিমিডিয়া বা টেলিগ্রামকে আবদ্ধ করার পরে সরাসরি ধাক্কা দেওয়া হবে।Log('推送到微信@')
লগের রঙ কাস্টমাইজ করা যায়Log('这是一个红色字体的日志 #ff0000') 。#ff0000আরজিবি রঙের জন্য ১৬ গুণ
সমস্ত লগ ফাইলগুলি হোস্টের ডিরেক্টরিতে একটি রিয়েল-ডিস্ক স্ক্লিট ডাটাবেসের মধ্যে রয়েছে, যা ডাটাবেস সফ্টওয়্যার ব্যবহার করে ডাউনলোড করা যেতে পারে এবং এটি পুনরুদ্ধার করার জন্য ব্যাকআপের প্রতিলিপি ব্যবহার করা যেতে পারে (ডাটাবেস নাম এবং রিয়েল-ডিস্ক আইডি একই) ।
LogProfit মুদ্রণ উপার্জন
উপার্জন রেকর্ড করা হয়, এবং উপার্জন কার্ভ একটি বাস্তব ডিস্ক ইন্টারফেস আঁকা হয়, যা বাস্তব ডিস্ক পুনরায় চালু করার পরেও সংরক্ষণ করা যেতে পারে।LogProfit(1000)মনোযোগ দিনLogProfitএর পরামিতিগুলি অবশ্যই আয় হতে হবে না, এটি যে কোনও সংখ্যা হতে পারে এবং এটি নিজেই পূরণ করতে হবে।
LogStatus স্ট্যাটাস টেবিল প্রদর্শন করা হচ্ছে (তালিকা সহ)
স্থির ডিস্কের অবস্থা, যেহেতু লগগুলি সংরক্ষণ করা হয় এবং ক্রমাগত আপডেট করা হয়, যদি কেবলমাত্র সংরক্ষণ করা হয়নি এমন তথ্য প্রদর্শনের প্রয়োজন হয় তবে এটি ব্যবহার করা যেতে পারেLogStatusফাংশনLogStatusএকটি স্ট্রিং হিসাবে ব্যবহৃত হয়, যা একটি টেবিলের তথ্য প্রকাশ করতে ব্যবহৃত হয়।
একটি নির্দিষ্ট স্থানের অবস্থা দেখানোর জন্য একটি টেবিলের উদাহরণঃ
var table = {type: 'table', title: '持仓信息', cols: ['列1', '列2'], rows: [ ['abc', 'def'], ['ABC', 'support color #ff0000']]};
LogStatus('`' + JSON.stringify(table) + '`'); // JSON序列化后两边加上`字符, 视为一个复杂消息格式(当前支持表格)
LogStatus('第一行消息\n`' + JSON.stringify(table) + '`\n第三行消息'); // 表格信息也可以在多行中出现
LogStatus('`' + JSON.stringify([table, table]) + '`'); // 支持多个表格同时显示, 将以TAB显示到一组里
LogStatus('`' + JSON.stringify(tab1) + '`\n' + '`' + JSON.stringify(tab2) + '`\n'); // 上下排列显示多个表
ঘুম ঘুম
প্যারামিটার হল মিলিসেকেন্ড, যেমনSleep(1000)নিদ্রার জন্য এক সেকেন্ড। ট্রেডিংয়ের সমস্ত অ্যাক্সেসের ফ্রিকোয়েন্সি সীমাবদ্ধতার কারণে, সাধারণ কৌশলটি হ'ল নিদ্রার সময়কে মৃত চক্রের মধ্যে অন্তর্ভুক্ত করা।
_G তথ্য সংরক্ষণ করুন
আপনি যদি কিছু স্থায়ী তথ্য সংরক্ষণ করতে চান, তাহলে আপনার ডিস্কটি পুনরায় চালু করার পরে প্রোগ্রামটি আবার শুরু হবে।_GJSON ক্রমবিন্যাসের জন্য এটি খুবই সুবিধাজনক এবং কার্যকরী।_Gফাংশন লিখুনonexit()এইভাবে, যখনই আপনি কৌশলটি বন্ধ করবেন, আপনার প্রয়োজনীয় তথ্য স্বয়ংক্রিয়ভাবে সংরক্ষণ করা হবে।
আপনি যদি আরও ফরম্যাটযুক্ত ডেটা সংরক্ষণ করতে চান, তাহলে এটি ব্যবহার করুন।_G ফাংশনটি কম প্রাসঙ্গিক, এটি পাইথন ব্যবহার করে সরাসরি ডাটাবেসে লেখা যেতে পারে।
function onexit(){
_G('profit', profit)
}
function main(){
_G("num", 1); // 设置一个全局变量num, 值为1 s
_G("num", "ok"); // 更改一个全局变量num, 值为字符串ok
_G("num", null); // 删除全局变量 num
_G("num"); // 返回全局变量num的值,如果不存在返回null
var profit = 0
if(_G('profit')){
profit = _G('profit')
}
}
_N নির্ভুলতা ফাংশন
অর্ডার দেওয়ার সময়, প্রায়শই মূল্য এবং পরিমাণের নির্ভুলতা নিয়ন্ত্রণ করতে, FMZ একটি অন্তর্নির্মিত _N ফাংশন রয়েছে যা সংরক্ষণের জন্য ছোট সংখ্যার সংখ্যা নির্ধারণ করে, যেমন_N(4.253,2)৪.২৫।
_C স্বয়ংক্রিয় পুনরায় চেষ্টা
এই অ্যাপ্লিকেশনের জন্য, আপনি আপনার অ্যাকাউন্টের নাম্বারটি পরিবর্তন করতে পারেন এবং আপনার অ্যাকাউন্টের নাম্বারটি পরিবর্তন করতে পারেন।_C একটি স্বয়ংক্রিয় পুনরায় চেষ্টা করা ফাংশন। এটি নির্দিষ্ট ফাংশনটি সফলভাবে ফেরত দেওয়ার জন্য কল করে থাকে (ফাংশনটি null বা false ফেরত দেয় যা পুনরায় চেষ্টা করবে), যেমন_C(exchange.GetTicker), ডিফল্ট পুনরায় পরীক্ষার ব্যবধান 3 সেকেন্ড, পুনরায় পরীক্ষার ব্যবধান নিয়ন্ত্রণ করতে_CDelay ফাংশনটি কল করা যেতে পারে, যেমন_CDelay(1000), পরিবর্তিত_সি ফাংশন পুনরায় পরীক্ষার ব্যবধান 1 সেকেন্ড, প্রস্তাবিতGetTicker(),exchange.GetDepth,GetTrade,GetRecords,GetAccount,GetOrders, GetOrderC-র ব্যবহারে, ত্রুটি-সহনশীলতা ব্যবহার করা হয়, যাতে অ্যাক্সেসের ব্যর্থতার ফলে প্রোগ্রামটি বিঘ্নিত না হয়।
CancelOrder_C ফাংশনটি ব্যবহার করা যাবে না, কারণ প্রত্যাহারের ব্যর্থতার বিভিন্ন কারণ রয়েছে, যদি একটি একক সমাপ্ত হয়, তবে প্রত্যাহারটি ব্যর্থতা ফিরে আসবে, _C ফাংশনটি ব্যবহারের ফলে পুনরায় চেষ্টা করা হবে।
_C ফাংশনটি একটি পরামিতি হিসাবেও ব্যবহার করা হয় এবং কাস্টম ফাংশন হিসেবেও ব্যবহৃত হয়।
function main(){
var ticker = _C(exchange.GetTicker)
var depth = _C(exchange.GetDepth)
var records = _C(exchange.GetRecords, PERIOD_D1) //传入参数
}
_D তারিখ ফাংশন
সরাসরি কল_D()বর্তমান টাইম স্ট্রিং প্রদান করে, যেমনঃ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 নির্দেশক ফাংশন
FMZ প্ল্যাটফর্মের সাথে সরাসরি অন্তর্নির্মিত কিছু সাধারণ সূচক ফাংশন, যেমন MA\MACD\KDJ\BOLL এবং অন্যান্য সাধারণ সূচকগুলির জন্য, নির্দিষ্ট সমর্থিত সূচকগুলি এপিআই ডকুমেন্টেশনে পাওয়া যাবে।
সূচক ফাংশন ব্যবহার করার আগে, K লাইন দৈর্ঘ্য বিচার করা ভাল। যখন পূর্ববর্তী K লাইন দৈর্ঘ্য গণনার জন্য প্রয়োজনীয় সময়কাল পূরণ করতে পারে না, তখন ফলাফলটি হবেnull。 যদি ইনপুট K-লাইন দৈর্ঘ্য 100 হয় এবং MA-এর সময়কাল 10 হয়, তাহলে প্রথম 9টি মান হল null, এবং পরবর্তীটি সঠিকভাবে গণনা করা হবে。
জাভাস্ক্রিপ্ট সম্পূর্ণ talib সমর্থন করে, যেমন তৃতীয় পক্ষের লাইব্রেরি সমর্থন, যেমন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 library ফাংশন হল
Math.max(),Math.abs()সাধারণভাবে ব্যবহৃত গাণিতিক অপারেশন, https://www.w3school.com.cn/jsref/jsref_obj_math.asp - FMZ দ্বারা উদ্ধৃত জাভাস্ক্রিপ্ট তৃতীয় পক্ষের ম্যাথ লাইব্রেরি, রেফারেন্সঃ https://mathjs.org/
- FMZ দ্বারা উদ্ধৃত জাভাস্ক্রিপ্ট তৃতীয় পক্ষের আন্ডারস্কোর লাইব্রেরি, যা অনেকগুলি Js এর ভারী অপারেশনকে সহজ করে তোলে, দেখুনঃ https://underscorejs.org/
টেমপ্লেট ক্লাস লাইব্রেরি
একটি রিয়েল-টাইম স্ট্র্যাটেজি ফাংশন লেখার জন্য অনেকগুলি বিষয় বিবেচনা করা দরকার, যেমন 5 টি মুদ্রা কেনার মতো একটি সাধারণ ফাংশন, আমাদের বিবেচনা করা উচিতঃ বর্তমান ব্যালেন্স যথেষ্ট? অর্ডারটির দাম কত? কতটুকু সঠিকতা? বাজারকে আঘাত না করার জন্য অর্ডারগুলিকে বিভক্ত করার দরকার নেই? অর্ডারগুলি কীভাবে সম্পন্ন করা হয় না? ইত্যাদি। বিভিন্ন কৌশলগুলিতে, এই বৈশিষ্ট্যগুলি একই, একটি টেমপ্লেট হিসাবে তৈরি করা যেতে পারে।
জাভাস্ক্রিপ্ট ডিজিটাল মুদ্রা লেনদেনের শ্রেণিবদ্ধকরণ এবং পণ্য ফিউচার লেনদেনের শ্রেণিবদ্ধকরণ ডিফল্টরূপে অন্তর্নির্মিত, কপি করার দরকার নেই। অন্যান্য টেমপ্লেট শ্রেণিবদ্ধকরণগুলি https://www.fmz.com/square/20/1 নীতি স্কোয়ারে পাওয়া যাবে। টেমপ্লেট শ্রেণিবদ্ধকরণগুলি অনুলিপি করা এবং সংরক্ষণ করা যেতে পারে এবং আপনার নিজস্ব কৌশল তৈরি করার সময় যে শ্রেণিবদ্ধকরণগুলি ব্যবহার করতে চান তা নির্বাচন করা যেতে পারে।
জাভাস্ক্রিপ্ট টেমপ্লেট ফাংশন$শুরুতে, পাইথন ছিলextশুরুঃ
ডিজিটাল মুদ্রা লেনদেনের শ্রেণিবিন্যাস
সোর্স কোডের ঠিকানাঃ https://www.fmz.com/strategy/10989 , এটি অন্তর্নির্মিত, এটি অনুলিপি করার দরকার নেই। নির্দিষ্ট ফাংশন বাস্তবায়ন পদ্ধতি সরাসরি সোর্স কোডের সাথে সম্পর্কিত হতে পারে।
অ্যাকাউন্ট পেতেঃ
$.GetAccount(e)
Log($.GetAccount()); // 获取账户信息, 带容错功能
Log($.GetAcccount(exchanges[1]));
ক্যালিফোর্নিয়াঃ
$.Buy/Sell(e, amount)
$.Buy(0.3); // 主交易所买入0.3个币
$.Sell(0.2); // 主交易所卖出0.2个币
$.Sell(exchanges[1], 0.1); // 次交易所卖出0.1个币
$.CancelPendingOrders(e, orderType)
$.CancelPendingOrders(); // 取消主交易所所有委托单
$.CancelPendingOrders(ORDER_TYPE_BUY); // 取消主交易所所有的买单
$.CancelPendingOrders(exchanges[1]); // 取消第二个交易所所有订单
$.CancelPendingOrders(exchanges[1], ORDER_TYPE_SELL); // 取消第二个交易所所有的卖单
ক্রস-বিচারঃ
$.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])
如果 n 等于 0, 指刚好15周期的EMA与30周期的EMA当前价格相等
如果 n 大于 0, 比如 5, 指15周期的EMA上穿了30周期的EMA 5个周期(Bar)
如果 n 小于 0, 比如 -12, 指15周期的EMA下穿了30周期的EMA 12个周期(Bar)
如果传给Cross不是数组, 则函数自动获取K线进行均线计算
如果传给Cross的是数组, 则直接进行比较
$.withdraw ((e, currency, address, amount, fee, password) প্রত্যাহার ফাংশনঃ
$.withdraw(exchange, "btc", "0x.........", 1.0, 0.0001, "***")
পণ্য ফিউচার ট্রেডিং শ্রেণিবিন্যাস
ফরেক্স ট্রেডিং লাইব্রেরি ব্যবহারে স্থিতিশীল, সুপারিশ করা হয়েছে। উত্স কোডের ঠিকানাঃ https://www.fmz.com/strategy/12961। এটি অন্তর্নির্মিত, এটি পুনরাবৃত্তি করার দরকার নেই।
সিটিএ সংগ্রহশালা
- ফিক্সড ডিস্কটি স্বয়ংক্রিয়ভাবে সূচকটিকে মূল ধারাবাহিকতায় ম্যাপ করে
- স্বয়ংক্রিয়ভাবে স্থানান্তর প্রক্রিয়া
- যেমন rb000/rb888 হল rb সূচকীয় লেনদেনকে ম্যাপ করা
- অন্য কোন কন্ট্রাক্টের সাথেও ম্যাপ করা যায়, যেমন rb000/MA888 যা rb সূচকের K লাইন দেখে MA প্রাইমারি কন্ট্রাক্টের সাথে ট্রেড করে
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("金叉周期", cross, "当前持仓", mp);
return 1
} else if (mp >= 0 && cross < -2) {
Log("死叉周期", cross, "当前持仓", 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"));
// 多品种时使用交易队列来完成非阻塞的交易任务
var q = $.NewTaskQueue();
q.pushTask(exchange, "MA701", "buy", 3, function(task, ret) {
Log(task.desc, ret)
})
while (true) {
// 在空闲时调用poll来完成未完成的任务
q.poll()
Sleep(1000)
}
}
মানচিত্র সংগ্রহশালা
যেহেতু মূল অঙ্কন ফাংশনটি আরও জটিল, পরবর্তী টিউটোরিয়ালে এটি সম্পর্কে আলোচনা করা হবে, তাই নতুনদের সরাসরি অঙ্কন ক্লাস লাইব্রেরি, খুব সহজ অঙ্কন ভাঁজ, কে লাইন চার্ট ইত্যাদি ব্যবহার করার পরামর্শ দেওয়া হয়। FMZ সহজ ক্লাস লাইব্রেরি অন্তর্নির্মিত, যা নীতি সম্পাদনা পৃষ্ঠায় দেখা যায়, যদি এটি অন্তর্নির্মিত না হয় তবে ব্যবহারকারীকে নিজের অনুলিপি এবং সংরক্ষণ করতে হবে।
জাভাস্ক্রিপ্ট প্রিন্ট করুন
পাইথন প্রিন্টার লাইনের ক্লাসরুমের প্রতিলিপিঃ https://www.fmz.com/strategy/39066
উদাহরণস্বরূপঃ
function main() {
while (true) {
var ticker = exchange.GetTicker()
if (ticker) {
$.PlotLine('Last', ticker.Last) //可以同时画两条线,Last是这条线的名字
$.PlotLine('Buy', ticker.Buy)
}
Sleep(6000)
}
}
পলিসি প্যারামিটার সেটিং
নীতি সম্পাদনার নীচে নীতি প্যারামিটার সেট রয়েছে, যা নীতির বৈশ্বিক পরিবর্তনশীল, কোডের যে কোনও জায়গায় অ্যাক্সেস করা যায়। নীতি প্যারামিটারগুলি রিয়েল-ডিস্ক ইন্টারফেসে পরিবর্তন করা যায়, পুনরায় চালু হওয়ার পরে কার্যকর হয়। সুতরাং কিছু পরিবর্তনশীল প্যারামিটার হিসাবে সেট করা যেতে পারে, নীতি পরিবর্তন না করে প্যারামিটারগুলি পরিবর্তন করা যেতে পারে।

- পরিবর্তনশীল নাম: অর্থাৎ উপরের চিত্রের number,string,combox ইত্যাদি সরাসরি কৌশল গ্রুপে ব্যবহার করা যেতে পারে।
- বর্ণনা করা: প্যারামিটারের নাম নীতির ইন্টারফেসে, প্যারামিটারের অর্থ বোঝার জন্য।
- নোট: প্যারামিটারের বিস্তারিত ব্যাখ্যা, যা মাউস প্যারামিটারের উপর স্থির হলে প্রদর্শিত হবে।
- টাইপ: এই প্যারামিটারের ধরন সম্পর্কে বিস্তারিত জানার জন্য নিচে দেখুন।
- ডিফল্ট মানএই প্যারামিটারটির ডিফল্ট মান হলো:
স্ট্রিং টাইপ এবং ডিজিটাল টাইপ সহজেই বোঝা যায় এবং এটিই সবচেয়ে বেশি ব্যবহৃত হয়। নিচের ড্রয়ারটি প্যারামিটার ইন্টারফেসে একটি অপশনাল ড্রয়ার প্রদর্শন করবে, যেমন নিচের ড্রয়ারের SYMBOL প্যারামিটার মানBTC|USDT|ETH, প্যারামিটার পৃষ্ঠায় ড্রপ-ডাউন এ USDT নির্বাচন করা হলে, নীতিতে SYMBOL এর মান হল USDT এর ইন্ডেক্স 1। টিক চিহ্নটি একটি নির্বাচনযোগ্য বাক্স, যা সত্য, অন্যথায় মিথ্যা।
এই প্যারামিটারগুলি অনেকগুলি সেটআপের জন্য উপলব্ধ রয়েছে, https://www.fmz.com/bbs-topic/1306
কৌশল ব্যাকটেস্ট
একটি কৌশল পরিমাপ করার পরে, আপনি আপনার কৌশলটি পরীক্ষার জন্য ইতিহাসের ডেটা ব্যবহার করতে পারেন এবং দেখুন যে আপনার কৌশলটি কীভাবে ইতিহাসের ডেটাতে মুনাফা অর্জন করেছে। অবশ্যই, পুনর্বিবেচনার ফলাফলগুলি কেবলমাত্র রেফারেন্সের জন্য। এফএমজেড কোয়ান্টাম প্ল্যাটফর্মটি ডিজিটাল মুদ্রার নগদ, ফিউচার, বিটএমইএক্স স্থায়ী চুক্তি এবং পণ্য ফিউচারগুলির পুনর্বিবেচনার সমর্থন করে, যার মধ্যে ডিজিটাল মুদ্রা মূলত মূলধারার জাতকে সমর্থন করে।
জাভাস্ক্রিপ্ট রিবেট করা হয় ব্রাউজারে, পাইথন রিবেট করা হয় হোস্টের উপর, প্ল্যাটফর্মটি ব্যবহার করে পাবলিক হোস্ট সরবরাহ করা যায়। ম্যাক ভাষার রিবেট আরও বেশি প্যারামিটার সেট করতে হবে, ম্যাক ভাষার ডকুমেন্টেশন দেখুন।
প্রতিক্রিয়া প্রক্রিয়া
অনবার রিটার্নিং সিস্টেমটি কে-লাইন ভিত্তিক, অর্থাৎ প্রতিটি কে লাইন একটি রিটার্নিং সময় পয়েন্ট তৈরি করে, যেখানে আপনি বর্তমান কে লাইনের উচ্চ এবং নিম্ন খোলার মূল্য, লেনদেনের পরিমাণ এবং সেই সময়ের আগে historicalতিহাসিক কে লাইন তথ্য পেতে পারেন। এই সিস্টেমের অসুবিধাটি সুস্পষ্টঃ একটি কে লাইনে, কেবলমাত্র একটি ক্রয়-বিক্রয় তৈরি করা যেতে পারে, সাধারণত কে লাইনের ক্লোজিং মূল্য। এবং একটি কে লাইন কেবলমাত্র চারটি উচ্চ এবং নিম্ন খোলার দাম পেতে পারে, যাতে কোনও লাইন কে-এর মধ্যে দাম কীভাবে পরিবর্তিত হয় তা সম্পর্কে কোনও তথ্য পাওয়া যায় না। উদাহরণস্বরূপ, 1 ঘন্টা কে লাইন থেকে, রিয়েল টাইম ডিস্কটি প্রতি কয়েক সেকেন্ডের মধ্যে একবার ট্রেডিংয়ের পরিস্থিতি সম্পর্কে তথ্য পেতে নিশ্চিত হয়, এবং ট্রেডিং নির্দেশগুলি ডিস্কের মধ্যে প্রেরণের জন্য অপেক্ষা করার পরিবর্তে। কনবারের রিটার্নিং সিস্টেমটি খুব সহজেই বোঝা যায়, এবং দ্রুত রিটার্নিং করা যায়।
FMZ প্ল্যাটফর্মের রিটার্নিং দুটি ধরণের অ্যানালগ-স্তরের রিটার্নিং এবং রিয়েল-ডিস্ক-স্তরের রিটার্নিং। অ্যানালগ-স্তরের রিটার্নিং নীচের K-লাইন সময়কালের উপর ভিত্তি করে একটি টিক তৈরি করে, যা 14 টি রিটার্নিং সময় পয়েন্ট তৈরি করে,**বাস্তব ডিস্ক স্তরটি হল প্রকৃত সংগ্রহের টিক, প্রায় কয়েক সেকেন্ডের মধ্যে একবার, যা বর্তমানে আংশিকভাবে প্রকৃত গভীরতা সমর্থন করে (যার মধ্যে 20 টি ফাইল রয়েছে), প্রকৃত এক-এক-একটি লেনদেন।**প্রচুর পরিমাণে ডেটা রয়েছে এবং পুনরুদ্ধারের গতি ধীর, তাই বিশেষত দীর্ঘ সময় পুনরুদ্ধার করা যায় না। এফএমজেডের পুনরুদ্ধার প্রক্রিয়াটি কৌশলটিকে একাধিকবার একটি কে লাইনে লেনদেন করতে দেয়, কেবলমাত্র একটি নিষ্পত্তি মূল্যের লেনদেনের পরিস্থিতি এড়াতে পারে, আরও নির্ভুল এবং পুনরুদ্ধারের গতির সাথে সামঞ্জস্যপূর্ণ।
পুনরাবৃত্তির কৌশলগত কাঠামোটি হ'ল একটি মৃত লুপ, যা লিকের মতোই। যেহেতু পুনরাবৃত্তিটি বিভিন্ন পুনরাবৃত্তির পয়েন্টে লাফিয়ে উঠেছে, তাই এই সময়টি ঘুমানো ছাড়াই করা যেতে পারে, একটি লুপের শেষে স্বয়ংক্রিয়ভাবে পরবর্তী সময়ে লাফিয়ে যাবে। তবে পাইথন প্রোগ্রামিং প্রক্রিয়াটির কারণে একটি বাধ্যতামূলক প্রয়োজনSleep(10)এই ছবিতে দেখা যায়,
পুনর্বিবেচনার ছবি
রিটেস্ট ইঞ্জিনটি ব্যবহারকারীর অর্ডার মূল্য এবং রিটেস্টের সময় পয়েন্টের দরপত্রের মূল্যের উপর ভিত্তি করে একত্রিত হয়। যদি ক্রয় মূল্য বিক্রয়ের চেয়ে বেশি হয় তবে একটি লেনদেনের জন্য লেনদেন হয়। যদি লেনদেন করা না যায় তবে একটি তালিকা তৈরি হয়। লেনদেনের গ্যারান্টি দেওয়ার জন্য একটি স্লাইড পয়েন্ট যুক্ত করা দরকার। যদি রিটেস্টের সময় পজিশন খোলার বা সমতল না হওয়ার ঘটনা ঘটে থাকে, তবে চেক করুন যে কোনও অর্ডার জমা না হওয়ার কারণে পজিশন স্থগিত রয়েছে কিনা।
পেজ সেটিংস পুনরুদ্ধার
- ১. ব্যাকআপ পেজ নির্বাচন করুন, এবং বাম দিকে নীতি সম্পাদনা পৃষ্ঠা।
- ২. পুনরাবৃত্তি শুরু এবং শেষ হওয়ার সময়, যেহেতু তথ্য অসম্পূর্ণ, পুনরাবৃত্তিটি সরাসরি ডেটা থেকে শুরু হতে পারে।
- ৩. পুনর্বিবেচনা
GetRecords()ফাংশনটির ডিফল্ট পিরিয়ড, আপনি কোডে পিরিয়ড প্যারামিটারটিও নির্দিষ্ট করতে পারেন। - ৪. পর্যবেক্ষণ পদ্ধতির পছন্দ <unk>
- ৫. প্রদর্শিত বা লুকানো এবং একাধিক প্রতিক্রিয়া সেটিং।
- ৬. সর্বাধিক লগের সংখ্যা, উপার্জন ডেটার সংখ্যা, চার্ট ডেটার সংখ্যা ইত্যাদি, যাতে বেশি পরিমাণে ডেটা ব্রাউজারে স্ট্রাইক হতে না পারে।
- ৬. নিম্ন স্তরের টিকের উৎপত্তি কে-লাইন পর্যায়ের উপর ভিত্তি করে।
- ৭. ট্রেডিং পয়েন্ট
- ৭. ত্রুটি-প্রতিরোধী, এপিআই অনুরোধের ত্রুটি-প্রতিরোধের অনুকরণ করে, নীতির ত্রুটি-প্রতিরোধের ক্ষমতা পরীক্ষা করে।
-
- ট্রেডিং আইকনটি আঁকা হয়েছে কিনা, যদি টিএ সূচক ফাংশনটি ব্যবহার করা হয় তবে এটি আইকনে প্রদর্শিত হবে এবং ক্রয়-বিক্রয়ও চিহ্নিত হবে।
- ৯। ফি সেটআপ
- ১০. এক্সচেঞ্জ যুক্ত করুন - ট্রেডিং জোড়া এবং সম্পদ।
-
- রিমেট প্যারামিটার সেট করুন, যদি প্যারামিটারটি সংখ্যাযুক্ত হয় তবে একটি কী অপ্টিমাইজেশন প্যারামিটার সমর্থন করে, স্বয়ংক্রিয়ভাবে একটি নির্দিষ্ট পরিসীমা অনুসারে প্যারামিটার রিমেটগুলি অতিক্রম করে।
বাস্তব ডিস্কের থেকে ভিন্ন
- ১. শুধুমাত্র GetTicker এবং GetRecords ব্যাকআপের সময় কার্যকর ছিল, অন্যরা যেমন গভীরতা এবং লেনদেনের ইতিহাস সত্য ছিল না ((যেহেতু ডেটা খুব বেশি, রিয়েল-ডিস্ক ব্যাকআপ বর্তমানে এই ডেটা সমর্থন করে, তবে কেবলমাত্র সাম্প্রতিক ডেটা)) ।
- ২. ট্র্যাকিং যোগ করা এক্সচেঞ্জগুলি স্বতন্ত্র অ্যাকাউন্ট এবং বর্তমানে এটির মধ্যে জোড়া পরিবর্তন সমর্থন করে না। সুতরাং একটি অ্যাকাউন্টে দুটি জোড়া পরিচালনা করা সম্ভব নয়।
- ৩. পুনর্নির্মাণের সময় নেটওয়ার্ক অনুরোধ ব্যবহার করা যাবে না।
- ৪. আইও এক্সটেনশান ব্যবহার করা যাবে না, শুধুমাত্র মৌলিক এপিআই ব্যবহার করা যাবে।
- ৫. শুধুমাত্র স্ট্যান্ডার্ড ডেটা পাওয়া যায়, ইনফোর মতো ফিক্সড ডিস্কের ডেটা নেই।
- ৬. পুনঃনিরীক্ষণের সময়, অর্ডার জমা দেওয়ার ক্ষেত্রে সতর্কতা অবলম্বন করুন
- ৭. পণ্যের ফিউচার রিটার্নিং বাজার মূল্য তালিকা সমর্থন করে না।
কৌশলগত ত্রুটি এবং সাধারণ ত্রুটি
এর আগে বলা হয়েছে যে, রিয়েল ডিস্কে এপিআই ইন্টারফেস ব্যবহার করে অ্যাক্সেস ব্যর্থ হয়ে ফিরে আসা সম্ভব।nullএই ক্ষেত্রে, ডেটা ব্যবহার করে ত্রুটি দেখা দিতে পারে এবং রিয়েল-ডিস্কটি বন্ধ হয়ে যেতে পারে, তাই কৌশলটি ত্রুটি-সহনশীল হওয়া উচিত।
সাধারণ ত্রুটিমুক্ত পদ্ধতি
সাধারণ ভুল কারণঃ
- এপিআই অ্যাক্সেস নেটওয়ার্ক ত্রুটি, ইন্টারফেস অ্যাক্সেস সময়সীমা শেষ হয়ে গেলে null ফেরত দেওয়া হবে।
- এক্সচেঞ্জ সীমাবদ্ধতা ত্রুটি যেমন আইপি সীমাবদ্ধতা, অর্ডার নির্ভুলতা, অ্যাক্সেস ফ্রিকোয়েন্সি, প্যারামিটার ত্রুটি, সম্পদের অভাব, বাজারটি ট্রেড করতে পারে না, অর্ডার বাতিল করা ইত্যাদি ইত্যাদি। এপিআই ডকুমেন্টেশনটি ত্রুটি কোডের ভিত্তিতে অনুসন্ধান করা যেতে পারে।
- এক্সচেঞ্জের তথ্য ফেরত ত্রুটি, মাঝে মাঝে ঘটে, যেমন খালি গভীরতা, বিলম্বিত অ্যাকাউন্ট তথ্য, বিলম্বিত অর্ডার স্থিতি ইত্যাদি।
- প্রোগ্রাম লজিক্যাল ত্রুটি
এপিআই ব্যবহার করার আগে, এটি শূন্য কিনা তা বিচার করতে হবে। নিচে কেন্দ্রীয়ভাবে ব্যবহৃত পদ্ধতির একটি সংক্ষিপ্তসার দেওয়া হলঃ
//1.判断为null进行处理
var ticker = exchange.GetTicker();
while(ticker == null){
Log('ticker 获取出错');
ticker = exchange.GetTicker();
}
Log(ticker.Last);
// 2.判断不为null再进行引用
var ticker = exchange.GetTicker();
if(!ticker){
Log(ticker.Last);
}
// 3._C()函数重试
var ticker = _C(exchange.GetTicker);
Log(ticker.Last);
// 4. try catch容错
try{
var ticker = exchange.GetTicker();
Log(ticker.Last);
}
catch(err){
Log('ticker 获取出错');
}
যদি আপনি ভুল তথ্য পেতে চান, আপনি এটি ব্যবহার করতে পারেন।GetLastError(), সর্বশেষ ত্রুটি বার্তা স্ট্রিং ফেরত দেবে, যা ত্রুটিগুলির পার্থক্যের জন্য ব্যবহার করা যেতে পারে।
FAQ
ফোরামের শিরোনামে অনেক সাধারণ ভুলের সংক্ষিপ্তসার রয়েছেঃ https://www.fmz.com/bbs-topic/1427 。 এখানে কিছু সংক্ষিপ্তসার দেওয়া হল, প্রশ্ন থাকলে Ctrl+F দিয়ে অনুসন্ধান করুন 。
কিভাবে একজন অভিভাবক নিয়োগ করা হয়?
বিস্তারিত জানার জন্য, দেখুন অ্যাড ট্রাস্টি সেকশন
আমি মনে করি, এটা একটা বড় ভুল হয়েছে।
https://www.fmz.com/markets-এ কিছু লোক আছে যারা কপিরাইট সার্ভিস প্রদান করে, অথবা গ্রুপে পরামর্শ দেয়, তাদের সাথে যোগাযোগ করতে হবে এবং তাদের ঝুঁকি নিতে হবে।
সমস্ত ইন্টারফেস অ্যাক্সেস টাইমআউট
এর অর্থ হল এক্সচেঞ্জের ইন্টারফেসটি অ্যাক্সেস করার সময়, যদি কখনও কখনও সমস্যা হয় তবে সমস্যা হয় না, যদি এটি নির্দেশ করে যে নেটওয়ার্কটি অ্যাক্সেসযোগ্য নয়, তবে বিদেশী সার্ভার ব্যবহার করা প্রয়োজন।
ERR_INVALID_POSITION ত্রুটি
প্রতিক্রিয়া সিস্টেম ত্রুটি, সাধারণত কৌশল জন্য ত্রুটি লিখিত, যখন কোন হোল্ডিং বা হোল্ডিং অল্প পরিমাণে হয়, যখন পজিশন সমতল করার চেষ্টা করা হয়, তখন এই ত্রুটির কারণ হতে পারে।
symbol not set
ফরওয়ার্ড এক্সচেঞ্জের পুনরাবৃত্তি, কোডে কোন চুক্তি সেট করা নেই, দেখুন exchange.SetContractType ফাংশন
BITMEX 429 ত্রুটি,{"error":{"message":"Rate limit exceeded retry in 1 seconds ......"}}
এক্সচেঞ্জের ইন্টারফেস অ্যাক্সেসের উচ্চ ফ্রিকোয়েন্সি।
{"status":6004,"msg":"timestamp is out of range"}
সার্ভার সময়সীমা অতিক্রম করে সার্ভার সময় আপডেট করা প্রয়োজন, খুব বেশি বিচ্যুতি হতে পারে না
GetOrder(455284455): Error: invalid order id or order cancelled.
কিছু এক্সচেঞ্জ অর্ডার বাতিল করে দেয়, এবং এক্সচেঞ্জগুলি অর্ডার সম্পর্কিত তথ্য সংরক্ষণ করে না।
GetOrders: 400: {"code":-1121,"msg":"Invalid symbol."}
অকার্যকর লেনদেনের জোড়া, চেক করুন লেনদেনের জোড়া সেট করা হয়েছে কিনা।
Secret key decrypt failed
API KEY পার্স করতে ব্যর্থ, যদি APIKEY কনফিগার করার পরে FMZ পাসওয়ার্ড পরিবর্তন করা হয়, FMZ এ এক্সচেঞ্জ পৃষ্ঠা যুক্ত করার চেষ্টা করুন এবং এক্সচেঞ্জ APIKEY পুনরায় কনফিগার করুন।
Signature not valid: Invalid submission time or incorrect time format [অবৈধ জমা দেওয়ার সময়, অথবা সময় বিন্যাস ত্রুটি]
লিনাক্স সার্ভার ব্যবহার করার পরামর্শ দেওয়া হচ্ছে, অথবা উইন্ডোজ সিস্টেমে ইনস্টল করার সময় সিঙ্ক্রোনাইজেশন সফটওয়্যার।
কেন আপনি একটি বিশ্বব্যাপী এজেন্ট সেট আপ করেছেন, এবং প্রশাসক এক্সচেঞ্জ এপিআই অ্যাক্সেস করতে পারবেন না?
গ্লোবাল এজেন্টের এজেন্ট হোস্টের নেটওয়ার্ক পোর্ট নেই, বিলম্বের কারণে, বিদেশী সার্ভার স্থাপন করা হোস্টের পক্ষে ভাল
কিভাবে কৌশলটি স্থানীয়ভাবে সংরক্ষণ করা যায়, আপলোড করা FMZ-তে নয়?
পাইথন ব্যবহার করে স্থানীয় ফাইলগুলি আমদানি করা যায়, এফএমজেডের এপিআই-র উপর ভিত্তি করে লিখিত নীতিগুলি ফাইল হিসাবে সংরক্ষণ করা হয় এবং তাদের নিজস্ব সার্ভারে এক্সিকিউশন পাথের নীচে রাখা হয়।
#!python2.7
def run(runfile):
with open(runfile,"r") as f:
exec(f.read())
def main():
run('my.py')
কিভাবে এক্সচেঞ্জের টেস্ট নেটওয়ার্ক ব্যবহার করবেন অথবা API-এর ঠিকানা পরিবর্তন করবেন
এক্সচেঞ্জ.সেটবেস () ব্যবহার করে সরাসরি সংশ্লিষ্ট এপিআই বেস ঠিকানায় স্যুইচ করুন। যেমনঃ
exchange.SetBase("https://www.okex.me")
我是看1分钟k线图操作的,所以Python死循环的sleep time 可以设置为0.1s,也就是sleep(100)吗,我看你其中写过一个sleep(10),也就是0.1s不会超过huobi HM的API限制吗?
exchange.SetDirection("closebuy"); //如果是永续合约,直接设置exchange.SetDirection("sell")
这儿我试了OKex的永续合约,如果设置成 sell,直接开空了,平不是平多
是我错了。。。
exchange.Buy(-1, 0.5),交易对是ETH_BTC,市价单代表买入0.5BTC的ETH
exchange.Buy(price, 0.5),如果是这种限价单,则代表用price的价格买入 0.5ETH
- 1







