ট্রেডিং ভিউতে অনেকগুলি উন্মুক্ত উত্স কৌশল রয়েছে যা বিস্ফোরিত হতে পারে এবং এতগুলি দুর্দান্ত কৌশল, ধারণা এবং সূচকগুলি বাস্তবায়িত হতে পারে না। এটি দেখতে খুব দুঃখজনক। এটি দেখার জন্য, পরিমাণগত ট্রেডিং প্রযুক্তিকে অনেক ব্যবসায়ীর কাছে প্রসারিত করার জন্য FMZ অবশ্যই এই চাহিদা সমাধানের প্রবণতা বন্ধ করতে পারে না!
এই চাহিদা একেবারেই সহ্য করা যায় না!
সুতরাং, প্রোগ্রামিং বিকাশের কোডের জগতে, পাহাড়ের জলে ডুবে যাওয়া, হাজার হাজার পাহাড় পেরিয়ে যাওয়া, 9 * 9 = 81 খাঁটি, অসংখ্য ঘুমহীন রাত কাটাতে, প্রাচীরের কোণাগুলি ছোট পাহাড়ের সাধারণ রেড বুল খালি প্যান্টগুলিকে একত্রিত করার পরে। অবশেষে এফএমজেড পাইন ভাষার সাথে সামঞ্জস্যপূর্ণ এবং বিভিন্ন ট্রেডিং ভিউয়ের পাইন স্ক্রিপ্টগুলি ব্যবহার করা যায়।
পাইন ভাষা সম্পর্কে আমি নিজেও সম্প্রতি শিখেছি। তবে সত্য বলতে গেলে, পাইন ভাষাটি পরিমাণগত লেনদেন হিসাবে ব্যবহার করা সহজ এবং সহজ। কি? বিশ্বাস করো না? দেখো আমার পেঁয়াজ তোমাকে একটি গ্রিড কৌশল লিখছে।
/*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)
এফএমজেডের বাস্তব প্লেট, পুনর্বিবেচনার সরঞ্জাম, অসংখ্য বৈশিষ্ট্য এবং পাইন ভাষার সহজ ব্যবহারযোগ্যতার সাথে, এটি একটি বাঘের পালক হিসাবে গণনা করা যেতে পারে! প্যারামিটার সেটিং, পুনর্বিবেচনার কনফিগারেশন কোড, মোট কোড 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
সত্য মান নির্ধারণ করুন, যখন আপনি গ্রাফ আঁকবেন, গ্রাফের মূল গ্রাফের উপর আঁকুন ((K স্ট্রিং গ্রাফ হল মূল গ্রাফ, এটি সহজেই বোঝা যায়)) ।varip beginPrice = 0
: একটি ভেরিয়েবলের শুরু মূল্যের প্রাথমিক মান 0 হিসাবে ঘোষণা করা হয় যা গ্রিডের প্রাথমিক মূল্য হিসাবে ব্যবহৃত হয়।var spacing = input.float(-1, title="间距价格")
: একটি কৌশল পরামিতি সেট করুন, পরামিতিটির নাম হ'ল হরফ ব্যবধান মূল্য হরফ, যা প্রতিটি গ্রিড পয়েন্টের ব্যবধান, 100 সেট করুন যা দাম প্রতি 100 এর উপরে, একবার লেনদেন।var dir = input.string("long", title="方向", options = ["long", "short", "both"])
: একটি নীতিগত পরামিতি সেট করুন, যার নাম হল প্যাটার্ন প্যাটার্ন, যা একটি ড্রপ বক্স সহ একটি বিকল্প যা আপনি 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
: একটি প্যারামিটার সেট করুন যা প্রতিটি গ্রিড পয়েন্টের হোল্ডিং লাভজনকতা নিয়ন্ত্রণ করে।Next: কোডটি দেখুনঃ
if spacing == -1 and amount == -1 and numbers == -1 and profit == -1
runtime.error("参数错误")
এর মানে হল যে যদি spacing, amount, numbers, profit এর কোন প্যারামিটার সেট না করা হয় এবং ডিফল্টরূপে -1 হয়, তাহলে প্যারামিটার সেট না করেই প্যারামিটারটি বন্ধ হয়ে যাবে।
এগিয়ে যাও!
if not barstate.ishistory and beginPrice == 0
beginPrice := close
এর অর্থ হল যে যখন কৌশলটি রিয়েল-টাইম K-লাইন পর্যায়ে থাকে এবং beginPrice == 0 হয়, তখন beginPrice এর মান পরিবর্তন করে বর্তমান সর্বশেষতম দামে পরিবর্তন করা হয়। যখন কৌশলটি আনুষ্ঠানিকভাবে চালিত হয়, তখন প্রাথমিক বর্তমান মূল্যটি গ্রিডের প্রাথমিক মূল্য হিসাবে বোঝা যায়। কারণ স্ক্রিপ্টটি একটি historical K-line BAR পর্যায়ে রয়েছে, কৌশলটি historical BAR পর্যায়ে লজিক্যালভাবে পুনরাবৃত্তি করবে, historical BAR এ গ্রিড স্থাপন করা অবশ্যই অর্থহীন হবে।
ঐতিহাসিক বার পর্ব কি?
উদাহরণস্বরূপ, বর্তমান মুহুর্তে A, কৌশলটি চলতে শুরু করে, কৌশলটি 100 টি K-লাইন BAR এর একটি ডেটা পায়, যা সময়ের সাথে সাথে 100 টি BAR 101 হয়ে যায়, 102... N। যখন A থেকে শুরু হয়, 101 তম BAR হল রিয়েল-টাইম K-লাইন ধাপ, এটি সর্বশেষতম রিয়েল-টাইম ডেটা। সুতরাং 1 ম BAR থেকে 100 তম BAR পর্যন্ত, এগুলি সমস্ত অতীতের historicalতিহাসিক ঘটনা, তবে কৌশলটিও এই historicalতিহাসিক ঘটনাগুলির উপর পুনরাবৃত্তি করবে, তাই এই ধাপটি historicalতিহাসিক K-লাইন ধাপ।
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
এই ফাংশনটির কাজ হল বর্তমানের সকল অর্ডারের মধ্যে একটি আইডি বিদ্যমান কিনা তা খুঁজে বের করা, যদি এটি বিদ্যমান থাকে তবে ফাইন্ড ট্রেড আইডি ফাংশন কলের সময় বিদ্যমান সেলটির আইডি ফেরত দেয় (দ্রষ্টব্যঃ এই আইডিটি এক্সচেঞ্জের অর্ডার আইডি নয়, এটি অর্ডারের নাম বা ট্যাগ হিসাবে বোঝানো হয়) যদি এটি না থাকে তবে স্ট্রিং "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)
for লুপ ব্যবহার করা হয়, Numbers পরামিতির সংখ্যার উপর ভিত্তি করে লুপের সংখ্যা নির্ধারণ করা হয়, অর্থাৎ সংশ্লিষ্ট সংখ্যার অর্ডার স্থাপন করা হয়; dir পরামিতির উপর ভিত্তি করে, direction সেট করা হয়; findTradeId ফাংশন ব্যবহার করা হয় বর্তমান গ্রিড অবস্থানের লেবেলযুক্ত অর্ডারটি খোলা হয়েছে কিনা তা খুঁজে বের করার জন্য, কেবলমাত্র যখন এটি খোলা না হয় তখনই এটি নীচে যাওয়ার জন্য; লেনদেন করা হয় তবে এটি পুনরাবৃত্তি করা যায় না; লেনদেন করা হয় না; লেনদেন করা হয় না; লেনদেন করা হয় না; লেনদেন করা হয় লেনদেন করা হয় লেনদেন করা হয় লেনদেন করা হয় লেনদেন করা হয় লেনদেন করা হয় লেনদেন করা হয় লেনদেন করা হয় লেনদেন করা হয় লেনদেন করা হয় লেনদেন করা হয় লেনদেন করা হয় লেনদেন করা হয় লেনদেন করা হয় লেনদেন করা হয় লেনদেন করা হয় লেনদেন করা হয় লেনদেন করা হয় লেনদেন করা
আপনি যদি মুনাফা কার্ভটি দেখেন তবে আপনি দেখতে পাবেন যে গ্রিডটি ঝুঁকিপূর্ণ এবং লাভজনক নয়, তবে বড় স্কেলে গ্রিডটি তুলনামূলকভাবে কিছুটা ঝুঁকিপূর্ণ।
সুতরাং, পাইন ভাষায়, যা এত সহজেই শেখা যায়, যদি আমি এখনো কৌশল লিখতে না পারি, তাহলে আমি...
স্ট্যালকারএই ধরনের ভ্রূণ শিক্ষার স্তরের টিউটোরিয়ালগুলি একাধিক হতে পারে, বিশেষত পাইনের টিউটোরিয়াল ((জ্ঞান প্রদান)hhh ◎ স্বপ্ন মোট v587
আর্ট্রনধন্যবাদ।
বিবিডব্লিউড ২০০৯ড্রিম মোট ভি 5
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নহ্যাঁ, পাইন টিউটোরিয়ালের একটি সিরিজ বি স্টেশনে তৈরি করা হয়েছেঃ https://www.bilibili.com/video/BV1sU4y1B71i/
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নএফএমজেডকে সমর্থন করার জন্য ধন্যবাদ।
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নB স্টেশনে PINE ভাষার একটি ভিডিও রয়েছে।