Перейти к публикации
Форум ботоводов

Какой GUI легче всего прикрутить к ботам?


Рекомендованные сообщения

Было бы интересно прочитать статью об использовании того или иного варианта GUI для совместной работы с ботом. Например для наглядной выдачи информации о текущей ситуации по торгуемым монетам. Ну, например - доходность на текущий момент, в какой  стадии работы находится бот - покупает/ продает.  Вывод текущего курса и тд, много чего можно  сделать. Так что бы на одном экране была видна нужная информация.  Можно добавить и то или иное управление  ботом, например  - вкл/выключить  ту или иную монету( из списка имеющегося в config), изменить заданный профит,  переключить стратегию, ну и тд

Обмен с ботом можно вести через БД.  Вопрос в том, какую GUI лучше прикрутить - их,  я посмотрел  - более десятка как минимум. Может быть есть опыт практичесокй работы с тем или иным GUI.

Ссылка на сообщение
Поделиться на других сайтах
  • 4 weeks later...

Я в основном делаю через веб, это удобно, когда например бота переносишь на облако и управляешь им потом с телефона. Правда при этом приходится писать больше кода, и не всегда на питоне.. Но зато универсально и кроссплатформенно

Ссылка на сообщение
Поделиться на других сайтах

 

01.03.2020 в 16:19, admin сказал:

Я в основном делаю через веб, это удобно, когда например бота переносишь на облако и управляешь им потом с телефона. Правда при этом приходится писать больше кода, и не всегда на питоне.. Но зато универсально и кроссплатформенно

можешь сделать статью или цикл статей как делать привязку бота к вебу?

Ссылка на сообщение
Поделиться на других сайтах
  • 2 weeks later...

Вопрос, что продразумевает фраза  "перевод  бота в облако".  Можно по конкретней?

Что касается Web - то же пришел к аналогичному выводу.  Сделать  управление  локальным ботом  на питоне  через  web страничку, которая    то же на локальном сервере

Если надо, можно  дать к ней доступ и извне.

Эта страничка:

1)    будет отображать необходимую информацию  о данных  по работе бота,  профит, курсы, количество открытых ордеров, выбор стратегии Шорт/Лонг/флет,    итд и тп

2)  будет управлять таблицей  в БД, из которой Бот получает  данные для работы ( то, что сейчас бот берет из текстового файла config.py) и при каждом цикле опроса

  фактически будет устанавливать заданные вами параметры работы, например  процент профита, размер мимниального ордера.

 

Сразу на одной странице управление/отображение всеми парами.  Мне кажется это удобно, оперативно, и информативно. 

 

Ссылка на сообщение
Поделиться на других сайтах

Ну вот и напиши как сделать управление питонботом через веб страницу. Пусть и на локальном сервере. По аналогии с Андреем. С объяснением, с картинками...

Ссылка на сообщение
Поделиться на других сайтах
  • 2 months later...

В Питоне есть Ткинтер, вот в нем и стоит сделать ГЮИ

# Биткоин тикер, отображает курс БТЦ к Тезер на бирже Бинанс
from tkinter import *
from tkinter.ttk import *
import json
import time
import requests
# создание окна tkinter

root = Tk()
root.title('BTC USDT Binance')
# Эта функция используется для
# отображать курса биткоин на этикетке
def ticker():

    try:
        b=requests.get('https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT') # сюда можно вставить другую пару
        lastprice = float(json.loads(b.text)["price"])
        print(lastprice)
        string = str(lastprice)
        lbl.config(text = string)
        lbl.after(500, ticker)
    except requests.ConnectionError:
        print ("Error CONNECT")
        pass
        lbl.after(100, ticker)
# Стилизуем виджет метки так, чтобы тикер
# выглядел более привлекательно
lbl = Label(root, font = ('calibri', 200, 'bold'),

            background = '#002137',
            foreground = 'orange')
# Размещение в центре
# окна tkinter
lbl.pack(anchor = 'center')

