FMZ শিক্ষানবিস টিউটোরিয়াল

লেখক:ঘাস, তৈরিঃ 2019-04-09 11:29:07, আপডেটঃ 2024-02-06 17:35:38

[TOC]

img

1.এফএমজেড প্ল্যাটফর্ম দিয়ে শুরু করুন

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

পুরো টিউটোরিয়ালটি শেখার পর, আপনি জানতে পারবেন কিভাবে FMZ কাজ করে এবং কিছু মৌলিক কৌশল লিখতে সক্ষম হবে।

১.১ এফএমজেড প্ল্যাটফর্ম সম্পর্কে

এফএমজেড প্ল্যাটফর্ম কি?

এফএমজেড হল ক্রিপ্টোকারেন্সি ব্যবসায়ীদের জন্য একটি স্বয়ংক্রিয় ট্রেডিং প্ল্যাটফর্ম যা অনেক বিটকয়েন / ইথ / আল্টকয়েন এক্সচেঞ্জ মার্কেটের জন্য সমর্থন করে।

এফএমজেড আপনার জন্য কি করতে পারে?

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

FMZ কোন ক্রিপ্টোকারেন্সি এক্সচেঞ্জকে সমর্থন করে?

FMZ প্রায় সব এক্সচেঞ্জ যে জনপ্রিয় সমর্থন করে, যেমনBinance, Bitfinex, Bitstamp, OKEX, Huobi, Poloniex, ইত্যাদি আপনি এছাড়াও উপর ফিউচার ট্রেড করতে পারেনOKEXএবংBitMEX. সম্পূর্ণ সমর্থন তালিকা দেখুনএপিআইআপনাকে শুধু একটি কৌশল লিখতে হবে এবং কোন পরিবর্তন ছাড়াই সব এক্সচেঞ্জে এটি চালাতে হবে।

FMZ কোন প্রোগ্রামিং ভাষা সমর্থন করে?

