استراتژی های پیشرفته

ساخت وبلاگ

این صفحه برخی از مفاهیم پیشرفته موجود برای استراتژی ها را توضیح می دهد. اگر تازه شروع کرده اید، لطفاً ابتدا با روش های شرح داده شده در اسناد سفارشی سازی استراتژی و اصول اولیه Freqtrade آشنا شوید.

اصول Freqtrade توضیح می‌دهد که در کدام دنباله هر روشی که در زیر توضیح داده شده است فراخوانی می‌شود، که می‌تواند برای درک اینکه از کدام روش برای نیازهای سفارشی خود استفاده کنید مفید باشد.

تمام روش‌های برگشتی که در زیر توضیح داده شده است، تنها در صورتی باید در یک استراتژی پیاده‌سازی شوند که واقعاً استفاده شوند.

با اجرای freqtrade new-strategy --strategy MyAwesomeStrategy --template advanced می توانید یک الگوی استراتژی دریافت کنید که شامل تمامی روش های زیر است.

توقف سفارشی¶

یک توقف ضرر فقط می تواند به سمت بالا حرکت کند - بنابراین اگر آن را روی سود مطلق 2٪ تنظیم کنید، هرگز نمی توانید آن را به زیر این قیمت منتقل کنید. همچنین، مقدار توقف ضرر سنتی به عنوان یک سطح پایین تر عمل می کند و به عنوان ضرر اولیه درج می شود.

استفاده از روش stoploss سفارشی باید با تنظیم use_custom_stoploss=True در شی استراتژی فعال شود. این روش باید یک مقدار ضرر (شناور/عدد) با نسبت نسبی کمتر از قیمت فعلی را برگرداند. به عنوان مثال. Current_profit = 0. 05 (5% سود) - stoploss بازده 0. 02 - سپس شما سود 3% را "قفل کرده اید" (0. 05 - 0. 02 = 0. 03).

برای شبیه سازی یک توقف معمولی 4% (4% عقب تر از حداکثر قیمت بدست آمده) از روش بسیار ساده زیر استفاده می کنید:

# واردات اضافی مورد نیاز است از جانب زمان قرار وارد كردن زمان قرار از جانب freqtrade. persistence وارد كردن تجارت کلاس استراتژی عالی(IStrategy): # . روش های populate_* use_custom_stoploss = درست است، واقعی دف custom_stoploss(خود, جفت: خ, تجارت: "تجارت", current_time: زمان قرار, نرخ_جاری: شناور, جاری_سود: شناور, **کوارگ ها) > شناور: """ منطق stoploss سفارشی، فاصله جدید را نسبت به current_rate (به عنوان نسبت) برمی گرداند. به عنوان مثال،بازگشت 0. 05- باعث توقف ضرر 5% کمتر از نرخ فعلی می شود. حد ضرر سفارشی هرگز نمی تواند کمتر از self. stoploss باشد، که به عنوان حداکثر ضرر عمل می کند. برای مستندات کامل لطفاً به https://www. freqtrade. io/en/latest/strategy-advanced/ مراجعه کنید هنگامی که توسط یک استراتژی اجرا نمی شود، مقدار توقف ضرر اولیه را برمی گرداند فقط زمانی فراخوانی می شود که use_custom_stoploss روی True تنظیم شده باشد. :param pair: جفتی که در حال حاضر تجزیه و تحلیل شده است :param trade: تجارت شی. :param current_time: شی datetime، حاوی تاریخ جاری است :param current_rate: نرخ، بر اساس تنظیمات قیمت گذاری در ask_strategy محاسبه می شود. :param current_profit: سود جاری (به عنوان نسبت)، بر اساس نرخ_جاری محاسبه می شود. : param ** kwargs: اطمینان حاصل کنید که این کار را در اینجا نگه دارید ، بنابراین به روزرسانی های این امر استراتژی شما را نمی شکند. : Float Retu: مقدار New Stoploss ، نسبت به جریان فعلی """ برگشت -0. 04 

