Ana içeriğe geç

Sinyal Bot: Kapsamlı JSON Kılavuzu

Sinyal Bot için JSON kodu oluşturma konusunda adım adım rehberimizi keşfedin ve her bir özelliğin nasıl çalıştığını net bir şekilde anlayın.

Ozge avatar
Yazar: Ozge
5 aydan uzun süre önce güncellendi

Bu makalede sağlanacak olan Pine Script, strateji parametrelerini dinamik olarak bir JSON formatına dönüştürmek için tasarlanmıştır ve Wundertrading botlarıyla sorunsuz entegrasyon sağlar. Komut dosyası, her bir işlem için Kar Al, Zararı Durdur, İzleyen Durdurma ve daha fazlası gibi temel ticaret değişkenlerini özelleştirmenize ve ayarlamanıza olanak tanır. Bu esneklik, her işlemin kendi özel gereksinimlerine göre benzersiz bir şekilde yapılandırılabilmesini sağlayarak stratejiyi değişen piyasa koşullarına ve özel işlem tercihlerine son derece uyarlanabilir hale getirir. Adım adım ilerleyelim ve olasılıkları keşfedelim.

JSON kullanarak Sinyal Bot nasıl oluşturulur

Bir Sinyal botu kurmaya başlamak için sol taraftaki Sinyal bot sekmesine gidin ve Bot oluştur'u seçin.

Sinyal bot ayarları penceresini açtıktan sonra, ayarları özel ihtiyaçlarınızı karşılayacak şekilde düzenlemeye başlayabilirsiniz.

Genel Bilgiler

  1. Botun Adını ve Açıklamasını yapılandırarak başlayın.

  2. Borsayı ve ilgili API'yi seçin.

    Aynı anda 50 adede kadar API seçebilirsiniz, hepsi tek bir strateji altında birleştirilmiştir. Ayrıntıları görüntülemek için satıra tıklayarak stratejiyi genişletmeniz yeterlidir.

  3. İşlem çiftinizi listeden bulun veya arama alanına yazmanız yeterlidir.

    En fazla 10 çift seçebilirsiniz; bu, bir alarm bir işlemi tetiklediğinde, seçilen her çift için ayrı bir işlem oluşturulacağı anlamına gelir.

  4. İstediğiniz Zaman Dilimini seçin. Bu ayar yalnızca Alarm yorumlarının adını değiştirir ve botlarınızı Sinyal botu listenizdeki Zaman Dilimlerine göre filtrelemenize olanak tanır. TradingView zaman diliminden bağımsız olarak çalışır.

  5. Çoklu girişler seçeneği, ardışık giriş sinyalleri aldığınızda bir pozisyona ölçeklendirme yapmanızı sağlar. Aynı anda işlem çifti başına birden fazla açık pozisyon tutmak istiyorsanız bu ayarı etkinleştirin.

6. Swing ticaret özelliği, yalnızca Kısa Gir ve Uzun Gir sinyallerini kullanarak ticaret yönlerini değiştirmeyi sağlar. Etkinleştirildiğinde, Alarm yorumlarını üç kategoride basitleştirir: Enter-Long, Enter-Short ve Exit-All. Swing trade işlevselliğinin yalnızca Vadeli İşlem piyasaları için mevcut olduğunu lütfen unutmayın.

Girişler

Formun girişler bölümünde, Kaynağı seçmeniz gerekir: TradingView ve Bot ayarları formatı: JSON

Bot ayarları formatınızı JSON'a değiştirdiğinizde, sağ taraftaki alarmlar bölümü güncellenecektir. Bu bölüm, kodun nasıl çalıştığını anlamak için TradingView Pine Editor'a kopyalanabilen temel bir çalışma stratejisi sağlar. Kodu ayrıntılı olarak inceleyelim.

Kodun iki ana bölümü vardır: STRATEJİ MANTIĞI ve WUNDERTRADING UYGULAMASI

🔵 TradingView için Pine Script'te Strateji Örneği

Bu kodu doğrudan kopyalayıp TradingView PineScript'inize yapıştırabilir, grafiğe uygulayabilir ve örnek olarak nasıl çalıştığını gözlemleyebilirsiniz.

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © WunderTrading
//@version=6
strategy('Test Strategy', overlay = true, margin_long=0, margin_short=0)//, initial_capital = 10000, default_qty_type = strategy.fixed) //, commission_type = strategy.commission.percent, commission_value = 0.075)

// ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――}
// 🔵 STRATEGY LOGIC
// ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{

// Inputs
capital = input.int(title = 'Capital $', defval = 1000, step = 1, minval=1, maxval=1000000, group="Risk and Money Management")
risk_per_trade = input.float(title = 'Risk per trade', defval = 2.0, step = 0.1,group="Risk and Money Management")
riskReward = input.float(title = 'Risk:Reward', defval = 1.0, step = 0.1, group="Risk and Money Management")

// Backtest period
testStartYear = input(2025, "Backtest Start Year", group="Backtest Starting period")
testStartMonth = input(1, "Backtest Start Month",group="Backtest Starting period")
testStartDay = input(26, "Backtest Start Day",group="Backtest Starting period")

testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testPeriod() =>
time >= testPeriodStart

// Variables to store the value of the price when the condition will be met
var entry_price = 0.0
var stop = 0.0
var take1 = 0.0
var entry_amount = 0.0

longCondition = close > open[1]

// Logic of trade execution
if testPeriod()
if longCondition and strategy.position_size == 0 or (strategy.position_size == 0)[1]
entry_price := open

long_stop_prc = (entry_price - low[1]) / entry_price
long_stop_price = entry_price - (entry_price - low[1])

long_tp1_prc = long_stop_prc * riskReward
long_tp1_price = entry_price * (1 + (long_stop_prc * riskReward))

stop := long_stop_price
take1 := long_tp1_price

entry_amount := math.round(math.abs((capital * (risk_per_trade/100)) / long_stop_prc))

if longCondition and strategy.position_size ==0
strategy.entry('Long', strategy.long, qty = entry_amount )

if strategy.position_size > 0
strategy.exit(id = 'Long', from_entry = 'Long', limit = take1, stop=stop)



// Visual representation of your strategy
plot(strategy.position_size > 0 ? stop : na, style = plot.style_linebr, color = color.red, title = 'SL Long')
plot(strategy.position_size > 0 ? take1 : na, style = plot.style_linebr, color = color.green, title = 'TP1 Long')


// ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――}
// 🔵 WUNDERTRADING EXECUTION
// ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{

// Comment inputs
enter_Long_Comment = input.string(defval = "CHANGE-THIS-ENTER-LONG-COMMENT", tooltip = "Your personal Enter signal from WunderTrading bot settings", group="Comment to WunderTrading Bot")
exit_Long_Comment = input.string(defval = "CHANGE-THIS-EXIT-LONG-COMMENT", tooltip = "Your personal Enter signal from WunderTrading bot settings", group="Comment to WunderTrading Bot")

enter_Short_Comment = input.string(defval = "CHANGE-THIS-ENTER-SHORT-COMMENT", tooltip = "Your personal Enter signal from WunderTrading bot settings", group="Comment to WunderTrading Bot")
exit_Short_Comment = input.string(defval = "CHANGE-THIS-EXIT-SHORT-COMMENT", tooltip = "Your personal Enter signal from WunderTrading bot settings", group="Comment to WunderTrading Bot")

exit_All_Comment = input.string(defval = "CHANGE-THIS-EXIT-ALL-COMMENT", tooltip = "Your personal Enter signal from WunderTrading bot settings", group="Comment to WunderTrading Bot")

// json custom alerts signal bot ----------------------------------------------------------------------------------------

// str : str
styleToJson(name, value) =>
'"' + str.tostring(name) + '"' + ': ' + '"' + str.tostring(value) + '"'

// str : int
styleToJson_num(name, value) =>
'"' + str.tostring(name) + '"' + ': ' + (na(value) ? '"NaN"' : str.tostring(value))

styleToJson_takeProfits(priceDeviation, portfolio) =>
'{' + styleToJson_num("price", priceDeviation) + ',' + styleToJson_num("portfolio", portfolio) + '}'


conditions_for_signal(comment) =>
alert_text = array.new_string()

// SETTINGS PARAMS
// Entry cooment code
entry_comment = '"code": ' + '"' + str.tostring(comment) + '"'
array.push(alert_text, entry_comment)