এফএমজেড আপনার কৌশলগুলি কোড করার জন্য জাভাস্ক্রিপ্ট, পাইথন, সি ++ (জাভাস্ক্রিপ্ট এবং পাইথন প্রস্তাবিত) সমর্থন করে। সম্পূর্ণ ভাষা সমর্থন থেকে উপকৃত ((একটি কাস্টম ভাষা শুধুমাত্র এক প্ল্যাটফর্মের জন্য ব্যবহার করা যেতে পারে না), আপনি আপনার প্রোগ্রামিং দক্ষতা উন্নত করতে পারেন পাশাপাশি কৌশল লিখতে শিখতে পারেন।

আপনার এপিআই কী কি নিরাপদ?

হ্যাঁ, আপনার এপিআই-কীগুলি এনক্রিপশনের পরে সংরক্ষণ করা হয়। এটি কিভাবে কাজ করে তা এখানে।

  • আপনি FMZ পাসওয়ার্ড লিখতে হবে যখন কী যোগ করা. ওয়েব ব্রাউজার আপনার API কী এনক্রিপ্ট এবং ব্যবহার করে FMZ সার্ভারে এনক্রিপ্ট কী পাস করবেhttps.
  • আপনার সার্ভার বা কম্পিউটারে ডকার চালানোর সময় আপনাকে FMZ পাসওয়ার্ড লিখতে হবে।
  • FMZ আপনার ডকারের কাছে https ব্যবহার করে এনক্রিপ্ট করা কী পাঠাবে যখন আপনি একটি বট চালু করবেন। ডকারটি কীটি পেতে ডিক্রিপ্ট করবে।
  • এফএমজেড আপনার পাসওয়ার্ড সংরক্ষণ করে না (শুধুমাত্র পাসওয়ার্ড হ্যাশ) তাই আমরাও আপনার এপিআই কী জানি না।
  • আপনার নিজের পাসওয়ার্ড এবং ডকার সার্ভার রক্ষা করতে হবে। এটি একটি দ্বিতীয় যাচাইকরণ লগইন FMZ ব্যবহার করা ভাল।

বর্তমান বৈশিষ্ট্য তালিকাঃ

  • 1.ক্রস-প্ল্যাটফর্ম, সমস্ত প্রধান ক্রিপ্টোকারেন্সি এক্সচেঞ্জের জন্য সমর্থন আরও শীঘ্রই আসছে
  • 2.সিমুলেটেড এক্সচেঞ্জের জন্য সমর্থন। https://wex.app/
  • ৩.একটি কার্যকর সিমুলেট ব্যাকটেস্টিং সিস্টেম রয়েছে।
  • ৪.ই-মেইল পাঠানোর জন্য সমর্থন, আপনার টেলিগ্রাম অ্যাকাউন্টে বার্তা প্রেরণ।
  • ৫.ওয়েব-ভিত্তিক নিয়ন্ত্রণ যা আপনার ফোনের মাধ্যমে অ্যাক্সেস করা যায়।
  • 6.পাইথন\সি++\জাভাস্ক্রিপ্ট প্রোগ্রামিংয়ের জন্য সমর্থন।
  • ৭. খরচ খুবই কম। প্রতি ঘণ্টায় ০.১২৫ ইউএনবি, প্রায় ০.০১৮ ডলার।
  • 8.Noএপিআই-কী বা পাসওয়ার্ড আমাদের সার্ভারে সংরক্ষণ করা হয়। এফএমজেড কোনো নিরাপত্তা সমস্যা ছাড়াই চার বছরেরও বেশি সময় ধরে চলছে।

১.২ এফএমজেড প্ল্যাটফর্ম ব্যবহারের দ্রুত সূচনা

একটি বট চালানোর জন্য, আপনার একটি কৌশল থাকতে হবে, একটি এক্সচেঞ্জ যোগ করুন, প্রথমে একটি ডকার স্থাপন করুন। ডকার আপনার নিজের কম্পিউটার বা সার্ভারে চলমান আপনার কৌশল এর এক্সিকিউটর।

প্রধান পাতার একটি দ্রুত চেহারা

img

  • 1.আপনার প্রধান কন্ট্রোল পাতা
  • ২.আপনার সমস্ত বট পরিচালনা করুন (স্টার্ট,স্টপ,ডিলেট,ওপেন ইত্যাদি)
  • ৩.আপনার সমস্ত কৌশল পরিচালনা করুন কোড
  • 4.আপনার ডকার স্থাপন এবং পরিচালনা করুন
  • ৫.নতুন এক্সচেঞ্জ যুক্ত করুন
  • 6.আপনি যোগ করা এক্সচেঞ্জগুলিতে ম্যানুয়াল ট্রেডিং
  • ৭. আপনার বিল পরিশোধ করুন
  • 8.এখানে যেকোনো প্রশ্ন করুন
  • 9.FMZs সিমুলেটেড এক্সচেঞ্জ
  • 10.ডিবাগ টুল যেখানে আপনি বট শুরু না করেই কোডের একটি ব্লক চালাতে পারেন।
  • ১১.সব ধরনের বার্তা
  • ১২.কৌশল বর্গ যেখানে ওপেন সোর্স এবং চার্জিং কৌশলগুলি তালিকাভুক্ত করা হয়েছে
  • ১৩. লাইভ রোবট যেখানে সমস্ত লাইভ চলমান বট তালিকাভুক্ত করা হয়।
  • ১৪. ফোরাম যেখানে আপনি কোনও সম্পর্কিত প্রশ্ন নিয়ে আলোচনা করতে একটি পোস্ট পোস্ট করতে পারেন।
  • 15.আপনার জন্য কোড লিখতে বা অন্যদের জন্য এই পরিষেবা প্রদানের জন্য কাউকে জিজ্ঞাসা করুন।
  • ১৬.এক্সচেঞ্জ এবং এজেন্সিগুলির জন্য পণ্য।
  • 17.এপিআই ডকুমেন্টেশন।
  • 18.কিছু উপকারী সরঞ্জাম, নিজে পরীক্ষা করে দেখুন।
  • 19.আপনার অ্যাকাউন্টের তথ্য।

একটি এক্সচেঞ্জ যোগ করুন

এ যোগ করুনhttps://www.fmz.com/m/add-platformঅথবা ক্লিক করুনPlatformলেবেল। আপনার অ্যাক্সেস কী এবং গোপন কী ক্রিপ্টোকারেন্সি এক্সচেঞ্জে প্রয়োগ করা যেতে পারে। API-KEY ব্যবহার করা হয় ট্রেড এবং এক্সচেঞ্জ থেকে ব্যক্তিগত তথ্য পেতে। আমরা আমাদের সার্ভারে কোন API-KEY বা পাসওয়ার্ড সংরক্ষণ করি না। আপনি এফএমজেডে নিবন্ধন করতে পারেনসিমুলেটেড এক্সচেঞ্জএবং এটি পরীক্ষা করার জন্য যোগ করুন।

img

একটি ডকার স্থাপন করুন

এফএমজেড আপনার জন্য বট চালায় না, আপনাকে এক্সিকিউটর হিসাবে নিজের দ্বারা একটি ডকার স্থাপন করতে হবে, যা আরও নমনীয় এবং নিরাপদ কারণ আমাদের পরিষেবা আপনার বট চালনায় অংশ নেয় না। যদিও আমরা পাবলিক ডকারও সরবরাহ করি, এটি কেবল পরীক্ষার জন্য ব্যবহার করা উচিত।

উইন্ডোজের জন্য, এটা বেশ সহজ, শুধু নির্দেশাবলী অনুসরণ করুনhttps://www.fmz.com/m/add-node

img

লিনাক্সের জন্য, আপনি আমাদের ওয়েবসাইটে একটি ভিপিএস ভাড়া নিতে পারেন, যা ডকারটি স্বয়ংক্রিয়ভাবে স্থাপন করবে। এখানে আপনার নিজের লিনাক্স সার্ভারে স্থাপন করার পদক্ষেপগুলি রয়েছে (প্রস্তাবিত):

  • 1.অ্যামাজন বা গুগল থেকে একটি ক্লাউড সার্ভার (ভিপিএস) কিনুন, সর্বনিম্ন এবং সস্তা কনফিগারেশন যথেষ্ট। আপনি প্রায়শই দীর্ঘ সময়ের জন্য বিনামূল্যে চেষ্টা করতে পারেন।
  • ২.আপনার সার্ভারে লগইন করুন, আপনার সার্ভার প্রদানকারীর নির্দেশাবলী অনুসরণ করুন অথবা গুগল করুন।
  • ৩.আপনার সিস্টেমের সংস্করণের সাথে মিলে যাওয়া ডকারটি বেছে নিন, বেশিরভাগ সময়, এটি ৬৪ বিট।
  • ৪. সেন্টোর জন্য, দৌড়াওwget www.fmz.com/dist/robot_linux_amd64.tar.gz, কমান্ড পাওয়া যায়নি? প্রথমে ইনস্টল করুনyum install wget -y.
  • 5.Run tar -xzvf robot_linux_amd64.tar.gzজিপ খুলতে.
  • 6.Run ./robot -s node.fmz.com/xxxxx -p -p yourFMZpassword, তুমি এমন কিছু দেখতে পাবে2018/07/05 05:04:10 Login OK, SID: 62086, PID: 7226, Name: host.localdomain, যার মানে সবকিছু কাজ করা হয়.node.fmz.com/xxxxxপ্রতিটি ব্যবহারকারীর জন্য অনন্য, আপনার নিজের খুঁজেhttps://www.fmz.com/m/add-node.
  • 7.এখন ডকারটি ব্যাকগ্রাউন্ডে চালানো হচ্ছে না, যদি আপনি SHH ক্লায়েন্টটি বন্ধ করেন, ডকারটি বন্ধ হয়ে যাবে। চাপুনctrl + Cডকার থামাতে.
  • 8.Run nohup ./robot -s node.fmz.com/xxxxx -p yourFMZpassword &ব্যাকগ্রাউন্ডে চালানোর জন্য. এই ধাপটিও করা যেতে পারেScreen command.
  • ৯.পরীক্ষা করুনhttps://www.fmz.com/m/nodes, যদি সবকিছু ঠিক থাকে, আপনি ডকার সেখানে স্থাপন করা খুঁজে পেতে পারেন.

একটি কৌশল লিখুন

আপনি আপনার নিজস্ব কৌশল লিখতে হবে বা বর্গক্ষেত্র থেকে কিনতে. এখানে আমরা একটি সহজ জাভাস্ক্রিপ্ট কৌশল ব্যবহার করা হবে একটি ডেমো হিসাবে সম্পাদনা পৃষ্ঠা ব্যবহার কিভাবে দেখাতে. কৌশল থেকে অনুলিপি করা যাবেhttps://www.fmz.com/strategy/125482. এই টিউটোরিয়ালে জাভাস্ক্রিপ্ট কিভাবে ব্যবহার করা যায় তা আলোচনা করা হবে না কারণ অনলাইনে প্রচুর টিউটোরিয়াল পাওয়া যাবে।

img

  • ১. আপনার কোড সম্পাদনা করুন
  • 2. ব্যাকটেস্টিং, আমরা একটি মধ্যবর্তী টিউটোরিয়ালে এই অংশটি কভার করব
  • 3.আপনার কোড প্রোগ্রামার ভাষা, জাভাস্ক্রিপ্ট এই ডেমো ব্যবহৃত হয়
  • 4.শিরোনাম, চীনা এবং ইংরেজি শিরোনাম বিভক্ত করা হয়, যা প্রদর্শিত হবে তা FMZ ওয়েবসাইটের ভাষার দ্বারা নির্ধারিত হয়
  • 5.আপনার কৌশলটির ধরন, ডিফল্টটি সাধারণ
  • ৬.আপনার কৌশলটির শ্রেণীবিভাগ। আপনি যদি আপনার কৌশলগুলিকে বিভিন্ন শ্রেণীতে ভাগ করতে পারেন তবে আপনার অনেকগুলি রয়েছে।
  • ৭. আমাদের ওয়েবসাইটের পরিবর্তে আপনার নিজের আইডিই থেকে আপনার কোড রিমোট এডিট করুন
  • 8.এপিআই ডকুমেন্টের লিঙ্ক
  • ৯.কৌশল সম্পর্কে নোট (শুধুমাত্র নিজের দ্বারা দেখা যাবে) । আপনি এখানে চিন্তা রেকর্ড করতে পারেন।
  • ১০.কৌশলের বর্ণনা। আপনি যদি স্কয়ারে আপনার কৌশল শেয়ার বা বিক্রয় করেন তবে অন্যরা বর্ণনাগুলি দেখতে পাবে।
  • ১১.কোনও ব্যক্তি যদি আপনার কৌশলটি কিনে নেয় তবেই আপনি কৌশলটির ম্যানুয়ালটি দেখতে পাবেন।
  • 12.আপনার কোড সংরক্ষণ করুন, অথবাCtrl+Sসম্পাদনা মোডে।
  • ১৩. কোডে ব্যাকটেস্টিং কনফিগারেশন সংরক্ষণ করুন।
  • 14.Downloadকৌশল ফাইল
  • 15.সব প্যারামিটার বজায় রেখে কৌশল রপ্তানি ও আমদানি করুন
  • 16.ফন্টের আকার পরিবর্তন করুন এবং থিম সম্পাদনা করুন
  • ১৭.কোডটি স্বয়ংক্রিয়ভাবে ফরম্যাট করুন
  • 18. সম্পাদনা করতে ভিআইএম মোড ব্যবহার করুন।

নীচে কৌশলটির সম্পূর্ণ ব্যাখ্যা দেওয়া হল। আপনার ফোনে বার্তাটি চালানোর জন্য, আপনাকে টেলিগ্রামটি আপনার অ্যাকাউন্টে লিঙ্ক করতে হবেhttps://www.fmz.com/m/account

/*
This strategy will send a message to your telegram when the price is higher or lower than
the set price.
All strategies must have a main function as the entrance.
*/
function main() {
     //change symbol,will cover the default symbol which was set when start a bot.Currency is a strategy arguments
    exchange.IO("currency", Currency)   
    var lastPushTime = 0    //the variable of last push timestamp.
    while(true){    //run a infinite loop, which is the basic structure
        //_C() function can retry the request automatically after failure. not necessary. var ticker = exchange.GetTicker() is ok.
        var ticker = _C(exchange.GetTicker) // for information about GetTicker, check on https://fmz-docs.readthedocs.io/en/latest/code_Instruction/Market%20API.html#getticker
        if(ticker.Last > UpPrice || ticker.Last < LowPrice){    //ticker.Last represents the last deal price
            if(Date.now() - lastPushTime > 300*1000){    //only push once in 5 mins, Date.now() return ms.
                lastPushTime = Date.now()    //update lastPushTime
                Log(Currency, 'Price is: ', ticker.Last, '@')    //Log the price on the bot's page and sent the message. '@' in the end means push message
            }
        }
        Log(Currency, 'Price is: ', ticker.Last) //just log the price
        Sleep(Interval*1000)    //check the last price again after Interval seconds
    }
}

বট চালান

অবশেষে, এটি একটি বট চালানোর সময়। উপরRobotপৃষ্ঠা, ক্লিক করুনAdd robot, অথবা পরিদর্শনhttps://www.fmz.com/m/add-robotসরাসরি একটি বট যোগ করার জন্য.img

  • ১.বোটের নাম
  • ২. এই বট চালানোর জন্য ডকার
  • ৩.চালনা করার কৌশল
  • 4.প্যারামিটার, ডিফল্ট মান পরিবর্তন করা যেতে পারে।
  • 5.এক্সচেঞ্জ ব্যবহার করার সময় ডিফল্ট ক্লাইন সময়.GetRecords()
  • 6.Exchange
  • 7.Tradingপ্রতীক বা জোড়া
  • ৮.আপনার প্রয়োজনীয় ট্রেডিং প্রতীকটি যদি তালিকায় না থাকে, তাহলে আপনি নিজেই এটি টাইপ করতে পারেন।
  • 9.Clickএক্সচেঞ্জ যোগ করতে
  • 10.এক্সচেঞ্জটি ইতিমধ্যেই যোগ করা হয়েছে। একাধিক এক্সচেঞ্জ এক বটে যোগ করা যেতে পারে,exchanges[0], exchanges[1]
  • 11.Clickরোবট চালাতে!

বট পরিচালনা করুন

উপরRobotপৃষ্ঠা, আপনি দেখতে পারেন বট চলছে.img

  • ১.বট নাম, এখানে ক্লিক করে বট পাতা দেখুন।
  • ২.বট দ্বারা চালিত কৌশল, কৌশল পৃষ্ঠায় এখানে ক্লিক করুন।
  • ৩.বট এর অবস্থা. চলতে পারে, থামতে পারে, ভুল হতে পারে।
  • ৪.বট এর মুনাফা, পাসLogProfit(), আপনি যে কোন সংখ্যা হতে পারে.
  • ৫. তৈরি তারিখ, সর্বশেষ যোগাযোগের সময় পরিবর্তন করা যেতে পারে।
  • 6.বটটি পর্যবেক্ষণ করুন। FMZ আপনাকে একটি বার্তা পাঠাবে যখন বটটি দুর্ঘটনাক্রমে বন্ধ করা হয়েছে
  • ৭. রোবট থামাও।

আরও তথ্যের জন্য বট পৃষ্ঠায় বটের নাম ক্লিক করুনঃimg

2. সর্বাধিক ব্যবহৃত এপিআই ভূমিকা

এই অংশ কিছু সবচেয়ে সাধারণভাবে ব্যবহৃত এপিআই পরিচয় করিয়ে দেবে, আমাদের এপিআই ডকুমেন্টেশন একটি সম্পূর্ণ সংস্করণ জন্য, চেক করুনFMZ API. এটা অত্যন্ত নতুনদের জন্য ডেমো কোড চালানোর জন্য সুপারিশ করা হয়ডিবাগ পাতা.

২.১ লগ

ব্যবহার করুনঃ Log(msg) প্যারামিটারঃস্ট্রিং বা সংখ্যাবর্ণনাঃরোবট লগ পেজে একটি বার্তা লগ করুন।ফেরতঃকোনটিইডেমোঃ

function main() {
    var msg = 'msg string'
    Log(msg)
    Log('hello', 'world', 123)
    Log("red color message", "#FF0000")
    Log("push this message to telegram!@") // won't push on debug page
}

২.২ GetTicker

ব্যবহার করুনঃ exchange.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)
    Log('Last Price: ',ticker.Last, 'Bid Price: ', ticker.Buy)
}