Stoploss on Exchange مانند trailing_stop کار می کند ، و Stoploss on Exchange به روز می شود همانطور که در StopLoss_On_Exchange_Interval تنظیم شده است (جزئیات بیشتر در مورد Stoploss در Exchange).

تمام محاسبات مبتنی بر زمان باید بر اساس current_time انجام شود - با استفاده از dateTime. now () یا dateTime. Utcnow () دلسرد می شود ، زیرا این امر پشتیبانی از پشتی را از بین می برد.

توصیه می شود در هنگام استفاده از مقادیر STOPLOSS سفارشی ، Trailing_stop را غیرفعال کنید. هر دو می توانند به طور هم زمان کار کنند ، اما شما ممکن است با توقف دنباله دار روبرو شوید تا قیمت را بالاتر ببرد در حالی که عملکرد سفارشی شما این را نمی خواهد و باعث رفتار متناقض می شود.

نمونه های توقف سفارشی

در بخش بعدی چند نمونه در مورد آنچه ممکن است با عملکرد SUPTLOSS سفارشی وجود دارد ، نشان می دهد. البته موارد بسیاری دیگر امکان پذیر است و همه نمونه ها می توانند به خواست خود ترکیب شوند.

توقف مبتنی بر زمان توقف

برای 60 دقیقه اول از Stoploss اولیه استفاده کنید ، پس از این تغییر به 10 ٪ Trailing Stoploss ، و بعد از 2 ساعت (120 دقیقه) از 5 ٪ Trailing Stoploss استفاده می کنیم.

از جانب زمان قرار وارد كردن زمان قرار, تایمدلا از جانب freqtrade. persistence وارد كردن تجارت کلاس استراتژی عالی(IStrategy): # . روش های populate_* use_custom_stoploss = درست است، واقعی دف custom_stoploss(خود, جفت: خ, تجارت: "تجارت", current_time: زمان قرار, نرخ_جاری: شناور, جاری_سود: شناور, **کوارگ ها) > شناور: # اطمینان حاصل کنید که ابتدا طولانی ترین فاصله را دارید - این شرایط از بالا به پایین ارزیابی می شود. if current_time - تایمدلا(دقایق=120) > تجارت._دیت باز: برگشت -0. 05 الیف current_time - تایمدلا(دقایق=60) > تجارت._دیت باز: برگشت -0. 10 برگشت 1 

stoploss مختلف در هر جفت

بسته به این جفت ، از یک ایستگاه مختلف استفاده کنید. در این مثال ، ما بالاترین قیمت را با 10 ٪ متوقف کردن Stoploss برای ETH/BTC و XRP/BTC دنبال خواهیم کرد ، با 5 ٪ Stoploss برای LTC/BTC و با 15 ٪ برای سایر جفت ها.

از جانب زمان قرار وارد كردن زمان قرار از جانب freqtrade. persistence وارد كردن تجارت کلاس استراتژی عالی(IStrategy): # . روش های populate_* use_custom_stoploss = درست است، واقعی دف custom_stoploss(خود, جفت: خ, تجارت: "تجارت", current_time: زمان قرار, نرخ_جاری: شناور, جاری_سود: شناور, **کوارگ ها) > شناور: if جفت in ("ETH/BTC", 'XRP/BTC'): برگشت -0. 10 الیف جفت in ("LTC/BTC"): برگشت -0. 05 برگشت -0. 15 

Training Stoploss با افست مثبت

از stoploss اولیه استفاده کنید تا سود بالاتر از 4 ٪ باشد ، سپس از 50 ٪ از سود فعلی با حداقل 2. 5 ٪ و حداکثر 5 ٪ استفاده کنید.

لطفاً توجه داشته باشید که Stoploss فقط می تواند افزایش یابد ، مقادیر پایین تر از stoploss فعلی نادیده گرفته می شوند.