// Entry Parameters
order_type = styleToJson("orderType", "market")
amount_per_trade_type = styleToJson("amountPerTradeType", "quote")
amount_per_trade = styleToJson_num("amountPerTrade", entry_amount)
leverage = styleToJson_num("leverage", 1)

array.push(alert_text, order_type)
array.push(alert_text, amount_per_trade_type)
array.push(alert_text, amount_per_trade)
array.push(alert_text, leverage)

// Parameters for Limit Orders Only
// time_in_force = styleToJson_num("timeInForce", 1)

// price_deviation = '"priceDeviation": {' +
// styleToJson_num("deviation", 0.01) + ',' +
// styleToJson("deviationType", "percents") + ',' +
// styleToJson("priceType", "last") + '}'

// array.push(alert_text, time_in_force)
// array.push(alert_text, price_deviation)

// Take Profit
take_profits = '"takeProfits": [' +
// styleToJson_takeProfits(take1, 0.5) + ',' +
styleToJson_takeProfits(take1, 1) + ']'

array.push(alert_text, take_profits)

// Stop Loss
stop_loss = '"stopLoss": {' + styleToJson_num("price", stop) + '}'
array.push(alert_text, stop_loss)

// Move Stop Loss to breakeven
// move_to_breakeven = '"moveToBreakeven": {' + styleToJson_num("activationPriceDeviation", 0.05) + '}'
// array.push(alert_text, move_to_breakeven)

// Trailing Stop
// trailing_stop = '"trailingStop": {' +
// styleToJson_num("activation", 0.05) + ',' +
// styleToJson_num("execute", 0.005) + '}'
// array.push(alert_text, trailing_stop)

// Additional Parameters
// keep_position_open = styleToJson("keepPositionOpen", true)
reduce_only = styleToJson("reduceOnly", true)
place_conditional_orders = styleToJson("placeConditionalOrdersOnExchange", false)

// array.push(alert_text, keep_position_open)
array.push(alert_text, reduce_only)
array.push(alert_text, place_conditional_orders)

// DCA Parameters
// dca = '"dca": {' +
// styleToJson_num("extraOrderCount", 10) + ',' +
// styleToJson_num("extraOrderDeviation", 0.005) + ',' +
// styleToJson_num("extraOrderVolumeMultiplier", 1.1) + ',' +
// styleToJson_num("extraOrderDeviationMultiplier", 1.1) + ',' +
// styleToJson("takeProfitsBasedOn", "average_price") + ',' +
// styleToJson("stopLossBasedOn", "average_price") + '}'

// array.push(alert_text, dca)

// Pass Parameters
messageJson = "{" + array.join(alert_text, ', ') + "}"
//

// ALERT SIGNALS
signal_alert_long = conditions_for_signal(enter_Long_Comment)
signal_alert_short = conditions_for_signal(enter_Short_Comment)
signal_aler_exit_long = conditions_for_signal(exit_Long_Comment)
signal_aler_exit_short = conditions_for_signal(exit_Short_Comment)
signal_aler_exit_all = conditions_for_signal(exit_All_Comment)

if longCondition and strategy.position_size == 0
alert(signal_alert_long, alert.freq_once_per_bar_close)

Strateji mantığı bölümü, stratejinin nasıl çalışması gerektiğine ilişkin özel yaklaşımınızı temsil eder. Burada, öngördüğünüz herhangi bir stratejiyi veya koşulu tanımlayabilirsiniz. Örneğin, iki Basit Hareketli Ortalama kesiştiğinde veya RSI aşırı alım veya aşırı satım seviyelerini gösterdiğinde bir giriş tetiklenebilir.

WunderTrading Yürütme bölümü, alarmlarınızı JSON türüne dönüştürecek ve WunderTrading'e göndermekten sorumlu olan kodu sağlamaya odaklanır.

JSON biçiminde iletebileceğiniz Tek İşlem Çifti Bot değişkenleri

Giriş komut kodu

Alan

Zorunlu

Tür

Komutlar

Kod

Doğru

String

Bu, yorumlarınızdan Uzun Gir veya Kısa Gir sinyalini geçirecek olan giriş yorum kodudur.

Giriş Parametreleri

Alan

Zorunlu

Tür

Komutlar

emirtürü

Doğru

string

Olası değer: “piyasa”, ”limit”

