اگر آپ نہیں جانتے کہ اس طرح کے سیکھنے کے لئے آسان اور استعمال کرنے کے لئے آسان پائن زبان میں حکمت عملی لکھنے کے لئے کس طرح...

مصنف:لیدیہ, تخلیق: 2023-02-16 14:55:00, تازہ کاری: 2023-09-18 20:18:52

img

اگر آپ نہیں جانتے کہ اس طرح کے سیکھنے کے لئے آسان اور استعمال کرنے کے لئے آسان پائن زبان میں حکمت عملی لکھنے کے لئے کس طرح...

ٹریڈنگ ویو پر اوپن سورس حکمت عملیوں کی تعداد بہت زیادہ ہے۔ یہ افسوس کی بات ہے کہ بہت ساری عمدہ حکمت عملیوں ، نظریات اور اشارے کو حقیقی بوٹ میں استعمال نہیں کیا جاسکتا ہے۔ اس کو دیکھ کر ، ایف ایم زیڈ ، جو بہت سارے تاجروں کو مقداری تجارتی ٹکنالوجی کو مقبول بنانے کے لئے پرعزم ہے ، قدرتی طور پر اس مسئلے کو حل کرنے کی خواہش کو دبانے سے قاصر ہے!

اس تجربے کا اشتراک بالکل پیش کیا جانا چاہئے!

لہذا ، پروگرامنگ اور کوڈ تیار کرنے کی دنیا میں گھومنے پھرنے کے بعد ، 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="Spacing prices")
var dir = input.string("long", title="Directions", options = ["long", "short", "both"])
var amount = input.float(-1, title="Order quantity")
var numbers = input.int(-1, title="Number of grids")
var profit = input.int(-1, title="Profit spreads") / syminfo.mintick

if spacing == -1 and amount == -1 and numbers == -1 and profit == -1
    runtime.error("Parameter errors")

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 

// Real-time K-line stage
if not barstate.ishistory
    // Retrieve grid
    for i = 1 to numbers
        // Going long
        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)
        // Going short
        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 لائنوں سے کم ہے۔ ابتدائیوں کے لئے گرڈ حکمت عملی لکھنے میں مزید سر درد نہیں۔

یقینا this یہ حکمت عملی ایک گرڈ حکمت عملی ہے ، جس میں نقائص بھی ہیں ، اور یہ ایک پیسہ پرنٹنگ مشین نہیں ہے جو ہمیشہ جیتتی ہے۔ کلید استعمال اور پیرامیٹرز پر منحصر ہے۔ ہم اپنی تجارتی منطق کو آسانی سے نافذ کرنے کے لئے حکمت عملی لکھنے کے طریقوں پر زیادہ توجہ دیں گے ، اور حکمت عملی لکھ کر اور خود ہی تجارت کرکے پیسہ کمائیں گے۔ مدد نہ مانگنا بہت ٹھنڈا ہے!

کوڈ کی وضاحت

میں آپ سب کو وضاحت کروں گا، کوڈ سادہ اور سمجھنے میں آسان ہے، سیکھنے اور استعمال کرنے کے لئے اتنا آسان پائن زبان کے ساتھ، اگر آپ اب بھی ایک حکمت عملی نہیں لکھ سکتے ہیں، تو میں کروں گا... آپ کو تفصیل سے بتائیں!

کے ساتھ شامل مواد/*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="Spacing prices")
var dir = input.string("long", title="Directions", options = ["long", "short", "both"])
var amount = input.float(-1, title="Order quantity")
var numbers = input.int(-1, title="Number of grids")
var profit = input.int(-1, title="Profit points") / syminfo.mintick
  • strategy(overlay=true): یہ اسکرپٹ کے کچھ اختیارات مقرر کرنے کے لئے استعمال کیا جاتا ہے، overlay=true، جس پیرامیٹر کو حقیقی قدر تفویض کرنا ہےoverlay، تاکہ چارٹ ڈرائنگ کرتے وقت، یہ مرکزی چارٹ پر تیار کیا جاتا ہے (K لائن چارٹ اہم چارٹ ہے، یہ اتنا آسان سمجھا جا سکتا ہے).
  • varip beginPrice = 0: ایک متغیر startPrice کلیدی لفظ varip کے ساتھ 0 کی ابتدائی قیمت کے ساتھ اعلان کیا جاتا ہے، جو گرڈ کے لئے ابتدائی قیمت کے طور پر استعمال کیا جاتا ہے.
  • var spacing = input.float(-1, title="Spacing prices"): ایک حکمت عملی پیرامیٹر مقرر کریں، پیرامیٹر کا نام spacing price ہے، جو ہر گرڈ پوائنٹ کی فاصلہ ہے، 100 کی ترتیب کا مطلب یہ ہے کہ قیمت ہر 100 میں ایک بار تجارت کرے گی.
  • var dir = input.string("long", title="Directions", options = ["long", "short", "both"]): ایک حکمت عملی پیرامیٹر direction نامی مقرر کریں، اس پیرامیٹر کے اختیارات طویل، مختصر، اور دونوں کے ساتھ ایک ڈراپ ڈاؤن باکس ہے، جس کا مطلب یہ ہے کہ گرڈ صرف طویل، صرف مختصر، اور دونوں، بالترتیب ہے.
  • var amount = input.float(-1, title="Order quantity"): ہر گرڈ پوائنٹ ٹرانزیکشن میں تجارت کے حجم کو کنٹرول کرنے کے لئے ایک پیرامیٹر مقرر کریں.
  • var numbers = input.int(-1, title="Number of grids"): گرڈ پوائنٹس کی تعداد، ترتیب 20 ایک سمت میں 20 گرڈ پوائنٹس ہے.
  • var profit = input.int(-1, title="Profit spreads") / syminfo.mintick: پوزیشن بند کرنے سے پہلے ہر گرڈ پوائنٹ پوزیشن کے منافع کے مارجن کو کنٹرول کرنے کے لئے ایک پیرامیٹر مقرر کریں۔

اگلا، کوڈ پر نظر ڈالیں:

if spacing == -1 and amount == -1 and numbers == -1 and profit == -1
    runtime.error("Parameter errors")

اس کا مطلب یہ ہے کہ اگر کوئی پیرامیٹرز جیسے فاصلہ، رقم، تعداد، اور منافع مقرر نہیں ہیں، تو ڈیفالٹ -1 ہے، اور حکمت عملی رک جائے گی (آپ پیرامیٹرز مقرر کیے بغیر اندھا کام نہیں کر سکتے ہیں)

آگے بڑھو!

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

اس کا مطلب یہ ہے کہ جب حکمت عملی حقیقی وقت میں K- لائن مرحلے میں ہے اور startPrice == 0 ہے تو ، startPrice کی قیمت کو موجودہ تازہ ترین قیمت میں تبدیل کریں۔ یہ سمجھا جاسکتا ہے کہ جب حکمت عملی سرکاری طور پر چل رہی ہے تو ، ابتدائی موجودہ قیمت گرڈ کی ابتدائی قیمت ہے۔ کیونکہ اسکرپٹ میں تاریخی K- لائن BAR مرحلہ ہے ، لہذا حکمت عملی تاریخی BAR مرحلے میں ایک بار منطق کو انجام دے گی ، اور تاریخی BAR پر گرڈ کو ترتیب دینا یقینی طور پر بے معنی ہے۔

تاریخی بار مرحلہ کیا ہے؟

ایک سادہ مثال کے طور پر ، موجودہ لمحے A میں ، حکمت عملی چلنا شروع ہوجاتی ہے ، اور حکمت عملی 100 K- لائن BARs کے ساتھ ڈیٹا حاصل کرتی ہے۔ وقت گزرنے کے ساتھ ، 100 BARs 101 ، 102...N بن جائیں گے۔ جب یہ لمحے A سے چلنا شروع ہوتا ہے تو ، 101 واں BAR حقیقی وقت کی K لائن اسٹیج ہے ، اور یہ وقت تازہ ترین حقیقی وقت کا ڈیٹا ہے۔ پھر 1 BAR سے 100 BAR تک ، یہ تاریخی مارکیٹ کی قیمتیں ہیں جو گزر چکی ہیں ، لیکن حکمت عملی ان تاریخی مارکیٹ کی قیمتوں پر بھی چلتی ہے ، لہذا یہ مرحلہ تاریخی K لائن مرحلہ ہے۔

barstate.ishistoryیہ پائن زبان میں ایک بلٹ ان متغیر ہے،barstate.ishistoryاگر موجودہ BAR ایک تاریخی BAR ہے تو سچ ہے ، اور اگر یہ تاریخی BAR نہیں ہے تو غلط ہے۔ لہذا جب بار اسٹیٹ نہیں ہوتا ہے۔ تاریخ سچ ہے ، تو یہ حقیقی وقت میں K لائن اسٹیج میں ہے۔

اگلا، ایک فنکشن پیدا کیا جاتا ہے

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 فنکشن کال ہے تو ، یہ موجودہ آرڈر کی شناخت واپس کردے گی (نوٹ کریں کہ یہ شناخت ایکسچینج کی آرڈر ID نہیں ہے ، یہ حکمت عملی کے ذریعہ آرڈر کو دیا گیا نام ہے یا لیبل کے طور پر سمجھا جاتا ہے) ، اگر یہ موجود نہیں ہے تو ، تار notFound واپس کردی جاتی ہے۔

اگلا قدم گرڈ شیٹ شروع کرنا ہے:

// Real-time K-line stage
if not barstate.ishistory
    // Retrieve grid
    for i = 1 to numbers
        // Going long
        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)
        // Going short
        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 پیرامیٹر کے مطابق سمت طے کریں۔ موجودہ گرڈ پوزیشن پر لیبل کا آرڈر کھولا گیا ہے یا نہیں یہ جاننے کے لئے findTradeId فنکشن کا استعمال کریں ، اور صرف اس صورت میں منصوبہ بند آرڈر دیں جب کوئی کھلی پوزیشن نہ ہو (اگر پوزیشن کھولی گئی ہو تو ، اسے دہرا نہیں جاسکتا) ۔ آرڈر دینے کے لئے ، منصوبہ بند آرڈر کے طور پر حد پیرامیٹر کی وضاحت کرنے کے لئے strategy.order فنکشن کا استعمال کریں۔ منصوبہ بند آرڈر دیتے وقت اسی طرح کا اختتامی آرڈر دیں۔ اختتامی آرڈر میںstrategy.exitفنکشن، منافع پیرامیٹر کی وضاحت کرتا ہے، اور منافع پوائنٹس کی وضاحت کرتا ہے.

img

img

منافع کے منحنی خطوط کو دیکھتے ہوئے ہم دیکھ سکتے ہیں کہ گرڈ بھی خطرناک ہے۔ یہ ضمانت شدہ جیت نہیں ہے۔ یہ صرف اتنا ہے کہ بڑے پیمانے پر گرڈ کی توسیع کا خطرہ تھوڑا سا کم ہے۔

ٹھیک ہے، اگر آپ کو نہیں جانتے تو ایک حکمت عملی لکھنے کے لئے کس طرح اتنا آسان سیکھنے کے لئے اور استعمال کرنے کے لئے آسان پائن زبان میں، پھر میں...


متعلقہ

مزید