ticker()
mainloop() # для чего это не знаю, может работать и без этой строки

clockrest!.exe

Ссылка на сообщение
Поделиться на других сайтах
  • 2 weeks later...
05.02.2020 в 02:30, ZergeZ сказал:

Было бы интересно прочитать статью об использовании того или иного варианта GUI для совместной работы с ботом. Например для наглядной выдачи информации о текущей ситуации по торгуемым монетам. Ну, например - доходность на текущий момент, в какой  стадии работы находится бот - покупает/ продает.  Вывод текущего курса и тд, много чего можно  сделать. Так что бы на одном экране была видна нужная информация.  Можно добавить и то или иное управление  ботом, например  - вкл/выключить  ту или иную монету( из списка имеющегося в config), изменить заданный профит,  переключить стратегию, ну и тд

Обмен с ботом можно вести через БД.  Вопрос в том, какую GUI лучше прикрутить - их,  я посмотрел  - более десятка как минимум. Может быть есть опыт практичесокй работы с тем или иным GUI.

Вот сделал с использованием Tk и SQLite  "Так что бы на одном экране была видна нужная информация."

В бота вставил блок, который загоняет данные (курс, стратегию, стоплосс/трейлстоп ит.д. ) в БД, 

  1.  conn = sqlite3.connect("tplong.db")
  2.         cursor = conn.cursor()
  3.         cursor.execute('UPDATE albums SET bidprice = ? , startrate = ? , applied = ?, strategy=?, stoploss=?, amount=?, trailperc=? WHERE id = ?',(bid,settings['startrate'],curr_rate_applied,settings['strategy'],settings['stop_loss_fixed'],settings['amount'],settings['stop_loss_perc'],1))
  4.         conn.commit()
  5.         conn.close()
  6.  
Ссылка на сообщение
Поделиться на других сайтах

Отображение инфы - в отдельном скрипте

 

from tkinter import *
from tkinter.ttk import *
import json
import time
import sqlite3
# создание окна tkinter

root = Tk()

root.title('BTC USDT Binance')
root.geometry("500x500")
root.config(bg="purple")

def tablo():

    conn = sqlite3.connect("tplong.db")
    cursor = conn.cursor()
    cursor.execute('SELECT * FROM albums ')

    raw = cursor.fetchall()
    pr=raw [0]
    print(pr)

    bid=(pr [0])
    bid=float(bid)
    bid=str(bid)
    startrate=float(pr [1])
    startrate=str(startrate)
    appl=str(pr [2])
    sl=str(pr [3])
    strat=(pr [4])
    am=str(pr [5])
    perc=str(pr [6])
    
    lbl.config(text = 'APPLY  ' + appl)
    lbl1.config(text = 'BID  ' + bid)
    lbl2.config(text = 'AMOUNT ' + am)
    lbl3.config(text = 'StopLoss ' + sl)
    lbl4.config(text = 'Strategy  '+strat)
    lbl5.config(text = 'PERC ' + perc)
    lbl6.config(text = 'Startrate ' + startrate)
    
    lbl.after(1000, tablo)

lbl = Label(root, font = ('calibri', 20, 'bold'),
            background = 'purple',
            foreground = 'white')
lbl.place(relx=.25, rely=.01)                        
lbl1 = Label(root, font = ('calibri', 20, 'bold'),
            background = 'purple',
            foreground = 'white')
lbl1.place(relx=.25, rely=.1)
lbl2 = Label(root, font = ('calibri', 20, 'bold'),
            background = 'purple',
            foreground = 'white')
lbl2.place(relx=.25, rely=.2)
lbl3 = Label(root, font = ('calibri', 20, 'bold'),
            background = 'purple',
            foreground = 'white')
lbl3.place(relx=.25, rely=.3)
lbl4 = Label(root, font = ('calibri', 20, 'bold'),
            background = 'purple',
            foreground = 'white')