İşlem Başına MiktarTür

Doğru

string

Olası değer: “teklif”, ‘yüzdeler’, ”sözleşmeler”

  • Spot işlem çifti mevcut değerler: “teklif” veya ‘temel’ veya ”yüzdeler”

  • Türev işlem çifti mevcut değerleri: “teklif” veya ‘sözleşmeler’ veya ”yüzdeler”

İşlem Başına Miktar

Doğru

num

Aralık: (0; +Inf)

  • AmountPerTradeType` eşittir “yüzdeler” olduğunda, `amountPerTrade` değeri ondalık olarak sağlanmalıdır.

  • (örneğin: %10 -> 0.1)

kaldıraç

Yanlış

num

Aralık: [1, 125]

Varsayılan: 1

Yalnızca Limit Emirleri için Parametreler

Alan

Zorunlu

Tür

Komutlar

timeInForce

Yanlış

num

Aralık: [5, 5000]

Varsayılan: 5

Dakika cinsinden limitli emir yürürlük süresi değeri (`limit` emri için zorunludur)

fiyat

Yanlış

num

Aralık: (0; +Inf)

Kesin fiyat değeri.

PriceDeviation` tanımlanmadığında `limit` siparişi için zorunludur)

fiyatSapması

Yanlış

object

Fiyat sapma ayarları.

