.3، حد=3)
اگر نہیں barstate.ishistory اور بند کریں < کھولیں
حکمت عملی.منسوخ ((
---------------------------
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
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
سپر ٹرینڈ اشارے کا حساب لگانے کے لئے اشارے کا فنکشن۔ ان میں شامل ہیں:
ڈیفالٹ کے طور پر، فنکشن پین زبان کی حکمت عملی کی سکرین پر دو پیرامیٹر کنٹرول مقرر کرتا ہے، جیسا کہ ذیل میں دکھایا گیا ہے:
ہم دیکھ سکتے ہیں کے طور پر، کنٹرول پر ڈیفالٹ کی قدر کی پہلی پیرامیٹر ہےinput
فنکشن اورinput
افعال کی سیریز (یہاںinput.int
), جو بھی پچھلے حصوں میں وضاحت کی گئی تھی. ان دو افعال کے ساتھ ہم پھرta.supertrend
حکمت عملی کی سکرین پر.supertrend
تقریب ایک قیمت کے اعداد و شمار کا حساب لگاتا ہےsupertrend
اور ایک سمت ڈیٹاdirection
پھر ہم استعمال کرتے ہیںplot
ایک چارٹ ڈرائنگ کرنے کے لئے تقریب، نوٹ کریں کہ جب چارٹ ڈرائنگ، یہ سپر رجحان اشارے کی سمت پر مبنی ہے، صرف موجودہ سمت ڈرائنگ ہے.direction
ہے - 1، موجودہ مارکیٹ کے رجحان میں اضافہ ہے، جبdirection
1 ہے، موجودہ مارکیٹ رجحان نیچے ہے. تو ہم دیکھ سکتے ہیں کہplot
تقریب چارٹ ڈرائنگ جب فیصلےdirection
0 سے زیادہ یا کم ہے
اگلے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)
آئیے کچھ پائن زبان کی حکمت عملی ڈیزائن مثالوں کے ساتھ جاری رکھیں ، اس بار ہم متحرک توازن کی حکمت عملی سیکھیں گے۔ متحرک توازن کی حکمت عملی وہ ہے جو ہمیشہ مقدار کو متوازن کرتی ہے۔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) جان بوجھ کر، پیرامیٹر مقررstocks
3۔ اثاثہ توازن میں شروع ہو۔
پچھلے کورس میں، ہم نے سیکھا ہےstrategy.exit
پوزیشن باہر نکلنے کی تقریب، جس میں ہم نے ٹریکنگ سٹاپ اور منافع لینے کی تقریب کی وضاحت کرنے کے لئے ایک مثال نہیں تھی. اس حکمت عملی کے ڈیزائن کی مثال میں، ہم استعمال کریں گےstrategy.exit
ایک سپر رجحان کی حکمت عملی کو بہتر بنانے کے لئے کام.
سب سے پہلے آئیے اسٹاپ نقصان اور منافع لینے کے پیرامیٹرز کو دیکھیںstrategy.exit
فنکشن:
trail_price
: وہ پوزیشن جو ٹریکنگ سٹاپ نقصان اور سٹاپ نقصان بند کرنے کے آرڈر (قیمت کی طرف سے مخصوص پوزیشن پر) رکھنے کی منطقی کارروائی کو متحرک کرتی ہے۔trail_offset
: ٹریکنگ سٹاپ نقصان اور منافع لینے کی کارروائی کے بعد رکھی گئی بند پوزیشن کی سب سے زیادہ (بڑے جاتے وقت) یا سب سے کم (چھوٹے جاتے وقت) قیمت سے فاصلہ۔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")
فوری طور پر طویل اندراج جب حکمت عملی کو انجام دینے کے لئے شروع ہوتا ہے، اور پھر فوری طور پر ایک رکھ دیاstrategy.exit
باہر نکلنے کا حکم (اس نے ٹریکنگ اسٹاپ نقصان اور منافع لینے کے پیرامیٹرز کی وضاحت کی) ، جب مارکیٹ کی تبدیلی کی قیمت ٹریل_پریس ٹرگر لائن سے اوپر چلی گئی ، ٹریل اسٹاپ نقصان اور منافع لینے کے منطق ، اسٹاپ نقصان اور منافع لینے کی لائن (نیلے رنگ) کا نفاذ سب سے زیادہ قیمت کی متحرک ایڈجسٹمنٹ پر عمل کرنا شروع ہوا ، نیلی لائن کی پوزیشن پوزیشن کو بند کرنے کے لئے اسٹاپ نقصان اور منافع لینے کا ٹرگر ہے ، اور آخر میں جب مارکیٹ کی قیمت نیلی لائن سے نیچے آجاتی ہے جو پوزیشن کو بند کرنے کا سبب بنتی ہے۔ چارٹ پر تیار کردہ لائن کے ساتھ مل کر ، یہ سمجھنا بہت آسان ہے۔
پھر ہم اس خصوصیت کا استعمال ایک سپر رجحانات کی حکمت عملی کو بہتر بنانے کے لئے، ہم صرف ایک تفویضstrategy.exit
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. 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)