ٹریڈنگ ویو پر بہت ساری اوپن سورس حکمت عملیاں ہیں ، اور بہت ساری عمدہ حکمت عملیاں ، خیالات اور اشارے کام نہیں کر رہے ہیں۔ یہ دیکھ کر افسوس ہوتا ہے کہ ایف ایم زیڈ کو اس مسئلے کو حل کرنے کی ضرورت کو روکنے کی ضرورت نہیں ہے ، کیونکہ وہ کوانٹیمیٹڈ ٹریڈنگ ٹکنالوجی کو بہت سارے تاجروں تک پہنچانے کے لئے پرعزم ہیں!
یہ ایک ناقابل برداشت مطالبہ ہے!
لہذا ، پروگرامنگ کی ترقی کے کوڈ کی دنیا میں ، پہاڑوں پر پانی بھرنے ، ہزاروں پہاڑوں پر چلنے ، 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
اور*/
اس میں ایف ایم زیڈ کا ریورسٹ کنفیگریشن کوڈ شامل ہے جو ایف ایم زیڈ کی خصوصیات ہیں ، اور پائن زبان کا مواد نہیں۔ یقینا ، آپ اس حصے کو نہیں لکھ سکتے ہیں۔ ریورسٹ کے وقت ، آپ کو دستی طور پر پیرامیٹرز کنٹرول پر کلک کرنے کی ضرورت ہوگی تاکہ ریورسٹ کنفیگریشن اور پیرامیٹرز کو ترتیب دیا جاسکے۔
/*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
: کلیدی لفظ varip کے ساتھ ایک متغیر کا اعلان کریں beginPrice ابتدائی تفویض 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 پر نہیں ہے تو ، اس کی پالیسی کو روک دیا جائے گا ((پیرامیٹرز کو سیٹ کرنے کے بغیر اندھا نہیں چل سکتا ہے - ہاہاہا!)
آگے بڑھو!
if not barstate.ishistory and beginPrice == 0
beginPrice := close
اس کا مطلب یہ ہے کہ جب حکمت عملی حقیقی وقت میں K لائن مرحلے میں ہے اور beginPrice == 0 ہے ، تو beginPrice کو موجودہ تازہ ترین قیمت میں تبدیل کرنے کے لئے تبدیل کریں۔ یہ سمجھا جاسکتا ہے کہ جب حکمت عملی باقاعدگی سے چل رہی ہے تو ، ابتدائی موجودہ قیمت گرڈ کی ابتدائی قیمت ہے۔ چونکہ اسکرپٹ تاریخی K لائن BAR مرحلے کا ہے ، لہذا حکمت عملی تاریخی BAR مرحلے میں ایک بار پھر منطق پر عمل کرے گی ، لہذا تاریخی بار پر گرڈ لگانے کا کوئی مطلب نہیں ہوگا۔
تاریخی بار مرحلہ کیا ہے؟
مثال کے طور پر، جیسے موجودہ لمحہ A، حکمت عملی چلتی ہے، حکمت عملی 100 K لائن BARs کے ساتھ ڈیٹا لیتی ہے، جس میں وقت کے ساتھ 100 BARs 101، 102... N بن جاتے ہیں۔ مثال کے طور پر، جب یہ لمحہ A سے چلتا ہے تو، 101 BARs حقیقی وقت میں K لائن مرحلے ہیں، جو تازہ ترین حقیقی وقت کے اعداد و شمار ہیں. لہذا، 1 BARs سے 100 BARs تک، یہ سب ماضی کے تاریخی واقعات ہیں، لیکن حکمت عملی ان تاریخی واقعات پر بھی چلتی ہے، لہذا یہ مرحلہ تاریخی 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 لوپ کا استعمال کرتے ہوئے ، لوپ کی تعداد کا تعین کیا جاتا ہے ، یعنی ، اسی تعداد کے آرڈر کی ترتیب ؛ dir پیرامیٹر کے مطابق ، direction کا تعین کیا جاتا ہے۔ findTradeId فنکشن کا استعمال کرتے ہوئے موجودہ گرڈ پوزیشن کے لیبل والے آرڈر کی تلاش کی جاتی ہے کہ آیا وہ پہلے ہی کھلے ہوئے ہیں ، اور صرف اس وقت ہی جب وہ کھلے ہوئے ہیں تو وہ شیڈول کی فہرست میں جاتے ہیں ((اگر وہ کھلے ہوئے ہیں تو یقینی طور پر اس کی تکرار نہیں ہوسکتی ہے) ؛ نیچے کی فہرست کا استعمال کرتے ہوئے حکمت عملی.order فنکشن کی حد کی وضاحت کریں شیڈول کی فہرست بنائیں ؛ نیچے کی فہرست کے ساتھ ساتھ نیچے کی مساوی شیڈول کی فہرست ؛ نیچے کی فہرست کا استعمال کرتے ہوئے شیڈول کی حکمت عملی.exit فنکشن ، منافع کے پیرامیٹرز کی وضاحت کریں ، منافع کے پوائنٹس کی وضاحت کریں۔
منافع کی وکر کو دیکھتے ہوئے ، یہ معلوم ہوتا ہے کہ گرڈ بھی خطرہ ہے ، اور یہ فائدہ مند نہیں ہے ، لیکن بڑے پیمانے پر بڑے پیمانے پر گرڈ کو بڑھانے کا نسبتا risk کم خطرہ ہے۔
اگر آپ نے ابھی تک کوئی حکمت عملی نہیں لکھی ہے تو میں...
پیچھا کرنے والااس طرح کی پیدائش کی سطح کے سبق میں سے کچھ اور کیا جا سکتا ہے، بہتر ہے کہ خصوصی طور پر ایک پائن سبق ((علم ادا)hhh ◎ خواب مجموعی طور پر v587
آرٹونشکریہ
بی بی ڈبلیو 2009خواب مجموعی V5
ایجاد کاروں کی مقدار - خوابجی ہاں، بی اسٹیشن پر ایک سلسلہ پین سبق کیا گیا ہے: https://www.bilibili.com/video/BV1sU4y1B71i/
ایجاد کاروں کی مقدار - خوابمیں نے اس کے بارے میں کچھ نہیں کہا۔ میں نے اس کے بارے میں کچھ نہیں کہا۔
ایجاد کاروں کی مقدار - خواببی اسٹیشن پر پائن زبان کی تعارفی ویڈیو بھی دیکھی جا سکتی ہے۔