lbl4.place(relx=.25, rely=.4)
lbl5 = Label(root, font = ('calibri', 20, 'bold'),
            background = 'purple',
            foreground = 'white')
lbl5.place(relx=.25, rely=.5)
lbl6 = Label(root, font = ('calibri', 20, 'bold'),
            background = 'purple',
            foreground = 'white')
lbl6.place(relx=.25, rely=.6)

tablo()
mainloop()

Изменено пользователем Astra
Ссылка на сообщение
Поделиться на других сайтах

Сначала надо создать БД 

import sqlite3

conn = sqlite3.connect ("tplong.db") # или  ':memory:'чтобы сохранить в RAM
cursor = conn.cursor()

# Создание таблицы
cursor.execute("CREATE TABLE albums(bidprice real, startrate real, applied real, stoploss real, strategy text, amount real, trailperc real, id integer )")
cursor.execute("INSERT INTO albums VALUES(1, 0, 700, 0, 'Manager', 1,0,1)")
conn.commit()

Ссылка на сообщение
Поделиться на других сайтах
  • 4 weeks later...
  • 7 months later...
01.03.2020 в 12:19, admin сказал:

Я в основном делаю через веб, это удобно, когда например бота переносишь на облако и управляешь им потом с телефона. Правда при этом приходится писать больше кода, и не всегда на питоне.. Но зато универсально и кроссплатформенно

Андрей а расскажите подробней как это осуществимо, просто сейчас тоже решил заморочаться чем-то подобным и интересно кто как такое делает

Ссылка на сообщение
Поделиться на других сайтах
  • 2 weeks later...

Начал изучать питон, экспериментирую с gui для управления ботом, пока только вот такой вариант получилось сделать -код ниже. В данный момент вопрс в следующем - как привязать это к коду бота, пока получается через него изменять только апи, таймфреймы и всё что можно задать константами, может подскажет кто нубу как изменять значения через gui внутри функции например в настройках индикаторов вот в этом куске кода

if rsi_9[-1] < 70 and rsi_14[-1] < 70 and rsi_21[-1] < 70:
                            # RSI не показывает перекупленности
                            enter_points += 2

ниже код интерфейса

import PySimpleGUI as sg

names = ['1m', '3m', '5m', '15m', '30m', '1h', '2h', '4h', '6h', '8h', '12h', '1d', '3d', '1w', '1M']
operation = ['<', '==', '>']