২.৩ গভীরতা অর্জন

ব্যবহার করুনঃ exchange.GetDepth() প্যারামিটারঃকোনটিইবর্ণনাঃবাজারের বর্তমান অর্ডার বুক পান।ফেরতঃ

{
    "Info":null,
    "Asks":[
        {"Price":5866.38,"Amount":0.068644},
        {"Price":5866.39,"Amount":0.263985},
        {"Price":5866.73,"Amount":0.05},
        {"Price":5866.77,"Amount":0.05},
        {"Price":5867.01,"Amount":0.15},
        {"Price":5875.89,"Amount":0.05},
        ......
        ]
    "Bids":[
        {"Price":5865.13,"Amount":0.001898},
        {"Price":5865,"Amount":0.085575},
        {"Price":5864.15,"Amount":0.013053},
        {"Price":5863.65,"Amount":0.016727},
        {"Price":5863.51,"Amount":0.128906},
        {"Price":5863.15,"Amount":0.2}
        ......
        ],
    "Time":1530241857399
}

ডেমোঃ

function main() {
    var depth = exchange.GetDepth()
    Log(depth)
    Log('Bid one: ', depth.Bids[0].Price, 'Ask one: ', depth.Asks[0].Price)
}

২.৪ GetRecords

ব্যবহার করুনঃ exchange.GetRecords(), exchange.GetRecords(Period) প্যারামিটারঃ

