Para sa marami,
TradingView ang platform sa pag-chart na laging pinipili. Ang mahusay na HTML5 web application, na nag-aalok ng isang hub ng mga tool sa technical analysis, ay ginagamit ng milyon-milyon para subaybayan ang mga paggalaw sa
Forex,
cryptocurrency, at mga tradisyonal na stock market.
Maraming mahusay na feature ang TradingView: nagbibigay-daan ito sa ating sumubaybay ng mga asset sa maraming iba't ibang platform sa pag-trade at mag-publish ng mga ideya sa pag-trade sa social network nito. Sa artikulong ito, pagtutuunan natin ang kakayahan nitong ma-customize. Gagamitin natin ang Pine Script, ang sariling programming language ng TradingView, na magbibigay sa atin ng granular na kontrol sa mga layout ng chart natin.
Magsimula na tayo!
Ang
Pine Script ay isang scripting language na magagamit para baguhin ang iyong mga chart sa TradingView. Nagbibigay na sa iyo ang platform ng maraming feature para magawa iyon, pero sa Pine Script, mas marami ka pang magagawa. Gusto mo mang palitan ang mga kulay ng iyong mga
candlestick o mag-backtest ng bagong diskarte, magbibigay-daan sa iyo ang Pine Editor na i-customize ang mga real-time na chart mo kung sa tingin mo ay angkop ito.
Mahusay na naisadokumento ang mismong code, kaya siguraduhing tingnan ang
user manual para sa higit pang impormasyon. Ang layunin natin sa tutorial na ito ay talakayin ang ilan sa mga pangunahing kaalaman at magpakilala ng mga indicator na posibleng magamit sa
pag-trade ng cryptocurrency.
Napakasimpleng magsimula sa Pine Script. Anumang code na isusulat natin ay tatakbo sa mga server ng TradingView, kaya maa-access natin ang editor at makakabuo tayo ng mga script natin mula sa isang browser – nang walang anumang karagdagang pag-download o pag-configure na kinakailangan.
Sa tutorial na ito, icha-chart natin ang pares ng currency na Bitcoin/Binance USD (BTCBUSD). Kung wala ka pa, gumawa ka na ng libreng account (may available ding pro na subskripsyon, pero hindi ito kinakailangan sa gabay na ito).
Sundan
ang link na ito, at may makikita kang chart na kamukha ng sumusunod:
Baka mas updated ang sa iyo.
Dito, gusto nating makuha ang chart na may kumpletong feature – mag-click sa button para i-access ito. Magbibigay iyon sa atin ng mas detalyadong view, mga tool sa pagguhit, at mga opsyon para mag-plot ng mga trendline, bukod sa iba pang bagay.
Ang chart na may kumpletong feature. Puwede mong i-adjust ang timeframe sa pamamagitan ng pag-click sa mga view sa itaas ng mga naka-highlight na tab.
Hindi natin tatalakayin kung paano gamitin ang iba't ibang tool na available, pero kung seryoso ka sa technical analysis, lubos naming ipinapayo na pag-aralan mo ang mga iyon. Sa kaliwang bahagi sa ibaba (na naka-outline sa larawan), may makikita kang ilang iba't ibang tab – mag-click sa Pine Editor.
Sa editor na ito nangyayari ang magic. Sasabihin natin dito kung ano ang gusto nating gawin, pagkatapos ay magki-click tayo sa Idagdag sa Chart para makitang lumabas ang ating mga anotasyon sa itaas. Tandaan na puwedeng magkagulo kung magsasama tayo ng ilang anotasyon nang sabay-sabay, kaya aalisin natin ang mga iyon pagkatapos ng bawat halimbawa (mag-right click sa chart > Alisin ang Mga Indicator).
Makikita mo na mayroon na tayong ilang linya ng code doon. I-click natin ang Idagdag sa Chart para makita kung ano ang mangyayari.
May maidaragdag na pangalawang chart sa ibaba ng orihinal. Parehong data ang ipinapakita ng bagong chart. Mag-hover sa My Script at mag-click sa cross para alisin ito. Ngayon, suriin natin ang code.
study("My Script")
Sine-set up lang ng unang linyang ito ang ating anotasyon. Ang kailangan lang nito ay ang pangalang gusto mong itawag sa indicator ("My Script," sa sitwasyong ito), pero mayroon ding ilang opsyonal na parameter na puwede nating idagdag. Ang isa sa mga iyon ay overlay, na nagsasabi sa TradingView na ilagay ang indicator sa kasalukuyang chart (sa halip na sa bagong segment). Gaya ng makikita mo sa ating unang halimbawa, nagde-default ito sa false. Bagama't hindi natin ito makikitang gumana ngayon, idaragdag ng overlay=true ang indicator sa kasalukuyang chart.
plot(close)
Ang linyang ito ay ang tagubiling i-plot ang close price ng
Bitcoin. Binibigyan lang tayo ng line chart ng
plot, pero puwede rin tayong magpakita ng mga candlestick at bar, gaya ng makikita natin sa ilang sandali.
Ngayon, subukan natin ang sumusunod:
//@version=4 study("My Script", overlay=true) plot(open, color=color.purple)
Kapag idinagdag mo ito, dapat may makita kang pangalawang chart (na kamukha ng orihinal na nailipat sa kanan). Ang open price lang ang na-plot natin, at dahil ang open ng kasalukuyang araw ay ang close ng nakaraang araw, may katwiran naman na magkahugis ang mga ito.
Sige! Alisin natin ang mga kasalukuyang anotasyon (tandaan, gagawin natin iyon sa pamamagitan ng pag-right click at pagpindot sa Alisin ang Mga Indicator). Mag-hover sa Bitcoin / BUSD at i-click ang button na Itago para i-clear din ang kasalukuyang chart.
Mas gusto ng maraming trader ang mga candlestick chart dahil nagbibigay ito sa atin ng mas maraming impormasyon kaysa sa simpleng plot tulad ng kakagawa lang natin. Iyon ang susunod nating idaragdag.
//@version=4 study("My Script", overlay=true) plotcandle(open, high, low, close)
Magandang simula ito, pero medyo boring dahil sa kakulangan ng kulay. Mainam kung pula ang mga candle natin kapag mas mataas ang open kaysa sa close para sa ibinigay na timeframe, at berde naman kung lampas ang close sa open. Magdaragdag tayo ng linya sa itaas ng function na plotcandle():
//@version=4 study("My Script", overlay=true) colors = open >= close ? color.red : color.green plotcandle(open, high, low, close)
Tinitingnan nito ang bawat candlestick at sinusuri nito kung mas malaki sa o katumbas ng close ang open. Kung oo, ibig sabihin, bumaba ang mga presyo sa loob ng panahong iyon, kaya kukulayan nito ng pula ang candlestick. Kung hindi, berde ang ikukulay nito rito. Baguhin ang function na plotcandle() para ipasa ang scheme ng kulay na ito sa:
//@version=4 study("My Script", overlay=true) colors = open >= close ? color.red : color.green plotcandle(open, high, low, close, color=colors)
Alisin ang mga kasalukuyang indicator kung hindi mo pa iyon nagagawa, at idagdag ang isang ito sa chart. Ngayon, dapat mayroon na tayong kamukha ng regular na candlestick chart.
Ang ganda!
Natalakay na natin ang ilan sa mga pangunahing kaalaman. Magpatuloy tayo sa ating unang custom na indicator – ang
exponential moving average, o EMA. Isa itong mahalagang tool dahil nagbibigay-daan ito sa ating i-filter out ang anumang noise sa merkado at ayusin ang pagkilos ng presyo.
Medyo naiiba ang EMA sa simple moving average (SMA), dahil mas binibigyan nito ng timbang ang pinakakamakailang data. Malamang na mas reactive ito sa mga biglaang paggalaw at kadalasang ginagamit ito para sa mga panandaliang play (halimbawa, sa
day trading).
Ang simple moving average (SMA)
I-plot na rin natin ang SMA, para lang mapaghambing natin ang dalawa pagkatapos. Idagdag ang linyang ito sa iyong script:
plot(sma(close, 10))
Ipa-plot nito ang average ng nakaraang sampung araw. Baguhin ang numero sa mga bracket para makita kung paano magbabago ang kurba kapag isinasaalang-alang ang iba't ibang haba.
Ang SMA, batay sa nakaraang sampung araw.
Ang exponential moving average (EMA)
Magiging mas mahirap maunawaan ang EMA, pero huwag kang mag-alala. Idetalye muna natin ang formula:
EMA = (Close - EMA ng Nakaraang Araw) * Multiplier - EMA ng Nakaraang Araw
Ano'ng sinasabi nito sa atin? Para sa bawat araw, magkakalkula tayo ng bagong moving average batay sa moving average ng nakaraang araw. Ang multiplier ang “titimbang” sa pinakakamakailang panahon, at kinakalkula ito gamit ang sumusunod na formula:
Multiplier = 2 / (Haba ng EMA + 1)
Tulad sa mga simple moving average, kailangan nating tukuyin kung gaano katagal ang EMA. Batay sa syntax, katulad ng sa SMA ang function para i-plot ang EMA. I-plot ito kasabay ng SMA para mapaghambing mo ang dalawa:
//@version=4 study("My Script", overlay=true) plot(sma(close, 10)) plot(ema(close,10))
May makikita kang kaunting pagkakaiba sa dalawang uri ng MA.
Mga built-in na script
Sa ngayon, naisulat na natin ang ating code nang manu-mano para masubukan mo ito. Pero magpakilala tayo ng isang bagay kung saan makakatipid tayo ng oras, partikular na kung magsusulat tayo ng mas kumplikadong mga script, at ayaw nating gawin ang mga iyon mula umpisa.
Sa kanang bahagi sa itaas ng iyong editor, mag-click sa Bago. May makukuha kang dropdown na menu na naglalaman ng iba't ibang uri ng mga teknikal na indicator. I-click ang Exponential Moving Average para makita ang source code para sa isang indicator ng EMA.
Idagdag mo na ito sa chart.
Iba ito sa amin – mapapansin mo ang mga function na input(). Maganda ito kung kakayahang magamit ang pag-uusapan dahil puwede kang mag-click sa kahong ito…
...at madali mong mababago ang ilan sa mga value sa isang pop-up na window sa pamamagitan ng pag-click sa wheel ng Mga Setting.
Magdaragdag tayo ng ilang function na input() sa susunod nating script para ipakita ito.
Ang
Relative Strength Index (RSI) ay isa pang
mahalagang indicator sa technical analysis. Kilala ito bilang
indicator ng momentum, ibig sabihin, sinusukat nito ang rate ng pagbili at pagbebenta ng mga asset. Sinusubukang ipaalam ng RSI score, na ipinapakita sa sukatang 0 hanggang 100, sa mga mamumuhunan kung labis na nabili o labis na naibenta ang mga asset. Karaniwang posibleng ituring na labis na naibenta ang isang asset kung ang score nito ay mas mababa sa o katumbas ng 30, at posibleng labis itong nabili sa score na mas mataas sa o katumbas ng 70.
Kung pupunta ka sa Bago > Diskarte sa RSI, makikita mo ito mismo. Sa pangkalahatan, sinusukat ang RSI sa mga panahong 14 (ibig sabihin, 14 na oras o 14 na araw), pero puwede mong baguhin ang setting na iyon para umakma ito sa sarili mong diskarte.
Idagdag ito sa chart. Dapat mayroon nang ilang arrow na ipinapakita (na tinutukoy ng function na strategy.entry() sa code). Isinasaad ng RsiLE ang isang potensyal na pagkakataong i-long ang asset dahil posibleng labis itong naibenta. Hina-highlight ng RsiSE ang mga posibleng punto kung saan isho-short ang asset kapag labis itong nabili. Tandaan, na katulad ng sa lahat ng indicator, hindi mo dapat ituring na walang palyang ebidensya ang mga ito na bababa/tataas ang mga presyo.
May paraan para masubukan natin ang ating mga custom na indicator. Bagama't hindi magagarantiyahan ng dating performance ang mga resulta sa hinaharap, sa pamamagitan ng pag-backtest ng ating mga script, magkakaroon tayo ng ideya kung gaano kaepektibo ang mga ito sa pagkuha ng mga signal.
Magbibigay kami ng halimbawa ng simpleng script sa ibaba. Gagawa tayo ng diretsahang diskarte na papasok sa isang long na posisyon kapag bumagsak ang presyo ng BTC sa $11,000 at lalabas sa posisyon kapag lumampas sa $11,300 ang presyo. Pagkatapos, makikita natin kung gaano kalaki sana ang kinita ng diskarteng ito sa nakaraan.
//@version=4 strategy("ToDaMoon", overlay=true) enter = input(11000) exit = input(11300) price = close if (price <= enter) strategy.entry("BuyTheDip", strategy.long, comment="BuyTheDip") if (price >= exit) strategy.close_all(comment="SellTheNews")
Tinukoy natin dito ang entry at exit bilang mga variable – parehong input ang mga ito, ibig sabihin, puwede nating baguhin ang mga ito sa chart sa ibang pagkakataon. Na-set up din natin ang variable na price, na kumukuha sa close para sa bawat panahon. Tapos, mayroon tayong kaunting logic sa anyo ng mga pahayag na if. Kung true ang bahaging naka-bracket, papaganahin ang naka-indent na block sa ibaba nito. Kung hindi, lalaktawan ito.
Kaya kung ang presyo ay mas mababa sa o katumbas ng gusto nating entry, masusuri bilang true ang unang expression, at magbubukas tayo ng long na posisyon. Kapag katumbas ng o lampas sa gustong exit ang presyo, mati-trigger ang pangalawang block, at isasara nito ang lahat ng bukas na posisyon.
Ia-annotate natin ang chart gamit ang mga arrow na nagpapakita kung saan tayo pumasok/lumabas, kaya tinukoy natin kung anong label ang ilalagay sa mga puntong ito gamit ang parameter na comment (sa halimbawang ito, “BuyTheDip” at “SellTheNews”). Kopyahin ang code, at idagdag ito sa chart.
Makikita mo na ngayon ang mga indicator sa chart. Baka kailangan mong mag-zoom out.
Awtomatikong inilalapat ng TradingView ang iyong mga panuntunan sa mas lumang data. Mapapansin mo rin na lilipat ito mula sa Pine Editor papunta sa tab na Strategy Tester. Sa pamamagitan nito, makakakita ka ng pangkalahatang-ideya ng iyong mga potensyal na kita, isang listahan ng mga trade, at bawat isa sa mga indibidwal na performance ng mga ito.
Mga posisyon kung saan tayo pumasok at lumabas.
Oras na para magsulat ng sarili nating script gamit ang ilan sa mga konseptong nakita natin sa ngayon. Pagsasamahin natin ang EMA at RSI at gagamitin natin ang mga value ng mga ito para kulayan ang mga candlestick, na magbibigay ng mga insight na madali nating mavi-visualize.
Hindi dapat ito ituring na pampinansyal na payo – walang objective na tamang paraan ng paggamit sa indicator na ito. Gaya ng lahat ng iba pa, dapat itong gamitin kasama ng iba pang tool para makabuo ng sarili mong diskarte.
Ngayon, gawin na natin ang bago nating script. Alisin ang lahat ng iyong indicator sa chart, at itago rin ang chart ng Bitcoin/BUSD, para maging malinis ang paggagawan natin.
Magsimula tayo sa pamamagitan ng paglalarawan sa ating pag-aaral. Puwede mo itong pangalanan ng kahit anong gusto mo, siguraduhin lang na itatakda mo ang overlay=true.
study(title="Binance Academy Script", overlay=true)
Tandaan ang ating formula ng EMA mula kanina. Kailangan nating ibigay ang multiplier sa haba ng EMA. Gawin nating itong input na nangangailangan ng integer (kaya walang decimal place). Magtatakda rin tayo ng minimum na puwede itong maging (minval), at default na value (defval).
study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0)
Gamit ang bagong variable na ito, puwede nating kalkulahin ang value ng EMA para sa bawat candle sa ating chart:
study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength)
Magaling. Magpatuloy tayo sa RSI. Bibigyan natin ito ng haba sa katulad na paraan:
study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0)
At ngayon, puwede na natin itong kalkulahin:
study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0) rsiVal = rsi(close, rsiLength)
Sa yugtong ito, pagsama-samahin natin ang lohikang magkukulay sa mga candlestick depende sa mga value ng EMA at RSI. Kumuha tayo ng sitwasyon kung saan (a) ang close price ng candle ay lampas sa EMA at (b) ang RSI ay mas mataas sa 50.
Bakit? Baka magpasya kang magagamit ang mga indicator na ito nang magkasama para sabihin sa iyo kung kailan ilo-long o isho-short ang Bitcoin. Halimbawa, baka isipin mo na kapag natugunan ang dalawang kondisyong ito, ibig sabihin, magandang pagkakataong pumasok sa long na posisyon. O sa kabaliktaran, baka gamitin mo ito para malaman mo kung kailan dapat hindi mag-short, kahit na salungat dito ang sinasabi ng iba pang indicator.
Kaya ganito ang magiging hitsura ng ating susunod na linya:
study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0) rsiVal = rsi(close, rsiLength) colors = close > emaVal and rsiVal > 50 ? color.green : color.red
Kung isasalin natin ito sa simpleng English, ang sinasabi lang natin ay kung lampas ang value ng EMA sa close price at lampas ang RSI score sa 50, kukulayan natin nang berde ang candle. Kung hindi, pula ang ikukulay natin dito.
Susunod, i-plot ang EMA:
study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0) rsiVal = rsi(close, rsiLength) colors = close > emaVal and rsiVal > 50 ? color.green : color.red plot(emaVal, "EMA")
Panghuli, i-plot ang mga candle, at siguraduhing isasama mo ang parameter na color:
study(title="Binance Academy Script", overlay=true) emaLength = input(title="EMA Length", type=input.integer, defval=25, minval=0) emaVal = ema(close, emaLength) rsiLength = input(title="RSI Length", type=input.integer, defval=25, minval=0) rsiVal = rsi(close, rsiLength) colors = close > emaVal and rsiVal > 50 ? color.green : color.red plot(emaVal, "EMA") plotcandle(open, high, low, close, color=colors)
At iyon na ang script! Idagdag ito sa chart para makita kung paano ito gumagana.
Isang chart ng BTC/BUSD na may indicator ng EMA/RSI.
Sa artikulong ito, natalakay natin ang ilang pangunahing halimbawa ng magagawa mo sa Pine Editor ng TradingView. Dapat kumpyansa ka na ngayon sa paggawa ng mga simpleng anotasyon sa mga chart ng presyo para magkaroon ng mga karagdagang insight mula sa mga sarili mong indicator.
Ilang indicator lang ang napag-usapan natin dito, pero madaling gumawa ng mga mas kumplikadong indicator – sa pamamagitan ng pagpili ng mga inbuilt na script mula sa Bago o sa pamamagitan ng pagsusulat mo nito mismo.
Wala ka bang inspirasyon? Ang mga sumusunod na halimbawa ay posibleng makapagbigay sa iyo ng ilang ideya para sa susunod mong proyekto: