وسائل لوڈ ہو رہے ہیں... لوڈنگ...

ایف ایم زیڈ کوانٹ کا پائن زبان تعارفی سبق

مصنف:FMZ~Lydia, تخلیق: 2022-09-23 15:23:34, تازہ کاری: 2024-02-27 16:47:41

.3، حد=3)

اگر نہیں barstate.ishistory اور بند کریں < کھولیں حکمت عملی.منسوخ ((long1) حکمت عملی.منسوخ ((long2) حکمت عملی.منسوخ ((long3) isStop:= true


---------------------------

6. ```strategy.cancel_all```

The ```strategy.cancel_all``` function is similar to the ```strategy.cancel``` function. It can cancel/stop all pre-listed commands. The ```when``` parameter can be specified.

Parameters:

- ```when```: Execution conditions.

```pine
/*backtest
start: 2022-07-03 00:00:00
end: 2022-07-09 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

strategy("strategy.cancel Demo", pyramiding=3)

var isStop = false 
if isStop 
    runtime.error("stop")

strategy.entry("long1", strategy.long, 0.1, limit=1)
strategy.entry("long2", strategy.long, 0.2, limit=2)
strategy.entry("long3", strategy.long, 0.3, limit=3)

if not barstate.ishistory and close < open 
    strategy.cancel_all()
    isStop := true 

  1. strategy.order

کی فعالیت اور پیرامیٹر کی ترتیباتstrategy.orderتقریب تقریبا ان لوگوں کے ساتھ ایک جیسے ہیںstrategy.entryفرق یہ ہے کہstrategy.orderکام کی طرف سے متاثر نہیں ہےpyramidingپیرامیٹر کی ترتیباتstrategyتقریب، اور کوئی حکم کی تعداد کی حد نہیں ہے.

پیرامیٹرز:

  • id: یہ سمجھا جاسکتا ہے کہ حوالہ کے لئے تجارتی پوزیشن کا نام دینا۔ آرڈر منسوخ کرنے ، ترمیم کرنے اور پوزیشنوں کو بند کرنے کے لئے آئی ڈی کا حوالہ دیا جاسکتا ہے۔
  • direction: اگر آرڈر کی سمت لمبی ہے (خریدیں) ، بلٹ ان متغیر میں منتقل کریںstrategy.long، اور اگر آپ مختصر جانا چاہتے ہیں (فروخت) ، متغیر میں منتقلstrategy.short.
  • qty: ترتیب دینے کے لئے آرڈر کی مقدار کی وضاحت کریں، اگر یہ پیرامیٹر منظور نہیں کیا جاتا ہے، تو آرڈر کی ڈیفالٹ رقم استعمال کی جائے گی.
  • when: عملدرآمد کی شرط، آپ اس پیرامیٹر کو اس بات کا کنٹرول کرنے کے لئے مخصوص کر سکتے ہیں کہ آیا یہ موجودہ آرڈر آپریشن شروع ہوتا ہے یا نہیں.
  • limit: آرڈر کی حد کی قیمت بتائیں.
  • stopسٹاپ نقصان کی قیمت.

ہم اس خصوصیت کا استعمال کریں گےstrategy.orderکی تعداد پر کوئی حد نہیں ہے کے احکامات کی جگہ، کے ساتھ مل کرstrategy.exitمشروط باہر نکلنے کا فنکشن گرڈ ٹریڈنگ کی طرح ایک اسکرپٹ کی تعمیر کے لئے۔ مثال بہت آسان ہے اور صرف سیکھنے کے مقاصد کے لئے:

/*backtest
start: 2021-03-01 00:00:00
end: 2022-08-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
args: [["ZPrecision",0,358374]]
*/

varip beginPrice = -1

if not barstate.ishistory
    if beginPrice == -1 or (math.abs(close - beginPrice) > 1000 and strategy.opentrades == 0) 
        beginPrice := close
    
    for i = 0 to 20
        strategy.order("buy"+i, strategy.long, 0.01, limit=beginPrice-i*200, when=(beginPrice-i*200)<close)
        strategy.exit("coverBuy"+i, "buy"+i, qty=0.01, profit=200)
        
        strategy.order("sell"+i, strategy.short, 0.01, limit=beginPrice+i*200, when=(beginPrice+i*200)>close)
        strategy.exit("coverSell"+i, "sell"+i, qty=0.01, profit=200)

حکمت عملی کی مثالیں

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

سپر ٹرینڈ اشارے کی حکمت عملی

strategy("supertrend", overlay=true)

[supertrend, direction] = ta.supertrend(input(5, "factor"), input.int(10, "atrPeriod"))

plot(direction < 0 ? supertrend : na, "Up direction", color = color.green, style=plot.style_linebr)
plot(direction > 0 ? supertrend : na, "Down direction", color = color.red, style=plot.style_linebr)

if direction < 0
    if supertrend > supertrend[2]
        strategy.entry("entry long", strategy.long)
    else if strategy.position_size < 0
        strategy.close_all()
else if direction > 0
    if supertrend < supertrend[3]
        strategy.entry("entry short", strategy.short)
    else if strategy.position_size > 0
        strategy.close_all()

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

سب سے پہلے، حکمت عملی کا کوڈ کچھ سادہ ترتیبات کے ساتھ شروع ہوتا ہےstrategyفنکشن:strategy("supertrend", overlay=true)``, which just sets a strategy title "supertrend". Theاوورلیپparameter is set toسچ, so that the drawn indicator lines and other content are displayed on the main chart. The first thing we need to look at when designing a Pine strategy or learning a Pine strategy script is the strategy interface parameter design. Let's look at the source code of the ''supertrend indicator strategy'', which has theان پٹ ` ` فنکشن ہم نے پچھلے کورس میں سیکھا

[supertrend, direction] = ta.supertrend(input(5, factor) ،input.int(10, atrPeriod))

کےinputفنکشن کال براہ راست پیرامیٹر کے طور پر استعمال کیا جاتا ہےta.supertrendسپر ٹرینڈ اشارے کا حساب لگانے کے لئے اشارے کا فنکشن۔ ان میں شامل ہیں:

  • ان پٹ ((5, factor)
  • input.int(10, atrPeriod)

ڈیفالٹ کے طور پر، فنکشن پین زبان کی حکمت عملی کی سکرین پر دو پیرامیٹر کنٹرول مقرر کرتا ہے، جیسا کہ ذیل میں دکھایا گیا ہے:

img

ہم دیکھ سکتے ہیں کے طور پر، کنٹرول پر ڈیفالٹ کی قدر کی پہلی پیرامیٹر ہےinputفنکشن اورinputافعال کی سیریز (یہاںinput.int), جو بھی پچھلے حصوں میں وضاحت کی گئی تھی. ان دو افعال کے ساتھ ہم پھرta.supertrendحکمت عملی کی سکرین پر.supertrendتقریب ایک قیمت کے اعداد و شمار کا حساب لگاتا ہےsupertrendاور ایک سمت ڈیٹاdirectionپھر ہم استعمال کرتے ہیںplotایک چارٹ ڈرائنگ کرنے کے لئے تقریب، نوٹ کریں کہ جب چارٹ ڈرائنگ، یہ سپر رجحان اشارے کی سمت پر مبنی ہے، صرف موجودہ سمت ڈرائنگ ہے.directionہے - 1، موجودہ مارکیٹ کے رجحان میں اضافہ ہے، جبdirection1 ہے، موجودہ مارکیٹ رجحان نیچے ہے. تو ہم دیکھ سکتے ہیں کہplotتقریب چارٹ ڈرائنگ جب فیصلےdirection0 سے زیادہ یا کم ہے

اگلےif... else ifمنطق ٹریڈنگ سگنل کا فیصلہ ہے.direction < 0اگر یہ سچ ہے تو اس کا مطلب یہ ہے کہ موجودہ مارکیٹ بڑھتی ہوئی مرحلے میں ہے۔supertrendسپر رجحان اشارے میں دو پچھلے BARs پر سپر رجحان اشارے کی قیمت سے زیادہ ہے (یعنی،supertrend[2], remember that the historical operator refers to the historical data of a variableاس کے علاوہ ، اگر موجودہ پوزیشن موجود ہے تو ، ریورس آرڈر فنکشن کو کال کرنے سے پہلے پچھلی پوزیشن بند ہوجائے گی ، اور پھر موجودہ تجارتی سمت کے مطابق پوزیشن کھول دی جائے گی۔supertrend > supertrend[2]پورا نہیں کیا گیا ہے، جب تکstrategy.position_size < 0مختصر پوزیشنوں کو برقرار رکھنے، یہ ٹرگر کرے گاstrategy.close_all()تمام پوزیشنوں کو بند کرنے کے لئے فنکشن پر عملدرآمد.

direction > 0جب یہ نیچے کی طرف رجحان کے مرحلے میں ہے تو ایک ہی ہے. اگر طویل پوزیشنیں ہیں تو، تمام پوزیشنیں بند ہو جائیں گی، اور پھر جب شرطsupertrend < supertrend[3]ملتا ہے، ایک مختصر سگنل چالو کیا جائے گا.[3]سپر ٹرینڈ اشارے کے قیمت کے اعداد و شمار کو پچھلے نمبر کے تیسرے BAR پر حوالہ دینے کے لئے؟ یہ حکمت عملی کے مصنف کا ارادہ ہوسکتا ہے۔ آخر میں ، کچھ مارکیٹوں میں ، جیسے معاہدہ ٹریڈنگ مارکیٹ میں ، مختصر خطرہ طویل خطرہ سے قدرے زیادہ ہے۔

کے لئےta.supertrendاشارے، کسی کو کس طرح موجودہ رجحان اوپر یا نیچے ہے فیصلہ کرنے کے لئے دلچسپی رکھتے ہیں؟

دراصل یہ اشارے پائن زبان میں اپنی مرضی کے مطابق افعال کی شکل میں بھی لاگو کیا جا سکتا ہے:

pine_supertrend(factor, atrPeriod) =>
	src = hl2
	atr = ta.atr(atrPeriod)
	upperBand = src + factor * atr
	lowerBand = src - factor * atr
	prevLowerBand = nz(lowerBand[1])
	prevUpperBand = nz(upperBand[1])

	lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ? lowerBand : prevLowerBand
	upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ? upperBand : prevUpperBand
	int direction = na
	float superTrend = na
	prevSuperTrend = superTrend[1]
	if na(atr[1])
		direction := 1
	else if prevSuperTrend == prevUpperBand
		direction := close > upperBand ? -1 : 1
	else
		direction := close < lowerBand ? 1 : -1
	superTrend := direction == -1 ? lowerBand : upperBand
	[superTrend, direction]

یہ اپنی مرضی کے مطابق تقریب بلٹ میں تقریب کے طور پر بالکل ایک ہی الگورتھم ہےta.supertrend، اور ظاہر ہے کہ حساب کردہ اشارے کے اعداد و شمار بھی بالکل ایک جیسے ہیں۔ ہم اس اپنی مرضی کے مطابق تقریب الگورتھم سے دیکھ سکتے ہیں کے طور پر، پائن کی بلٹ میں سپر رجحان اشارے کا استعمال کرتے ہوئے حساب لگایا جاتا ہےhl2بلٹ ان متغیر (سب سے زیادہ اور سب سے کم قیمتوں کو ایک ساتھ جوڑا جاتا ہے اور پھر 2 سے تقسیم کیا جاتا ہے ، یعنی سب سے زیادہ اور سب سے کم قیمتوں کا اوسط) ، اور پھر اے ٹی آر اشارے (غیر مستحکم) کا حساب ایک خاص مدت کے لئے پیرامیٹر atrPeriod کی بنیاد پر کیا جاتا ہے۔ پھر اوپری اور نچلی پٹریوں کو hl2 اور ATR کا استعمال کرتے ہوئے تعمیر کیا جاتا ہے۔

تازہ کاریlowerBandاورupperBandکوڈ میں ترنری اظہار کے مطابق.

    lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ? lowerBand : prevLowerBand
    upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ? upperBand : prevUpperBand

lowerBand: lowerBand، اس بات کا تعین کرنے کے لئے استعمال کیا جاتا ہے کہ آیا اوپر کا رجحان بدل گیا ہے. upperBand: upperBand، اس بات کا تعین کرنے کے لئے استعمال کیا جاتا ہے کہ آیا نیچے کا رجحان بدل گیا ہے. lowerBand اور upperBand ہمیشہ حساب لگایا جاتا ہے، صرف موجودہ رجحان کی سمت اس اپنی مرضی کے مطابق فنکشن کے اختتام پر مقرر کی جاتی ہے.

    else if prevSuperTrend == prevUpperBand
        direction := close > upperBand ? -1 : 1
    else
        direction := close < lowerBand ? 1 : -1

یہاں یہ فیصلہ کیا جاتا ہے کہ اگر سپر رجحان پر آخری BAR کی قیمت کا قدر ہےprevUpperBand، یعنی اوپری بینڈ، اس کا مطلب یہ ہے کہ موجودہ ایک نیچے کا رجحان ہے.closeسے زیادہ ہےupperBandقیمت توڑنے کے بعد، اس نقطہ پر رجحان کو تبدیل کر دیا گیا ہے اور ایک اپ ٹرینڈ میں تبدیل کر دیا گیا ہے.direction-1 (اپ ٹرینڈ) پر مقرر کیا جاتا ہے۔ دوسری صورت میں یہ اب بھی 1 (نیچے کی طرف رجحان) پر مقرر کیا جاتا ہے۔ یہی وجہ ہے کہ آپ سپر ٹرینڈ حکمت عملی میں دیکھتے ہیںif direction < 0جب سگنل کی حالت طویل جانے کے لئے متحرک ہے.direction > 0، سگنل کی حالت مختصر کرنے کے لئے متحرک ہے.

    superTrend := direction == -1 ? lowerBand : upperBand
    [superTrend, direction]

آخر میں، مخصوص سپر رجحان اشارے کی قیمت کے اعداد و شمار اور سمت کے اعداد و شمار کو سمت کے انتخاب پر مبنی ہے.

متحرک توازن کی حکمت عملی

/*backtest
start: 2021-03-01 00:00:00
end: 2022-09-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
args: [["v_input_1",4374],["v_input_2",3],["v_input_3",300],["ZPrecision",0,358374]]
*/

varip balance = input(50000, "balance")
varip stocks = input(0, "stocks")

maxDiffValue = input(1000, "maxDiffValue")


if balance - close * stocks > maxDiffValue and not barstate.ishistory
    // more balance , open long 
    tradeAmount = (balance - close * stocks) / 2 / close
    strategy.order("long", strategy.long, tradeAmount)
    balance := balance - tradeAmount * close
    stocks := stocks + tradeAmount
    runtime.log("balance:", balance, ", stocks:", stocks, ", tradeAmount:", tradeAmount)

else if close * stocks - balance > maxDiffValue and not barstate.ishistory
    // more stocks , open short 
    tradeAmount = (close * stocks - balance) / 2 / close
    strategy.order("short", strategy.short, tradeAmount)
    balance := balance + tradeAmount * close
    stocks := stocks - tradeAmount
    runtime.log("balance:", balance, ", stocks:", stocks, ", tradeAmount:", tradeAmount)

plot(balance, title="balance value(quoteCurrency)", color=color.red)
plot(stocks*close, title="stocks value(quoteCurrency)", color=color.blue)

img

img

آئیے کچھ پائن زبان کی حکمت عملی ڈیزائن مثالوں کے ساتھ جاری رکھیں ، اس بار ہم متحرک توازن کی حکمت عملی سیکھیں گے۔ متحرک توازن کی حکمت عملی وہ ہے جو ہمیشہ مقدار کو متوازن کرتی ہے۔BaseCurrencyاور رقمQuoteCurrency. جس اثاثے کی نسبتا price قیمت میں اضافہ ہوتا ہے ، اکاؤنٹ میں رکھی گئی قیمت میں اضافہ ہوتا ہے اور اثاثہ فروخت ہوتا ہے۔ اگر کسی اثاثے کی نسبتا price قیمت میں کمی واقع ہوتی ہے تو ، اکاؤنٹ میں رکھی گئی قیمت میں کمی واقع ہوتی ہے اور اثاثہ خریدا جاتا ہے۔ اس کو متحرک توازن کی حکمت عملی کہا جاتا ہے۔ در حقیقت ، متحرک توازن کی حکمت عملی ایک قسم کی گرڈ حکمت عملی ہے جو دوڑتے ہوئے بازاروں میں اچھی کارکردگی کا مظاہرہ کرتی ہے۔ لیکن رجحان مارکیٹ میں ، یہ پیسہ کھونے کے لئے جاری رہے گا ، ہمیں منافع میں نقصانات کو آہستہ آہستہ کم کرنے کے لئے قیمت کی واپسی کا انتظار کرنے کی ضرورت ہے ، لیکن فائدہ یہ ہے کہ متحرک توازن کی حکمت عملی ہمیشہ مارکیٹ کے دوڑتے ہوئے رجحان کو پکڑ سکتی ہے۔

اس حکمت عملی کے بیک ٹیسٹ چارٹ پر دکھائے جانے کے مطابق ، اس کا نقصان یہ ہے کہ اس حکمت عملی میں عام قیمت کے رجحان (یا نیچے) کے مرحلے کے دوران ایک بڑا تیرتا نقصان ہوتا ہے۔ لہذا یہ حکمت عملی اسپاٹ حکمت عملیوں کے لئے ٹھیک ہے ، لیکن آپ کو مستقبل کے لئے خطرے پر قابو پانے کی ضرورت ہے۔

آئیے اسٹریٹجی کوڈ ڈیزائن کو دیکھیں:

ہم ایک سادہ ڈیزائن کا استعمال کرتے ہیں جو ایکbalance(یعنی، QuoteCurrency اثاثوں کی تعداد) اورstocks(یعنی بیس کرنسی اثاثوں کی تعداد) حکمت عملی میں بیلنس کی معلومات۔ ہم اکاؤنٹ میں اثاثوں کی اصل تعداد نہیں پڑھتے ہیں ، ہم صرف مناسب خرید و فروخت کا حساب لگانے کے لئے نقلی رقم کا استعمال کرتے ہیں۔ پھر کلیدی پیرامیٹر جو اس متحرک توازن کی حکمت عملی کے ذریعہ کھینچنے والے گرڈ کو متاثر کرتا ہے وہ ہےmaxDiffValue، جو توازن کے عمل کو انجام دینے کا فیصلہ کرنے کا معیار ہے۔ موجودہ قیمت پر ، صرف اس وقت جبBaseCurrencyاورQuoteCurrencyسے زیادہmaxDiffValueکیا بیلنسنگ کا عمل ہوتا ہے، اثاثہ کو دوبارہ متوازن کرنے کے لیے اثاثہ کو زیادہ قیمت پر بیچنا اور کم قیمت پر خریدنا۔

حکمت عملی ٹریڈنگ سگنل ٹرگر ریئل ٹائم BAR مرحلے میں ہونا ضروری ہے، تاکہ اگر حکمت عملی ٹریڈنگ کے حالات میں فیصلے کے ساتھ مقرر کر رہے ہیںnot barstate.ishistoryخریدیں جبbalanceقیمت سے زیادہ ہےstocksموجودہ قیمت کے حساب پر مبنی قیمت۔ اس کے برعکس ، ایک فروخت آپریشن انجام دیا جاتا ہے۔ تجارت کے بیان کو انجام دینے کے بعد ،balanceاورstocksمتغیرات کو اپ ڈیٹ کیا جاتا ہے اور پھر اگلے توازن ٹرگر کا انتظار.

حکمت عملی backtest کے مندرجہ بالا معلومات حکمت عملی backtest کے آغاز کے وقت پرجاتیوں کی قیمت پر مشتمل ہے، قیمت 1458 ہے، تو میں پیرامیٹر مقررbalanceکرنے کے لئے: 4374 (1458*3) جان بوجھ کر، پیرامیٹر مقررstocks3۔ اثاثہ توازن میں شروع ہو۔

سٹاپ نقصان اور منافع لینے کے ساتھ سپر رجحان کی حکمت عملی

پچھلے کورس میں، ہم نے سیکھا ہےstrategy.exitپوزیشن باہر نکلنے کی تقریب، جس میں ہم نے ٹریکنگ سٹاپ اور منافع لینے کی تقریب کی وضاحت کرنے کے لئے ایک مثال نہیں تھی. اس حکمت عملی کے ڈیزائن کی مثال میں، ہم استعمال کریں گےstrategy.exitایک سپر رجحان کی حکمت عملی کو بہتر بنانے کے لئے کام.

سب سے پہلے آئیے اسٹاپ نقصان اور منافع لینے کے پیرامیٹرز کو دیکھیںstrategy.exitفنکشن:

  1. پیرامیٹرtrail_price: وہ پوزیشن جو ٹریکنگ سٹاپ نقصان اور سٹاپ نقصان بند کرنے کے آرڈر (قیمت کی طرف سے مخصوص پوزیشن پر) رکھنے کی منطقی کارروائی کو متحرک کرتی ہے۔
  2. پیرامیٹرtrail_offset: ٹریکنگ سٹاپ نقصان اور منافع لینے کی کارروائی کے بعد رکھی گئی بند پوزیشن کی سب سے زیادہ (بڑے جاتے وقت) یا سب سے کم (چھوٹے جاتے وقت) قیمت سے فاصلہ۔
  3. پیرامیٹرtrail_pointsجیسے:trail_priceپیرامیٹر، سوائے اس کے کہ یہ مخصوص پوزیشن کے طور پر منافع پوائنٹس لیتا ہے.

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

/*backtest
start: 2022-09-23 00:00:00
end: 2022-09-23 08:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
args: [["RunMode",1,358374],["ZPrecision",0,358374]]
*/

strategy("test", overlay = true)

varip a = na
varip highPrice = na
varip isTrade = false 
varip offset = 30

if not barstate.ishistory and not isTrade
    strategy.entry("test 1", strategy.long, 1)
    strategy.exit("exit 1", "test 1", 1, trail_price=close+offset, trail_offset=offset)
    a := close + offset
    runtime.log("the price per point is:", syminfo.mintick, ", current close:", close)
    isTrade := true 

if close > a and not barstate.ishistory
    highPrice := na(highPrice) ? close : highPrice
    highPrice := close > highPrice ? close : highPrice

plot(a, "trail_price trigger line")    
plot(strategy.position_size>0 ? highPrice : na, "current highest price")
plot(strategy.position_size>0 ? highPrice-syminfo.mintick*offset : na, "moving stop trigger line")

img

img

img

فوری طور پر طویل اندراج جب حکمت عملی کو انجام دینے کے لئے شروع ہوتا ہے، اور پھر فوری طور پر ایک رکھ دیاstrategy.exitباہر نکلنے کا حکم (اس نے ٹریکنگ اسٹاپ نقصان اور منافع لینے کے پیرامیٹرز کی وضاحت کی) ، جب مارکیٹ کی تبدیلی کی قیمت ٹریل_پریس ٹرگر لائن سے اوپر چلی گئی ، ٹریل اسٹاپ نقصان اور منافع لینے کے منطق ، اسٹاپ نقصان اور منافع لینے کی لائن (نیلے رنگ) کا نفاذ سب سے زیادہ قیمت کی متحرک ایڈجسٹمنٹ پر عمل کرنا شروع ہوا ، نیلی لائن کی پوزیشن پوزیشن کو بند کرنے کے لئے اسٹاپ نقصان اور منافع لینے کا ٹرگر ہے ، اور آخر میں جب مارکیٹ کی قیمت نیلی لائن سے نیچے آجاتی ہے جو پوزیشن کو بند کرنے کا سبب بنتی ہے۔ چارٹ پر تیار کردہ لائن کے ساتھ مل کر ، یہ سمجھنا بہت آسان ہے۔

پھر ہم اس خصوصیت کا استعمال ایک سپر رجحانات کی حکمت عملی کو بہتر بنانے کے لئے، ہم صرف ایک تفویضstrategy.exitexit plan order to the strategy entry order to add this trailing stop-loss and take-profit feature. exit plan order to the strategy entry order to add this trailing stop-loss and take-profit feature. exit plan order to the strategy entry order to add this trailing stop-loss and take-profit feature. exit plan order to the strategy entry order to add this trailing stop-loss and take-profit feature. exit plan order to the strategy entry order to add this trailing stop-loss and take-profit feature. exit plan order to the strategy entry order to add this trailing stop-loss and take-profit feature.

if not barstate.ishistory and findOrderIdx("open") >= 0 and state == 1
    trail_price := strategy.position_size > 0 ? close + offset : close - offset
    strategy.exit("exit", "open", 1, trail_price=trail_price, trail_offset=offset)
    runtime.log("the price per point is:", syminfo.mintick, ", current close:", close, ",trail_price:", trail_price)
    state := 2 
    tradeBarIndex := bar_index

مکمل حکمت عملی کا کوڈ:

/*backtest
start: 2022-05-01 00:00:00
end: 2022-09-27 00:00:00
period: 1d
basePeriod: 5m
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
args: [["RunMode",1,358374],["ZPrecision",0,358374]]
*/

varip trail_price = na
varip offset = input(50, "offset")
varip tradeBarIndex = 0
// 0 : idle , 1 current_open , 2 current_close
varip state = 0  

findOrderIdx(idx) =>
    ret = -1 
    if strategy.opentrades == 0 
        ret
    else 
        for i = 0 to strategy.opentrades - 1 
            if strategy.opentrades.entry_id(i) == idx
                ret := i 
                break
        ret

if strategy.position_size == 0 
    trail_price := na 
    state := 0

[superTrendPrice, dir] = ta.supertrend(input(2, "atr coefficient"), input(20, "atr period"))

if ((dir[1] < 0 and dir[2] > 0) or (superTrendPrice[1] > superTrendPrice[2])) and state == 0 and tradeBarIndex != bar_index
    strategy.entry("open", strategy.long, 1)
    state := 1
else if ((dir[1] > 0 and dir[2] < 0) or (superTrendPrice[1] < superTrendPrice[2])) and state == 0 and tradeBarIndex != bar_index
    strategy.entry("open", strategy.short, 1)
    state := 1


// Reverse signal, close all positions
if strategy.position_size > 0 and dir[2] < 0 and dir[1] > 0
    strategy.cancel_all()
    strategy.close_all()
    runtime.log("trend reversal, long positions all closed")
else if strategy.position_size < 0 and dir[2] > 0 and dir[1] < 0
    strategy.cancel_all()
    strategy.close_all()
    runtime.log("trend reversal, short positions all closed")


if not barstate.ishistory and findOrderIdx("open") >= 0 and state == 1
    trail_price := strategy.position_size > 0 ? close + offset : close - offset
    strategy.exit("exit", "open", 1, trail_price=trail_price, trail_offset=offset)
    runtime.log("the price per point is:", syminfo.mintick, ", current close:", close, ", trail_price:", trail_price)
    state := 2 
    tradeBarIndex := bar_index


plot(superTrendPrice, "superTrendPrice", color=dir>0 ? color.red : color.green, overlay=true)

مزید