নাম প্রকার বাধ্যতামূলক বর্ণনা
সময়কাল গ্লোবাল ভার্বেল না. রোবট চালু করার সময় ক্লাইনের চক্র, ঐচ্ছিক পরামিতি, ডিফল্ট কে লাইন চক্র সেট করা হয়।

সমস্ত সম্ভাব্য পরামিতিঃPERIOD_M1১ মিনিট,PERIOD_M5পাঁচ মিনিট,PERIOD_M15১৫ মিনিট,PERIOD_M30:30 মিনিট,PERIOD_H1১ ঘন্টা,PERIOD_D1১ ডি।বর্ণনাঃবর্তমান বাজারের জন্য ক্লাইন/ক্যান্ডেলস্টিক বার পান।ফেরতঃ

[
    {"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},
    ......
]

ডেমোঃ

//A useful JavaScript example using Records to get a close array:
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
}

২.৫ GetAccount

ব্যবহার করুনঃ exchange.GetAccount() প্যারামিটারঃকোনটিইবর্ণনাঃঅ্যাকাউন্টের তথ্য পানফেরতঃ

{
    "Stocks":0.38594816,// free base asset
    "FrozenStocks":0,    //locked base asset
    "Balance":542.858308,//free quote asset
    "FrozenBalance":0     //locked quote asset
    "Info":{} //the raw data
}

