বিএনএন টেকসই মাল্টি মুদ্রা হেজিং কৌশল মূল সংস্করণ (অতিরিক্ত ওভারডাউন ওভারডাউন) 13 এপ্রিলের সর্বশেষ স্টপ লস মডিউল

লেখক:ঘাস, তারিখঃ ২০২০-০৪-০৪ ২১ঃ২৪ঃ৪৩
ট্যাগঃবিন্যান্স

উইকিমিডিয়া ওংওয়েবিং_ইউএসটিবি এর মাধ্যমে এই নীতিটি ব্যবহার করা যাবে।

গুরুত্বপূর্ণ বিষয়বস্তু

  • এই গবেষণাটি অবশ্যই দেখবেন।https://www.fmz.com/digest-topic/5294⇒ কৌশলগত নীতি, ঝুঁকি, ট্রেডিংয়ের স্ক্রিনিং, প্যারামিটার সেটিং, পজিশন খোলার হার এবং মোট মূলধনের অনুপাত ইত্যাদি সম্পর্কে জ্ঞান।
  • পূর্ববর্তী রিপোর্টটি ডাউনলোড করুন এবং আপনার নিজের গবেষণা পরিবেশে আপলোড করুন। প্রকৃত পরিবর্তনগুলি আবার চালান। যদি আপনি ইতিমধ্যে এই রিপোর্টটি দেখে থাকেন তবে সাম্প্রতিক সপ্তাহের তথ্যগুলি আপডেট করুন।
  • যদি রোবটটি দীর্ঘ সময় ধরে বন্ধ থাকে, তাহলে এটি পুনরায় চালু করতে হবে, তথ্য পুনরায় সেট করতে হবে, অথবা নতুন রোবট তৈরি করতে হবে।
  • কৌশলগুলি সরাসরি পুনরায় পরীক্ষা করা যায় না, গবেষণা পরিবেশে পুনরায় পরীক্ষা করা প্রয়োজন।
  • কৌশল কোড এবং ডিফল্ট প্যারামিটারগুলি কেবলমাত্র গবেষণার জন্য, বাস্তব ড্রাইভ চালানোর জন্য সতর্কতা অবলম্বন করা প্রয়োজন, আপনার গবেষণার উপর ভিত্তি করে সিদ্ধান্তের প্যারামিটারগুলি, যা আপনার জন্য একটি ভাল বিকল্প।নিজের ঝুঁকি
  • কৌশলটি প্রতিদিন লাভজনক হতে পারে না, ইতিহাসের দিকে ফিরে তাকানো, 1-2 সপ্তাহের ক্রস-আউট এবং প্রত্যাহার স্বাভাবিক, সঠিকভাবে আচরণ করা প্রয়োজন
  • কোডটি সর্বজনীন, আপনি নিজের দ্বারা পরিবর্তন করতে পারেন, যদি কোনও সমস্যা হয় তবে মন্তব্যের প্রতিক্রিয়া স্বাগতম, এটি উদ্ভাবক বিনয়ন ফোরামে যোগদান করা ভাল ((গবেষণা প্রতিবেদনে যোগদানের উপায় রয়েছে) আপডেটের বিজ্ঞপ্তি পেতে)
  • কৌশলটি শুধুমাত্র মুদ্রা ওয়ারেন্টি ফিউচারগুলিকে সমর্থন করে, পুরো স্টকের মোডে চলতে হবে, দ্বিমুখী হোল্ডিং সেট করবেন না!!, রোবট তৈরি করার সময় ডিফল্ট ট্রেডিং জোড়া এবং কে লাইন চক্র ব্যবহার করে, কৌশলটি কে লাইন ব্যবহার করে না
  • কৌশল এবং অন্যান্য কৌশল এবং ম্যানুয়াল অপারেশনগুলির মধ্যে দ্বন্দ্ব রয়েছে এবং এটি মনোযোগ দিতে হবে।
  • ভার্চুয়াল ডিস্কের জন্য বিদেশী হোস্টের প্রয়োজন, পরীক্ষার পর্যায়ে প্ল্যাটফর্মে আলি ক্লাউড হংকং সার্ভারটি এক ক্লিকে ভাড়া নিতে পারবেন, নিজের মাসিক পুরো ভাড়াটি সস্তা ((সর্বনিম্ন কনফিগারেশন সহ, পাঠ্যক্রমটি স্থাপন করুনঃhttps://www.fmz.com/bbs-topic/2848)
  • বিএনএ-র ফিউচার এবং নোটগুলি আলাদাভাবে যোগ করা দরকার, বিএনএ-র ফিউচারগুলিFutures_Binance
  • এই কৌশলটি পুনরায় চালু করার কোনও প্রভাব নেই, তবে নতুন তৈরি করা রোবটগুলি historicalতিহাসিক তথ্য পুনরায় রেকর্ড করবে।
  • নীতিটি ব্যবহারকারীর প্রতিক্রিয়ার উপর ভিত্তি করে আপডেট হতে পারে, সরাসরি Ctrl + A অনুলিপি কোড কভার সংরক্ষণ করুন (সাধারণত কোনও পরামিতি আপডেট করা হয় না) এবং বটটি পুনরায় চালু করার পরে সর্বশেষতম কোডটি ব্যবহার করা যেতে পারে।
  • কৌশলটি শুরুতে ট্রেড করে না, প্রথমবারের মতো ডেটা রেকর্ড করা দরকার, বাজারের পরিবর্তন হওয়ার জন্য অপেক্ষা করতে হবে।

৪.১৬ তারিখে আপডেট করা হয়েছে

ক্ষতি বন্ধ করার জন্য একটি বাগ সংশোধন করা হয়েছে

ডিফল্ট প্যারামিটার পরিবর্তন করা হয়েছেঃ

var Alpha = 0.001 //指数移动平均的Alpha参数,设置的越大,基准价格跟踪越敏感,最终持仓也会越低,降低了杠杆,但会降低收益,具体需要根据回测结果自己权衡
var Update_base_price_time_interval = 60 //多久更新一次基准价格, 单位秒,和Alpha参数相关,Alpha 设置的越小,这个间隔也可以设置的更小

৪.১৩ আপডেট

স্টপ_লস সেটিং 0.8 মানে যখন তহবিল প্রাথমিক তহবিলের 80% এর নিচে পৌঁছায়, তখন স্টপ লস, সমস্ত অবস্থান খালি করুন, স্টপ কৌশল। কৌশলটি চলার সাথে সাথে, স্টপ_লস 1 এর চেয়ে বড় (পুনরায় চালু কার্যকর) সেট করা যেতে পারে, উদাহরণস্বরূপ 1000 টন থেকে 1500 পর্যন্ত, স্টপ_লস সেটিং 1.3 এ সেট করা হয়, তবে 1300 ইউয়ান স্টপ লস থেকে ফিরে আসে। আপনি যদি স্টপ লস সেট করতে না চান তবে এই পরামিতিটি খুব ছোট। ঝুঁকি হ'ল যে এই স্টপ লসটি ব্যবহার করে সবাই পাদদেশ তৈরি করবে, ক্ষতি বাড়িয়ে তুলবে। প্রাথমিক তহবিলের স্থিতিতে থাকা init_balance ক্ষেত্রটি প্রভাবিত হবে, অবিলম্বে অবহিত করা হবে, অবিলম্বে অবহিত করা হবে। যদি আপনি ভয় পান তবে ব্ল্যাক সোয়ান ইভেন্ট, যেমন কোনও মুদ্রা ফিরে আসে, অবিলম্বে অবহিত করা যেতে পারে।

Max_diff এবং Min_diff এর মধ্যে সীমাবদ্ধতা রয়েছে, যা নিজের ট্রেড_ভ্যালু, মোট মূলধন এবং ঝুঁকি সামর্থ্যের ভিত্তিতে নির্ধারণ করা প্রয়োজন।

উদাহরণস্বরূপ, যদি একসাথে ২০টি মুদ্রা লেনদেন করা হয়, তবে একটি মুদ্রার মূল্য 0.4 এর বিচ্যুতি পর্যন্ত বৃদ্ধি পায় এবং অন্য মুদ্রার দামটি স্থির থাকে, যা trade_value এর 7 গুণ ক্ষতি করে। এটি 0.3 এর বিচ্যুতি পর্যন্ত হ্রাস পায় এবং trade_value এর 6 গুণ ক্ষতি করে।

var Stop_loss = 0.8 
var Max_diff = 0.4 //当偏差diff大于0.4时,不继续加空仓, 自行设置
var Min_diff = -0.3 //当diff小于-0.3时,不继续加多仓, 自行设置

৪.১০ আপডেট

স্থানীয় নীতিতে পলিসি কোড কপি করুন, সরাসরি সংরক্ষণের উপর overwrite করুন, মেশিনটি পুনরায় চালু করুন, এবং মূল অবস্থানটি বজায় রাখুন

নোটবুকের কোড ঠিকানাঃhttps://www.fmz.com/bbs-topic/5364

মূল কৌশল কয়েন সূচক = mean ((sum)) কয়েন মূল্য / বিটকয়েন মূল্য) / ((কয়েন প্রারম্ভিক মূল্য / বিটকয়েন প্রারম্ভিক মূল্য)) । সবচেয়ে বড় সমস্যা হ'ল সর্বশেষ মূল্য এবং কৌশলটি চালু করার প্রাথমিক মূল্যের তুলনা, সময়ের সাথে সাথে বৃদ্ধি পাবে এবং আরও বিচ্যুত হবে, একটি মুদ্রা অনেকগুলি অবস্থান ধরে রাখতে পারে, ঝুঁকিপূর্ণ, এবং শেষ পর্যন্ত অনেকগুলি অবস্থান ধরে রাখবে, ঝুঁকি এবং প্রত্যাহার বাড়িয়ে তুলবে।

সর্বশেষতম কয়েন সূচক = mean ((sum (((কয়েন মূল্য / বিটকয়েন মূল্য) / ইএমএ ((কয়েন মূল্য / বিটকয়েন মূল্য))), অর্থাৎ সমতল রেখার দামের সাথে তুলনা করা হয়, সর্বশেষ মূল্য পরিবর্তনের উপর নজর রাখতে সক্ষম হয়, আরও নমনীয়, পুনরায় পরীক্ষা করা হয় এবং দেখা যায় যে কৌশলটি হোল্ডিং হ্রাস পেয়েছে এবং প্রত্যাহারও হ্রাস পেয়েছে। আরও স্থিতিশীল। সবচেয়ে গুরুত্বপূর্ণ বিষয় হ'ল মূল কৌশলটি বেশ কয়েকটি অস্বাভাবিক ব্যবসায়িক জোড়া যুক্ত করার পরে অত্যন্ত ঝুঁকিপূর্ণ, সম্ভবত বিপর্যয় হতে পারে, তবে এখন এটি খুব কমই প্রভাবিত হয়।

স্লিম আপগ্রেডের জন্য, এর মধ্যে দুটি প্যারামিটার কৌশল কোডের প্রথম দুটি লাইনে লেখা আছে, যা প্রয়োজন অনুসারে পরিবর্তন করা হয়।

আলফা = ০.০৪ সূচক গতিশীল সমান্তরালের আলফা পরামিতি, সেট করা যত বড়, বেঞ্চমার্ক মূল্য ট্র্যাকিং তত বেশি সংবেদনশীল, যত কম লেনদেন হয়, চূড়ান্ত হোল্ডিংও তত কম হবে, লিভারেজ হ্রাস করে, তবে উপার্জন হ্রাস করে, সর্বাধিক প্রত্যাহার হ্রাস করে, ট্রেডিং বৃদ্ধি করতে পারে, নির্দিষ্টভাবে রিটার্নিংয়ের ফলাফলের উপর ভিত্তি করে নিজেরাই ভারসাম্য বজায় রাখতে হবে। Update_base_price_time_interval = 30*60 বেঞ্চমার্ক মূল্য, ইউনিট সেকেন্ড, এবং আলফা পরামিতিগুলির সাথে সম্পর্কিত, আলফা সেট করা যত ছোট, এই ব্যবধানটিও তত ছোট সেট করা যেতে পারে

আপনি যদি এই নিবন্ধটি পড়েন এবং সমস্ত মুদ্রায় লেনদেন করতে চান, এখানে একটি তালিকা রয়েছে।ETH,BCH,XRP,EOS,LTC,TRX,ETC,LINK,XLM,ADA,XMR,DASH,ZEC,XTZ,BNB,ATOM,ONT,IOTA,BAT,VET,NEO,QTUM,IOST

উইকিমিডিয়া গ্রুপে যোগদান করুন এবং আপডেটগুলি পান

নীচের মাইক্রোসিগন্যাল দিয়ে, টিকটোনের উত্তরটি স্বয়ংক্রিয়ভাবে ট্যাগ করা হয়ঃ

https://www.fmz.comimg

কৌশলগত নীতি

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

কৌশলগত যুক্তি

1. বাজারের আপডেট এবং অ্যাকাউন্টের হোল্ডিং, প্রথমবারের জন্য চলমান প্রাথমিক মূল্য রেকর্ড করা হবে ((নতুন যোগ করা মুদ্রা যোগ করার সময় অনুযায়ী গণনা করা হয়) ২. সূচক আপডেট করুন, সূচকটি হ'ল শঙ্কু-বিটকয়েন মূল্য সূচক = mean ((sum)) শঙ্কু মূল্য / বিটকয়েন মূল্য) / ((শঙ্কু প্রাথমিক মূল্য / বিটকয়েন প্রাথমিক মূল্য)) ৩. বিচ্যুতি সূচক অনুসারে বেশি কাজ করার সিদ্ধান্ত নিন, বিচ্যুতির আকার অনুসারে অবস্থান নির্ধারণ করুন 4. অর্ডার, অর্ডার পরিমাণ হিমবাহ দ্বারা অর্পণ করা হয়, প্রতিপক্ষের দাম অনুযায়ী লেনদেন ((একটি কিনুন এবং একটি বিক্রি করুন) ।Unknown order sent., normal phenomenon. Unknown order sent.: code-2011, msg: 5.再次循环

স্ট্যাটাস প্যাকেজের মধ্যে লিভারেজ হ'ল গ্যারান্টিযুক্ত অর্থের অনুপাত যা নতুন খোলা পজিশনগুলি পূরণের জন্য কম রাখতে হবে

কৌশলগত পরামিতি

img

  • Trade_symbols: ট্রেডিং করা মুদ্রা, যা আপনাকে গবেষণা প্ল্যাটফর্মের উপর ভিত্তি করে নিজেরাই ফিল্টার করতে হবে, বা বিটিসিতে যোগ দিতে পারে
  • ট্রেড_ভ্যালুঃ বিটিসি মূল্য নির্ধারণের জন্য, 1% এর বিচ্ছিন্নতার জন্য একটি মূল্য রয়েছে, যা আপনার বিনিয়োগের মোট মূলধন এবং ঝুঁকি পছন্দগুলির উপর ভিত্তি করে নির্ধারিত হতে হবে। এটি মোট মূলধনের 3-10% এ সেট করার পরামর্শ দেওয়া হয়। গবেষণা পরিবেশে রিভিউয়ের মাধ্যমে লিভারের আকারটি পরীক্ষা করা যেতে পারে, ট্রেড_ভ্যালু অ্যাডজস্ট_ভ্যালুর চেয়ে কম হতে পারে, যেমন অ্যাডজস্ট_ভ্যালু অর্ধেক, যা 2% বিচ্ছিন্নতার সমান।
  • Adjust_value: চুক্তির মূল্য (USDT মূল্য) এর বিচ্যুতির মান সংশোধন করা হয়। যখন সূচকটি * Trade_value - বর্তমান হোল্ডিং > Adjust_value এর চেয়ে বেশি হয়, তখন লক্ষ্য হোল্ডিং এবং বর্তমান হোল্ডিংয়ের মধ্যে পার্থক্য এই মানের চেয়ে বেশি হয়। খুব বড় সমন্বয়টি ধীর, খুব ছোট ট্রেডিং ঘন ঘন, 10 এর নীচে হতে পারে না, অন্যথায় সর্বনিম্ন লেনদেন পৌঁছাতে পারে না, ট্রেড_ভ্যালুর 40% এর বেশি সেট করার পরামর্শ দেওয়া হয়।
  • Ice_value: আইসকামার অর্ডার মান, একইভাবে 10 এর চেয়ে কম হতে পারে না, বাস্তবে এককভাবে নির্বাচন করুন Adjust_value আইসকামারের চেয়ে ছোট, যদি আরও বেশি তহবিল সেট করা যায় তবে তুলনামূলকভাবে বড় কিছু। এই ধরনের একটি সমন্বয় দ্রুততর, এটি অ্যাডজস্ট_ভ্যালুর 20% এর চেয়ে কম নয়, যাতে 5 টি আইসকামার সম্পন্ন করা যায়।
  • Interval: সাইক্লিকাল হোম টাইম, যা 1s এর মত ছোট হতে পারে, কিন্তু বিন্যান ফ্রিকোয়েন্সি সীমাবদ্ধতা অতিক্রম করতে পারে না।
  • রিসেটঃ ঐতিহাসিক তথ্য পুনরায় সেট করুন, যা নীতির রেফারেন্সের প্রাথমিক মূল্যকে বর্তমান মূল্যে পুনরায় সেট করে, সাধারণত সেট করার প্রয়োজন হয় না

কৌশলগত ঝুঁকি

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




var Alpha = 0.001 //指数移动平均的Alpha参数,设置的越大,基准价格跟踪越敏感,最终持仓也会越低,降低了杠杆,但会降低收益,具体需要根据回测结果自己权衡
var Update_base_price_time_interval = 60 //多久更新一次基准价格, 单位秒,和Alpha参数相关,Alpha 设置的越小,这个间隔也可以设置的更小

//Stop_loss设置为0.8表示当资金达到低于初始资金的80%时,止损,清空所有仓位,停止策略。
//随着策略运行,Stop_loss可以设置大于1(重启生效),比如从1000赚到1500,Stop_loss设置为1.3,则回撤到1300元止损。不想止损可以把这个参数设置的很小。
//风险是大家都用这种止损会形成踩踏,加大亏损。
//初始资金在状态栏的init_balance字段,注意提现等操作会影响,别不小心止损了。
//如果还是怕黑天鹅事件,比如某个币归0等,可以手动提现出来。

var Stop_loss = 0.8 
var Max_diff = 0.4 //当偏差diff大于0.4时,不继续加空仓, 自行设置
var Min_diff = -0.3 //当diff小于-0.3时,不继续加多仓, 自行设置

if(IsVirtual()){
    throw '不能回测,回测参考 https://www.fmz.com/digest-topic/5294 '
}
if(exchange.GetName() != 'Futures_Binance'){
    throw '只支持币安期货交易所,和现货交易所不同,需要单独添加,名称为Futures_Binance'
}
var trade_symbols = Trade_symbols.split(',')
var symbols = trade_symbols
var index = 1 //指数
if(trade_symbols.indexOf('BTC')<0){
    symbols = trade_symbols.concat(['BTC'])
}
var update_profit_time = 0
var update_base_price_time= Date.now()
var assets = {}
var init_prices = {}


var trade_info = {}
var exchange_info = HttpQuery('https://fapi.binance.com/fapi/v1/exchangeInfo')
if(!exchange_info){
    throw '无法连接币安网络,需要海外托管者'
}
exchange_info = JSON.parse(exchange_info)
for (var i=0; i<exchange_info.symbols.length; i++){
    if(symbols.indexOf(exchange_info.symbols[i].baseAsset) > -1){
       assets[exchange_info.symbols[i].baseAsset] = {amount:0, hold_price:0, value:0, bid_price:0, ask_price:0, 
                                                     btc_price:0, btc_change:1,btc_diff:0,
                                                     realised_profit:0, margin:0, unrealised_profit:0}
       trade_info[exchange_info.symbols[i].baseAsset] = {minQty:parseFloat(exchange_info.symbols[i].filters[1].minQty),
                                                         priceSize:parseInt((Math.log10(1.1/parseFloat(exchange_info.symbols[i].filters[0].tickSize)))),
                                                         amountSize:parseInt((Math.log10(1.1/parseFloat(exchange_info.symbols[i].filters[1].stepSize))))
                                                        }
    }
}
assets.USDT = {unrealised_profit:0, margin:0, margin_balance:0, total_balance:0, leverage:0, update_time:0, init_balance:0, stop_balance:0, short_value:0, long_value:0, profit:0}

function updateAccount(){ //更新账户和持仓
    exchange.SetContractType('swap')
    var account = exchange.GetAccount()
    var pos = exchange.GetPosition()
    if (!account || !pos){
        Log('update account time out')
        return
    }
    assets.USDT.update_time = Date.now()
    for(var i=0; i<trade_symbols.length; i++){
        assets[trade_symbols[i]].margin = 0
        assets[trade_symbols[i]].unrealised_profit = 0
        assets[trade_symbols[i]].hold_price = 0
        assets[trade_symbols[i]].amount = 0
    } 
    for(var j=0; j<account.Info.positions.length; j++){
        if(account.Info.positions[j].positionSide == 'BOTH'){
            var pair = account.Info.positions[j].symbol 
            var coin = pair.slice(0,pair.length-4)
            if(trade_symbols.indexOf(coin) < 0){continue}
            assets[coin].margin = parseFloat(account.Info.positions[j].initialMargin) + parseFloat(account.Info.positions[j].maintMargin)
            assets[coin].unrealised_profit = parseFloat(account.Info.positions[j].unrealizedProfit)
        }
    }
    assets.USDT.margin = _N(parseFloat(account.Info.totalInitialMargin) + parseFloat(account.Info.totalMaintMargin),2)
    assets.USDT.margin_balance = _N(parseFloat(account.Info.totalMarginBalance),2)
    assets.USDT.total_balance = _N(parseFloat(account.Info.totalWalletBalance),2)
    if(assets.USDT.init_balance == 0){
        if(_G('init_balance')){
            assets.USDT.init_balance = _N(_G('init_balance'),2)
        }else{
            assets.USDT.init_balance = assets.USDT.total_balance 
            _G('init_balance',assets.USDT.init_balance)
        }
    }
    assets.USDT.profit = _N(assets.USDT.margin_balance - assets.USDT.init_balance, 2)
    assets.USDT.stop_balance = _N(Stop_loss*assets.USDT.init_balance, 2)
    assets.USDT.total_balance = _N(parseFloat(account.Info.totalWalletBalance),2)
    assets.USDT.unrealised_profit = _N(parseFloat(account.Info.totalUnrealizedProfit),2)
    assets.USDT.leverage = _N(assets.USDT.margin/assets.USDT.total_balance,2)
    pos = JSON.parse(exchange.GetRawJSON())
    if(pos.length > 0){
        for(var k=0; k<pos.length; k++){
            var pair = pos[k].symbol
            var coin = pair.slice(0,pair.length-4)
            if(trade_symbols.indexOf(coin) < 0){continue}
            if(pos[k].positionSide != 'BOTH'){continue}
            assets[coin].hold_price = parseFloat(pos[k].entryPrice)
            assets[coin].amount = parseFloat(pos[k].positionAmt)
            assets[coin].unrealised_profit = parseFloat(pos[k].unRealizedProfit)
        }
    }
}

function updateIndex(){ //更新指数
    
    if(!_G('init_prices') || Reset){
        Reset = false
        for(var i=0; i<trade_symbols.length; i++){
            init_prices[trade_symbols[i]] = (assets[trade_symbols[i]].ask_price+assets[trade_symbols[i]].bid_price)/(assets.BTC.ask_price+assets.BTC.bid_price)
        }
        Log('保存启动时的价格')
        _G('init_prices',init_prices)
    }else{
        init_prices = _G('init_prices')
        if(Date.now() - update_base_price_time > Update_base_price_time_interval*1000){
            update_base_price_time = Date.now()
            for(var i=0; i<trade_symbols.length; i++){ //更新初始价格
                init_prices[trade_symbols[i]] = init_prices[trade_symbols[i]]*(1-Alpha)+Alpha*(assets[trade_symbols[i]].ask_price+assets[trade_symbols[i]].bid_price)/(assets.BTC.ask_price+assets.BTC.bid_price)
            }
            _G('init_prices',init_prices)
        }
        var temp = 0
        for(var i=0; i<trade_symbols.length; i++){
            assets[trade_symbols[i]].btc_price =  (assets[trade_symbols[i]].ask_price+assets[trade_symbols[i]].bid_price)/(assets.BTC.ask_price+assets.BTC.bid_price)
            if(!(trade_symbols[i] in init_prices)){
                Log('添加新的币种',trade_symbols[i])
                init_prices[trade_symbols[i]] = assets[trade_symbols[i]].btc_price / index
                _G('init_prices',init_prices)
            }
            assets[trade_symbols[i]].btc_change = _N(assets[trade_symbols[i]].btc_price/init_prices[trade_symbols[i]],4)
            temp += assets[trade_symbols[i]].btc_change
        }
        index = _N(temp/trade_symbols.length, 4)
    }
    
}

function updateTick(){ //更新行情
    var ticker = HttpQuery('https://fapi.binance.com/fapi/v1/ticker/bookTicker')
    try {
        ticker = JSON.parse(ticker)
    }catch(e){
        Log('get ticker time out')
        return
    }
    assets.USDT.short_value = 0
    assets.USDT.long_value = 0
    for(var i=0; i<ticker.length; i++){
        var pair = ticker[i].symbol 
        var coin = pair.slice(0,pair.length-4)
        if(symbols.indexOf(coin) < 0){continue}
        assets[coin].ask_price = parseFloat(ticker[i].askPrice)
        assets[coin].bid_price = parseFloat(ticker[i].bidPrice)
        assets[coin].ask_value = _N(assets[coin].amount*assets[coin].ask_price, 2)
        assets[coin].bid_value = _N(assets[coin].amount*assets[coin].bid_price, 2)
        if(trade_symbols.indexOf(coin) < 0){continue}
        if(assets[coin].amount<0){
            assets.USDT.short_value += Math.abs((assets[coin].ask_value+assets[coin].bid_value)/2)
        }else{
            assets.USDT.long_value += Math.abs((assets[coin].ask_value+assets[coin].bid_value)/2)
        }
        assets.USDT.short_value = _N(assets.USDT.short_value,0)
        assets.USDT.long_value = _N(assets.USDT.long_value,0)
    }
    updateIndex()
    for(var i=0; i<trade_symbols.length; i++){
        assets[trade_symbols[i]].btc_diff = _N(assets[trade_symbols[i]].btc_change - index, 4)
    }
}

function trade(symbol, dirction, value){ //交易
    if(Date.now()-assets.USDT.update_time > 10*1000){
        Log('更新账户延时,不交易')
        return
    }
    var price = dirction == 'sell' ? assets[symbol].bid_price : assets[symbol].ask_price
    var amount = _N(Math.min(value,Ice_value)/price, trade_info[symbol].amountSize)
    if(amount < trade_info[symbol].minQty){
        Log(symbol, '合约价值偏离或冰山委托订单的大小设置过小,达不到最小成交, 至少需要: ', _N(trade_info[symbol].minQty*price,0)+1)
        return
    }
    exchange.IO("currency", symbol+'_'+'USDT')
    exchange.SetContractType('swap')
    exchange.SetDirection(dirction)
    var f = dirction == 'buy' ? 'Buy' : 'Sell'
    var id = exchange[f](price, amount, symbol)
    if(id){
        exchange.CancelOrder(id) //订单会立即撤销
    }
    return id
}



function updateStatus(){ //状态栏信息
        var table = {type: 'table', title: '交易对信息', 
             cols: ['币种', '数量', '持仓价格',  '当前价格', '偏离平均', '持仓价值', '保证金', '未实现盈亏'],
             rows: []}
    for (var i=0; i<symbols.length; i++){
        var price = _N((assets[symbols[i]].ask_price + assets[symbols[i]].bid_price)/2, trade_info[symbols[i]].priceSize)
        var value = _N((assets[symbols[i]].ask_value + assets[symbols[i]].bid_value)/2, 2)
        var infoList = [symbols[i], assets[symbols[i]].amount, assets[symbols[i]].hold_price, price, assets[symbols[i]].btc_diff, value, _N(assets[symbols[i]].margin,3), _N(assets[symbols[i]].unrealised_profit,3)]
        table.rows.push(infoList)
    }
    var logString = _D() + '   ' + JSON.stringify(assets.USDT) + ' Index:' + index + '\n'
    LogStatus(logString + '`' + JSON.stringify(table) + '`')
    
    if(Date.now()-update_profit_time > Log_profit_interval*1000){
        LogProfit(_N(assets.USDT.margin_balance,3))
        update_profit_time = Date.now()
    }
    
}

function stopLoss(){ //止损函数
    while(true){
        if(assets.USDT.margin_balance < Stop_loss*assets.USDT.init_balance && assets.USDT.init_balance > 0){
            Log('触发止损,当前资金:', assets.USDT.margin_balance, '初始资金:', assets.USDT.init_balance)
            Ice_value = 200 //止损的快一些,可修改
            updateAccount()
            updateTick()
            var trading = false //是否正在交易
            for(var i=0; i<trade_symbols.length; i++){
                var symbol = trade_symbols[i]
                if(assets[symbol].ask_price == 0){ continue }
                if(assets[symbol].bid_value >= trade_info[symbol].minQty*assets[symbol].bid_price){
                    trade(symbol, 'sell', assets[symbol].bid_value)
                    trading = true
                }
                if(assets[symbol].ask_value <= -trade_info[symbol].minQty*assets[symbol].ask_price){
                    trade(symbol, 'buy', -assets[symbol].ask_value)
                    trading = true
                }
            }
            Sleep(1000)
            if(!trading){
                throw '止损结束,如果需要重新运行策略,需要调低止损'
            }
        }else{ //不用止损
            return
        }
    }    
}

function onTick(){ //策略逻辑部分
    for(var i=0; i<trade_symbols.length; i++){
        var symbol = trade_symbols[i]
        if(assets[symbol].ask_price == 0){ continue }
        var aim_value = -Trade_value * _N(assets[symbol].btc_diff/0.01,3)
        if(aim_value - assets[symbol].ask_value >= Adjust_value && assets[symbol].btc_diff > Min_diff && assets.USDT.long_value-assets.USDT.short_value <= 1.1*Trade_value){
            trade(symbol,'buy', aim_value - assets[symbol].ask_value)
        }
        if(aim_value - assets[symbol].bid_value <= -Adjust_value && assets[symbol].btc_diff < Max_diff && assets.USDT.short_value-assets.USDT.long_value <= 1.1*Trade_value){
            trade(symbol,'sell', -(aim_value - assets[symbol].bid_value))
        }
    }
}

function main() {
    while(true){
        updateAccount()
        updateTick()
        stopLoss() //止损
        onTick()
        updateStatus()
        Sleep(Interval*1000)
    }
}

সম্পর্কিত

আরো

তিয়াগোম্বালসা@tmbs95 আমাকে টেলিগ্রামে যোগ করুন, আগ্রহী

নববধূওঅনুগ্রহ করে শেখাবেন, onTick () ফাংশনে, এমন একটি লাইন আছে, assets.USDT.long_value-assets.USDT.short_value <= 1.1*Trade_value, আমি বুঝতে পারি যে এটি খুব বড় ভারসাম্যহীনতা রোধ করার জন্য সেট করা হয়েছে। কিন্তু, এই সীমাবদ্ধতা, আশা করি, ট্রেড খোলার গতিকে মারাত্মকভাবে প্রভাবিত করবে।

মাইকেলসউইকিমিডিয়া কি খুঁজে পাচ্ছে না?

শেয়ার শৃঙ্খল মূলধনMax_diff এবং Min_diff কি 0.04 এবং -0.03 হওয়া উচিত নয়?

এয়ার ফোর্স কখনো দাসত্ব করবে না।এই বন্ধ বৃত্তের জন্য, একটু সূর্যালোক দিন।

ঘাস/upload/asset/1b39347a88aa4cff916.jpg

জেলা শ্রেণীর পরিমাণবিএনবিকে অপসারণ করার জন্য ব্যক্তিগতভাবে সুপারিশ করা হয়েছে, যা বিএনবি জনপ্রিয়তা অর্জন করতে চায় এবং এটি সুপারলুপ হবে বলে অনুমান করা হয়; এটি ইতিহাসের দৃষ্টিতে এখন দেখা যায় না।

নববধূওএটি দুটি বিষয়।

নববধূওএকটি মুদ্রা স্বাধীনভাবে বাজার থেকে বেরিয়ে আসে, এই বহু-খালি ভারসাম্য সেটিংটি বড় ক্ষতি রোধ করতে পারে, তাই সিদ্ধান্ত নেওয়া যায় যে ভারসাম্যহীন নয়। শুধুমাত্র একটি হেজিং তালিকা খোলার উপায় খুঁজে বের করতে পারেন। এখন বিভিন্ন মুদ্রা ঝড়, এই কৌশলটি চালানোর জন্য উপযুক্ত নয় বলে মনে হচ্ছে, কিছুটা বড় প্রত্যাহার।

ঘাসভুল, ওয়াংওয়েবিং_উস্তব

ইঝাংসানপ্রকৃতপক্ষে কোডটি দেখুন, সমস্ত মুদ্রার পুনরায় পরীক্ষার ফলাফলগুলি আপনি জানেন, চিন্তা করার দরকার নেই। যোগ করার সময়, আলফা = 0.05, লিঙ্ক, ইটিসি, বিএনবি যুক্ত করুন, ইতিহাসের প্রাথমিক প্রত্যাহার 3% ছিল, চরম বাজারের সর্বাধিক প্রত্যাহার 25% এরও কম ছিল, ট্রেড_ভ্যালু 3% নিরাপদ অতিরিক্ত মুদ্রা দিয়েছিল।