4
ফোকাস
1271
অনুসারী

আপনি যদি পাইন ভাষা ব্যবহার করে কৌশল লিখতে না জানেন, যা শিখতে এবং ব্যবহার করা খুব সহজ, তাহলে আমি করব...

তৈরি: 2022-06-01 17:37:55, আপডেট করা হয়েছে: 2023-09-18 20:19:45
comments   6
hits   2992

আপনি যদি পাইন ভাষা ব্যবহার করে কৌশল লিখতে না জানেন, যা শিখতে এবং ব্যবহার করা খুব সহজ, তাহলে আমি করব…

আপনি যদি পাইন ভাষা ব্যবহার করে কৌশল লিখতে না জানেন, যা শিখতে এবং ব্যবহার করা খুব সহজ, তাহলে আমি করব…

ট্রেডিংভিউতে ওপেন সোর্স কৌশলের সংখ্যা বৃদ্ধি পাচ্ছে এটা দুঃখের বিষয় যে এতগুলো চমৎকার কৌশল, ধারণা এবং সূচক প্রয়োগ করা যায় না। এটি দেখে, FMZ, অনেক ব্যবসায়ীর কাছে পরিমাণগত ট্রেডিং প্রযুক্তি জনপ্রিয় করার জন্য প্রতিশ্রুতিবদ্ধ একটি কোম্পানি হিসাবে, স্বাভাবিকভাবেই এই চাহিদা সমাধানের তাগিদকে প্রতিহত করতে পারে না!

এই দাবি একেবারেই অসহনীয়!

সুতরাং, প্রোগ্রামিং এবং বিকাশের কোড জগতে, আমি পাহাড় এবং নদীগুলির মধ্য দিয়ে ভ্রমণ করেছি এবং 9টি অভিজ্ঞতা পেয়েছি*9=81 পিট, অসংখ্য নিদ্রাহীন রাত কাটানোর পর, কোণে স্তূপাকার রেড বুল ক্যানের পাহাড় ছিল। অবশেষে, FMZ পাইন ভাষার সাথে সামঞ্জস্যপূর্ণ, এবং ট্রেডিংভিউ-এর বিভিন্ন পাইন স্ক্রিপ্ট ব্যবহার করা যেতে পারে।

পাইন ভাষার কথা বলতে গেলে, আমি সম্প্রতি নিজেই এটি শিখেছি। কিন্তু সত্যি কথা বলতে, পরিমাণগত ট্রেডিংয়ের জন্য পাইন ভাষা সত্যিই সহজ, ব্যবহার করা সহজ এবং শেখা সহজ। কি? বিশ্বাস হচ্ছে না? আমাকে আপনার জন্য একটি গ্রিড কৌশল লিখতে দেখুন

/*backtest
start: 2021-06-01 00:00:00
end: 2022-05-23 00:00:00
period: 1h
basePeriod: 1m
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
args: [["v_input_float_1",500],["v_input_string_1",2],["v_input_float_2",0.01],["v_input_int_1",20],["v_input_int_2",500],["RunMode",1,358374],["MinStock",0.001,358374]]
*/

strategy(overlay=true)

varip beginPrice = 0
var spacing = input.float(-1, title="间距价格")
var dir = input.string("long", title="方向", options = ["long", "short", "both"])
var amount = input.float(-1, title="下单量")
var numbers = input.int(-1, title="网格数量")
var profit = input.int(-1, title="盈利价差") / syminfo.mintick

if spacing == -1 and amount == -1 and numbers == -1 and profit == -1
    runtime.error("参数错误")

if not barstate.ishistory and beginPrice == 0 
    beginPrice := close 

findTradeId(id) =>
    ret = "notFound"
    for i = 0 to strategy.opentrades - 1
        if strategy.opentrades.entry_id(i) == id 
            ret := strategy.opentrades.entry_id(i)
    ret 

// 实时K线阶段
if not barstate.ishistory
    // 检索网格
    for i = 1 to numbers
        // 做多
        direction = dir == "both" ? "long" : dir 
        plot(beginPrice-i*spacing, direction+str.tostring(i), color.green)
        if direction == "long" and beginPrice-i*spacing > 0 and beginPrice-i*spacing < close and findTradeId(direction+str.tostring(i)) == "notFound"
            strategy.order(direction+str.tostring(i), strategy.long,  qty=amount, limit=beginPrice-i*spacing)
            strategy.exit("exit-"+direction+str.tostring(i), direction+str.tostring(i), qty_percent=100, profit=profit)
        // 做空
        direction := dir == "both" ? "short" : dir 
        plot(beginPrice+i*spacing, direction+str.tostring(i), color.red)
        if direction == "short" and beginPrice+i*spacing > close and findTradeId(direction+str.tostring(i)) == "notFound"
            strategy.order(direction+str.tostring(i), strategy.short, qty=amount, limit=beginPrice+i*spacing)
            strategy.exit("exit-"+direction+str.tostring(i), direction+str.tostring(i), qty_percent=100, profit=profit)