Fiyat` tanımlanmadığında `limit` emri için zorunludur

sapma

Yanlış

num

Aralık:

deviationType="percents”

UZUN: (0,001; 1)

KISA: (0,001; +Inf)

Fiyat sapma değeri

sapmaTürü

Doğru

string

Olası değer: “yüzdeler”

fiyatTürü

Yanlış

string

Olası değer: “teklif”, ‘talep’, ”son”

Varsayılan: “son”

Sapma yapılacak fiyat türü değeri

Kar Alma Parametreleri

Alan

Zorunlu

Tür

Komutlar

kar al

Yanlış

array

Dizi Değerleri türü: nesne

fiyat

Yanlış

num

Aralık: (0; +Inf)

Katı fiyat değeri.

(Sadece tek çift botlar için)

fiyatSapması

Yanlış

num

Aralık:

UZUN: (0,001; +Inf)

KISA: (0.001; 1)

Fiyat sapma değeri `yüzde oranı` (%10 -> 0,1 `yüzde oranı`)'.

(Birden fazla çift bot için boş olamaz)

portföy

Yanlış

num|null

Aralık: (0; 1]

Fiyat sapma değeri `yüzde oranı` (%10 -> 0,1 `yüzde oranı`)'.

(Birden fazla çift bot için boş olamaz)

Zararı Durdur Parametreleri

Alan

Zorunlu

Tür

Komutlar

zararDurdur

Yanlış

object

Olası değer: “fiyat” veya ”priceDeviation”

fiyat

Doğru

num

Aralık: (0; +Inf)

Katı fiyat değeri.

(Sadece tek işlem çifti botlar için)

fiyatSapması

Doğru

num

Aralık:

  • KISA: (0,001; +Inf)

  • UZUN: (0,001; 1)

Fiyat sapma değeri `yüzde oranı` (%10 -> 0,1 `yüzde oranı`)'.

(Birden fazla işlem çifti bot için boş olamaz)

Move Stop Loss to breakeven

Alan

Zorunlu

Tür

Komutlar

aktivasyonFiyatı

Doğru

(tek işlem çifti için)

num

Aralık: (0; +Inf)

Katı fiyat değeri.

(Sadece tek çift botlar için)

aktivasyonFiyatSapması

Doğru

(çoklu işlem çifti için)

num

Aralık:

  • UZUN: (0,001; +Inf)

  • KISA: (0.001; 1)

Fiyat sapma değeri `yüzde oranı` (%10 -> 0,1 `yüzde oranı`)'.

(Birden fazla işlem çifti bot için boş olamaz)

Trailing Stop

Alan

Zorunlu

Tür

Komutlar

aktivasyon

doğru

num

Aralık:

  • UZUN: (0,0001; +Inf)

  • KISA: (0.0001; 1)

Fiyat sapma değeri `yüzde oranı` (%10 -> 0,1 `yüzde oranı`)'.

çalıştır

doğru

num

Aralık:

  • UZUN: (0,0001; 1)

  • KISA: (0,0001; +Inf)

Fiyat sapma değeri `yüzde oranı` (%10 -> 0,1 `yüzde oranı`)'.

Additional Parameters

Alan

Zorunlu

Tür

Komutlar

pozisyonuAçıkTut

yanlış

bool

Varsayılan: true

Pozisyonumu açık tut.

(Etkiler yalnızca boş `takeProfits`, `stopLoss`, `moveToBreakeven`, `trailingStop` içeren spot stratejileri)

sadeceAzalt

yanlış

bool

Varsayılan: true

Sadece çıkışlar için azaltın.

(Spot stratejiler için etkisi yoktur)

borsadaKoşulluEmirlerVer

yanlış

bool

Varsayılan: yanlış

Borsada çıkış koşullu emirleri yerleştirin. (Kısmen desteklenir, DCA etkinleştirildiğinde yok sayılır)

DCA Parameters

Alan

Zorunlu

Tür

Komutlar

dca

yanlış

object

ekstraEmirSayısı

doğru

num

Aralık: [1; 30]

Giriş emri + ekstra DCA emirleri toplamı.

(Örnekte 5 değeri 1 giriş emri + 4 ekstra DCA emri anlamına gelir)

ekstraEmirSapması

doğru

num

Aralık: [0.001; 0.2]

Ekstra DCA emir fiyat sapması

ekstraEmirHacimÇarpanı

doğru

num

Aralık: [1; 10]

Ekstra DCA sipariş hacmi çarpanı

ekstraEmirSapmaÇarpanı

yanlış

num

Rakam olduğu zaman: Aralık: [1; 10]

Varsayılan: null

Ekstra DCA sipariş fiyatı sapma çarpanı

karAlAyarı

yanlış

string

Olası değer: “average_price”, ”entry_order”

Varsayılan: “average_price”

Belirtilen koşula göre kar fiyatı alın

zararDurdurAyarı

yanlış

string

Olası değer: “average_price”, ”entry_order”

Varsayılan: “entry_order”

Belirlenen koşula göre zararı durdur fiyatı

TradingView'de bir alarm nasıl oluşturulur?

Önce, “Grafikte güncelle” düğmesine tıklayarak stratejiyi güncelleyin ve ardından “Alarm” düğmesine tıklayarak Alarmı Oluşturun.

Şimdi alarmı ayarlayalım:

  1. Strateji Seçin - Koşul açılır menüsünden stratejinizi seçin.

  2. Alarm İşlevi Çağrılarını Etkinleştir - Kod koşullarına göre alarmları tetiklemek için “yalnızca alert() işlev çağrıları” seçeneğini belirleyin.

  3. Bildirimler Sekmesine gidin - Bildirimler bölümüne gidin.

  4. Webhook URL'sini Yapıştır - WunderTrading'den Webhook URL'sini ekleyin.

  5. Oluştur'a tıklayın - İşlem yürütmeyi otomatikleştirmek için alarmı sonlandırın.

İşte bu kadar, giriş alarmını bekleyin ve her şeyin yolunda gidip gitmediğini kontrol edin. Bunu Sinyal botları listesine giderek ve oluşturduğunuz belirli sinyal botunun “kayıtlar” düğmesine tıklayarak yapabilirsiniz, alarmın herhangi bir hata olmadan iyi bir şekilde yürütülüp yürütülmediğini göreceksiniz. Son olarak, açılan pozisyonu görmek için pozisyonlar sekmesine gidin.

Bot Kurulumu Onayı

Bot alarmlarınız ayarlandıktan sonra, botunuzun başarıyla yapılandırıldığını gösteren bir onay ekranı göreceksiniz. Bu aşamada, bot bir alarmın tetiklenmesini bekleyecek ve otomatik olarak bir pozisyon açacaktır.

Hemen bir pozisyona girmeyi tercih ederseniz, bu botla bağlantılı uzun veya kısa bir işlem arasında seçim yapabileceğiniz “Şimdi Pozisyon Gir” seçeneğine tıklayın.

Bot ayarlarını istediğiniz zaman düzenleyebilir veya kontrol panelinizdeki alarm mesajlarını kontrol edebilirsiniz.

Bu cevap sorunuzu yanıtladı mı?