[TOC] এই টিউটোরিয়ালটি এপিআই এর ভূমিকা, পুনর্বিবেচনা, চার্ট ইত্যাদির সাথে নীতির লেখার প্রাথমিক জ্ঞান অন্তর্ভুক্ত করে। এই মৌলিক টিউটোরিয়ালটি শিখার পরে, ব্যবহারকারীরা মৌলিক এপিআইগুলি দক্ষতার সাথে ব্যবহার করতে সক্ষম হবেন এবং স্থিতিশীল বাস্তব ডাইস্ক কৌশলগুলি লিখতে সক্ষম হবেন। এই টিউটোরিয়ালটি শেখার আগে এটি শিখতে হবে।এফএমজেড ইনভেন্টর কোয়ালিফাইং প্ল্যাটফর্ম ব্যবহার করে 。
পুরনো টিউটোরিয়ালঃউদ্ভাবক পরিমাণগত ((FMZ.COM) কৌশল সম্পূর্ণরূপে ম্যানুয়াল 2.0 ((টিউটোরিয়াল) ব্যবহার করে লেখাএই টিউটোরিয়ালে অনেকগুলো পোস্টের ইনডেক্স রয়েছে, যা দেখার পরামর্শ দেওয়া হচ্ছে।
প্রোগ্রামযুক্ত লেনদেন হল একটি প্রোগ্রাম যা একটি এপিআই এবং একটি এক্সচেঞ্জের সাথে সংযোগ স্থাপন করে যা স্বয়ংক্রিয়ভাবে কেনা বেচা বা অন্যান্য কার্যকারিতা সম্পাদন করতে পারে।
বর্তমানে ডিজিটাল মুদ্রা বিনিময় প্রধানত দুটি ইন্টারফেস প্রোটোকল আছেঃ REST এবং Websocket;; REST প্রোটোকলটি প্রতিবার ডেটা পাওয়ার জন্য একবার অ্যাক্সেস করা প্রয়োজন;; অ্যানালগ এক্সচেঞ্জ wex.app এর API এর উদাহরণ হিসাবে, সরাসরি ব্রাউজারে 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=
এর পরে নির্দিষ্ট লেনদেনের জন্য পরামিতি রয়েছে যা অন্যান্য লেনদেনের জন্য ডেটা পেতে সংশোধন করা যেতে পারে। বাজারের মতো পাবলিক ইন্টারফেসের জন্য, সবাই অ্যাক্সেস করতে পারে, তাই যাচাইকরণের প্রয়োজন নেই, এবং কিছু ইন্টারফেসের জন্য নিম্নলিখিত আদেশ এবং অ্যাকাউন্টগুলি অ্যাক্সেস করার জন্য ব্যবহারকারীর পরিচয় যাচাই করা প্রয়োজন, যখন এটি API-KEY ব্যবহার করে স্বাক্ষর করা প্রয়োজন। ওয়েবসকেট একটি সাবস্ক্রিপশন মোড, সাবস্ক্রিপশন প্রয়োজনের সামগ্রী প্রেরণের পরে, এক্সচেঞ্জগুলি আপডেট করা ডেটা প্রোগ্রামকে প্রেরণ করে, প্রতিবার পুনরায় অ্যাক্সেস করার প্রয়োজন নেই, তাই আরও দক্ষ।
এফএমজেড কোয়ালিফাইড ট্রেডিং প্ল্যাটফর্মটি বিভিন্ন এক্সচেঞ্জের REST ইন্টারফেসের সাথে আবদ্ধ, কল এবং ডেটা ফর্ম্যাটগুলিকে একীভূত করার জন্য একটি অভিন্ন পদ্ধতি ব্যবহার করে, যা নীতিগুলিকে আরও সহজ এবং সাধারণ করে তোলে। এফএমজেড প্ল্যাটফর্মে ওয়েবসকেট সমর্থন করা সহজ।
এফএমজেড প্ল্যাটফর্মের এপিআই ডকুমেন্টেশনগুলি বেশিরভাগ জাভাস্ক্রিপ্টের উদাহরণস্বরূপ, তবে প্যাকেজিংয়ের কারণে, বিভিন্ন ভাষাগুলির মধ্যে খুব কম পার্থক্য রয়েছে, কেবলমাত্র ব্যাকরণগত সমস্যার দিকে মনোযোগ দেওয়া দরকার; সি ++ কিছুটা বিশেষ, পরবর্তী টিউটোরিয়ালগুলিতে একটি বিশেষ ভূমিকা থাকবে; জেএস তুলনামূলকভাবে সহজ এবং সামঞ্জস্যের সমস্যা ছাড়াই নতুনদের জন্য সুপারিশ করা হয়; এফএমজেড প্ল্যাটফর্মটি সম্পূর্ণ পাইথনকে সমর্থন করে, বিভিন্ন ইনস্টলেশন প্যাকেজগুলি বিনামূল্যে ইনস্টল করা যায় এবং একটি নির্দিষ্ট প্রোগ্রামিং বেসিক ব্যবহারের পরামর্শ দেওয়া হয়; যারা প্রোগ্রামিং ভাষা শিখতে চান না, কেবল কৌশলগুলি দ্রুত লিখতে চান এমন ব্যবহারকারীদের জন্য, এফএমজেড প্ল্যাটফর্মটি ম্যালওয়্যার ভাষা সমর্থন করে, মূলত সামঞ্জস্যপূর্ণ টেক্সট ফিনান্সিয়াল কৌশল, কিছু অভিজ্ঞতার সাথে সম্পর্কিত সুপারিশগুলিও ব্যবহার করে, অসুবিধাগুলি হ'ল কোনও প্রোগ্রামিং ভাষা নেই যা নমনীয়তাপূর্ণ; এফএমজেড দৃ visual় দৃশ্যমান প্রোগ্রামিং সমর্থন
Python এর বিভিন্ন সংস্করণের কারণে, প্রোগ্রামের শুরুতে নির্দিষ্ট করা যেতে পারে, যেমনঃ#!Python2
,#!Python3
❏ লক্ষ্য করুন যে জাভাস্ক্রিপ্ট সম্প্রতি ES6 সিনট্যাক্স আপগ্রেড করেছে, এটি জানতে আগ্রহী হবে ❏ নীচে একই ফাংশনগুলির জন্য পাইথন এবং জাভাস্ক্রিপ্ট কোডগুলি দেখানো হয়েছে, কেবলমাত্র সিনট্যাক্স পার্থক্য দেখা যাচ্ছে, তাই এপিআই ডকুমেন্টেশন কেবল জাভাস্ক্রিপ্টের উদাহরণ দেয়, এই টিউটোরিয়ালটি পাইথনের বিশেষ ব্যবহারের ক্ষেত্রেও বিবেচনা করবে ❏
#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/m/debug; ডিবাগিং টুল শুধুমাত্র জাভাস্ক্রিপ্ট সমর্থন করে, শুধুমাত্র একটি নির্দিষ্ট সময়ের জন্য চালানো যেতে পারে, একটি বাস্তব ডিস্ক তৈরি না করেই এক্সচেঞ্জ ইন্টারফেস ডিবাগ করা যেতে পারে; return এর তথ্য ফলাফল হিসাবে ফিরে আসবে, ডিবাগিং টুলের কোড সংরক্ষণ করা হবে না। এই টিউটোরিয়ালে, আপনি একই সময়ে ডিবাগিং টুল ব্যবহার করে পরীক্ষা করতে পারেন।
নীতিমালা প্রোগ্রামগুলি স্বাভাবিক প্রোগ্রামগুলির মতোই কোডের ক্রমানুসারে সম্পাদিত হয়, বিশেষত যেহেতু নীতিমালাগুলিকে অবিচ্ছিন্নভাবে চালানোর প্রয়োজন হয়, তাই সাধারণত একটি লুপের পাশাপাশি একটি ঘুমের সময় প্রয়োজন হয়। যেহেতু লেনদেনের সমস্ত এপিআই অ্যাক্সেসের ফ্রিকোয়েন্সি সীমাবদ্ধ, তাই ঘুমের সময় সংশোধন করা প্রয়োজন। এই কাঠামোটি একটি আদর্শ স্থির ব্যবধানের বাস্তবায়ন, এবং ওয়েবসকেট ব্যবহার করে ইভেন্ট-চালিত নীতিগুলি লিখতে পারে, যেমন গভীরতার পরিবর্তন হলে অবিলম্বে কার্যকর করা হয়, যা অগ্রগতির টিউটোরিয়াতে উপস্থাপন করা হবে।
অন্যান্য বিশেষ ফাংশন হলঃ
function onTick(){
var ticker = exchange.GetTicker()
var account = exchange.GetAccount()
//在这里写策略逻辑,将会每6s调用一次
}
function main(){
while(true){
onTick()
Sleep(6000)
}
}
পূর্ববর্তী উদাহরণে যদি নেটওয়ার্ক অ্যাক্সেস ত্রুটিগুলি সরাসরি নীতিটি বন্ধ করতে পারে তবে যদি আপনি এমন একটি নীতি চান যা স্বয়ংক্রিয় পুনরায় চালু না হয় তবে আপনি আবার চেষ্টা করতে পারেন। চেষ্টা করবেন না। অবশ্যই, কেবলমাত্র যখন নীতিটি স্থিতিশীল হয় তখনই এটি করার পরামর্শ দেওয়া হয়, অন্যথায় সমস্ত ত্রুটিগুলি ভুল হবে না এবং নীতির সমস্যাগুলি সাজানো কঠিন হবে।
function onTick(){
var ticker = exchange.GetTicker()
var account = exchange.GetAccount()
//在这里写策略逻辑,将会每6s调用一次
}
function main(){
try{
while(true){
onTick()
Sleep(6000)
}
}catch(err){
Log(err)
}
}
যে কোনও এক্সচেঞ্জের সাথে সম্পর্কিত এপিআই কল করার সময় এক্সচেঞ্জ এবং লেনদেনের জোড়া স্পষ্ট করা প্রয়োজন।exchange
এই বস্তুর প্রতিনিধিত্ব করে,exchange.GetTicker()
এই এক্সচেঞ্জ-ট্রেড প্যারের ট্রেডিং টিকার পাবেন।
এফএমজেড প্ল্যাটফর্ম একই সময়ে একাধিক এক্সচেঞ্জ-ট্রেড প্যারেজ যোগ করার সমর্থন করে, যেমন একই এক্সচেঞ্জ অ্যাকাউন্টে একই সাথে বিটিসি এবং ইটিএইচ পরিচালনা করা যায়, একই সাথে এক এক্সচেঞ্জের বিটিসি এবং অন্য এক্সচেঞ্জের ইটিএইচও পরিচালনা করা যায়। নোট করুন যে একই এক্সচেঞ্জের বিভিন্ন অ্যাকাউন্ট একই সাথে যোগ করা যেতে পারে, যা এফএমজেড ওয়েবসাইটে যুক্ত লেবেলের ভিত্তিতে পৃথক।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
এই টিউটোরিয়ালটি একটি সম্পূর্ণ নতুন ডিস্কের জন্য তৈরি করা হয়েছে। এটি একটি নতুন ডিস্কের জন্য তৈরি করা হয়েছে। এটি একটি নতুন ডিস্কের জন্য তৈরি করা হয়েছে।
বাজারের বর্তমান অবস্থা পেতে, সম্ভবত সবচেয়ে সাধারণ ইন্টারফেস ব্যবহার করা হয়, আপনি সর্বশেষ লেনদেন মূল্য, কিনুন-বিক্রয় মূল্য, সাম্প্রতিক লেনদেন পরিমাণ ইত্যাদি তথ্য খুঁজে পেতে পারেন। আপনি আবার অর্ডার করার আগে টিকার তথ্যের উপর ভিত্তি করে লেনদেন মূল্য নির্ধারণ করতে পারেন।{"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)
}
আর্কাইভের গভীরতা সম্পর্কে তথ্য পান। যদিও GetTicker এ একটি কেনা-বিক্রয় অন্তর্ভুক্ত রয়েছে, তবে যদি আপনি আরও গভীর আর্কাইভ অনুসন্ধান করতে চান তবে আপনি এই ইন্টারফেসটি ব্যবহার করতে পারেন, সাধারণত শীর্ষ 200 টি আর্কাইভের সন্ধান করতে পারেন। আপনি এই ইন্টারফেসটি ব্যবহার করে ধাক্কা মূল্য গণনা করতে পারেন। নীচে একটি সত্যিকারের রিটার্ন ফলাফল রয়েছে। যেখানে Asks বিক্রয় তালিকা নির্দেশ করে, যার মধ্যে অ্যারেগুলি একের পর এক বিক্রি হয়, বিক্রয় দ্বিতীয় হয়... সুতরাং দামগুলিও ক্রমে বৃদ্ধি পায়।
{
"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)
}
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 মিনিটের কে-লাইন অনুসারে সংযুক্ত করা হবে, 1 মিনিটের নীচে কে-লাইনটি গেটট্রেডসের মাধ্যমে সংযুক্ত করা হবে, পণ্যের ভবিষ্যৎটি টিকের ভিত্তিতে সংযুক্ত করা হবে।এই টিউটোরিয়ালে আপনি একই রকম কিছু দেখতে পাবেন।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
}
নির্দিষ্ট সময়সীমার লেনদেনের ডেটা (এমনকি নিজের লেনদেনের ডেটা নয়) পাওয়ার জন্য কিছু এক্সচেঞ্জ সমর্থন করে না। এটি খুব কমই ব্যবহৃত হয়। বিস্তারিত জানতে API ডকুমেন্টেশন দেখুন।
এই ইন্টারফেসগুলি অ্যাকাউন্টের সাথে সম্পর্কিত এবং সরাসরি অ্যাক্সেসযোগ্য নয়, এপিআই-কেআই স্বাক্ষর প্রয়োজন। এফএমজেড প্ল্যাটফর্মটি ব্যাকগ্রাউন্ডে স্বয়ংক্রিয়ভাবে একীভূত হয়েছে, যা সরাসরি ব্যবহারযোগ্য।
অ্যাকাউন্টের তথ্য পেতে; সর্বাধিক ব্যবহৃত ইন্টারফেসগুলির মধ্যে একটি, যা অর্ডার করার আগে কল করা প্রয়োজন, যাতে পর্যাপ্ত পরিমাণ না থাকে; ফলাফল যেমনঃ{"Stocks":0.38594816,"FrozenStocks":0,"Balance":542.858308,"FrozenBalance":0,"Info":{}}
⇒ যেখানে স্টকগুলি হল লেনদেনের জন্য মুদ্রার উপলব্ধ ব্যালেন্স, ফ্রোজেন স্টকগুলি হল অবৈধ অর্ডারগুলির জন্য হিমায়িত ব্যালেন্স, ব্যালেন্স হল মূল্য নির্ধারণের জন্য মুদ্রার উপলব্ধ ব্যালেন্স, এবং ফ্রোজেন ব্যালেন্স হল লেনদেনের জন্য হিমায়িত ব্যালেন্স।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
}
}
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')
}
বিক্রয়-অনুচ্ছেদের পরামিতিগুলো হলো:exchange.Sell(-1, 0.2)
তবে, এই চুক্তির মাধ্যমে তারা তাদের সম্পত্তি বিক্রি করতে পারবে।
অর্ডার আইডি অনুযায়ী অর্ডার তথ্য পান; সাধারণ ইন্টারফেস, কল পদ্ধতিexchange.GetOrder(OrderId)
অর্ডার আইডি হল অর্ডার আইডি, যা অর্ডার দেওয়ার সময় ফিরে আসে।আদেশের ধরন লক্ষ্য করুনType
ক্ষেত্র এবং অর্ডার অবস্থাStatus
প্রকৃত মানগুলি সংখ্যা, যা বিভিন্ন অর্থের প্রতিনিধিত্ব করে, তবে এটি স্মৃতিশক্তির পক্ষে অনুকূল নয়। এফএমজেড বিশ্বব্যাপী ধ্রুবকগুলির সাথে এই মানগুলি উপস্থাপন করে, যেমন অপ্রাপ্ত আদেশগুলির জন্য।Status
এর মান হল ০।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)
}
}
}
}
বর্তমান লেনদেনের জন্য সমস্ত অপরাজিত আদেশের তালিকা পান। যদি কোনও অপরাজিত আদেশ না থাকে তবে একটি ফাঁকা অ্যারে ফিরে আসে। অর্ডার তালিকার নির্দিষ্ট ফলাফল যেমন 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)
}
}
অর্ডার আইডি অনুযায়ী অর্ডার বাতিল করা হয়েছে।exchange.CancelOrder(OrderId)
⇒ প্রত্যাহার সফল হলে true ফেরত আসে, অন্যথায় false ফেরত আসে ⇒ লক্ষ্য করুন অর্ডারটি সম্পূর্ণরূপে সম্পন্ন হলে প্রত্যাহার ব্যর্থ হবে ⇒
ডিজিটাল মুদ্রার ফিউচার ট্রেডিং এবং তাত্ক্ষণিক ট্রেডিং আলাদা, উপরের তাত্ক্ষণিক ট্রেডিংয়ের ফাংশনগুলি একইভাবে ফিউচারগুলির জন্য প্রযোজ্য, একক ফিউচার ট্রেডিংয়ের নিজস্ব ফাংশন রয়েছে। ডিজিটাল মুদ্রার ফিউচার প্রোগ্রামযুক্ত ট্রেডিংয়ের আগে, ওয়েবসাইটটিতে ম্যানুয়াল অপারেশনগুলির সাথে পরিচিত হওয়া উচিত, মৌলিক ধারণাগুলি বুঝতে হবে, যেমন খোলা, স্থির, পুরো স্টপ, একক স্টপ, লিভারেজ, স্থির হ্রাস, ফ্লোটিং লাভ, গ্যারান্টিযুক্ত অর্থের ধারণাগুলি এবং সংশ্লিষ্ট গণনার সূত্রগুলি, প্রতিটি ফিউচার এক্সচেঞ্জের সাথে সম্পর্কিত টিউটোরিয়ালগুলি পাওয়া যায় এবং নিজেরাই শিখতে হবে।
চিরস্থায়ী চুক্তি এবং ফিউচার চুক্তি একই রকম, পার্থক্য হল যে একই সাথে একাধিক ফাঁকা ধারণার ধারণা নেই।
যদি এক্সচেঞ্জটি একই সময়ে ওকেএক্স এবং হুওবির মতো সাময়িক ফিউচারগুলি সমর্থন করে তবে এক্সচেঞ্জ ইন্টারফেসে আলাদাভাবে ওকেএক্স ফিউচার প্যানেল এবং হুওবি ফিউচার প্যানেল যুক্ত করা প্রয়োজন, যা এফএমজেডে একটি পৃথক এক্সচেঞ্জ হিসাবে বিবেচিত হয়।
ফিউচার ট্রেডিংয়ের প্রথম ধাপ হল ট্রেডিংয়ের জন্য একটি চুক্তি সেটআপ করা, উদাহরণস্বরূপ, ওকেএক্স ফিউচার, একটি বাস্তব বা পুনর্বিবেচনার সময় একটি বিটিসি ট্রেডিং জোড়া নির্বাচন করুন, এবং কোডটিতে সেট করা দরকার এই সপ্তাহে, পরের সপ্তাহে বা ত্রৈমাসিক চুক্তি; যদি সেট না করা হয় তবে পরামর্শ দেওয়া হবে।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官网。
বর্তমান হোল্ডিং তথ্যের তালিকা পেতে, OKEX ((OKCOIN) ফিউচার একটি পরামিতি পাস করতে পারে যা কন্ট্রাক্টের ধরন নির্দিষ্ট করে। যদি কোনও হোল্ডিং না থাকে তবে খালি তালিকাটি ফিরে আসে[]
⇒ হোল্ডিং তথ্য নিম্নরূপ ফিরে আসে, অনেকগুলি নির্দিষ্ট তথ্য, যা নির্দিষ্ট বিশ্লেষণের সাথে ট্রেডিংয়ের সাথে যুক্ত করা প্রয়োজন।
ডেটা টাইপ | ভেরিয়েবল নাম | ব্যাখ্যা |
---|---|---|
বস্তু | তথ্য | এক্সচেঞ্জের মূল কাঠামো |
সংখ্যা | মার্জিন লেভেল | লিভারের আকার, OKCoin 10 বা 20, ঠিক আছে ফিউচার এর পুরো স্টকের মোড স্থির 10 ফিরে আসে কারণ নেটিভ API সমর্থন করে না |
সংখ্যা | পরিমাণ | হোল্ডিং ভলিউম, OKCoin চুক্তির সংখ্যা (সমস্ত সংখ্যা এবং 1 এর চেয়ে বড়) |
সংখ্যা | হিমায়িত পরিমাণ | অবস্থান হিমায়িত পরিমাণ |
সংখ্যা | দাম | শেয়ারের মূল্য |
সংখ্যা | মার্জিন | জামিন জমা |
সংখ্যা | মুনাফা | কমোডিটি ফিউচারঃ হোল্ডিং হোল্ডিং মার্কেট লস, ডিজিটাল মুদ্রাঃ ((ডিজিটাল মুদ্রা ইউনিটঃ বিটিসি/এলটিসি, ঐতিহ্যগত ফিউচার ইউনিটঃ আরএমবি, দ্রষ্টব্যঃ OKCoin ফিউচার পূর্ণ হোল্ডিংয়ের ক্ষেত্রে উদ্বৃত্ত অর্থায়ন বোঝায়, হোল্ডিং হোল্ডিং নয়, হোল্ডিং হোল্ডিং বোঝায়) |
কনস্ট | প্রকার | PD_LONG হল মাল্টিপয়েন্ট পজিশন (CTP-তে closebuy_today পেরিয়ে), PD_SHORT হল খালি পয়েন্ট (CTP-তে closeesell_today) পেরিয়ে, (CTP-এর ফিউচার) PD_LONG_YD হল গতকালের মাল্টিপয়েন্ট পজিশন (CTP-তে closebuy পেরিয়ে), PD_SHORT_YD হল গতকালের খালি পয়েন্ট (CTP-তে closeesell পেরিয়ে) |
স্ট্রিং | চুক্তির ধরন | পণ্যের ফিউচারটি চুক্তির কোড, স্টকটি এক্সচেঞ্জের কোড _ স্টক কোডটি কোড, নির্দিষ্ট পরামিতি 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 বার লিভারেজ ব্যবহার করতে পারেন।মনে রাখবেন যে লিভারেজটি এক্সচেঞ্জের উপর সেট করা উচিত, কোডটি এক্সচেঞ্জের সাথে সামঞ্জস্যপূর্ণ হতে হবে, অন্যথায় ভুল হবে।⇒ ডিফল্ট লিভার ব্যবহার করে সেট করা যাবে না।
তারপর, লেনদেনের দিকনির্দেশনা সেট করুন, কল করুনঃexchange.SetDirection(Direction)
, খোলা পজিশনের সাথে সামঞ্জস্যপূর্ণ, ** ভবিষ্যতের বিপরীতে, যদি চিরস্থায়ী চুক্তিতে একই সাথে একাধিক ফাঁকা ধারণার ধারণাগুলি না থাকে, অর্থাৎ একক পজিশন ধরে রাখার অনুমতি দেওয়া হয় না, তবে বেশি সময় খোলা স্বয়ংক্রিয়ভাবে বহু পজিশন ফাঁকা করে, সমস্ত কেবল সেট করা দরকার।buy
এবংsell
হ্যাঁ. যদি আপনি দ্বি-মুখী অবস্থান সমর্থন করেন তবে সেটিংস প্রয়োজন।closebuy
,closebuy
◦** নির্দিষ্ট সম্পর্কঃ
অপারেশন | SetDirection এর পরামিতি | নিম্নলিখিত ফাংশন |
---|---|---|
আরও বেশি দোকান | exchange.SetDirection (( |
বিনিময়.কপাই ((() |
প্লেইন মাল্টি-হাউজ | exchange.SetDirection (( |
বিনিময়.বিক্রয় ((() |
খালি গুদাম | exchange.SetDirection (( |
বিনিময়.বিক্রয় ((() |
খালি ভাণ্ডার | exchange.SetDirection (( |
বিনিময়.কপাই ((() |
অবশেষে, নির্দিষ্ট ওপেন-হোল্ডিং স্টপিং কোড রয়েছে, যা বিভিন্ন এক্সচেঞ্জের মধ্যে পৃথক পরিমাণে পরিবর্তিত হয়, যেমন হুবি ফিউচারগুলি টুকরো সংখ্যার ভিত্তিতে, এক টুকরো 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") সাধারণ অ্যাকাউন্ট মোডে স্যুইচ করুন।
সমর্থিত এক্সচেঞ্জঃ
কমোডিটি ফিউচার ট্রেডিং এবং ডিজিটাল মুদ্রা ফিউচার ট্রেডিং এর মধ্যে অনেক পার্থক্য রয়েছে। প্রথমত, কমোডিটি ফিউচারগুলির ট্রেডিংয়ের সময় খুব কম, ডিজিটাল মুদ্রা 24 ঘন্টা ট্রেড করে; কমোডিটি ফিউচারগুলির প্রোটোকলগুলিও সাধারণভাবে ব্যবহৃত REST API নয়; কমোডিটি ফিউচারগুলির ট্রেডিং ফ্রিকোয়েন্সি এবং আটকানো তালিকার সংখ্যা সীমাবদ্ধ, ডিজিটাল মুদ্রা খুব নরম, ইত্যাদি। সুতরাং, কমোডিটি ফিউচার ট্রেডিংয়ের অনেকগুলি বিশেষ মনোযোগের প্রয়োজন রয়েছে, তাই প্রচুর ম্যানুয়াল অপারেটিং অভিজ্ঞতা থাকার পরামর্শ দেওয়া হয়। FMZ simnow কমোডিটি ফিউচার সিমুলেটর সমর্থন করে, উল্লেখ করুনঃ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 এর সাথে কিছু পরিষেবাদাতার গভীর সহযোগিতা রয়েছে, যেমন গুয়াংঝো, যা FMZ প্ল্যাটফর্মের প্রাতিষ্ঠানিক সংস্করণ কিনে ব্যবহারকারীদের জন্য ব্যবহার করতে পারে।https://www.fmz.com/bbs-topic/506 。
এফএমজেড প্ল্যাটফর্মের আর্কিটেকচারের সুবিধার কারণে, ব্যবহারকারীরা একইভাবে একাধিক ফিউচার অ্যাকাউন্ট যুক্ত করতে পারে এবং অন্যান্য পণ্যের ফিউচার প্রোগ্রামযুক্ত ট্রেডিং সফ্টওয়্যারগুলি সম্পন্ন করতে পারে না এমন কিছু বৈশিষ্ট্য সম্পাদন করতে পারে, যেমন উচ্চ-ফ্রিকোয়েন্সি টিকের সংমিশ্রণ।https://www.fmz.com/bbs-topic/1184
প্রথমত, যেহেতু এটি 24 ঘন্টা লেনদেন নয় এবং ল্যান্ডিং অপারেশন প্রয়োজন, তাই লেনদেনের আগে লিঙ্ক স্থিতি নির্ধারণ করা প্রয়োজন।exchange.IO("status")
জন্যtrue
এটি একটি এক্সচেঞ্জের সাথে সংযোগ স্থাপনকে নির্দেশ করে। যদি লগইন সফল না হয় তবে API কল করুন, লগইন বোতামটি অনুরোধ না করে। নীতিটি শুরু হওয়ার পরে ঘুম ((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)
}
}
}
কমোডিটি ফিউচার লাইব্রেরি ট্রেডিং ব্যবহার করার পরামর্শ দেওয়া হয় (পরবর্তী বিবরণ দেওয়া হবে) । এই ক্ষেত্রে কোডটি খুব সহজ হবে এবং বিরক্তিকর বিবরণ মোকাবেলা করার প্রয়োজন হবে না।https://www.fmz.com/strategy/57029
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")
এই সময়ে ফিরে আসা সূচকটি ফিরে আসা এক্সচেঞ্জের সূচককে নির্দেশ করে।
টিক পরিবর্তনের প্রেরণাঃ{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)
}
}
}
এছাড়াও, কমোডিটি ফিউচারগুলি ডিজিটাল মুদ্রা এক্সচেঞ্জের সাথে আলাদা হওয়া উচিত। যেমন গেটডিপথ আসলে কেবলমাত্র একটি গভীরতার ফাইল রয়েছে ((৫-গভীরতার ফি ব্যয়বহুল) এবং গেটট্রেডগুলিও লেনদেনের ইতিহাস অ্যাক্সেস করতে পারে না ((সমস্তটি হোল্ডিং পরিবর্তনের ভিত্তিতে অনুকরণ করা হয়, কোনও বাস্তব লেনদেনের রেকর্ড নেই) । কমোডিটি ফিউচারগুলির একটি পতনশীল সীমাবদ্ধতা রয়েছে, যখন এটি বন্ধ হয়, তখন গভীর বিক্রয় আদেশের দাম হ'ল স্টপ মূল্য, অর্ডার পরিমাণ 0, যখন এটি বন্ধ হয়, তখন কেনার দাম হ'ল পতনশীল মূল্য, অর্ডার পরিমাণ 0। এছাড়াও কমোডিটি ফিউচার অনুসন্ধান ইন্টারফেসের ফ্রিকোয়েন্সি রয়েছে, অ্যাকাউন্ট, অর্ডার, অবস্থানগুলি অ্যাক্সেস করার সীমাবদ্ধতা রয়েছে, যেমন কঠোর সীমাবদ্ধতা, সাধারণত 2 এস প্রয়োজন। কমোডিটি সময়সীমা ইনভেন্টরিতে অর্ডার প্রত্যাহারের সীমাবদ্ধতা ইত্যাদি।
exchange.IO("instruments"): এক্সচেঞ্জের সমস্ত চুক্তির তালিকা {কন্ট্রাক্টের নামঃ বিস্তারিত} অভিধান ফর্ম্যাট ফেরত দেয়, শুধুমাত্র বাস্তব ডিস্ক সমর্থন করে।exchange.IO("products"): এক্সচেঞ্জের সমস্ত পণ্যের তালিকা {পণ্যের নামঃ বিস্তারিত} অভিধানের ফর্ম্যাটে ফিরে আসে, শুধুমাত্র বাস্তব ডিস্ক সমর্থন করে।exchange.IO("subscribed"): অবদানকারী বাজারের চুক্তি ফেরত দেয়, একই ফর্ম্যাটে, শুধুমাত্র বাস্তব প্লেট সমর্থন করে।
ঐতিহ্যগত সিটিপি ফিউচারContractType
এই আইডিটি হল চুক্তির আইডি, যা বড় বা ছোট আকারে লেখা হয়।exchange.SetContractType("au1506")
❖ চুক্তির সেটআপ সফল হলে চুক্তির বিস্তারিত তথ্য ফিরে আসে, যেমন কমপক্ষে একবার কত কিনতে হবে, অপারেশন ফি, ডেলিভারি সময় ইত্যাদি ❖ একাধিক চুক্তি সাবস্ক্রাইব করার সময়, শুধুমাত্র প্রথমবারের জন্য একটি প্রকৃত সাবস্ক্রিপশন অনুরোধ পাঠানো হয়, এবং তারপরে কেবল কোড স্তরে ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ ❖ তবে মাই ভাষায় প্রধান চুক্তি পরিচালনা করা যায়, এবং প্রোগ্রামটি স্বয়ংক্রিয়ভাবে স্থানান্তরিত হয়, অর্থাৎ একটি অ-প্রধান অবস্থানকে সমতল করে এবং একটি নতুন অবস্থানকে মূল অবস্থানে স্থাপন করে।
লগইন সফল না হলে কন্ট্রাক্ট সেটআপ করা সম্ভব নয়, তবে তাৎক্ষণিকভাবে ফিরে আসবে, তাই আপনি _C দিয়ে আবার চেষ্টা করতে পারেন এবং জানতে পারবেন যে সিটিপি লগইন সম্পন্ন হয়েছে। লগইন সফল হলে, আবার কন্ট্রাক্ট সেটআপ করা সময় সাশ্রয়ী নয় এবং প্রকৃত নেটওয়ার্ক অ্যাক্সেস তৈরি করবে না।
SetDirection
ডাইরেকশনbuy, closebuy, sell, closesell
চারটি প্যারামিটার, কমোডিটি ফিউচার বেশিclosebuy_today
এবংclosesell_today
আমি মনে করি, আমরা এখন যে অবস্থানে রয়েছি।closebuy/closesell
গতকালের জন্য, কেবলমাত্র পূর্ববর্তী সময়ের জাতের মধ্যে পার্থক্য রয়েছে, যা প্রক্রিয়াজাতকরণের ফিকে প্রভাব ফেলতে পারে, তাই গতকালের স্থিতিশীলতার অগ্রাধিকার দেওয়া প্রয়োজন। সিটিপি ঐতিহ্যবাহী ভবিষ্যতের জন্য, দ্বিতীয় পরামিতিটি সেট করা যেতে পারে 1 টন বা 2 টন বা 3 টন, যথাক্রমে কল্পনা কল্পনা, কল্পনা মুনাফা, কল্পনা সুরক্ষা, ডিফল্টভাবে কল্পনা না করা।নির্দিষ্ট ক্রয়, বিক্রয়, অবস্থান গ্রহণ, অর্ডার গ্রহণ, প্রত্যাহার, অ্যাকাউন্ট গ্রহণ ইত্যাদি ক্রিয়াকলাপগুলি ডিজিটাল মুদ্রার ফিউচার ট্রেডিংয়ের মতোই, পূর্ববর্তী অধ্যায়টি দেখুন।
অপারেশন | SetDirection এর পরামিতি | নিম্নলিখিত ফাংশন |
---|---|---|
আরও বেশি দোকান | exchange.SetDirection (( |
বিনিময়.কপাই ((() |
প্লেইন মাল্টি-হাউজ | exchange.SetDirection (( |
বিনিময়.বিক্রয় ((() |
খালি গুদাম | exchange.SetDirection (( |
বিনিময়.বিক্রয় ((() |
খালি ভাণ্ডার | exchange.SetDirection (( |
বিনিময়.কপাই ((() |
নীচের উদাহরণটি একটি নির্দিষ্ট স্থিতিশীল ফাংশন, লক্ষ্য করুন যে এই উদাহরণটি খুব সহজ, তবে এটি ট্রেডিংয়ের সময় কিনা, সম্পূর্ণরূপে সম্পন্ন হয়নি এমন একটি অর্ডার পুনরায় চেষ্টা করার জন্য কীভাবে, সর্বোচ্চ অর্ডার পরিমাণ কত, ফ্রিকোয়েন্সি খুব বেশি কিনা, সুইচ বা খোলার জন্য নির্দিষ্ট কিনা ইত্যাদির একটি সিরিজ প্রশ্ন বিবেচনা করে। শুধুমাত্র রেফারেন্সের জন্য।এই প্ল্যাটফর্মটি একটি ভালভাবে প্যাকেজ করা শ্রেণিবিন্যাস ব্যবহার করার পরামর্শ দেয়।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")
এর সুনির্দিষ্ট পরিণতি হলঃ
ডিফল্টরূপে, পণ্যের ভবিষ্যৎ ব্যবসায়ীদের মধ্যে CTP ইন্টারফেস খোলা থাকে, যদি প্রয়োজন হয় তবে এটি ইজি ইন্টারফেস পরিবর্তন করা যেতে পারে। FMZ এর মাধ্যমে প্যাকেজ, কল করার পদ্ধতি একই। পার্থক্যটি হ'ল অ্যাকাউন্ট, অর্ডার এবং হোল্ডিং উভয়ই প্রেরণ মোড, তাই ট্রাস্টি স্থানীয়ভাবে এই ডেটা বজায় রাখে এবং যখন সংশ্লিষ্ট ইন্টারফেসটি কল করা হয় তখন তাৎক্ষণিকভাবে ফিরে আসে, প্রকৃতপক্ষে কোনও অনুরোধ করা হয় না।
ইয়েসিন প্রোটোকল কাস্টমাইজড অর্ডার টাইপঃ
লগ ইন করুন একটি লগ, একটি স্ট্রিং পরে @ অক্ষর যোগ করুন, বার্তাটি ধাক্কা ক্যোয়ারে প্রবেশ করবে, যা উইকিমেসে বা টেলিগ্রামে আবদ্ধ হওয়ার পরে সরাসরি ধাক্কা দেওয়া হবে।Log('推送到微信@')
লগের রঙও কাস্টমাইজ করা যায়Log('这是一个红色字体的日志 #ff0000')
。#ff0000
RGB রঙের জন্য 16 ইন্ডিকেটর
সমস্ত লগ ফাইলগুলি হোস্টের ডাইরেক্টরিতে ভার্চুয়াল ডিস্কের sqlit ডাটাবেসে রয়েছে, যা ডাটাবেস সফ্টওয়্যার দিয়ে ডাউনলোড করা যায় এবং ব্যাকআপ পুনরুদ্ধারের জন্যও ব্যবহার করা যেতে পারে ((ডাটাবেস নাম এবং ভার্চুয়াল ডিস্ক আইডি একই) ।) ।
রিজার্ভ রেকর্ড করা হয়, এবং রিজার্ভ কার্ভগুলি রিয়েল ডিস্ক ইন্টারফেসে আঁকা হয়, যা রিয়েল ডিস্ক পুনরায় চালু হওয়ার পরেও সংরক্ষণ করা যায়।LogProfit(1000)
❖ সাবধানLogProfit
এই প্যারামিটারটি অবশ্যই উপার্জন নয়, এটি যে কোনও সংখ্যা হতে পারে, যা নিজের দ্বারা পূরণ করা দরকার।
ডিস্ক অবস্থা, যেহেতু লগ লগ সংরক্ষণ করা হয় এবং সর্বদা রিফ্রেশ করা হয়, যদি আপনি শুধুমাত্র একটি প্রদর্শন না সংরক্ষিত তথ্য প্রয়োজন, আপনি ব্যবহার করতে পারেন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
JSON-এর জন্য, এটি একটি খুব সহজ এবং ব্যবহারিক পদ্ধতি, যা JSON-এর জন্য সেরিয়েটেড বিষয়বস্তু সংরক্ষণ করতে পারে।_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(4.253,2)
ফলাফল ৪.২৫।
এক্সচেঞ্জ এপিআই কল করার জন্য, প্রতিটি অ্যাক্সেসের সাফল্যের গ্যারান্টি নেই, _C একটি স্বয়ংক্রিয়ভাবে পুনরায় চেষ্টা করা ফাংশন। নির্দিষ্ট ফাংশনটি সফলভাবে ফিরে আসা পর্যন্ত কল করা হবে (ফাংশনটি null বা false ফেরত দেবে) যেমনঃ_C(exchange.GetTicker)
, ডিফল্টরূপে 3 সেকেন্ডের জন্য পুনরায় পরীক্ষা করার সময়সীমা রয়েছে, পুনরায় পরীক্ষা করার সময়সীমা নিয়ন্ত্রণ করার জন্য _CDelay ফাংশনটি কল করা যেতে পারে, যেমন _CDelay ((1000), যা _C ফাংশনের পুনরায় পরীক্ষা করার সময়সীমা 1 সেকেন্ডে পরিবর্তন করার পরামর্শ দেয়।GetTicker()
,exchange.GetDepth
,GetTrade
,GetRecords
,GetAccount
,GetOrders
, GetOrder
এটি একটি ত্রুটি-সমর্থন প্রোগ্রাম যা অ্যাক্সেস ব্যর্থতার কারণে প্রোগ্রামের বিচ্ছিন্নতা রোধ করে।
CancelOrder
_C ফাংশনটি ব্যবহার করা যায় না, কারণ প্রত্যাহার ব্যর্থতার বিভিন্ন কারণ রয়েছে। যদি একটি সেল ইতিমধ্যে সম্পন্ন হয়, তাহলে প্রত্যাহার ব্যর্থ হবে, এবং _C ফাংশনটি ব্যবহার করে পুনরায় চেষ্টা করা হবে।
_C ফাংশনটি প্যারামিটারগুলিও পাস করতে পারে এবং কাস্টম ফাংশনগুলির জন্যও ব্যবহৃত হয়।
function main(){
var ticker = _C(exchange.GetTicker)
var depth = _C(exchange.GetDepth)
var records = _C(exchange.GetRecords, PERIOD_D1) //传入参数
}
সরাসরি কল করুন_D()
এটি বর্তমান সময় স্ট্রিং প্রদান করে, যেমনঃ2019-08-15 03:46:14
│ যদি পুনরায় পরীক্ষা করা হয় তাহলে পুনরায় পরীক্ষা করার সময় ফেরত দেয়│ সময় নির্ধারণ করতে_D ফাংশন ব্যবহার করা যেতে পারে, যেমনঃ_D().slice(11) > '09:00:00':
_D(timestamp,fmt)
এমএস টাইমলাইনকে টাইমিং স্ট্রিংতে রূপান্তর করে, যেমনঃ_D(1565855310002)
◎fmt প্যারামিটারটি টাইম ফরম্যাটের জন্য, ডিফল্টyyyy-MM-dd hh:mm:ss
কিছু সাধারণ সূচক ফাংশনের জন্য, যেমন MA\MACD\KDJ\BOLL এর মতো সাধারণ সূচক, FMZ প্ল্যাটফর্মটি সরাসরি অন্তর্নির্মিত।
সূচক ফাংশন ব্যবহারের আগে, K-রেখা দৈর্ঘ্য নির্ধারণ করা ভাল। যখন পূর্ববর্তী K-রেখা দৈর্ঘ্য গণনা করার জন্য প্রয়োজনীয় চক্রগুলি পূরণ করতে পারে না, তখন ফলাফলটি হলnull
⇒ যদি ইনপুট করা K লাইন দৈর্ঘ্য 100 হয় এবং গণনা করা MA এর চক্র 10 হয়, তবে প্রথম 9 টি মান শূন্য, পরবর্তীটি স্বাভাবিক গণনা করা হয়।
জাভাস্ক্রিপ্ট এছাড়াও পূর্ণ তালিব সমর্থন করে, তৃতীয় পক্ষের লাইব্রেরি সমর্থন, যেমন কলtalib.CCI(records)
◄ রেফারেন্সhttp://ta-lib.org/function.html⇒ পাইথনের জন্য, আপনি নিজেরাই তালেব সংরক্ষণাগারটি ইনস্টল করতে পারেন, কারণ এটি সংকলন করতে হবে, সহজভাবে পিপ ইনস্টল করা সম্ভব নয়, আপনি নিজেরাই ইনস্টলেশন পদ্ধতি অনুসন্ধান করতে পারেন।
সূচক ফাংশনগুলি K-রেখা ডেটা ছাড়াও যেকোনো অ্যারেতে প্রেরণ করতে পারে
function main(){
var records = exchange.GetRecords(PERIOD_M30)
if (records && records.length > 9) {
var ma = TA.MA(records, 14)
Log(ma)
}
}
এখানে কিছু সাধারণ জাভাস্ক্রিপ্ট ফাংশন দেখানো হয়েছে।
Date.now()
বর্তমান সময়রেখায় ফিরে যানparseFloat()
স্ট্রিংগুলোকে সংখ্যায় রূপান্তর করা, যেমনparseFloat("123.21")
parseInt()
স্ট্রিংকে পূর্ণসংখ্যায় রূপান্তর করুনnum.toString()
সংখ্যাকে স্ট্রিং, সংখ্যাকে ভেরিয়েবলJSON.parse()
Json স্ট্রিং ফরম্যাট করুন, যেমনঃJSON.parse(exchange.GetRawJSON())
Math.max()
,Math.abs()
ইত্যাদি প্রায়শই গণিতের অপারেশন ব্যবহার করা হয়।https://www.w3school.com.cn/jsref/jsref_obj_math.aspএকটি বাস্তব প্লেট কৌশল বৈশিষ্ট্য লিখতে অনেক পরিস্থিতিতে বিবেচনা করা প্রয়োজন, যেমন 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⇒ ইতোমধ্যে বিল্ট-ইন করা হয়েছে, অনুলিপি করার প্রয়োজন নেই।
সিটিএ সংগ্রহশালা
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/27293পাইথন প্রিন্ট লাইন ক্লাসের কপি ঠিকানাঃ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)
}
}
নীতি সম্পাদনার নীচে নীতির প্যারামিটার সেটিংস রয়েছে, যা নীতির গ্লোবাল ভেরিয়েবলের সমতুল্য, যা কোডের যে কোনও অবস্থানে অ্যাক্সেস করা যায়। নীতির প্যারামিটারগুলি রিয়েল-ডিস্ক ইন্টারফেসে পরিবর্তন করা যেতে পারে, পুনরায় চালু হওয়ার পরে কার্যকর হয়। সুতরাং কিছু ভেরিয়েবলকে প্যারামিটার হিসাবে সেট করা যায় এবং নীতি পরিবর্তন না করেও প্যারামিটারগুলি পরিবর্তন করা যায়।
স্ট্রিং টাইপ এবং সংখ্যা টাইপ সহজেই বোঝা যায় এবং সবচেয়ে সাধারণভাবে ব্যবহৃত হয়। ড্রপবক্সটি প্যারামিটার ইন্টারফেসে বিকল্প ড্রপবক্সগুলি প্রদর্শন করবে, যেমন ড্রপবক্সের SYMBOL প্যারামিটারের মানটি সেট করা যেতে পারেBTC|USDT|ETH
যদি আপনি প্যারামিটার পৃষ্ঠার ড্রপডাউন প্যাকেজে ইউএসডিটি নির্বাচন করেন, তবে নীতিতে সিএমবোলের মানটি ইউএসডিটি এর সূচক 1 হবে।
প্যারামিটারগুলি সেট করার জন্য আরও অনেক কিছু আছে।https://www.fmz.com/bbs-topic/1306
একটি কৌশল পরিমাপ করার পরে, আপনার কৌশলটি historicalতিহাসিক ডেটা দিয়ে পরীক্ষা করা যেতে পারে এবং দেখুন যে আপনার কৌশলটি historicalতিহাসিক ডেটাতে কতটা লাভজনক। অবশ্যই, পুনর্বিবেচনার ফলাফলগুলি কেবলমাত্র রেফারেন্সের জন্য। FMZ-এর পরিমাপ প্ল্যাটফর্মটি ডিজিটাল মুদ্রা বর্তমান, ভবিষ্যত, বিটমেক্স চিরস্থায়ী চুক্তি পণ্য এবং ভবিষ্যতের পুনর্বিবেচনা সমর্থন করে, যার মধ্যে ডিজিটাল মুদ্রা প্রধানত মূলধারার জাতগুলিকে সমর্থন করে। জাভাস্ক্রিপ্ট পুনরাবৃত্তি ব্রাউজারে করা হয়, পাইথন পুনরাবৃত্তি হোস্টের উপর প্রয়োজন হয়, প্ল্যাটফর্মটি পাবলিক হোস্ট সরবরাহ করতে পারে। ম্যাক ভাষার পুনরাবৃত্তি এবং আরও অনেক প্যারামিটার সেট করতে হবে, বিশেষত ম্যাক ভাষার ডকুমেন্টেশন উল্লেখ করুন।
অনবার রিভিউ প্রক্রিয়াটি কে-লাইন ভিত্তিক, অর্থাৎ প্রতিটি কে-লাইন একটি রিভিউ সময় পয়েন্ট উৎপন্ন করে, যেখানে বর্তমান কে-লাইনের উঁচু, নীচ মূল্য, লেনদেনের পরিমাণ ইত্যাদির তথ্য পাওয়া যায়, এবং এই সময় পয়েন্টের আগে।
গাওনচেয়ারএপিআই
বিজ্ঞানআমি একটি সহজ লগ আউটপুট স্টেটমেন্ট লিখেছি এবং বাক্যের শেষে অপারেশনটি অনুসরণ করেছি। প্রথম ধাপটি হ'ল একটি ল্যাপটপকে সার্ভার হিসাবে ব্যবহার করা এবং হোস্ট প্রোগ্রামটি চালানো। দ্বিতীয় ধাপে, একটি সহজ লগ আউটপুট তথ্যের জন্য test.py প্রোগ্রাম লিখুন (FMZ এর API ইন্টারফেস ফাংশন); তৃতীয় ধাপে, পাঠ্যের শেষে যেমন, একটি রানফাইল লিখুন, যা run.py এর মাধ্যমে test.py কল করে চলে। /upload/asset/1add39483ef82d45b3ce3.png
জিপি৯আমি যে নেটওয়ার্ক ক্লাউড কোয়ালিটি ট্রেডিং কোর্স কিনেছি তা এখন কোথায় আছে?
মনুরাজাকঅনেক
মনুরাজাকহাই
ভাইয়েরা।শেখা
wqyএকটি ছোট্ট টেক্সট ত্রুটি আছে, GetAccount অ্যাকাউন্ট প্রাপ্তি। ফ্রিজেন স্টকগুলিকে একটি অব্যবহৃত ব্যালেন্সের পরিবর্তে একটি হিমায়িত ব্যালেন্স হিসাবে উল্লেখ করা উচিত।
মেজর জয়া।getorder outtime অর্ডার আউটটাইম, ওকেএক্সের এক্সচেঞ্জ, কিভাবে?
উবুড়ির উচ্চ কৌশলগ্যারান্টিযুক্ত সম্পদ হার 0% পর্যন্ত বাধ্যতামূলক বন্ধক গ্যারান্টিযুক্ত সম্পদ হার পাওয়া যাবে না
shifeng2020আমি 1 মিনিট k স্ট্রিং চার্ট অপারেশন দেখছি, তাই পাইথন ডেড লুপের sleep time 0.1s সেট করা যায়, অর্থাৎ sleep ((100) । আমি দেখতে পাচ্ছি আপনি সেখানে একটি sleep ((10) লিখেছেন, অর্থাৎ 0.1s HM এর API সীমা অতিক্রম করবে না?
পূর্ব বাতাসের মন্দিরexchange.SetDirection (("closebuy"); // যদি স্থায়ী চুক্তি হয়, তাহলে সরাসরি exchange.SetDirection (("sell") সেট করুন এখানে আমি OKex এর চিরস্থায়ী চুক্তির চেষ্টা করেছি, যদি সেট করা হয় sell, সরাসরি খালি হয়ে যায়।
পূর্ব বাতাসের মন্দিরexchange.SetDirection (("closebuy"); // যদি স্থায়ী চুক্তি হয়, তাহলে সরাসরি exchange.SetDirection (("sell") সেট করুন এখানে আমি OKex এর চিরস্থায়ী চুক্তির চেষ্টা করেছি, যদি সেট করা হয় sell, সরাসরি খালি হয়ে যায়।
পূর্ব বাতাসের মন্দিরGetOrders এর কোডে দুটি বানান ত্রুটি রয়েছে। একটি ফাংশন ফাংশন হিসেবে লেখা হয়েছে, অন্যটি ফর লুপের শর্তে লেখা হয়েছে।
পূর্ব বাতাসের মন্দিরআমার ভুল ছিল। exchange.Buy ((-1, 0.5), ট্রেডিং জোড়াটি হল ETH_BTC, বাজারের তালিকাটি 0.5BTC এর ETH কেনার প্রতিনিধিত্ব করে exchange.Buy ((price, 0.5), যদি এই ধরনের সীমা তালিকা হয়, তাহলে 0.5ETH কেনার জন্য price ব্যবহার করা হয়।
পূর্ব বাতাসের মন্দিরexchange.Buy ((-1, 0.5), যা ETH_BTC এর বিনিময় হয়, যা বাজারের মূল্যের 0.5BTC এর ETH কেনার প্রতিনিধিত্ব করে এখানে আপনি 0.5 ETH এর জন্য বাজারের মূল্যের জন্য টমেটো কিনতে হবে।
জিপি৯ধন্যবাদ।
ঘাসএটি অনলাইনে পাওয়া যায় https://study.163.com/course/courseMain.htm?share=2&shareId=400000000602076&courseId=1006074239&_trace_c_p_k2_=c3f5d238efc3457d93c8b92c0398d2b2
ঘাসহোমপেজে উইকিমিডিয়া যুক্ত করুন, আপনাকে দলে যুক্ত করুন
wqyআপনি কি আমাদের অফিসিয়াল ফোরাম সম্পর্কে জানতে চান? কখনও কখনও আপনার সমস্যা হয় এবং আপনি কোথায় জিজ্ঞাসা করবেন তা জানেন না।
ঘাসপরিবর্তন করা হয়েছে
ঘাসপুনরুদ্ধার
ঘাসআপনি GetRawJSON ব্যবহার করতে পারেন অথবা Info ক্ষেত্রের তথ্য দেখতে পারেন
পূর্ব বাতাসের মন্দিরখুব ভাল, এবং প্রশাসনিক প্রতিক্রিয়াও। আমি কোডটিতে অনেকগুলি বানান ত্রুটি পেয়েছি, হা হা।
ঘাসওহ, সংশোধন করা হয়েছে, ভুলটি দেখানোর জন্য ধন্যবাদ।
ঘাসকিছু স্থায়ী চুক্তি দ্বিপাক্ষিক হোল্ডিংয়ের অনুমতি দেয়, স্থিতিশীলতা সেট করতে হবে। আমি আপডেট করেছি, এটি কেবল বিটমেক্স ছিল।