ساخت اندیکاتورهای خطی، توابع ریاضی
درس دهم
❓ مسئله شماره 14:
اندیکاتوری بنویسید که در پنجره جداگانه اگر دو کندل صعودی پشت سرهم تشکیل شد مقدار 1 اگر دو کندل نزولی پشت سر هم تشکیل شد مقدار 1- نمایش شود. در غیر این صورت مقدار 0 را با ترسیم خط نمایش دهد.
در پاسخ فایل جدید از نوع Custom Indicator بسازید و نام گذاری کنید. سایر مراحل را بدون تغییر به پایان برسانید.
وارد کدنویسی شوید. Property پیش فرض را تغییر دهید و با حروف کوچک عبارت indicator_separate_window را وارد کنید تا در پنجره جداگانه تشکیل شود. Property دوم مقدار بافر (bufffers) می باشد. Property سوم جهت انتخاب رنگ اندیکاتور می باشد. سپس متغیر از نوع double بسازید همانگونه که قبلا گفته شد آرایه ها نیاز به [] دارند. به عنوان مثال:
;[]double Iint
بعد از آن در تابع OnInt بافر را به آرایه وصل کنید.
بافر(bufffers) با کد SetIndexStyle تعریف می شود سپس درون پرانتز(شماره بافر و آرایه) قرار می گیرد. توجه نمایید بعد از نام آرایه دیگر به بلاکت [] نیاز نیست.
جهت یاد آوری شیوه کدنویسی استایل خط به تصویر بالا یا به درس های گذشته مراجعه کنید.
وارد تابع OnCalculate شده و متغیر از نوع int بسازید. به عنوان مثال:
متغیر را با prev_calculated مساوی کنید. سپس حلقه for را کدنویسی کنید. (متغیر i را تعریف کنید، مساوی متغیر rates_total منهای متغیر ساخته شده به نام Countrd_bar منهای یک و نقطه ویرگول یا سمی کالن را بگذارید. شرط را بگذارید تا زمانی که i بزرگترمساوی صفر باشد. نقطه ویرگول یا سمی کالن و i را – کنید.
در خط پایین تر بلاکت را باز و بسته کنید و میان آن آرایه را مقدار دهی کنید. = Iint[i]
جهت مقدار دهی i تابعی را بسازید. به عنوان مثال:
نتیجه دستورهای بالا چنانچه کندل یک و دو صعودی باشد 1 را در خروجی return می دهد. اگر 2 کندل بعدی نزولی باشد 1- را در خروجی می دهد. و اگر هیچ کدام از دستورات بالا نبود مقدار 0 را به خروجی خواهد داد.
با توجه به فلش سبزرنگ، خروجی تابع candelest را مساوی Iint کنید.
کد تصویر بالا مشکلی دارد و آن اینکه: (i) گاهی صفر، گاهی 100 وگاهی 50 می باشد. چونکه بناست از آخر به اول محاسبه کند یعنی اگر از 100 مقدار گذشته حساب کند از 99 شروع می شود همینگونه 98، 97، تا به صفر برسد. ولی همیشه کندل 1 و 2 حساب می شود.
در غیر این صورت چنانچه متناسب با ورودی Iint بخواهید کندل 50 یا 52 حساب شود.
در تابع int candlest ورودی تعریف کنید با هر نامی که مدنظر داریدمثلا (int x) چرا که هر نامی تعریف می کنید متخص تابع کنونی است و خارج از این تابع معنایی ندارد. به تصویر زیر دقت نمایید.
(i) هر مقداری که باشد مثلا 50 ، در این تابع جایگزین x خواهد بود و 50 به اضافه 2 خواهد شد در نتیجه 52 خواهد بود. همچنین 50 به اضافه 1 و 51 خواهد بود. حتی 0 هم باشد به اضافه 2 می شود کندل 2. در پایان کد نویسی حتما compile را کلیک کرده و اطمینان حاصل کنید اخطاری نمایش نمی شود.
نام کلاس را به فضای داخل برنامه درگ کنید. برای نزدیک نمایی (zoom) می توانید دکمه های بالا را کلیک و درصد نزدیک نمایی یا دورنمایی چارت را تنظیم کنید.
با دابل کلیک کردن بر خط آبی رنگ نمایشی، و ظاهر شدن پنجره Custom درجه ضخامت خط را نیز تنظیم داشته باشید.
چنانچه کندل ها در صفحه نمایش نمی شود با انتخاب دکمه نمایش کندل از سربرگ ، آن ها را ظاهر نمایید.
کندل اشاره شده، دو کندل قبل آن نزولی بوده و عدد 1- می باشد.
همین گونه در جای اشاره شده دو کندل قبل صعودی بوده بنابراین اندیکاتور سر عدد 1 وجود دارد .
با توجه به کادر سبز رنگ مشاهده می کنید که حداکثر و حداقل به طور پیش فرض تعیین شده است، برای تعیین حداقل و حداکثر در قسمت کدنویسی مراجعه کرده Maximum و minimum را در قسمت property وارد کنید. به عنوان مثال:
مقدارها تغییر کرد. اگر به فلش قرمز رنگ دقت داشته باشید نام کلاس که قبلا نام گذاری شده بود را مشاهده می کنید که روبه روی آن مقدار فری اندیکاتور که در حال حاضر 1- هست را می بینید چنانچه بخواهید نام کلاس فعلی را به نام دلخواه دیگری تغییر دهید به کدنویسی مراجعه و در onint تابع Indicatorshortname نام دلخواه را در درون رشته قرار دهید. به عنوان مثال:
وارد چارت شوید.
در پایان هر کدنویسی compile را کلیک و اخطاری نمایش نشود.
برای اضافه کردن لول (level) در اندیکاتور قسمت property تعریف کنید. به عنوان مثال:
جهت نمایش level ها ، ابتدا اندیکاتور نمایشی را پاک کنید. برای این کار در قسمت نمودار آبی رنگ راست کلیک کرده و delete andicator را انتخاب کنید. سپس مجددا نام کلاس را درون چارت درگ نمایید.
مقدار های تعریف شده نمایش داده شدند.
تعریف نام برای level وارد تابع onint شوید. از تابع Indicatorsetstring استفاده نمایید. به عنوان مثال:
در تابع های بالا ابتدا باید تعیین کنید چه چیزی set بشود به عنوان مثال اندیکاتور لول را مدنظر دارید. توجه کنید با حروف بزرگ نوشته شود.(ANDICATOR_LEVELTEXT) بعد از آن شماره اندیکس اندیکاتور را وارد کنید. که برای اندیکاتور level1 شماره اندیکس 0 می باشد. سپس نام دلخواه را درون رشته وارد نمایید. در پایان هر کدنویسی compile و اخطاری نمایش نشود.
خط ها مطابق نام های تعریف شده نمایش می شوند.
توابع مثلثاتی :
این توابع ورودی و خروجی آن ها از نوع double می باشد. برای استفاده هم می توانید از خود تابع یا مشابه آن استفاده کنید.
توابع ریاضیات نوع 1:
توابع ریاضیات نوع 2: این تابع ها دو ورودی می پذیرند.
پاسخها
سلام استاد بزرگ آقای دکتر احمدی ، دروس هشتم و نهم دوره متوسط در مجموعه شما نیست ، لطف کنید آنها را هم پست کنید . متشکرم از زحمات شما
سلام ؛ ممنون از لطف و نظرتون
دکتر نیستم 🙁
در چه مجموعه ، کتاب یا ویدیو ها رو میگید؟