col = sg.Column([[sg.Frame(layout=[[sg.Text('Api key', size=(16,1)), sg.Input(size=(33, 1))],
                      [sg.Text('Api secret', size=(16,1)), sg.Input(size=(33, 1))],
                      [sg.Text('Telegram token', size=(16,1)), sg.Input(size=(33, 1))],
                      [sg.Text("Timeframe", size=(16,1)), sg.Combo(names, size=(31,1), enable_events=False, key='_LIST_')],
                      [sg.Text("Klines limits", size=(16,1)), sg.Input(size=(33, 1))],
                      [sg.Text("Points to enter", size=(16,1)), sg.Input(size=(33, 1))],
                      [sg.Text("Use open candles", size=(15,1)), sg.CB("Yes")],            
                      [sg.Text("Pairs", size=(16,1)), sg.Output(size=(30,3))],
                      [sg.HorizontalSeparator()],
                      [sg.Text('INDICATORS')],             
                      [sg.HorizontalSeparator()],             
                      [sg.Text(""), sg.Text('Name', size=(8,1)), sg.Text("Operation", size=(9,1)), sg.Text(" Value", size=(7,1)), sg.Text(" Addition", size=(9,1)), sg.Text("Wieght", size=(7,1))],
                      [sg.CB("SMA", size=(7,1)), sg.Combo(operation, size=(6,1), enable_events=False, key='_LIST_'), sg.Input(size=(8, 1)), sg.Input(size=(8, 1)), sg.Input(size=(8, 1))],
                      [sg.CB("MACD", size=(7,1)), sg.Combo(operation, size=(6,1), enable_events=False, key='_LIST_'), sg.Input(size=(8, 1)), sg.Input(size=(8, 1)), sg.Input(size=(8, 1))],
                      [sg.CB("RSI", size=(7,1)), sg.Combo(operation, size=(6,1), enable_events=False, key='_LIST_'), sg.Input(size=(8, 1)), sg.Input(size=(8, 1)), sg.Input(size=(8, 1))],
                      [sg.CB("STOCH", size=(7,1)), sg.Combo(operation, size=(6,1), enable_events=False, key='_LIST_'), sg.Input(size=(8, 1)), sg.Input(size=(8, 1)), sg.Input(size=(8, 1))],
                      [sg.CB("ST+RSI", size=(7,1)), sg.Combo(operation, size=(6,1), enable_events=False, key='_LIST_'), sg.Input(size=(8, 1)), sg.Input(size=(8, 1)), sg.Input(size=(8, 1))],
                      [sg.CB("BB", size=(7,1)), sg.Combo(operation, size=(6,1), enable_events=False, key='_LIST_'), sg.Input(size=(8, 1)), sg.Input(size=(8, 1)), sg.Input(size=(8, 1))],
                      [sg.CB("CCI", size=(7,1)), sg.Combo(operation, size=(6,1), enable_events=False, key='_LIST_'), sg.Input(size=(8, 1)), sg.Input(size=(8, 1)), sg.Input(size=(8, 1))],
                      [sg.CB("MFI", size=(7,1)), sg.Combo(operation, size=(6,1), enable_events=False, key='_LIST_'), sg.Input(size=(8, 1)), sg.Input(size=(8, 1)), sg.Input(size=(8, 1))],
                      [sg.HorizontalSeparator()],
                      [sg.Text('ADD  PAIRS')],             
                      [sg.HorizontalSeparator()],              
                      [sg.Text('Base', size=(16,1)), sg.Input(size=(33, 1))],
                      [sg.Text('Quote', size=(16,1)), sg.Input(size=(33, 1))],
                      [sg.Text('Spend sum', size=(16,1)), sg.Input(size=(33, 1))],
                      [sg.Text('Profit markup', size=(16,1)), sg.Input(size=(33, 1))],
                      [sg.Text('Use stop loss', size=(16,1)), sg.Input(size=(33, 1))],
                      [sg.Text('Stop loss', size=(16,1)), sg.Input(size=(33, 1))],
                      [sg.Text('Active', size=(16,1)), sg.Input(size=(33, 1))],              
                      [sg.Text('Control', size=(16,1)),sg.Button("Save", size=(12, 1)), sg.Button("Add new", size=(12, 1))],
                      [sg.HorizontalSeparator()],
                      [sg.Text('STATE')],             
                      [sg.HorizontalSeparator()],             
                      [sg.Output(size=(48, 10))],              
                      [sg.Button("Start", size=(12, 1)), sg.Button("Stop", size=(12, 1)), sg.Button("Update", size=(12, 1))],             
                      ], title='BINANCE BOT v1.0')],])

layout = [ [col],]

# Position at top left side corner on right hand monitor
window = sg.Window('Binance bot v1.0', layout, size=(410, 1100))

event, value = window.Read()

window.Close()

 

Изменено пользователем Deadhard
Ссылка на сообщение
Поделиться на других сайтах

А к какому  боту прикручиваете? 

Как я себе представляю, бот - это автомат, или полуавтомат, состоящий из элементарный блоков. Нижний уровень - это покупатель (или продавец), задача которого как можно дешевле купить (дороже продать) . Уровень выше - это пара "купи-продай". То есть оператор вручную даёт команду - "поехали!" запускается покупан, когда он купит, запускается продаван. Продал- ждет команды от оператора. 

Третий уровень- это когда наш робот сам решает, когда стартовать.

Теперь про ГУИвизацию. Давайте обсудим, какие параметры должны выводиться на наш дисплей. Я буду рассматривать простейший вариант с трейлстопом.

