[TOC]
আমাদের প্ল্যাটফর্ম ব্যবহার করার জন্য আপনাকে ধন্যবাদ. এটা নতুনদের জন্য একটি মৌলিক নির্দেশিকা, আমাদের এপিআই ডকুমেন্টেশন একটি সম্পূর্ণ সংস্করণ জন্য, চেক করুনFMZ API. অনেক সুস্পষ্ট স্পেসিফিকেশন আছে যা এই টিউটোরিয়ালে অন্তর্ভুক্ত নয়।
পুরো টিউটোরিয়ালটি শেখার পর, আপনি জানতে পারবেন কিভাবে FMZ কাজ করে এবং কিছু মৌলিক কৌশল লিখতে সক্ষম হবে।
এফএমজেড প্ল্যাটফর্ম কি?
এফএমজেড হল ক্রিপ্টোকারেন্সি ব্যবসায়ীদের জন্য একটি স্বয়ংক্রিয় ট্রেডিং প্ল্যাটফর্ম যা অনেক বিটকয়েন / ইথ / আল্টকয়েন এক্সচেঞ্জ মার্কেটের জন্য সমর্থন করে।
এফএমজেড আপনার জন্য কি করতে পারে?
আপনি শিখতে পারেন কিভাবে আপনার বট লিখতে হয় (কম্পিউটার বা মোবাইল ফোন দিয়ে আপনার বটকে নিয়ন্ত্রণ করুন, আপনার কৌশল বিক্রি করুন, যদি আপনি চান, আমাদের অনেক অন্যান্য অটো ট্রেডিং প্রেমীদের সাথে যোগাযোগ করুন।গ্রুপএক কথায়, যারা স্বয়ংক্রিয় ট্রেডিং করতে চান তাদের জন্য এফএমজেড একটি নিখুঁত প্ল্যাটফর্ম।
FMZ কোন ক্রিপ্টোকারেন্সি এক্সচেঞ্জকে সমর্থন করে?
FMZ প্রায় সব এক্সচেঞ্জ যে জনপ্রিয় সমর্থন করে, যেমনBinance
, Bitfinex
, Bitstamp
, OKEX
, Huobi
, Poloniex
, ইত্যাদি আপনি এছাড়াও উপর ফিউচার ট্রেড করতে পারেনOKEX
এবংBitMEX
. সম্পূর্ণ সমর্থন তালিকা দেখুনএপিআইআপনাকে শুধু একটি কৌশল লিখতে হবে এবং কোন পরিবর্তন ছাড়াই সব এক্সচেঞ্জে এটি চালাতে হবে।
FMZ কোন প্রোগ্রামিং ভাষা সমর্থন করে?
এফএমজেড আপনার কৌশলগুলি কোড করার জন্য জাভাস্ক্রিপ্ট, পাইথন, সি ++ (জাভাস্ক্রিপ্ট এবং পাইথন প্রস্তাবিত) সমর্থন করে। সম্পূর্ণ ভাষা সমর্থন থেকে উপকৃত ((একটি কাস্টম ভাষা শুধুমাত্র এক প্ল্যাটফর্মের জন্য ব্যবহার করা যেতে পারে না), আপনি আপনার প্রোগ্রামিং দক্ষতা উন্নত করতে পারেন পাশাপাশি কৌশল লিখতে শিখতে পারেন।
আপনার এপিআই কী কি নিরাপদ?
হ্যাঁ, আপনার এপিআই-কীগুলি এনক্রিপশনের পরে সংরক্ষণ করা হয়। এটি কিভাবে কাজ করে তা এখানে।
https
.বর্তমান বৈশিষ্ট্য তালিকাঃ
একটি বট চালানোর জন্য, আপনার একটি কৌশল থাকতে হবে, একটি এক্সচেঞ্জ যোগ করুন, প্রথমে একটি ডকার স্থাপন করুন। ডকার আপনার নিজের কম্পিউটার বা সার্ভারে চলমান আপনার কৌশল
প্রধান পাতার একটি দ্রুত চেহারা
একটি এক্সচেঞ্জ যোগ করুন
এ যোগ করুনhttps://www.fmz.com/m/add-platformঅথবা ক্লিক করুনPlatform
লেবেল।
আপনার অ্যাক্সেস কী এবং গোপন কী ক্রিপ্টোকারেন্সি এক্সচেঞ্জে প্রয়োগ করা যেতে পারে। API-KEY ব্যবহার করা হয় ট্রেড এবং এক্সচেঞ্জ থেকে ব্যক্তিগত তথ্য পেতে। আমরা আমাদের সার্ভারে কোন API-KEY বা পাসওয়ার্ড সংরক্ষণ করি না।
আপনি এফএমজেডে নিবন্ধন করতে পারেনসিমুলেটেড এক্সচেঞ্জএবং এটি পরীক্ষা করার জন্য যোগ করুন।
একটি ডকার স্থাপন করুন
এফএমজেড আপনার জন্য বট চালায় না, আপনাকে এক্সিকিউটর হিসাবে নিজের দ্বারা একটি ডকার স্থাপন করতে হবে, যা আরও নমনীয় এবং নিরাপদ কারণ আমাদের পরিষেবা আপনার বট চালনায় অংশ নেয় না। যদিও আমরা পাবলিক ডকারও সরবরাহ করি, এটি কেবল পরীক্ষার জন্য ব্যবহার করা উচিত।
উইন্ডোজের জন্য, এটা বেশ সহজ, শুধু নির্দেশাবলী অনুসরণ করুনhttps://www.fmz.com/m/add-node
লিনাক্সের জন্য, আপনি আমাদের ওয়েবসাইটে একটি ভিপিএস ভাড়া নিতে পারেন, যা ডকারটি স্বয়ংক্রিয়ভাবে স্থাপন করবে। এখানে আপনার নিজের লিনাক্স সার্ভারে স্থাপন করার পদক্ষেপগুলি রয়েছে (প্রস্তাবিত):
wget www.fmz.com/dist/robot_linux_amd64.tar.gz
, কমান্ড পাওয়া যায়নি? প্রথমে ইনস্টল করুনyum install wget -y
.tar -xzvf robot_linux_amd64.tar.gz
জিপ খুলতে../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.ctrl + C
ডকার থামাতে.nohup ./robot -s node.fmz.com/xxxxx -p yourFMZpassword &
ব্যাকগ্রাউন্ডে চালানোর জন্য. এই ধাপটিও করা যেতে পারেScreen
command.একটি কৌশল লিখুন
আপনি আপনার নিজস্ব কৌশল লিখতে হবে বা বর্গক্ষেত্র থেকে কিনতে. এখানে আমরা একটি সহজ জাভাস্ক্রিপ্ট কৌশল ব্যবহার করা হবে একটি ডেমো হিসাবে সম্পাদনা পৃষ্ঠা ব্যবহার কিভাবে দেখাতে. কৌশল থেকে অনুলিপি করা যাবেhttps://www.fmz.com/strategy/125482. এই টিউটোরিয়ালে জাভাস্ক্রিপ্ট কিভাবে ব্যবহার করা যায় তা আলোচনা করা হবে না কারণ অনলাইনে প্রচুর টিউটোরিয়াল পাওয়া যাবে।
Ctrl+S
সম্পাদনা মোডে।নীচে কৌশলটির সম্পূর্ণ ব্যাখ্যা দেওয়া হল। আপনার ফোনে বার্তাটি চালানোর জন্য, আপনাকে টেলিগ্রামটি আপনার অ্যাকাউন্টে লিঙ্ক করতে হবে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সরাসরি একটি বট যোগ করার জন্য.
exchanges[0]
, exchanges[1]
বট পরিচালনা করুন
উপরRobot
পৃষ্ঠা, আপনি দেখতে পারেন বট চলছে.
LogProfit()
, আপনি যে কোন সংখ্যা হতে পারে.আরও তথ্যের জন্য বট পৃষ্ঠায় বটের নাম ক্লিক করুনঃ
এই অংশ কিছু সবচেয়ে সাধারণভাবে ব্যবহৃত এপিআই পরিচয় করিয়ে দেবে, আমাদের এপিআই ডকুমেন্টেশন একটি সম্পূর্ণ সংস্করণ জন্য, চেক করুন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);
}
}
ঘাসএই পোস্টে আপডেট রাখুন, কোন প্রশ্ন করতে দ্বিধা করবেন না