ডেমোঃ

//A useful JavaScript example of Log your account value for a certain trading pair:
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) প্যারামিটারঃ

নাম প্রকার বাধ্যতামূলক বর্ণনা
দাম সংখ্যা হ্যাঁ। লিমিট অর্ডারের ক্রয় মূল্য
পরিমাণ সংখ্যা হ্যাঁ। সীমানা অর্ডারের ক্রয় পরিমাণ
Msg স্ট্রিং না. লগ পাতায় অতিরিক্ত বার্তা যোগ করুন

বর্ণনাঃবট এর পাতায় একটি ক্রয় আদেশ এবং ক্রয় লগ পাঠানফেরতঃসফল হলে অর্ডারআইডি ফেরত দিন,nullযদি না হয়।ডেমোঃ

//A useful JavaScript example of Buy for buy certain amount of bitcoin at a certain price:
function main(){
    while(true){
        var ticker = exchange.GetTicker()
        var price = ticker.Sell
        if(price >= 7000){
            exchange.Buy(price+5, 1, 'BTC-USDT')
        }
        Sleep(3000)//Sleep 3000ms
    }
}

২.৭ বিক্রি

ব্যবহার করুনঃ exchange.Sell(Price, Amount), exchange.Sell(Price, Amount, Msg) প্যারামিটারঃ

নাম প্রকার বাধ্যতামূলক বর্ণনা
দাম সংখ্যা হ্যাঁ। লিমিট অর্ডারের বিক্রয় মূল্য
পরিমাণ সংখ্যা হ্যাঁ। সীমানা অর্ডারের পরিমাণ বিক্রি করুন
Msg স্ট্রিং না. লগ পাতায় অতিরিক্ত বার্তা যোগ করুন

বর্ণনাঃবট এর পাতায় একটি বিক্রয় আদেশ এবং একটি বিক্রয় লগ পাঠানফেরতঃসফল হলে অর্ডারআইডি ফেরত দিন,nullযদি না হয়।ডেমোঃ

//A useful JavaScript example of Buy for buy certain amount of bitcoin at a certain price:
function main(){
    while(true){
        var ticker = exchange.GetTicker()
        var price = ticker.Buy
        if(price >= 7000){
            var id = exchange.Sell(price-5, 1, 'BTC-USDT')
            Log('OrderId: ', id)
        }
        Sleep(3000)
    }
}

২.৮ GetOrder

ব্যবহার করুনঃ exchange.GetOrder(OrderId) প্যারামিটারঃ