FMZ এর লাইভ ট্রেডিং, ব্যাকটেস্টিং টুলস, অসংখ্য ফাংশন এবং পাইন ভাষার সরলতা এবং সহজলভ্যতা আরও শক্তিশালী! পরামিতি সেটিংস এবং ব্যাকটেস্ট কনফিগারেশন কোড গণনা, মোট কোড 50 লাইন অতিক্রম করে না। নতুনদের আর গ্রিড লেখার চিন্তা করতে হবে না। . .

অবশ্যই, এই কৌশলটি একটি গ্রিড কৌশলের ত্রুটি রয়েছে এবং এটি একটি অর্থ ছাপানোর যন্ত্র নয় যা ব্যবহার এবং পরামিতিগুলির উপর নির্ভর করে৷ আমি এই বিষয়ে বিশদে যাব না কিভাবে সহজে কৌশল লিখতে হয়, আপনার নিজস্ব ট্রেডিং যুক্তি বুঝতে পারি এবং আপনার নিজের কৌশল এবং ট্রেডিং লিখে অর্থ উপার্জন করতে সাহায্য না করাটা খুব ভালো লাগে! !

কোড ব্যাখ্যা

আমি আপনাদের পাঠকদের বুঝিয়ে বলি যে আপনি যদি পাইন ভাষায় কৌশল লিখতে না জানেন, তাহলে আমি তা করব। ……………….. বিস্তারিত বলি!

শুরুতে/*backtestএবং*/মোড়ানো বিষয়বস্তু হল FMZ এর ব্যাকটেস্ট কনফিগারেশন কোড এটি FMZ এর একটি ফাংশন, পাইন ভাষার বিষয়বস্তু নয়। অবশ্যই, ব্যাকটেস্ট করার সময় আপনাকে এই অংশটি লিখতে হবে না, আপনাকে ব্যাকটেস্ট কনফিগারেশন এবং প্যারামিটার সেট করতে পরামিতি নিয়ন্ত্রণে ম্যানুয়ালি ক্লিক করতে হবে।

/*backtest
start: 2021-06-01 00:00:00
end: 2022-05-23 00:00:00
period: 1h
basePeriod: 1m
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
args: [["v_input_float_1",500],["v_input_string_1",2],["v_input_float_2",0.01],["v_input_int_1",20],["v_input_int_2",500],["RunMode",1,358374],["MinStock",0.001,358374]]
*/

পরবর্তী কোড:

strategy(overlay=true)

varip beginPrice = 0
var spacing = input.float(-1, title="间距价格")
var dir = input.string("long", title="方向", options = ["long", "short", "both"])
var amount = input.float(-1, title="下单量")
var numbers = input.int(-1, title="网格数量")
var profit = input.int(-1, title="盈利点数") / syminfo.mintick
  • strategy(overlay=true): স্ক্রিপ্টের কিছু অপশন সেট করতে ব্যবহৃত হয়, overlay=true, যা প্যারামিটার দিতে ব্যবহৃত হয়।overlayচার্টের প্রধান ছবি আঁকার জন্য সত্যের একটি মান বরাদ্দ করুন (কে-লাইন চার্ট হল প্রধান ছবি, যা সহজেই বোঝা যায়)।
  • varip beginPrice = 0: একটি পরিবর্তনশীল beginPrice কীওয়ার্ড varip দিয়ে ঘোষণা করা হয় এবং প্রাথমিকভাবে 0 এর একটি মান নির্ধারণ করা হয়। এই মানটি গ্রিডের প্রাথমিক মূল্য হিসাবে ব্যবহৃত হয়।
  • var spacing = input.float(-1, title="间距价格"): একটি কৌশল প্যারামিটার সেট করুন “স্পেসিং মূল্য”, যা প্রতিটি গ্রিড পয়েন্টের মধ্যে ব্যবধান 100 এর অর্থ হল প্রতিবার 100 ছাড়িয়ে গেলে একটি লেনদেন হবে৷
  • var dir = input.string("long", title="方向", options = ["long", "short", "both"]): একটি স্ট্র্যাটেজি প্যারামিটার সেট করা হয়েছে, যার নাম “ডিরেকশন”। যথাক্রমে, এর মানে হল যে গ্রিড শুধুমাত্র দীর্ঘ, শুধুমাত্র সংক্ষিপ্ত, বা দীর্ঘ এবং ছোট উভয়ই করে।
  • var amount = input.float(-1, title="下单量"): প্রতিটি গ্রিড পয়েন্ট লেনদেনের ট্রেডিং ভলিউম নিয়ন্ত্রণ করতে একটি প্যারামিটার সেট করুন।
  • var numbers = input.int(-1, title="网格数量"): গ্রিড পয়েন্টের সংখ্যা 20 মানে এক দিকে 20টি গ্রিড পয়েন্ট।
  • var profit = input.int(-1, title="盈利价差") / syminfo.mintick: অবস্থান বন্ধ করার আগে মূল্যের পার্থক্যে প্রতিটি গ্রিড পয়েন্ট অবস্থানের মুনাফা নিয়ন্ত্রণ করতে একটি প্যারামিটার সেট করুন।

