Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wiseplat
GitHub Repository: wiseplat/python-code
Path: blob/master/ invest-robot-contest_tinkoff_invest_competition-master/app/main.py
7800 views
1
import daily_check_functions
2
import daily_buy_functions
3
import config
4
import parameters_of_trading
5
import schedule
6
import time
7
import pandas as pd
8
import datetime
9
10
11
def robot_day_traider():
12
directory = '/files/'
13
order_for_sale = daily_check_functions.CheckRobot2_0(directory + 'test_steven_cat.txt', 0).get_all_orders()
14
if order_for_sale == -1:
15
daily_check_functions.CheckRobot2_0(directory + 'test_steven_cat.txt', 1).message_alarm()
16
elif order_for_sale == 1:
17
df_all_orders_for_analysis = daily_check_functions.CheckRobot2_0(directory + 'test_steven_cat.txt', 0).get_all_for_sell()
18
output_value, figi_, total, price, payment = daily_check_functions.CheckRobotSellOrder(parameters_of_trading.profit_value(), df_all_orders_for_analysis).make_do_order()
19
20
if output_value == 0:
21
daily_check_functions.MakeOrders(output_value, figi_, total, price, order_response_sell = '', log_file_address = directory + 'test_steven_cat.txt').update_data_and_send_to_bot()
22
elif output_value == 1:
23
order_response_sell = client2.orders.orders_limit_order_post(figi = figi_, limit_order_request={"lots": total, "operation": 'Sell', "price": price})
24
daily_check_functions.MakeOrders(output_value, figi_, total, price, order_response_sell, log_file_address = directory + 'test_steven_cat.txt').update_data_and_send_to_bot()
25
elif output_value == 2:
26
order_response_sell = client2.orders.orders_limit_order_post(figi = figi_, limit_order_request={"lots": total, "operation": 'Sell', "price": price})
27
daily_check_functions.MakeOrders(output_value, figi_, total, price, order_response_sell, log_file_address = directory + 'test_steven_cat.txt').update_data_and_send_to_bot()
28
elif output_value == -1:
29
daily_check_functions.MakeOrders(output_value, figi_, total, price, order_response_sell = '', log_file_address = directory + 'test_steven_cat.txt').update_data_and_send_to_bot()
30
"""Возможное добавление усреднений"""
31
if total != 0:
32
number_of_stocks = parameters_of_trading.position_of_stocks(price, limit_of_step)
33
status_of_potential_average, figi_, number_of_stocks, curr_price = daily_check_functions.CheckRobotSellOrderAveraging(address_of_positions = directory + 'test_steven_cat.txt', address_of_progons = directory + 'all_progons.txt', price = price, position_limit = parameters_of_trading.limit_all_position(), rsi_threshold = parameters_of_trading.limit_rsi_on_stock(), number_of_stocks = number_of_stocks).make_do_average_order()
34
if status_of_potential_average == 1:
35
sell_price_after_average = parameters_of_trading.sell_after_average_price_evalute(parameters_of_trading.profit_value(), price, payment, total, parameters_of_trading.limit_of_step_average())
36
MakeBuyAverageOrder(figi = figi_, lots_of_average = number_of_stocks, current_price = curr_price, total = total, price = price, log_file_address = log_file_address, evalute_sell_price_after_average = sell_price_after_average).make_order_average_buy()
37
38
39
def robot_buy_traider(limit_ticker):
40
directory = '/files/'
41
figi, ticker, avg_threshold, avg_RSI, price, index_quantille, index_quantille2, min_price_tendention, param_frequency, first_buy_flg = RobotSearcherAndFirstBuy(limit_ticker = limit_ticker, directory = directory).daily_searcher()
42
if first_buy_flg == 'FirstBuyCondition':
43
lots = parameters_of_trading.lots_of_first_buy(price)
44
FirstBuyBot(figi = figi, lots = lots, price = price, directory = directory).potential_first_buy()
45
46
47
48
49
if __name__ == '__main__':
50
51
52
"""Выгрузка DataFrame по нужным тикерам по дню"""
53
limit_ticker = pd.read_csv('/files/df_of_possible_tickers.txt')
54
"""Утренняя постановка ордера на премаркете"""
55
robot_day_traider()
56
while True:
57
if datetime.datetime.now().hour <= 17:
58
"""Ждать каждые 5 минут до начала основной сессии + 30 минут (30 минут берется для дисбаланса рынка и для времени
59
расчета min_price_tendention"""
60
time.sleep(5*60)
61
else:
62
schedule.every().day.at('23:05').do(parameters_of_trading.exit)
63
schedule.every(6).minutes.do(robot_day_traider)
64
schedule.every(5).minutes.do(robot_buy_traider)
65
while True:
66
schedule.run_pending()
67
68
69
70
71
72
73
74
75
76