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)