از جانب زمان قرار وارد كردن زمان قرار, تایمدلا از جانب freqtrade. persistence وارد كردن تجارت کلاس استراتژی عالی(IStrategy): # . روش های populate_* use_custom_stoploss = درست است، واقعی دف custom_stoploss(خود, جفت: خ, تجارت: "تجارت", current_time: زمان قرار, نرخ_جاری: شناور, جاری_سود: شناور, **کوارگ ها) > شناور: if جاری_سود  0. 04: برگشت -1 # مقداری بزرگتر از stoploss inital را برگردانید تا از stoploss inital استفاده کنید # پس از رسیدن به جبران مطلوب ، اجازه دهید تا از Stoploss نیمی از سود را دنبال کند _ستوپلوس مورد نظر = جاری_سود / 2 # حداقل 2. 5 ٪ و حداکثر 5 ٪ استفاده کنید برگشت حداکثر(حداقل(_ستوپلوس مورد نظر, 0. 05), 0. 025) 

Stoploss¶ مطلق

مثال زیر سطح سود مطلق را بر اساس سود فعلی تعیین می کند.

  • تا 20 ٪ سود حاصل از stoploss معمولی استفاده کنید
  • Once profit is>40 ٪ ، Stoploss 25 ٪ خواهد بود و حداقل 25 ٪ از سود را قفل می کند.
  • Once profit is>25 ٪ - Stoploss 15 ٪ خواهد بود.
  • Once profit is>20 ٪ - Stoploss به 7 ٪ تنظیم می شود.
از جانب زمان قرار وارد كردن زمان قرار از جانب freqtrade. persistence وارد كردن تجارت کلاس استراتژی عالی(IStrategy): # . روش های populate_* use_custom_stoploss = درست است، واقعی دف custom_stoploss(خود, جفت: خ, تجارت: "تجارت", current_time: زمان قرار, نرخ_جاری: شناور, جاری_سود: شناور, **کوارگ ها) > شناور: # به عنوان `-desired_stop_from_open + current_profit` محاسبه کنید تا فاصله بین فعلی_پروفیت و قیمت اولیه را بدست آورید if جاری_سود > 0. 40: برگشت (-0. 25 + جاری_سود) if جاری_سود > 0. 25: برگشت (-0. 15 + جاری_سود) if جاری_سود > 0. 20: برگشت (-0.7 + جاری_سود) برگشت 1 

قوانین زمان بندی سفارش سفارشی

زمان سفارش ساده و مبتنی بر زمان می تواند از طریق استراتژی یا در پیکربندی در بخش زمان بندی نشده تنظیم شود.

با این حال ، FreqTrade همچنین یک پاسخ به تماس سفارشی را برای هر دو نوع سفارش ارائه می دهد ، که به شما امکان می دهد بر اساس معیارهای سفارشی تصمیم بگیرید اگر یک سفارش زمان را انجام داده یا خیر.

زمان های سفارش نشده در هنگام پشتی یا HyperOpt مرتبط نیستند و فقط در معاملات واقعی (زنده) مرتبط هستند. بنابراین این روش ها فقط در این شرایط فراخوانی می شوند.

سفارش سفارشی مثال زمان بندی

یک مثال ساده ، که بسته به قیمت دارایی ، بسته به قیمت دارایی را می توان از زمان های مختلف پر نشده استفاده کرد. این یک زمان محکم برای دارایی های با قیمت بالاتر اعمال می شود ، در حالی که زمان بیشتری را برای پر کردن سکه های ارزان قیمت می دهد.

عملکرد باید به صورت واقعی (سفارش لغو) یا نادرست برگردد (سفارش را زنده نگه دارید).