নাম প্রকার বাধ্যতামূলক বর্ণনা
অর্ডার সংখ্যা হ্যাঁ। অর্ডার আইডি

বর্ণনাঃঅর্ডার আইডি দ্বারা অর্ডার বিবরণ পান.ফেরতঃ

{
    "Id":125723661,
    "Amount":0.01,
    "Price":7000,
    "DealAmount":0,
    "AvgPrice":0,
    "Status":0, // 0:Not filled, 1:Filled, 2:Canceled
    "Type":1,// 0:Buy, 1:Sell
    "ContractType":"",//just for futures contract orders
    "Info":{} //raw info from exchange
    }
}

ডেমোঃ

//A JavaScript example of using this API, which will buy until your account has 5 coins:
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(10-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){
                exchange.CancelOrder(id)
            }
        }
    }
}

২.৯ GetOrders

ব্যবহার করুনঃ exchange.GetOrders() প্যারামিটারঃকোনটিইবর্ণনাঃআপনার ট্রেডিং প্রতীকের জন্য সব খোলা অর্ডার পান।ফেরতঃখোলা অর্ডারের একটি তালিকা, ফলাফল একই অর্থ আছেGetOrder()

[
    {
        "Info":{},
        "Id":16387538,
        "Amount":1123,
        "Price":0.00012826,
        "DealAmount":0,
        "AvgPrice":0,
        "Status":0,
        "Type":1,
        "ContractType":""
    }
]

ডেমোঃ

//A JavaScript example of using this API, which will cancel all open orders for trading symbol:
fuction 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)
    }
}

2.10 অর্ডার বাতিল করুন

ব্যবহার করুনঃ exchange.CancelOrder(OrderId) প্যারামিটারঃ

নাম প্রকার বাধ্যতামূলক বর্ণনা
অর্ডার সংখ্যা হ্যাঁ। অর্ডার আইডি

বর্ণনাঃঅর্ডার আইডি দিয়ে অর্ডার বাতিল করুন।ফেরতঃবুল টাইপ,trueমানে অর্ডার অনুরোধের বাতিলকরণ সফল হয়েছে।falseঅর্থ অর্ডার অনুরোধ বাতিল ব্যর্থ হয়েছে।

২.১১ সেটকন্ট্রাক্ট টাইপ

ব্যবহার করুনঃ exchange.SetContractType(ContractType) প্যারামিটারঃ

নাম প্রকার বাধ্যতামূলক বর্ণনা
চুক্তির ধরন স্ট্রিং হ্যাঁ। চুক্তির ধরন

বর্ণনাঃফিউচার ট্রেডিংয়ের জন্য কনট্রাক্ট টাইপ সেট করুন। অন্য ব্যক্তিগত এপিআই ব্যবহার করার আগে প্রথমে সেট করতে হবে।ফেরতঃকোনটিইডেমোঃ

exchange.SetContractType("this_week") //OKEX future has “this_week”, “next_week”, “quarter” , "swap"
exchange.SetContractType("XBTUSD") //BitMEX future has "XBTUSD","XBTM19",etc

২.১২ GetPosition

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

