ChatGPT یک مدل زبان پیشرفته است که می تواند به شما کمک کند کد را کارآمدتر و دقیق تر بنویسید. با استفاده از ChatGPT، می توانید کد Pinescript با کیفیت بالا را بدون نیاز به دانش یا تجربه برنامه نویسی زیاد بنویسید.
در این مقاله، ما بر روی استفاده از نسخه رایگان ChatGPT برای کدنویسی شاخص ها و استراتژی های Pinescript تمرکز خواهیم کرد. ما دستورالعملهای گام به گام را برای شما ارائه میکنیم، مشکلات احتمالی که ممکن است با آنها مواجه شوید و نحوه حل آنها را برجسته میکنیم. در پایان این مقاله، با ابزارهایی آشنا خواهید شد که برای استفاده از ChatGPT برای ایجاد استراتژی های تجاری سودآور نیاز دارید.
بنابراین، چه یک (تریدر) یا معامله گر باتجربه هستید یا تازه شروع به کار کرده اید، در ادامه می فهمید چگونه می توانید از ChatGPT برای متحول کردن برنامه نویسی Pinescript خود استفاده کنید و حتی سایر امکانات هیجان انگیزی را که ارائه می دهد کشف کنید.
چیزهایی که قبل از ادامه باید بدانیم:
ChatGPT می تواند کد Pinescript را برای هر دو نسخه ۴ و ۵ تولید کند، اما توجه به این نکته مهم است که بین این دو نسخه تفاوت هایی وجود دارد. توصیه می شود قبل از استفاده از ChatGPT مشخص کنید که می خواهید کد شما در کدام نسخه نوشته شود. علاوه بر این، گفتن این نکته مهم است که که ChatGPT دانش بیشتری از Pinescript نسخه ۴ دارد، بنابراین ممکن است بخواهید کد آن را با استفاده از نسخه ۴ بنویسید و سپس از ویرایشگر Tradingview برای تبدیل آن به نسخه ۵ استفاده کنید.
درست است که ChatGPT می تواند به شما در ایجاد کد Pinescript بدون دانش زیاد کدنویسی کمک کند. با این حال، برای اسکریپت های پیچیده تر، توصیه می شود که درک پایه ای از Pinescript داشته باشید تا از ChatGPT حداکثر استفاده را ببرید. به این ترتیب، می توانید کد تولید شده را بهتر درک کنید و در صورت نیاز تنظیمات لازم را انجام دهید.
ChatGPT ابزاری است که می تواند به شما در بهبود کدگذاری Pinescript خود کمک کند، نه جایگزینی برای آن. بهتر است از ChatGPT برای حل مسائل خاص یا ارائه راهحلهایی برای بخشهای خاصی از کد خود استفاده کنید تا اینکه برای نوشتن کل کد برای شما به آن تکیه کنید.
آنچه را که برای اولین مثال خود کدگذاری خواهیم کرد.
در مثال خود، یک نشانگر را کدگذاری می کنیم که از دو میانگین متحرک با دوره های آشکار برای تعیین جهت بازار استفاده می کند. علاوه بر این، ما از نشانگر RSI تصادفی به عنوان اندیس حرکت برای تعیین زمان خرید در یک روند صعودی و زمان فروش در یک روند نزولی استفاده خواهیم کرد. پس از ایجاد این اسکریپت به عنوان نشانگر، از ChatGPT برای تبدیل آن به یک استراتژی استفاده می کنیم. این ما را قادر میسازد تا با استفاده از چارچوب بک تستینگ Tradingview آن را آزمایش کنیم.
بیایید شروع کنیم
۱- اولین کاری که می خواهیم انجام دهیم این است که به CHatGPT اطلاع دهیم دقیقا چه کاری می خواهیم انجام دهد. و راه حلی برای این موضوع به آن ارائه دهیم. برای مثال ما می خواهیم موارد زیر را تایپ کنیم.
توجه داشته باشید که چگونه نسخه pinescript را که در آن کدنویسی خواهیم کرد، مشخص کردم.
۲- من می خواهم ChatGPT را از شرح نشانگری که قرار است کدگذاری کنیم مطلع کنم.
همانطور که می بینید، ChatGPT بر اساس اطلاعاتی که ارائه کردم، Pinescript را در اختیار من قرار داد. گفتن این نکته مهم است که در حالی که این کد برای من کار می کرد، ممکن است دیگران به دلیل ماهیت پیش بینی های ChatGPT کد کمی متفاوت دریافت کنند. علاوه بر این، ChatGPT کد را با جزئیات بیشتر در پاسخ خود توضیح داد. گام بعدی ما این است که کد را آزمایش کنیم تا مشخص کنیم که آیا نیازهای ما را برآورده می کند یا خیر، و هر مشکلی را که با آن مواجه می شویم یادداشت کنیم. اگر مشکلی وجود داشته باشد، آنها را برای کمک بیشتر در اختیار ChatGPT قرار خواهیم داد. برای شروع، من کد تولید شده را بدون هیچ تغییری در ویرایشگر Pinescript کپی و پیست می کنم و سعی می کنم اسکریپت را به نمودار اضافه کنم.
برای مرجع در اینجا کد ارائه شده توسط GPT در زیر آمده است:
//@version=4
study(title=”Moving Average and Stochastic RSI Indicator”, shorttitle=”MA+Stoch RSI”, overlay=false)
// Input variables
ma1_length = input(title=”MA1 Length”, type=input.integer, defval=20, minval=1)
ma2_length = input(title=”MA2 Length”, type=input.integer, defval=50, minval=1)
stoch_length = input(title=”Stochastic RSI Length”, type=input.integer, defval=14, minval=1)
overbought = input(title=”Overbought Level”, type=input.integer, defval=80)
oversold = input(title=”Oversold Level”, type=input.integer, defval=20)
// Calculate moving averages
ma1 = sma(close, ma1_length)
ma2 = sma(close, ma2_length)
// Calculate Stochastic RSI
rsi1 = rsi(close, stoch_length)
rsiH = highest(rsi1, stoch_length)
rsiL = lowest(rsi1, stoch_length)
stoch = (rsi1 – rsiL) / (rsiH – rsiL) * 100
// Determine trend direction based on MA crossover
trendUp = ma1 > ma2 ? true : false
trendDown = ma1 < ma2 ? true : false
// Determine buy and sell signals based on Stochastic RSI
buySignal = trendUp and crossover(stoch, oversold)
sellSignal = trendDown and crossunder(stoch, overbought)
// Plot signals on chart
plotshape(buySignal, style=shape.arrowup, location=location.belowbar, color=color.green, size=size.small, text=”Buy”)
plotshape(sellSignal, style=shape.arrowdown, location=location.abovebar, color=color.red, size=size.small, text=”Sell”)
کد هیچ خطای دستوری نداشت و تمام الزامات مشخص شده در درخواست من را برآورده کرد. دورههای میانگین متحرک و RSI تصادفی در معرض دید قرار گرفتند و به آنها اجازه میداد تا در صورت نیاز تنظیم شوند. با این حال، یک مشکل وجود دارد که نتیجه ChatGPT نیست، بلکه ناشی از عدم مشخص کردن آن در درخواست است. نشانگر در نمودار روی هم قرار نمی گیرد و در عوض به عنوان یک نوسان ساز در پنجره جداگانه زیر نمایش داده می شود، شبیه به نشانگر RSI. با این حال، برای اهداف خود، می خواهیم نشانگر روی خود کندل ها نمایش داده شود.
۳- پس از تست کد و تایید اینکه کد مورد نیاز من را برآورده می کند، بازخوردی را به GPT ارائه خواهم کرد که کد به درستی کار می کند. با این حال، من همچنین درخواست می کنم که نشانگر به جای یک پنجره جداگانه روی کندل ها نمایش داده شود. برای جلوگیری از هرگونه تغییر غیرضروری در کد، ارتباط واضح با GPT مهم است.
اکنون دوباره کد را تست می کنیم. کد تغییر کرده در زیر آمده است:
//@version=4
study(title=”Moving Average and Stochastic RSI Indicator”, shorttitle=”MA+Stoch RSI”, overlay=true)
// Input variables
ma1_length = input(title=”MA1 Length”, type=input.integer, defval=20, minval=1)
ma2_length = input(title=”MA2 Length”, type=input.integer, defval=50, minval=1)
stoch_length = input(title=”Stochastic RSI Length”, type=input.integer, defval=14, minval=1)
overbought = input(title=”Overbought Level”, type=input.integer, defval=80)
oversold = input(title=”Oversold Level”, type=input.integer, defval=20)
// Calculate moving averages
ma1 = sma(close, ma1_length)
ma2 = sma(close, ma2_length)
// Calculate Stochastic RSI
rsi1 = rsi(close, stoch_length)
rsiH = highest(rsi1, stoch_length)
rsiL = lowest(rsi1, stoch_length)
stoch = (rsi1 – rsiL) / (rsiH – rsiL) * 100
// Determine trend direction based on MA crossover
trendUp = ma1 > ma2 ? true : false
trendDown = ma1 < ma2 ? true : false
// Determine buy and sell signals based on Stochastic RSI
buySignal = trendUp and crossover(stoch, oversold)
sellSignal = trendDown and crossunder(stoch, overbought)
// Plot signals on chart
plotshape(buySignal, style=shape.arrowup, location=location.belowbar, color=color.green, size=size.small, text=”Buy”)
plotshape(sellSignal, style=shape.arrowdown, location=location.abovebar, color=color.red, size=size.small, text=”Sell”)
عالی است. اکنون کد همانطور است که می خواهیم نمایش داده شود.
۴- اکنون، اجازه دهید برخی از بهبودها را در کد ایجاد کنیم. علاوه بر تولید سیگنالهای خرید و فروش، میخواهم میانگینهای متحرک را نیز در نمودار مشاهده کنم. این به من امکان می دهد به صورت بصری بفهمم که چرا سیگنال ها تولید می شوند.
مرجع کد در زیر آمده است:
//@version=4
study(title=”Moving Average and Stochastic RSI Indicator”, shorttitle=”MA+Stoch RSI”, overlay=true)
// Input variables
ma1_length = input(title=”MA1 Length”, type=input.integer, defval=20, minval=1)
ma2_length = input(title=”MA2 Length”, type=input.integer, defval=50, minval=1)
stoch_length = input(title=”Stochastic RSI Length”, type=input.integer, defval=14, minval=1)
overbought = input(title=”Overbought Level”, type=input.integer, defval=80)
oversold = input(title=”Oversold Level”, type=input.integer, defval=20)
// Calculate moving averages
ma1 = sma(close, ma1_length)
ma2 = sma(close, ma2_length)
// Calculate Stochastic RSI
rsi1 = rsi(close, stoch_length)
rsiH = highest(rsi1, stoch_length)
rsiL = lowest(rsi1, stoch_length)
stoch = (rsi1 – rsiL) / (rsiH – rsiL) * 100
// Determine trend direction based on MA crossover
trendUp = ma1 > ma2 ? true : false
trendDown = ma1 < ma2 ? true : false
// Determine buy and sell signals based on Stochastic RSI
buySignal = trendUp and crossover(stoch, oversold)
sellSignal = trendDown and crossunder(stoch, overbought)
// Plot signals on chart
plotshape(buySignal, style=shape.arrowup, location=location.belowbar, color=color.green, size=size.small, text=”Buy”)
plotshape(sellSignal, style=shape.arrowdown, location=location.abovebar, color=color.red, size=size.small, text=”Sell”)
// Plot moving averages on chart
plot(ma1, color=color.blue)
plot(ma2, color=color.orange)
عالی است! اکنون که میتوانیم میانگینهای متحرک را ببینیم، درک بهتری از دلیل تولید سیگنالهای خرید و فروش داریم. با این حال، قبل از اینکه نشانگر را به یک استراتژی تبدیل کنیم، باید یک تنظیم نهایی را انجام دهیم: کاهش تعداد سیگنال های تولید شده.
راه های مختلفی برای رسیدن به این هدف وجود دارد مانند استفاده از فیلتر ADX یا فیلتر فرار (volatility). با این حال، برای این مثال، ما به سادگی تعداد سیگنال های تولید شده برای هر تلاقی میانگین های متحرک را به عدد ۱ محدود می کنیم.