از جانب زمان قرار وارد كردن زمان قرار, تایمدلا از جانب freqtrade. persistence وارد كردن تجارت کلاس استراتژی عالی(IStrategy): # . روش های populate_* # زمان Unfliffledout را تا 25 ساعت تنظیم کنید ، زیرا حداکثر زمان ما از پایین 24 ساعت است. وقت خود =  "خرید": 60 * 25, 'فروش': 60 * 25 > دف check_buy_timeout(خود, جفت: خ, تجارت: "تجارت", سفارش: مدرک, **کوارگ ها) > بول: if تجارت.نرخ باز > 100 وت تجارت._دیت باز  زمان قرار.utcnow() - تایمدلا(دقایق=5): برگشت درست است، واقعی الیف تجارت.نرخ باز > 10 وت تجارت._دیت باز  زمان قرار.utcnow() - تایمدلا(دقایق=3): برگشت درست است، واقعی الیف تجارت.نرخ باز  1 وت تجارت._دیت باز  زمان قرار.utcnow() - تایمدلا(ساعت ها=24): برگشت درست است، واقعی برگشت دروغ دف check_sell_timeout(خود, جفت: خ, تجارت: "تجارت", سفارش: مدرک, **کوارگ ها) > بول: if تجارت.نرخ باز > 100 وت تجارت._دیت باز  زمان قرار.utcnow() - تایمدلا(دقایق=5): برگشت درست است، واقعی الیف تجارت.نرخ باز > 10 وت تجارت._دیت باز  زمان قرار.utcnow() - تایمدلا(دقایق=3): برگشت درست است، واقعی الیف تجارت.نرخ باز  1 وت تجارت._دیت باز  زمان قرار.utcnow() - تایمدلا(ساعت ها=24): برگشت درست است، واقعی برگشت دروغ 

برای مثال بالا ، زمان UplifletTime باید روی چیزی بزرگتر از 24 ساعت تنظیم شود ، در غیر این صورت این نوع زمان بندی ابتدا اعمال می شود.

مثال زمان سفارش سفارشی (با استفاده از داده های اضافی)

از جانب زمان قرار وارد كردن زمان قرار از جانب freqtrade. persistence وارد كردن تجارت کلاس استراتژی عالی(IStrategy): # . روش های populate_* # زمان Unfliffledout را تا 25 ساعت تنظیم کنید ، زیرا حداکثر زمان ما از پایین 24 ساعت است. وقت خود =  "خرید": 60 * 25, 'فروش': 60 * 25 > دف check_buy_timeout(خود, جفت: خ, تجارت: تجارت, سفارش: مدرک, **کوارگ ها) > بول: ob = خود.dp.سفارش کتاب(جفت, 1) قیمت فعلی = ob["پیشنهادات"][0][0] # اگر قیمت بیش از 2 ٪ بالاتر از سفارش باشد ، سفارش خرید را لغو کنید. if قیمت فعلی > سفارش["قیمت"] * 1. 02: برگشت درست است، واقعی برگشت دروغ دف check_sell_timeout(خود, جفت: خ, تجارت: تجارت, سفارش: مدرک, **کوارگ ها) > بول: ob = خود.dp.سفارش کتاب(جفت, 1) قیمت فعلی = ob["می پرسد"][0][0] # اگر قیمت بیش از 2 ٪ پایین تر از سفارش باشد ، سفارش فروش را لغو کنید. if قیمت فعلی  سفارش["قیمت"] * 0. 98: برگشت درست است، واقعی برگشت دروغ 

Bot Loop Start Callbacksp

یک تماس تلفنی ساده که یک بار در شروع هر تکرار پرنده ای نامیده می شود. این می تواند برای انجام محاسباتی که مستقل از جفت هستند (برای همه جفت ها اعمال می شود) ، بارگیری داده های خارجی و غیره استفاده شود.

