-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.py
372 lines (328 loc) · 17.8 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
import winsound
import ccxt
import pandas as pd
import config
from ta.trend import EMAIndicator,MACD,CCIIndicator
from ta.momentum import RSIIndicator,StochRSIIndicator
from ta.volatility import bollinger_mavg
from binance.client import Client
import keyboard
import pyautogui
#değerlerin alınması
#slowEMAValue = input("Yavaş Ema: ")
#fastEMAValue = input("Hızlı Ema: ")
pozisyondami = False
shortPozisyonda = False
longPozisyonda = False
alinacak_miktar = 0
zarar_edildi=2
kar_miktari=1.5
unrealizedProfit = 0
leverage=25
index=855
#coin = input("lütfen coin giriniz: ")
#coin =coin.upper()
client = Client(config.apiKey, config.secretKey)
exchange_info = client.get_exchange_info()
allCoins = []
coins = []
cout=0
arraylen=0
symbol = 'BTCUSDT'
coin_bulundu=True
# API CONNECT
exchange = ccxt.binance({
"apiKey": config.apiKey,
"secret": config.secretKey,
'options': {
'defaultType': 'future'
},
# ban yememek için geçilen bir parametre
'enableRateLimit': True,
})
markets = exchange.load_markets()
for i in markets:
#markets[i]["id"]=='BTCUSDT':
if markets[i]["quoteId"]=='USDT':
allCoins.append(markets[i]["id"])
coins.append(markets[i])
arraylen = len(allCoins)
print("Toplam coin sayısı: ", arraylen)
while True:
try:
balance = exchange.fetch_balance()
trades = exchange.fetch_my_trades(symbol)
free_balance = exchange.fetch_free_balance()
positions = balance['info']['positions']
current_positions = [position for position in positions if
float(position['positionAmt']) != 0 and position['symbol'] == symbol]
position_bilgi = pd.DataFrame(current_positions,
columns=["symbol", "entryPrice", "unrealizedProfit", "isolatedWallet",
"positionAmt", "positionSide"])
if not position_bilgi.empty:
coin_bulundu=False
print("paranın durumu: ", unrealizedProfit)
else:
coin_bulundu=True
if coin_bulundu==True:
if cout < arraylen-1:
cout = cout + 1
print("cout: ",cout)
print("array len: ",arraylen)
print("şuan taranan sıra: ",cout , " coin: ",symbol)
print("serbest USDT: ",free_balance["USDT"])
symbol = allCoins[cout]
if arraylen-1 == cout:
print("bütün elemanlar gezildi başa dönülüyor...")
cout = 0
# LOAD BARS
#minutes bars
minute_bars = exchange.fetch_ohlcv(symbol=symbol, timeframe='1m', since=None,limit=1500)
df_minute_bars = pd.DataFrame(minute_bars,columns=["timestamp", "open", "high", "low", "close", "volume"])
volume=df_minute_bars["volume"][len(df_minute_bars.index) - 1]
print(volume)
#three minutes bars
three_minutes_bars =exchange.fetch_ohlcv(symbol=symbol, timeframe='3m', since=None,limit=1500)
df_three_minutes_bars = pd.DataFrame(three_minutes_bars,columns=["timestamp", "open", "high", "low", "close", "volume"])
#five minutes bars
five_minutes_bars =exchange.fetch_ohlcv(symbol=symbol, timeframe='5m', since=None,limit=1500)
df_five_minutes_bars = pd.DataFrame(five_minutes_bars,columns=["timestamp", "open", "high", "low", "close", "volume"])
#15 minutes bars
fifteen_minutes_bars = exchange.fetch_ohlcv(symbol=symbol, timeframe='15m', since=None,limit=1500)
df_fifteen_minutes_bars = pd.DataFrame(fifteen_minutes_bars,columns=["timestamp", "open", "high", "low", "close", "volume"])
#1 hour bars
one_hour_bars = exchange.fetch_ohlcv(symbol=symbol, timeframe='1h', since=None,limit=1500)
df_one_hour_bars = pd.DataFrame(one_hour_bars,columns=["timestamp", "open", "high", "low", "close", "volume"])
#4 hours bars
four_hours_bars = exchange.fetch_ohlcv(symbol=symbol, timeframe='4h', since=None, limit=1500)
df_four_hours_bars = pd.DataFrame(four_hours_bars, columns=["timestamp", "open", "high", "low", "close", "volume"])
# day bars
day_bars = exchange.fetch_ohlcv(symbol=symbol, timeframe='1d', since=None, limit=1500)
df_day_bars = pd.DataFrame(day_bars, columns=["timestamp", "open", "high", "low", "close", "volume"])
#load slow ma
#4 saatlik
slow_MA = bollinger_mavg(df_four_hours_bars["close"],50)
df_four_hours_bars["Slow MA"]=slow_MA
#load fast ma
#4 saatlik
fast_MA = bollinger_mavg(df_four_hours_bars["close"],200)
df_four_hours_bars["Fast MA"] = fast_MA
#fast ma nın bulunması
son_fast_ma = df_four_hours_bars["Fast MA"][len(df_four_hours_bars.index)-1]
#slow ma nın bulunması
son_slow_ma = df_four_hours_bars["Slow MA"][len(df_four_hours_bars.index)-1]
#load Slow EMA
# 1 dakikalık slow EMA
slow_EMA = EMAIndicator(df_minute_bars["close"],50)
df_minute_bars["Slow Ema"] = slow_EMA.ema_indicator()
#3 dakikalık slow EMA
slow_EMA = EMAIndicator(df_three_minutes_bars["close"], 50)
df_three_minutes_bars["Slow Ema"] = slow_EMA.ema_indicator()
#5 dakikalık slow EMA
slow_EMA = EMAIndicator(df_five_minutes_bars["close"], 50)
df_five_minutes_bars["Slow Ema"] = slow_EMA.ema_indicator()
#15 dakikalık slow EMA
slow_EMA = EMAIndicator(df_fifteen_minutes_bars["close"],50)
df_fifteen_minutes_bars["Slow Ema"] = slow_EMA.ema_indicator()
#load Fast EMA
#1 dakikalık
fast_EMA = EMAIndicator(df_minute_bars["close"], 13)
df_minute_bars['Fast Ema'] = fast_EMA.ema_indicator()
#3 dakikalık
fast_EMA = EMAIndicator(df_three_minutes_bars["close"], 13)
df_three_minutes_bars['Fast Ema'] = fast_EMA.ema_indicator()
#5 dakikalık
fast_EMA = EMAIndicator(df_five_minutes_bars["close"], 13)
df_five_minutes_bars['Fast Ema'] = fast_EMA.ema_indicator()
#15 saatlik
fast_EMA = EMAIndicator(df_fifteen_minutes_bars["close"],13)
df_fifteen_minutes_bars['Fast Ema'] = fast_EMA.ema_indicator()
#fast emaların belirlenmesi
#1 dakikalık fast ema
one_minutes_son_fast_ema = df_minute_bars["Fast Ema"][len(df_minute_bars.index) - 1]
one_minutes_sondan_birinci_fast_ema = df_minute_bars["Fast Ema"][len(df_minute_bars.index) - 2]
one_minutes_sondan_ikinci_fast_ema = df_minute_bars["Fast Ema"][len(df_minute_bars.index) - 3]
#3 dakikalık fast ema
three_minutes_son_fast_ema = df_three_minutes_bars["Fast Ema"][len(df_three_minutes_bars.index) - 1]
three_minutes_sondan_birinci_fast_ema = df_three_minutes_bars["Fast Ema"][len(df_three_minutes_bars.index) - 2]
three_minutes_sondan_ikinci_fast_ema = df_three_minutes_bars["Fast Ema"][len(df_three_minutes_bars.index) - 3]
#5 dakikalık fast ema
five_minutes_son_fast_ema = df_five_minutes_bars["Fast Ema"][len(df_five_minutes_bars.index) - 1]
five_minutes_sondan_birinci_fast_ema = df_five_minutes_bars["Fast Ema"][len(df_five_minutes_bars.index) - 2]
five_minutes_sondan_ikinci_fast_ema = df_five_minutes_bars["Fast Ema"][len(df_five_minutes_bars.index) - 3]
#15 dakikalık fast ema
fiftenn_minutes_son_fast_ema = df_fifteen_minutes_bars["Fast Ema"][len(df_fifteen_minutes_bars.index)-1]
fiftenn_minutes_sondan_birinci_fast_ema = df_fifteen_minutes_bars["Fast Ema"][len(df_fifteen_minutes_bars.index)-2]
fiftenn_minutes_sondan_ikinci_fast_ema = df_fifteen_minutes_bars["Fast Ema"][len(df_fifteen_minutes_bars.index)-3]
#slow emaların belirlenmesi
# 1 dakikalık fast ema
one_minutes_son_slow_ema = df_minute_bars["Slow Ema"][len(df_minute_bars.index) - 1]
one_minutes_sondan_birinci_slow_ema = df_minute_bars["Slow Ema"][len(df_minute_bars.index) - 2]
one_minutes_sondan_ikinci_slow_ema = df_minute_bars["Slow Ema"][len(df_minute_bars.index) - 3]
# 3 dakikalık fast ema
three_minutes_son_slow_ema = df_three_minutes_bars["Slow Ema"][len(df_three_minutes_bars.index) - 1]
three_minutes_sondan_birinci_slow_ema = df_three_minutes_bars["Slow Ema"][len(df_three_minutes_bars.index) - 2]
three_minutes_sondan_ikinci_slow_ema = df_three_minutes_bars["Slow Ema"][len(df_three_minutes_bars.index) - 3]
# 5 dakikalık fast ema
five_minutes_son_slow_ema = df_five_minutes_bars["Slow Ema"][len(df_five_minutes_bars.index) - 1]
five_minutes_sondan_birinci_slow_ema = df_five_minutes_bars["Slow Ema"][len(df_five_minutes_bars.index) - 2]
five_minutes_sondan_ikinci_slow_ema = df_five_minutes_bars["Slow Ema"][len(df_five_minutes_bars.index) - 3]
#15 dakikalık saatlik
fiftenn_minutes_son_slow_ema = df_fifteen_minutes_bars["Slow Ema"][len(df_fifteen_minutes_bars.index) - 1]
fiftenn_minutes_sondan_birinci_slow_ema = df_fifteen_minutes_bars["Slow Ema"][len(df_fifteen_minutes_bars.index) - 2]
fiftenn_minutes_sondan_ikinci_slow_ema = df_fifteen_minutes_bars["Slow Ema"][len(df_fifteen_minutes_bars.index) - 3]
#ema farklarının mutlağının bulunması
one_minutes_ema_farklari = one_minutes_son_fast_ema - one_minutes_son_slow_ema
one_minutes_ema_farklari = abs(one_minutes_ema_farklari)
threee_minutes_ema_farklari=three_minutes_sondan_birinci_fast_ema - three_minutes_sondan_birinci_slow_ema
threee_minutes_ema_farklari = abs(threee_minutes_ema_farklari)
five_minutes_ema_farklari=five_minutes_sondan_birinci_fast_ema - five_minutes_sondan_birinci_slow_ema
five_minutes_ema_farklari = abs(five_minutes_ema_farklari)
fiftenn_minutes_ema_farklari=fiftenn_minutes_sondan_birinci_fast_ema - fiftenn_minutes_sondan_birinci_slow_ema
fiftenn_minutes_ema_farklari = abs(fiftenn_minutes_ema_farklari)
#print("mutlak ema farkı: ",mutlak_ema_farklari)
#RSI değerlerinin bulunması
#rsi 35 ile 65 sınırları
#dakikaklık
rsi_value = RSIIndicator(df_minute_bars["close"], window=30)
df_minute_bars["Slow RSI"] = rsi_value.rsi()
son_rsi = df_minute_bars["Slow RSI"][len(df_minute_bars.index) - 1]
#MACD Değerlerinin bulunması
# 4 saatlik
MACD_value = MACD(df_fifteen_minutes_bars["close"],window_slow=26,window_fast=33,window_sign=15)
df_fifteen_minutes_bars["MACD SIGNAL"] = MACD_value.macd_signal()
df_fifteen_minutes_bars["MACD DIFF"] = MACD_value.macd_diff()
df_fifteen_minutes_bars["MACD"] = MACD_value.macd()
son_MACD = df_fifteen_minutes_bars["MACD"][len(df_fifteen_minutes_bars.index) - 1]
son_MACD_signal = df_fifteen_minutes_bars["MACD SIGNAL"][len(df_fifteen_minutes_bars.index) - 1]
son_MACD_diff = df_fifteen_minutes_bars["MACD DIFF"][len(df_fifteen_minutes_bars.index) - 1]
#CCI değerlerinin bulunması
# 1 dakikalık
CCI_Value=CCIIndicator(high=df_minute_bars["high"],low=df_minute_bars["low"],close=df_minute_bars["close"],window=50)
df_minute_bars["CCI"]=CCI_Value.cci()
#-185 ile + 185 arasında değişiyor
son_CCI = df_minute_bars["CCI"][len(df_minute_bars.index) - 1]
# Pozisyonda olup olmadığını kontrol etme
if not position_bilgi.empty and position_bilgi["positionAmt"][len(position_bilgi.index) - 1] != 0:
print("pozisyondamı:",pozisyondami)
pozisyondami = True
coin_bulundu=False
else:
coin_bulundu=True
pozisyondami = False
shortPozisyonda = False
longPozisyonda = False
# Long pozisyonda mı?
if pozisyondami and float(position_bilgi["positionAmt"][len(position_bilgi.index) - 1]) > 0:
longPozisyonda = True
shortPozisyonda = False
coin_bulundu=False
# Short pozisyonda mı?
if pozisyondami and float(position_bilgi["positionAmt"][len(position_bilgi.index) - 1]) < 0:
shortPozisyonda = True
longPozisyonda = False
coin_bulundu=False
#long Enter
def longEnter(alinacak_miktar):
print(coins[cout]['symbol'] ," Long enter")
order = exchange.create_market_buy_order(coins[cout]['symbol'] , alinacak_miktar)
print("\a")
coin_bulundu==False
# LONG EXIT
def longExit():
print(coins[cout]['symbol'] ," Long exit")
order = exchange.create_market_sell_order(coins[cout]['symbol'], float(
position_bilgi["positionAmt"][len(position_bilgi.index) - 1]), {"reduceOnly": True})
print("\a")
coin_bulundu==False
#short enter
def shortEnter(alinacak_miktar):
print(coins[cout]['symbol'] ," short enter")
order = exchange.create_market_sell_order(coins[cout]['symbol'] , alinacak_miktar)
print("\a")
coin_bulundu==False
# short çık
def shortExit():
print(coins[cout]['symbol'] ," short exit")
order = exchange.create_market_buy_order(coins[cout]['symbol'],
float(position_bilgi["positionAmt"][len(position_bilgi.index) - 1]) * -1, {"reduceOnly": True})
print("\a")
coin_bulundu==False
alinacak_miktar = (float(free_balance["USDT"]) * float(leverage)) / float(
df_minute_bars["close"][len(df_minute_bars.index) - 1])
print(alinacak_miktar)
#short gir
if (one_minutes_son_fast_ema > one_minutes_son_slow_ema \
and three_minutes_sondan_birinci_fast_ema > three_minutes_sondan_birinci_slow_ema \
and five_minutes_sondan_birinci_fast_ema > five_minutes_sondan_birinci_slow_ema \
and fiftenn_minutes_sondan_birinci_fast_ema < fiftenn_minutes_sondan_birinci_slow_ema) \
and one_minutes_ema_farklari > threee_minutes_ema_farklari > five_minutes_ema_farklari \
and shortPozisyonda == False:
coin_bulundu=False
alinacak_miktar = ((float(free_balance["USDT"])) * float(leverage)) / float(
df_minute_bars["close"][len(df_minute_bars.index) - 1])
if longPozisyonda:
print(coins[cout]," LONG İŞLEMDEN ÇIKILIYOR...")
longExit()
print(coins[cout]," SHORT İŞLEME GİRİLİYOR...")
shortEnter(alinacak_miktar)
#long gir
# and son_CCI <= -180 \
# and son_rsi <= 37 \
if (one_minutes_son_fast_ema < one_minutes_son_slow_ema \
and three_minutes_sondan_birinci_fast_ema < three_minutes_sondan_birinci_slow_ema \
and five_minutes_sondan_birinci_fast_ema < five_minutes_sondan_birinci_slow_ema \
and fiftenn_minutes_sondan_birinci_fast_ema>fiftenn_minutes_sondan_birinci_slow_ema)\
and one_minutes_ema_farklari>threee_minutes_ema_farklari>five_minutes_ema_farklari \
and longPozisyonda == False :
alinacak_miktar = ((float(free_balance["USDT"])) * float(leverage)) / float(
df_minute_bars["close"][len(df_minute_bars.index) - 1])
coin_bulundu=False
if shortPozisyonda:
print(coins[cout]['symbol']," SHORT İŞLEMDEN ÇIKILIYOR...")
shortExit()
print(coins[cout]['symbol']," LONG İŞLEME GİRİLİYOR...")
longEnter(alinacak_miktar)
#alınacak miktarın hesaplanması
alinacak_miktar = (((float(free_balance["USDT"]) / 100) * 100) * float(leverage)) / float(
df_minute_bars["close"][len(df_minute_bars.index) - 1])
#işlem varsa
if not position_bilgi.empty:
unrealizedProfit=position_bilgi["unrealizedProfit"][len(position_bilgi.index) - 1]
unrealizedProfit=float(unrealizedProfit)
if unrealizedProfit < -0.15 and shortPozisyonda:
zarar_edildi=zarar_edildi+1
if zarar_edildi>1:
kar_miktari=1
print(coins[cout]['symbol']," zarar önleniyor short pozisyondan çıkılıyor...")
coin_bulundu==False
shortExit()
if unrealizedProfit < -0.15 and longPozisyonda:
zarar_edildi=zarar_edildi+1
if zarar_edildi>1:
kar_miktari=1
print(coins[cout]['symbol']," zarar önleniyor long pozisyondan çıkılıyor...")
coin_bulundu==False
longExit()
if unrealizedProfit >= 0.5 and shortPozisyonda:
print(coins[cout]['symbol']," kar alınıyor short pozisyondan çıkılıyor...")
coin_bulundu==False
shortExit()
if unrealizedProfit >= 0.5 and longPozisyonda :
print(coins[cout]['symbol'],",kar alınıyor long pozisyondan çıkılıyor...")
longExit()
if pozisyondami == False:
print("POZİSYON ARANIYOR...",symbol)
if shortPozisyonda:
print(symbol," SHORT POZİSYONDA BEKLİYOR...",free_balance["USDT"])
coin_bulundu=False
if longPozisyonda:
print(symbol," LONG POZİSYONDA BEKLİYOR...",free_balance["USDT"])
coin_bulundu=False
except ccxt.BaseError as Error:
print("hata alınan coin..." ,allCoins[cout]," ",coins[cout]['symbol'] )
#allCoins.remove(allCoins[cout-1])0
#coins.remove(coins[cout-1])
#arraylen=arraylen-1
print("[ERROR] ", Error)
continue