পরবর্তী, কোডটি দেখুন:

if spacing == -1 and amount == -1 and numbers == -1 and profit == -1
    runtime.error("参数错误")

এর মানে হল যে কোনো প্যারামিটার যেমন ব্যবধান, পরিমাণ, সংখ্যা, এবং লাভ সেট করা না থাকলে, ডিফল্ট -1, এবং কৌশলটি বন্ধ হয়ে যাবে (আপনি পরামিতি সেট না করে চালাতে পারবেন না~হাহা!)

Go on !

if not barstate.ishistory and beginPrice == 0 
    beginPrice := close 

এর মানে হল যে যখন কৌশলটি রিয়েল-টাইম কে-লাইন পর্যায়ে থাকে এবং শুরুর দাম == 0 হয়, তখন বিগিনপ্রাইসের মানকে সর্বশেষ বর্তমান মূল্যে পরিবর্তন করুন। এটি বোঝা যায় যে যখন কৌশলটি আনুষ্ঠানিকভাবে চালানো হয়, তখন প্রাথমিক বর্তমান মূল্য গ্রিডের প্রাথমিক মূল্য। কারণ স্ক্রিপ্টটির একটি ঐতিহাসিক কে-লাইন বার স্টেজ রয়েছে, কৌশলটি ঐতিহাসিক বার পর্যায়ে একবার যুক্তি প্রয়োগ করবে এবং ঐতিহাসিক বারে গ্রিড স্থাপন করা অবশ্যই অর্থহীন।

ঐতিহাসিক বার পর্যায় কি?

একটি সহজ উদাহরণ দিতে, উদাহরণস্বরূপ, বর্তমান সময়ে A, কৌশলটি চলতে শুরু করে, এবং কৌশলটি 100 K-লাইন বার সহ একটি ডেটা পায় সময়ের সাথে সাথে, 100 বার অবশ্যই 101, 102… N. সময় A থেকে চলার সময়, 101তম বার হল রিয়েল-টাইম কে-লাইন স্টেজ, এবং এই সময়টি হল সর্বশেষ রিয়েল-টাইম ডেটা। সুতরাং 1 ম বার থেকে 100 তম বার পর্যন্ত, এগুলি সমস্ত ঐতিহাসিক মূল্য যা অতিবাহিত হয়েছে, তবে কৌশলটি এই ঐতিহাসিক মূল্যগুলির উপরও চালানো হবে, তাই এই পর্যায়টি ঐতিহাসিক কে-লাইন পর্যায়।

barstate.ishistoryএটি পাইন ভাষার একটি অন্তর্নির্মিত পরিবর্তনশীল যদি বর্তমান BAR ঐতিহাসিক পর্যায়ে একটি বার হয়,barstate.ishistoryএটি সত্য, এবং ঐতিহাসিক পর্যায়ে এটি একটি বার না হলে এটি মিথ্যা। সুতরাং barstate.ishistory সত্য না হলে, এটি রিয়েল-টাইম কে-লাইন পর্যায়ে থাকে।

এর পরে, আমরা একটি ফাংশন তৈরি করেছি

findTradeId(id) =>
    ret = "notFound"
    for i = 0 to strategy.opentrades - 1
        if strategy.opentrades.entry_id(i) == id 
            ret := strategy.opentrades.entry_id(i)
    ret 