وارد كردن درخواست ها کلاس استراتژی عالی(IStrategy): # . روش های populate_* دف bot_loop_start(خود, **کوارگ ها) > هیچ یک: """ در آغاز تکرار ربات (یک حلقه) فراخوانده شد. ممکن است برای انجام کارهای مستقل از جفت استفاده شود (به عنوان مثال برخی از منابع از راه دور را برای مقایسه جمع کنید) : param ** kwargs: اطمینان حاصل کنید که این کار را در اینجا نگه دارید ، بنابراین به روزرسانی های این امر استراتژی شما را نمی شکند. """ if خود.پیکربندی['runmode'].ارزش in ('زنده', "خشک_ن"): # این را با استفاده از خود به کلاس اختصاص دهید.* # پس از آن می توان با روش های population_* استفاده کرد خود.remote_data = درخواست ها.گرفتن('https://some_remote_source. example. com') 

تأیید سفارش ربات ¶

تایید ورود تجارت (سفارش خرید)¶

() confirm_trade_entry را می توان برای لغو ورود تجارت در آخرین ثانیه استفاده کرد (شاید به این دلیل که قیمت آن چیزی نیست که ما انتظار داریم).

کلاس استراتژی عالی(IStrategy): # . روش های populate_* دف تایید_تجارت_ورود(خود, جفت: خ, نوع سفارش: خ, میزان: شناور, نرخ: شناور, زمان_در_نیروی: خ, **کوارگ ها) > بول: """ قبل از ثبت سفارش خرید تماس گرفت. زمان بندی برای این تابع بسیار مهم است، بنابراین از انجام محاسبات سنگین خودداری کنید درخواست های شبکه در این روش. برای مستندات کامل لطفاً به https://www. freqtrade. io/en/latest/strategy-advanced/ مراجعه کنید هنگامی که توسط یک استراتژی اجرا نمی شود، True را برمی گرداند (همیشه تایید می کند). :param pair: جفتی که در شرف خرید است. :param order_type: نوع سفارش (همانطور که در order_types پیکربندی شده است). معمولا محدود یا بازار است. مقدار :param: مقدار ارز مورد نظر (مقول) که قرار است معامله شود. :param rate: نرخی که قرار است هنگام استفاده از سفارشات محدود استفاده شود :param time_in_force: زمان لازم الاجرا. پیش‌فرض GTC (خوب-til-لغو شد). : param ** kwargs: اطمینان حاصل کنید که این کار را در اینجا نگه دارید ، بنابراین به روزرسانی های این امر استراتژی شما را نمی شکند. :retu bool: وقتی True برگردانده شد، سفارش خرید در صرافی قرار می‌گیرد. کاذب این فرآیند را متوقف می کند """ برگشت درست است، واقعی 

تایید خروج از تجارت (سفارش فروش)

() confirm_trade_exit می تواند برای لغو خروج از تجارت (فروش) در آخرین ثانیه استفاده شود (شاید به این دلیل که قیمت آن چیزی نیست که ما انتظار داریم).

از جانب freqtrade. persistence وارد كردن تجارت کلاس استراتژی عالی(IStrategy): # . روش های populate_* دف confirm_trade_exit(خود, جفت: خ, تجارت: تجارت, نوع سفارش: خ, میزان: شناور, نرخ: شناور, زمان_در_نیروی: خ, دلیل_فروش: خ, **کوارگ ها) > بول: """ درست قبل از ثبت سفارش فروش معمولی تماس گرفت. زمان بندی برای این تابع بسیار مهم است، بنابراین از انجام محاسبات سنگین خودداری کنید درخواست های شبکه در این روش. برای مستندات کامل لطفاً به https://www. freqtrade. io/en/latest/strategy-advanced/ مراجعه کنید هنگامی که توسط یک استراتژی اجرا نمی شود، True را برمی گرداند (همیشه تایید می کند). :param pair: جفتی که در شرف فروش است. :param order_type: نوع سفارش (همانطور که در order_types پیکربندی شده است). معمولا محدود یا بازار است. :param مبلغ: مقدار در مظنه ارز. :param rate: نرخی که قرار است هنگام استفاده از سفارشات محدود استفاده شود :param time_in_force: زمان لازم الاجرا. پیش‌فرض GTC (خوب-til-لغو شد). :param sell_reason: دلیل فروش. می تواند هر یک از ['roi'، 'stop_loss'، 'stoploss_on_exchange'، 'trailing_stop_loss'، "sell_signal"، "Force_sell"، "Emergency_sell"] : param ** kwargs: اطمینان حاصل کنید که این کار را در اینجا نگه دارید ، بنابراین به روزرسانی های این امر استراتژی شما را نمی شکند. : بازگشت BOOL: هنگامی که True برگردانده می شود ، سفارش فروش در مبادله قرار می گیرد. کاذب این فرآیند را متوقف می کند """ if دلیل_فروش == "Force_sell" وت تجارت.calc_profit_ratio(نرخ)  0: # فروش نیرو را با سود منفی رد کنید # این فقط یک نمونه است ، لطفاً با نیازهای خود تنظیم کنید # (این لزوماً معقول نیست ، با فرض اینکه می دانید چه زمانی در حال فروش نیرو هستید) برگشت دروغ برگشت درست است، واقعی 

