
কৌশল ঠিকানা: https://www.fmz.com/strategy/345
এই প্রবন্ধে, আসুন একটি সহজ জাভাস্ক্রিপ্ট কৌশল পোর্টিং অনুশীলন করি। কৌশল প্রতিস্থাপনের মাধ্যমে, আপনি ইনভেন্টর কোয়ান্টিটেটিভ ট্রেডিং প্ল্যাটফর্ম ইন্টারফেসের কলগুলির সাথে আরও পরিচিত হবেন এবং প্ল্যাটফর্মে কৌশল তৈরি করার সময় বিভিন্ন ভাষার মধ্যে সামান্য পার্থক্য বুঝতে পারবেন। আসলে, জাভাস্ক্রিপ্ট সংস্করণ কৌশল এবং পাইথন সংস্করণের মধ্যে পার্থক্য কৌশলটি খুবই ছোট কারণ ইন্টারফেস কলগুলি মূলত একই রকম।
জাভাস্ক্রিপ্ট সংস্করণ থেকে উদ্ধৃত:
এর জন্য একটি পজিশন খোলার প্রয়োজন হয়, উদাহরণস্বরূপ, অ্যাকাউন্টে 5,000 ইউয়ান এবং 1 মুদ্রা থাকলে এবং মূল্যের পার্থক্য থ্রেশহোল্ডের চেয়ে বেশি হলে, মুদ্রার মূল্য এখন 6,000 ইউয়ান। , এটি বিক্রি করুন (600 0-5000)/6000/2 কয়েন, এর অর্থ হল মুদ্রার মূল্য বৃদ্ধি পেয়েছে, যদি মুদ্রার অবমূল্যায়ন হয়ে থাকে, উদাহরণস্বরূপ, 4000 ইউয়ান, কিনুন (5000-4000)/4000/2 মুদ্রা, যখন কারেন্সি পড়ে যায়, কিছু ফেরত কিনুন, এবং যদি এটি আবার বেড়ে যায়, এটি আবার বিক্রি করুন, এটি একটি ভারসাম্যের মতো, উভয় পক্ষের বিভিন্ন হেজিং সহ, তাই আমি এটিকে একটি ভারসাম্যপূর্ণ কৌশল নাম দিয়েছি।
কৌশলটির নীতিটি খুবই সহজ, এবং কোডের জাভাস্ক্রিপ্ট সংস্করণটি দীর্ঘ নয়, শুধুমাত্র 70 টিরও বেশি লাইন। আরও সংক্ষিপ্ত সিনট্যাক্স সহ একটি পাইথন ভাষা কৌশলে স্থানান্তরিত, কোডটি সংক্ষিপ্ত করা হয়েছে এবং নতুনদের শেখার জন্য খুবই উপযুক্ত সেখানে উদ্ভাবক পরিমাণগত ট্রেডিং প্ল্যাটফর্মে বিকাশকারীদের দ্বারা ভাগ করা প্রচুর কোড এবং ভাষা সমর্থন রয়েছে।JavaScript/C++/Pythonইত্যাদি।
'''backtest
start: 2019-12-01 00:00:00
end: 2020-02-01 11:00:00
period: 1m
exchanges: [{"eid":"OKEX","currency":"BTC_USDT","stocks":1}]
'''
InitAccount = None
def CancelPendingOrders():
ret = False
while True:
orders = _C(exchange.GetOrders)
if len(orders) == 0 :
return ret
for j in range(len(orders)):
exchange.CancelOrder(orders[j].Id)
ret = True
if j < len(orders) - 1:
Sleep(Interval)
return ret
def onTick():
acc = _C(exchange.GetAccount)
ticker = _C(exchange.GetTicker)
spread = ticker.Sell - ticker.Buy
diffAsset = (acc.Balance - (acc.Stocks * ticker.Sell)) / 2
ratio = diffAsset / acc.Balance
LogStatus("ratio:", ratio, _D())
if abs(ratio) < threshold:
return False
if ratio > 0 :
buyPrice = _N(ticker.Sell + spread, ZPrecision)
buyAmount = _N(diffAsset / buyPrice, XPrecision)
if buyAmount < MinStock:
return False
exchange.Buy(buyPrice, buyAmount, diffAsset, ratio)
else :
sellPrice = _N(ticker.Buy - spread, ZPrecision)
sellAmount = _N(-diffAsset / sellPrice, XPrecision)
if sellAmount < MinStock:
return False
exchange.Sell(sellPrice, sellAmount, diffAsset, ratio)
return True
def main():
global InitAccount, LoopInterval
InitAccount = _C(exchange.GetAccount)
LoopInterval = max(LoopInterval, 1)
while True:
if onTick():
Sleep(1000)
CancelPendingOrders()
Log(_C(exchange.GetAccount))
Sleep(LoopInterval * 1000)
কোড দিয়ে শুরু হয়
'''backtest
start: 2019-12-01 00:00:00
end: 2020-02-01 11:00:00
period: 1m
exchanges: [{"eid":"OKEX","currency":"BTC_USDT","stocks":1}]
'''
এটি ব্যাকটেস্ট কনফিগারেশন, যার অর্থ ব্যাকটেস্ট কনফিগারেশন (সেটিংস) কোড আকারে সংরক্ষিত হয় এবং ব্যাকটেস্টিংয়ের সময় এটি স্বয়ংক্রিয়ভাবে এই সেটিং অনুযায়ী কনফিগার হয়। এই অংশটি মুছে ফেলা হলে, ব্যাকটেস্ট করার সময় আপনাকে ব্যাকটেস্ট পৃষ্ঠায় ব্যাকটেস্ট কনফিগারেশন তথ্য সেট করতে হবে। তথ্যসূত্র: https://www.fmz.com/bbs-topic/859
এই কৌশলের প্যারামিটারগুলি জাভাস্ক্রিপ্ট সংস্করণের মতোই কৌশল কোডটি বাক্য দ্বারা পরিবর্তিত হয়েছে
পরামিতি কনফিগারেশন

পরিসংখ্যান


কৌশল ঠিকানা: https://www.fmz.com/strategy/183374
কৌশলটি শুধুমাত্র রেফারেন্সের জন্য, ব্যাকটেস্টিং এবং পরীক্ষার জন্য আপনি যদি আগ্রহী হন তবে আপনি অপ্টিমাইজ এবং আপগ্রেড করতে পারেন।