এই ফাংশনের কাজ হল বর্তমানে খোলা সমস্ত অর্ডারে একটি নির্দিষ্ট আইডি বিদ্যমান কিনা তা খুঁজে বের করা। যদি এটি বিদ্যমান থাকে, তাহলে findTradeId ফাংশনটি বিদ্যমান অর্ডারের আইডিটি কল করার সময় ফেরত দেবে (মনে রাখবেন যে এই আইডিটি অর্ডার আইডি নয়)। এক্সচেঞ্জ, কিন্তু কৌশল দ্বারা অর্ডারে নির্ধারিত আইডি)। , অথবা লেবেল হিসাবে ব্যাখ্যা করা), যদি এটি বিদ্যমান না থাকে, তাহলে “notFound” স্ট্রিংটি ফেরত পাঠায়।

এর পরে, গ্রিড লেআউট শুরু হয়:

// 实时K线阶段
if not barstate.ishistory
    // 检索网格
    for i = 1 to numbers
        // 做多
        direction = dir == "both" ? "long" : dir 
        plot(beginPrice-i*spacing, direction+str.tostring(i), color.green)
        if direction == "long" and beginPrice-i*spacing > 0 and beginPrice-i*spacing < close and findTradeId(direction+str.tostring(i)) == "notFound"
            strategy.order(direction+str.tostring(i), strategy.long,  qty=amount, limit=beginPrice-i*spacing)
            strategy.exit("exit-"+direction+str.tostring(i), direction+str.tostring(i), qty_percent=100, profit=profit)
        // 做空
        direction := dir == "both" ? "short" : dir 
        plot(beginPrice+i*spacing, direction+str.tostring(i), color.red)
        if direction == "short" and beginPrice+i*spacing > close and findTradeId(direction+str.tostring(i)) == "notFound"
            strategy.order(direction+str.tostring(i), strategy.short, qty=amount, limit=beginPrice+i*spacing)
            strategy.exit("exit-"+direction+str.tostring(i), direction+str.tostring(i), qty_percent=100, profit=profit)

লুপের জন্য A ব্যবহার করা হয়, এবং সংখ্যার প্যারামিটারের মানের উপর ভিত্তি করে লুপের সংখ্যা নির্ধারণ করা হয়, অর্থাৎ, অর্ডারের অনুরূপ সংখ্যা সাজানো হয়। dir প্যারামিটার অনুযায়ী দিক সেট করুন। বর্তমান গ্রিড অবস্থানে লেবেল সহ অর্ডারটি খোলা হয়েছে কিনা তা জানতে findTradeId ফাংশনটি ব্যবহার করুন শুধুমাত্র যদি অবস্থানটি খোলা না হয় (যদি অবস্থানটি খোলা হয় তবে এটি বারবার স্থাপন করা যাবে না)। একটি অর্ডার দেওয়ার জন্য, একটি পরিকল্পিত অর্ডার করতে সীমা প্যারামিটার নির্দিষ্ট করতে strateg.order ফাংশনটি ব্যবহার করুন। একটি পরিকল্পিত অর্ডার দেওয়ার সময়, একই সময়ে সংশ্লিষ্ট ক্লোজিং অর্ডারটি রাখুন। একটি অবস্থান বন্ধ করতে, strategy.exit ফাংশন ব্যবহার করুন, লাভের প্যারামিটার নির্দিষ্ট করুন এবং লাভের পয়েন্টগুলি নির্দিষ্ট করুন।

আপনি যদি পাইন ভাষা ব্যবহার করে কৌশল লিখতে না জানেন, যা শিখতে এবং ব্যবহার করা খুব সহজ, তাহলে আমি করব…

আপনি যদি পাইন ভাষা ব্যবহার করে কৌশল লিখতে না জানেন, যা শিখতে এবং ব্যবহার করা খুব সহজ, তাহলে আমি করব…

আপনি যদি পাইন ভাষা ব্যবহার করে কৌশল লিখতে না জানেন, যা শিখতে এবং ব্যবহার করা খুব সহজ, তাহলে আমি করব…

আপনি যদি পাইন ভাষা ব্যবহার করে কৌশল লিখতে না জানেন, যা শিখতে এবং ব্যবহার করা খুব সহজ, তাহলে আমি করব…

আপনি যদি ফলন বক্ররেখার দিকে তাকান, তাহলে আপনি জানতে পারবেন যে গ্রিডটিও ঝুঁকিপূর্ণ, এবং এটি একটি গ্যারান্টিযুক্ত জয় নয় যে বড় আকারে গ্রিডকে বড় করা তুলনামূলকভাবে কম ঝুঁকিপূর্ণ।

সুতরাং, আপনি যদি পাইন ভাষা ব্যবহার করে কৌশল লিখতে না জানেন, যা শিখতে এবং ব্যবহার করা খুব সহজ, তাহলে আমি করব…