• 26-11-2022, 22:24:36
    #1
    S.a. arkadaşlar,

    Python ile bir ticaret botu kodluyorum. Trailling stop loss konusunda takıldım kaldım açıkcası. Trailling stop loss karı izleyen bir sistem bilmeyenler için. Yani fiyatı sürekli takip eden ve belirli kurallar içerisinde gidebildiği yere kadar alabildiği karı alana kadar devam eden bir sistem. Arkadaşlar bir mantık hatası yapıyorum herhalde ama bir türlü fark edemiyorum. Hatam nerde veya bu işlemi daha kolay şekilde yapamazmıyım. Size tam olarak anlatmaya çalışacağım.

    Senaryo:

    bot 100$ fiyatla bir coin satın alıyor
    stop loss %10 olarak tanımlı
    Coin 90$'ın altına düştüğünde stoploss tetikleniyor.

    Stop loss, coin için yapılandırılan ofsetin üzerine çıkmadığı sürece 90$'da kalacaktır. Yani ticaretin belirli bir hacime ulaşması için bir limit belirliyoruz.
    Coin şimdi 103$'a yükseldiğini varsayarsak (burada ofseti yapılandırdık)
    zararı durdur şimdi 103$ = 100.94$'ın -%2'si olacak
    şimdi varlığın değeri 101$'a düşer, zararı durdur yine 100.94$ olur ve 100.94$'da tetiklenir

    Böylelikle karı sürekli takip etmiş oluyoruz. Eğer 100.94$ gelirse stoploss tetikleniyor. Kodlarım çok karışık gelebilir, üstünde çok fazla oynama yaptım. Kusura bakmayın lütfen.

    Test Kodlarım:

    # -*- coding: utf-8 -*-
    from binance1 import Binance
    import config
    import time
    from pprint import pprint
    
    binance = Binance(
    api_key=config.API_DETAILS['API_KEY'],
    api_secret=config.API_DETAILS['API_SECRET']
    )
    
    
    def tr_pozitif_offset(fiyat,offset,pos):
    ff = (float(fiyat) * offset)
    if pos == 'buy':
    return float(fiyat) + float(ff)
    else:
    return float(fiyat) - float(ff)
    
    def stopfiyat(fiyat,off,pos):
    ff = (float(fiyat) * off)
    if pos == 'buy':
    return float(fiyat) - float(ff)
    else:
    return float(fiyat) + float(ff)
    
    def guncel_stoplos(fiyat,of,pos):
    dd = (float(fiyat) * of)
    if pos == 'buy':
    return float(fiyat) + float(dd)
    else:
    return float(fiyat) - float(dd)
    
    
    #satın alınan fiyat
    ticarete_giris_fiyati = 0.08941
    #-%10 stop loss
    stoploss = 0.10
    #ticaret belirli bir aşamaya geldikden sonra trailling stop loss devreye sok.
    trailing_stop_positive_offset = 0.002
    #stop loss artdır + %0.3
    trailing_stop_positive = 0.003
    
    
    sembol = 'DOGEUSDT'
    pozisyon = 'buy'
    
    limit_fiyat = tr_pozitif_offset(ticarete_giris_fiyati,trailing_stop_positive_offset,pozisyon)
    stop_fiyat = stopfiyat(ticarete_giris_fiyati,stoploss,pozisyon)
    yeni_stop = 0
    while True:
    current_price = binance.get_price(sembol)
    if pozisyon == 'buy':
    print("Mevcut fiyat:",current_price, "Stop fiyat",stop_fiyat,"Limit fiyat",limit_fiyat)
    if stop_fiyat >= current_price:
    print('STOP Oldun, sat emri ver',stop_fiyat)
    break
    if current_price >= limit_fiyat:
    print("Trailling stop loss aktif edildi.")
    yeni_stop = tr_pozitif_offset(current_price,trailing_stop_positive,pozisyon)
    while True:
    current_price = binance.get_price(sembol)
    if current_price >= stop_fiyat:
    yeni_stop = stopfiyat(current_price,trailing_stop_positive,pozisyon)
    
    if stop_fiyat >= current_price:
    print("Sona gelindi karlı satış")
    stop_fiyat = yeni_stop
    print("Mevcut fiyat",current_price,"Stop fiyat",stop_fiyat)
    time.sleep(3)
    time.sleep(3)
  • 29-11-2022, 14:42:23
    #2
    Şöyle yapmayı deneyebilirsin,
    örn:
    fiyat = 1000
    fiyatYuzdeOn = ((fiyat/100)*10)
    fiyatYuzdeIki = ((fiyat/100)*2)
    if fiyat < fiyatYuzdeOn:
    ...

    Bu gelecekteki hataların da önünce geçer, ve kademeli alış sayılır bu kazanç getirecektir ama riski az tut burada zarar da ettiğinde karının altında olmalı.
  • 29-11-2022, 23:43:11
    #3
    @mkozdogan
  • 30-11-2022, 03:05:16
    #4
    Sezar6699 adlı üyeden alıntı: mesajı görüntüle
    Şöyle yapmayı deneyebilirsin,
    örn:
    fiyat = 1000
    fiyatYuzdeOn = ((fiyat/100)*10)
    fiyatYuzdeIki = ((fiyat/100)*2)
    if fiyat < fiyatYuzdeOn:
    ...

    Bu gelecekteki hataların da önünce geçer, ve kademeli alış sayılır bu kazanç getirecektir ama riski az tut burada zarar da ettiğinde karının altında olmalı.
    Teşekkürler ....


    fuzinnes adlı üyeden alıntı: mesajı görüntüle
    Teşekkürler murat ...
  • 30-11-2022, 03:06:03
    #5
    Bence iki değişkenli iz sürmelisiniz.

    1) Sermaye
    2) Sermayenin üzerine eklenen.

    Sermayeniz X birimin altına düştüğünde veya üstüne çıktığında değil,

    Sermaye'nin üzerine koyulan X'in değeri ve sermayenin son değeri üzerinden ölçmeye devam etmelisiniz.
    Sermayeyi büyütüyorsanız, o halde sermayeyi yeniden set etmelisiniz.

    Sermaye = CapitalValue;
    Artis = Value - CapitalValue;

    if(artis > X && Value > Capital) {
    artis varsa isletilecek kosullar
    }
    else {
    azalma varsa isletilecek kosullar
    }

    Bu yönüyle daha kolay takip edilir. Diğer türlü sermayeden kaybetme riski yükselebilir.
  • 30-11-2022, 03:14:19
    #6
    mkozdogan adlı üyeden alıntı: mesajı görüntüle
    Bence iki değişkenli iz sürmelisiniz.

    1) Sermaye
    2) Sermayenin üzerine eklenen.

    Sermayeniz X birimin altına düştüğünde veya üstüne çıktığında değil,

    Sermaye'nin üzerine koyulan X'in değeri ve sermayenin son değeri üzerinden ölçmeye devam etmelisiniz.
    Sermayeyi büyütüyorsanız, o halde sermayeyi yeniden set etmelisiniz.

    Sermaye = CapitalValue;
    Artis = Value - CapitalValue;

    if(artis > X && Value > Capital) {
    artis varsa isletilecek kosullar
    }
    else {
    azalma varsa isletilecek kosullar
    }

    Bu yönüyle daha kolay takip edilir. Diğer türlü sermayeden kaybetme riski yükselebilir.
    Hiç bu açıdan düşünmemiştim. Aslında olabilir. Bu fikri test edeceğim. Teşekkür ederim çok sağ olun.
  • 05-12-2022, 02:16:12
    #7
    Aşağıdaki şekilde çözüme kavuşturdum. Tam istediğim gibi çalışıyor. İşine yarayan varsa alsan kullansın. Kodlar biraz karışık ama idare edin. Hoşca kalın.

    from binance1 import Binance
    import config
    import time
    from pprint import pprint
    
    binance = Binance(
    api_key=config.API_DETAILS['API_KEY'],
    api_secret=config.API_DETAILS['API_SECRET']
    )
    
    def __set_stop_loss(current_price:float, stopyuzde:float, leverage:float, is_pos:str):
    
    if is_pos == 'sell':
    new_loss = float(current_price * (1 + abs(stopyuzde / leverage)))
    else:
    new_loss = float(current_price * (1 - abs(stopyuzde / leverage)))
    return new_loss
    
    
    
    sembol = 'DOGEUSDT'
    buy_price = 0.104764
    pozisyon = 'sell'
    stoploss = -0.10 # fiyat %10 düşerse stop
    kaldirac = 20
    #trailing_stop = True
    trailing_stop_positive = 0.05 # %0.5 artan ile stop loss koy
    trailing_stop_positive_offset = 0.05 # fiyat %0.3 artarsa takip etmeye başla
    
    #Buy işlemi long
    anastoplos_buy = __set_stop_loss(buy_price,stoploss,kaldirac,pozisyon)
    pozitifstoploss_buy = __set_stop_loss(buy_price,trailing_stop_positive_offset,kaldirac,"sell")
    #print("BUY" ,anastoplos_buy,pozitifstoploss_buy)
    #sell işlemi short
    anastoplos_sell = __set_stop_loss(buy_price,stoploss,kaldirac,"sell")
    pozitifstoploss_sell = __set_stop_loss(buy_price,trailing_stop_positive_offset,kaldirac,"buy")
    #print("SELL ana" ,anastoplos_sell,pozitifstoploss_sell)
    
    
    while True:
    current_price = binance.get_price(sembol)
    if pozisyon == 'buy':
    print("ana stop loss:",anastoplos_buy,"pozitif stop loss:",pozitifstoploss_buy)
    if current_price < anastoplos_buy:
    print("Stop oldun sat")
    break
    if current_price > pozitifstoploss_buy:
    print("Trailling Stop Loss Aktif Buy")
    higher_stop_buy = current_price > pozitifstoploss_buy
    lower_stop_buy = current_price < pozitifstoploss_buy
    if higher_stop_buy:
    print("Higher : ", higher_stop_buy)
    pozitifstoploss_buy = __set_stop_loss(current_price,trailing_stop_positive_offset,kaldirac,"sell")
    anastoplos_buy = __set_stop_loss(current_price,trailing_stop_positive,kaldirac,pozisyon)
    print("Stop loss degisti: ",pozitifstoploss_buy)
    print("Ana stop loss değişti",anastoplos_buy)
    
    else:
    print("ana stop loss:",anastoplos_sell,"pozitif stop loss:",pozitifstoploss_sell)
    if current_price > anastoplos_sell:
    print("Stop oldun sat")
    break
    if current_price < pozitifstoploss_sell:
    print("Trailling Stop Loss Aktif Sell")
    higher_stop_sell = current_price < pozitifstoploss_sell
    lower_stop_sell = current_price > pozitifstoploss_sell
    if higher_stop_sell:
    print("Higher : ", higher_stop_sell)
    anastoplos_sell = __set_stop_loss(current_price,stoploss,kaldirac,pozisyon)
    pozitifstoploss_sell = __set_stop_loss(current_price,trailing_stop_positive_offset,kaldirac,"buy")
    print("Stop loss degisti: ",pozitifstoploss_sell)
    print("Ana stop loss değişti",anastoplos_sell)
    
        time.sleep(3)