1. Бид (или АСК)

2. Текущая стратегия (продаём или покупаем) , торговая пара.

3. Изначальный стоплосс (текущий трейлстоп)

4.% трейлинга

5. Некий параметр "curr_rate_applied" - это цена +(-) % (понятно тем, кто разобрал https://bablofil.com/trailing-stop-binance/)

6. ну и конечно же AMOUNT - сколько хотим продать/купить

7. Служебная инфа, например, ошибки соединения или сообщения от биржи о превышении к-ва запросов.

неплохо было бы выводить на график п.п. 1 и 5, (график непрерывный, а не часовые свечи), а, в идеале - ставить отметки на нем своих покупок и продаж

Теперь перейдем к управлению.

1. Пуск -стоп

2. Регулировка п.4 - "%" п.6 "Amount" и, возможно, п.3. 

Ссылка на сообщение
Поделиться на других сайтах

Прикручиваю вот к этому боту https://bablofil.com/bot-dlya-binance-s-indikatorami/ думаю все уже с ним знакомы.

На дисплей пытаюсь вывести только настройки управления ботом, они там в двух файлах config.py и binance_bot.py

а именно: апи, телеграм токен для оповещений (добавил от себя),  настройки таймфреймов, параметры klines_limits, points_to_enter и use_open_candles (это уже сделано) всё задается вручную

, дальше что не получается : задумал сделать настройки индикаторов - не могу заставить изменять например вот эту строчку через гуи

if rsi_9[-1] < 70 and rsi_14[-1] < 70 and rsi_21[-1] < 70: остальные настройки индикаторов аналогично,

засада с добавлением пар через гуи

{
        'base': 'USDT', # Базовая валюта
        'quote': 'BTC', # Квотируемая валюта
        'spend_sum': 10,  # Сколько тратить base каждый раз при покупке quote
        'profit_markup': 1, # Какой навар нужен с каждой сделки?
        'use_stop_loss': False, # Нужно ли продавать с убытком при падении цены
        'stop_loss': 1, # 2%  - На сколько должна упасть цена, что бы продавать с убытком
        'active': True,
    }, т. к. хоть я и научился менять параметры в этом куске кода через гуи, но как добавлять новые пары? у автора просто добавляется необходимое количество таких кусков в код, а как это сделать через гуи, плюс разные настройки на всех парах?

вывод состояния это просто сокращенный вывод лога только купил и продал и warning (как сделать такой вывод уже нашел) нужен больше для того чтоб знать что он вообще работает, ну и кнопки стоп старт и апдейт(обновление базы данных) точнее даже удаление файла binance_db после чего бот пересоздаст этот файл и обновит настройки.

вот в принципе  и всё что я пытаюсь сделать, т.е. это больше управлялка получается из под андроида

Изменено пользователем Deadhard
Ссылка на сообщение
Поделиться на других сайтах

насчет того что написано выше про график я согласен что было бы не плохо, но всё что косается графиков например через matplotlib мне даётся очень трудно да и инфы нормальной мало, а та что есть там чёрт ногу сломит даже с гугл переводчиком

Ссылка на сообщение
Поделиться на других сайтах

пробовал сделать тоже самое управление через телеграм - застрял ровно на этом же (добавление пар и настройки индикаторов )

Изменено пользователем Deadhard
Ссылка на сообщение
Поделиться на других сайтах
  • 2 weeks later...

имхо, добавление пар - красиво, но не столь необходимо на начальном этапе (тру трейдеры работают на 1-2 парах, макс 3х), я бы сконцентрировался на отображении баланса и графике информативном - где аиден текущий стоплосс и мои продажи-покупки

Ссылка на сообщение
Поделиться на других сайтах
  • 2 weeks later...

Кое что недопонял. " это больше управлялка получается из под андроида" - это как? Где крутится сама программа трейдер-бот? На сервере? А как управление происходит, через Socket, Telegram, Mqtt, SQL ? 

Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...