استراتژی های مشتق شده

این استراتژی ها را می توان از سایر استراتژی ها بدست آورد. این از تکثیر کد استراتژی سفارشی شما جلوگیری می کند. شما می توانید از این تکنیک برای نادیده گرفتن قسمت های کوچک استراتژی اصلی خود استفاده کنید و بقیه را دست نخورده بگذارید:

کلاس myawesomestrategy(IStrategy): . کله پاچه = 0. 13 trailing_stop = دروغ # همه ویژگی ها و روش های دیگر در اینجا هستند # باید در هر استراتژی سفارشی باشد. . کلاس myawesomestrategy2(myawesomestrategy): # چیزی را نادیده بگیرید کله پاچه = 0. 08 trailing_stop = درست است، واقعی 

هر دو ویژگی و روش ممکن است ناعادلانه باشند و رفتار استراتژی اصلی را به روشی که شما نیاز دارید تغییر دهد.

استراتژی والدین در پرونده های مختلف

اگر استراتژی والدین را در یک پرونده متفاوت قرار داده اید ، برای اطمینان از بارگذاری مناسب ، باید موارد زیر را به بالای "کودک" خود اضافه کنید ، در غیر این صورت ممکن است Freqtrade نتواند استراتژی والدین را به درستی بارگیری کند.

وارد كردن سید از جانب مسیر وارد كردن مسیر سید.مسیر.ضمیمه کردن(خ(مسیر(__فایل__).والدین)) از جانب myawesomestrategy وارد كردن myawesomestrategy 

استراتژی های جاسازی

FreqTrade روشی آسان برای تعبیه استراتژی در پرونده پیکربندی خود در اختیار شما قرار می دهد. این کار با استفاده از رمزگذاری Base64 و ارائه این رشته در قسمت پیکربندی استراتژی ، در پرونده پیکربندی انتخاب شده شما انجام می شود.

رمزگذاری یک رشته به عنوان Base64¶

این یک مثال سریع است ، نحوه تولید رشته Base64 در پایتون

از جانب base64 وارد كردن urlsafe_b64encode با باز کن(فایل, 'r') as f: محتوا = f.خواندن() محتوا = urlsafe_b64encode(محتوا.رمز کردن("UTF-8")) 

متغیر "محتوای" ، شامل پرونده استراتژی در فرم رمزگذاری شده Base64 خواهد بود. که اکنون می تواند در پرونده تنظیمات شما به شرح زیر تنظیم شود

"استراتژی": "NameOfStrategy: Base64String" 

لطفاً اطمینان حاصل کنید که "NameOfStrategy" با نام استراتژی یکسان است!

آموزش مقدماتی فارکس...
ما را در سایت آموزش مقدماتی فارکس دنبال می کنید

برچسب : نویسنده : علیرام نورایی بازدید : 37 تاريخ : چهارشنبه 15 شهريور 1402 ساعت: 19:19