// Note: GetPosition function obtains all positions.
function main(){
    exchange.SetContractType("this_week") //for OKEX future
    var position = exchange.GetPosition()
    if(position.length>0){
        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.SetDirection(Direction) প্যারামিটারঃ

নাম প্রকার বাধ্যতামূলক বর্ণনা
দিকনির্দেশ স্ট্রিং হ্যাঁ। হতে পারেbuy, closebuy, sell, closesell.

বর্ণনাঃশুধুমাত্র ফিউচার ট্রেডিংয়ের জন্য ক্রয় বা বিক্রয় অর্ডারের ধরন সেট করুন।ফেরতঃকোনটিইডেমোঃ

function main(){
    exchange.SetContractType("this_week");
    exchange.SetMarginLevel(5) // Set the leverage to 5 times
    exchange.SetDirection("buy") // Set the order type to buy long
    exchange.Buy(5000, 2) //buy long at the price 1000, quantity of 2
    exchange.SetDirection("closebuy")
    exchange.Sell(4999, 2) //close long position
}

২.১৪ অন্যান্য সাধারণভাবে ব্যবহৃত ফাংশনঃ

এফএমজেডে এই ফাংশন সম্পর্কে আরো বিস্তারিত দেখুনএপিআই নথি

নাম বর্ণনা উদাহরণ
LogStatus বট এর স্ট্যাটাস বারে একটি বার্তা বা টেবিল লগ করুন,প্রতিবার রিফ্রেশ হবে LogStatus('msg')
_C পুনরায় চেষ্টা ফাংশন _C(exchange.GetRecords,PERIOD_H1),_C(exchange.GetTicker)
_N অবস্থান ফাংশন _N(4001.512,2),_N(num,0)
_G গ্লোবাল ডিকশনারি যা রোবট পুনরায় চালু করার পরে সংরক্ষণ করা যেতে পারে। _G('initValue', 1000);_G('initValue')
_D টাইমস্ট্যাম্প ফেরত দেয় _D(), _D(1478570053241)
TA TA-Lib ইন্ডিকেটর লাইব্রেরি. সমর্থনMACD, EMA, KDJইত্যাদি... TA.MACD(records)
Math ম্যাথ ফাংশন সমর্থন করুন, চেক ইন করুনhttps://mathjs.org/ Math.min(1,2), Math.sqrt(2)

৩.দুটি সম্পূর্ণ বাস্তব কৌশল

এখানে অনেক শিক্ষণ কৌশল আছেhttps://www.fmz.com/square/s:tag:Study/1, যা সহজ এবং নতুনদের জন্য সহজ।

৩.১ উচ্চ ফ্রিকোয়েন্সি মার্কেটমেকার স্পট কৌশল

এটি একটি সহজ কিন্তু শক্তিশালী কৌশল যা আসল বিটিসি স্পট মার্কেটে শত শত গুণ আয় করতে ব্যবহৃত হয়। এটি উচ্চ ট্রেড ফি সহ এক্সচেঞ্জে চালানো যাবে না।

var floatAmountBuy = 20
var floatAmountSell = 20
var diffPrice = 3
var Interval = 3000

function CancelPendingOrders() {
    var orders = _C(exchange.GetOrders);
    for (var j = 0; j < orders.length; j++) {
        exchange.CancelOrder(orders[j].Id, orders[j])
    }
}

function GetPrice(depth) {
    var price = {buy:0, sell:0}
    var askAmount = 0
    var bidAmount = 0
    for(var i=0; i<depth.Bids.length; i++){
        askAmount += depth.Asks[i].Amount
        bidAmount += depth.Bids[i].Amount
        if(askAmount >= floatAmountBuy && !price.buy){
            price.buy = depth.Asks[i].Price
        }
        if(bidAmount >= floatAmountSell && !price.sell){
            price.sell = depth.Bids[i].Price
        }
    }
    if(!price.buy || !price.sell){
        price = {buy:depth.Asks[depth.Asks.length-1].Price, sell:depth.Bids[depth.Bids.length-1].Price}
    }
    return price
}

function onTick() {
    var price = GetPrice(_C(exchange.GetDepth))
    var buyPrice = price.buy + 0.01
    var sellPrice = price.sell - 0.01
    if ((sellPrice - buyPrice) <= diffPrice){
        buyPrice -= 10
        sellPrice += 10
    }
    CancelPendingOrders()
    var account = _C(exchange.GetAccount)
    var amountBuy = _N((account.Balance / buyPrice-0.01), 2)
    var amountSell = _N((account.Stocks), 2)
    if (amountSell > 0.02) {
        exchange.Sell(sellPrice, amountSell)
    }
    if (amountBuy > 0.02) {
        exchange.Buy(buyPrice, amountBuy)
    }
}

function main() {
    while (true) {
        onTick()
        Sleep(Interval)
    }
}

৩.২ ডুয়াল থ্রাস্ট ওকেএক্স বৈশিষ্ট্য

একটি ক্লাসিক পলাতক কৌশল, চেক করুনhttps://www.fmz.com/strategy/103247কনফিগারেশনের জন্য। আপনি শিখতে পারেন কিভাবে সোর্স কোড থেকে বৈশিষ্ট্য বিনিময় এবং চার্ট আঁকতে হয়।

var ChartCfg = {
    __isStock: true,
    title: {
        text: 'Dual Thrust Up-Down Track'
    },
    yAxis: {
        plotLines: [{value: 0,
            color: 'red',
            width: 2,
            label: {
                text: 'Up Track',
                align: 'center'}
                },
            {value: 0,
            color: 'green',
            width: 2,
            label: {
                text: 'Down Track',
                align: 'center'},
            }
        ]
    },
    series: [{type: 'candlestick',
        name: 'current cycle',
        id: 'primary',
        data: []
        },
        {type: 'flags',
        onSeries: 'primary',
        data: [],
        }
    ]
};

var STATE_IDLE = 0;
var STATE_LONG = 1;
var STATE_SHORT = 2;
var State = STATE_IDLE;

var LastBarTime = 0;
var UpTrack = 0;
var BottomTrack = 0;
var chart = null;
var InitAccount = null;
var LastAccount = null;
var Counter = {
    w: 0,
    l: 0
};

function GetPosition(posType) {
    var positions = exchange.GetPosition();
    for (var i = 0; i < positions.length; i++) {
        if (positions[i].Type === posType) {
            return [positions[i].Price, positions[i].Amount];
        }
    }
    return [0, 0];
}

function CancelPendingOrders() {
    while (true) {
        var orders = exchange.GetOrders();
        for (var i = 0; i < orders.length; i++) {
            exchange.CancelOrder(orders[i].Id);
            Sleep(Interval);
        }
        if (orders.length === 0) {
            break;
        }
    }
}

function Trade(currentState, nextState) {
    var pfn = nextState === STATE_LONG ? exchange.Buy : exchange.Sell;
    if (currentState !== STATE_IDLE) {
        exchange.SetDirection(currentState === STATE_LONG ? "closebuy" : "closesell");
        while (true) {
            var amount = GetPosition(currentState === STATE_LONG ? PD_LONG : PD_SHORT)[1];
            if (amount === 0) {
                break;
            }
            // pfn(amount);
            pfn(nextState === STATE_LONG ? _C(exchange.GetTicker).Sell * 1.001 : _C(exchange.GetTicker).Buy * 0.999, amount);
            Sleep(Interval);
            CancelPendingOrders();
        }
        var account = exchange.GetAccount();

        if (account.Stocks > LastAccount.Stocks) {
            Counter.w++;
        } else {
            Counter.l++;
        }

        LogProfit(_N(account.Stocks - InitAccount.Stocks), "Profit rate:", _N((account.Stocks - InitAccount.Stocks) * 100 / InitAccount.Stocks) + '%');
        LastAccount = account;
    }
    exchange.SetDirection(nextState === STATE_LONG ? "buy" : "sell");
    while (true) {
        var pos = GetPosition(nextState === STATE_LONG ? PD_LONG : PD_SHORT);
        if (pos[1] >= AmountOP) {
            Log("Average Price", pos[0], "amount:", pos[1]);
            break;
        }
        // pfn(AmountOP-pos[1]);
        pfn(nextState === STATE_LONG ? _C(exchange.GetTicker).Sell * 1.001 : _C(exchange.GetTicker).Buy * 0.999, AmountOP-pos[1]);
        Sleep(Interval);
        CancelPendingOrders();
    }
}

function onTick(exchange) {
    var records = exchange.GetRecords();
    if (!records || records.length <= NPeriod) {
        return;
    }
    var Bar = records[records.length - 1];
    if (LastBarTime !== Bar.Time) {
        var HH = TA.Highest(records, NPeriod, 'High');
        var HC = TA.Highest(records, NPeriod, 'Close');
        var LL = TA.Lowest(records, NPeriod, 'Low');
        var LC = TA.Lowest(records, NPeriod, 'Close');

        var Range = Math.max(HH - LC, HC - LL);

        UpTrack = _N(Bar.Open + (Ks * Range));
        DownTrack = _N(Bar.Open - (Kx * Range));
        if (LastBarTime > 0) {
            var PreBar = records[records.length - 2];
            chart.add(0, [PreBar.Time, PreBar.Open, PreBar.High, PreBar.Low, PreBar.Close], -1);
        } else {
            for (var i = Math.min(records.length, NPeriod * 3); i > 1; i--) {
                var b = records[records.length - i];
                chart.add(0, [b.Time, b.Open, b.High, b.Low, b.Close]);
            }
        }
        chart.add(0, [Bar.Time, Bar.Open, Bar.High, Bar.Low, Bar.Close]);
        ChartCfg.yAxis.plotLines[0].value = UpTrack;
        ChartCfg.yAxis.plotLines[1].value = DownTrack;
        ChartCfg.subtitle = {
            text: 'Up Track: ' + UpTrack + '  Down Track: ' + DownTrack
        };
        chart.update(ChartCfg);
        chart.reset(PeriodShow);

        LastBarTime = Bar.Time;
    } else {
        chart.add(0, [Bar.Time, Bar.Open, Bar.High, Bar.Low, Bar.Close], -1);
    }

    LogStatus("Price:", Bar.Close, "Up:", UpTrack, "Down:", DownTrack, "Wins: ", Counter.w, "Losses:", Counter.l, "Date:", new Date());
    var msg;
    if (State === STATE_IDLE || State === STATE_SHORT) {
        if (Bar.Close >= UpTrack) {
            msg  = 'Long Price: ' + Bar.Close + ' Up Track:' + UpTrack;
            Log(msg);
            Trade(State, STATE_LONG);
            State = STATE_LONG;
            chart.add(1, {x:Bar.Time, color: 'red', shape: 'flag', title: 'Long', text: msg});
        }
    }

    if (State === STATE_IDLE || State === STATE_LONG) {
        if (Bar.Close <= DownTrack) {
            msg = 'Short Price: ' + Bar.Close + ' Down Track:' + DownTrack;
            Log(msg);
            Trade(State, STATE_SHORT);
            chart.add(1, {x:Bar.Time, color: 'green', shape: 'circlepin', title: 'Short', text: msg});
            State = STATE_SHORT;
        }
    }
}

function onexit() {
    var pos = exchange.GetPosition();
    if (pos.length > 0) {
        Log("Warning, has positions when exiting", pos);
    }
}

function main() {
    if (exchange.GetName() !== 'Futures_OKCoin') {
        throw "Only support OKEX features";
    }
    exchange.SetRate(1);
    exchange.SetContractType(["this_week", "next_week", "quarter"][ContractTypeIdx]);
    exchange.SetMarginLevel([10, 20][MarginLevelIdx]);

    if (exchange.GetPosition().length > 0) {
        throw "Can't have Positions when start.";}

    CancelPendingOrders();

    InitAccount = LastAccount = exchange.GetAccount();
    LoopInterval = Math.min(1, LoopInterval);
    Log('Exchange Name:', exchange.GetName(), InitAccount);
    LogStatus("Ready...");

    LogProfitReset();
    chart = Chart(ChartCfg);
    chart.reset();

    LoopInterval = Math.max(LoopInterval, 1);
    while (true) {
        onTick(exchange);
        Sleep(LoopInterval * 1000);
    }
}


আরো

ঘাসএই পোস্টে আপডেট রাখুন, কোন প্রশ্ন করতে দ্বিধা করবেন না