Galts-Gulch / avarice

Multi-Indicator Python3 OKCoin CN & Intl Trading Bot/Infrastructure
Other
91 stars 29 forks source link

Major Rewrite in Progress #31

Open RealJohnGalt opened 9 years ago

RealJohnGalt commented 9 years ago

I've decided to change the direction of Avarice a bit after being rather aimless with this project for quite some time.

After getting new threaded/locking API code half done, I decided to redo most of Avarice to be fully threaded. I'm also working on a gtk3 gui and a layer between gui, threads, config files, and logging to support new native gui easier. This will additionally allow multiple indicator instances to run side by side if used in a "preset" (described below).

Next I'll be redoing configobj support in the layer to support reading config presets. Any new indicator level configuration (combined configuration for trading) will be written to a preset in this path. At launch, you may select which created presets you which to run, and they'll be run separately.

I'm starting with the gtk3 gui (using pygobject) so I can see the progress imediately and be better motivated on the project.

To reiterate and summarize:

(after some release at this point):

I still believe that with a decent interface, there are many traders who want something easy to configure with trade strategy presets, but don't want to give their API keys to a web trading platform.

RealJohnGalt commented 9 years ago

As a note: I considered using TK or Wx for the interface, but the problem is aesthetics. I believe it would be better to use a layer to bridge the gap between the GUI code, and use pygobject for gtk3 support in linux (get the pretty gnome/ubuntuisms). OSX users could get a cocoa interface using PyObjc, and Pythonwin (or a "less native" gui) could be used for windows.

Realistically due to userbase, it would go Linux pygobject => windows => osx. After step 4 in the summary above, it would be rather quick to sychronously work on windows and osx support however.

ghost commented 9 years ago

Sounds like a pretty ambitious project. I'm here and will help bug test if you need anything. I can't code for shit, but I'm pretty decent at finding glitches. :)

RealJohnGalt commented 9 years ago

Thank you, I always appreciate the help.

I have the base for the topmost bullet done. Onto the second and third for now since I'm a bit more motivated seeing something pretty :).

The HeaderBar "Start/Stop" button is a ToggleButton. It will start/stop main thread on toggle.

wip gtk3 base

ghost commented 9 years ago

Looks good. It's clean and functional. can't wait to try it.

RealJohnGalt commented 9 years ago

Ty @Hapexamendios.

Update:

Example of grid filled with fake data (didn't want to run)

Edit: Just noticed we need to also store and include trade time.

RealJohnGalt commented 9 years ago

gui-prep branch for some of the backend work I've committed/merged. I'm holding off on the new (very wip) websocket api for now (though I might need to merge it in sooner due to some threading asyncio loop issues I've run into).

RealJohnGalt commented 9 years ago

start/stop functionality now working with a new process. screenshot from 2015-08-29 01-34-11

RealJohnGalt commented 9 years ago

I'm working on the Trade Indicator selection page now and attempting to make it as intuitive as possible. I'm also getting the gui layer setup for configurables using dictionaries and lists for serving options/descriptions.

The Trade Indicator selection page has all indicators listed down the left side of the page, with "combine" and "independent" checkboxes on the right. There are "New," "Save," and "Remove" buttons which add/remove at the top depending on configuration. You can select indicators to combine, then independent indicators, and click "Save," then start all over if "New" is clicked again. You can remove the previous configuration by clicking "Remove" next to the listed configuration.

I'm having a hard time coming up with a good name for this page. I don't believe that "Trade Indicators" is a very good name any longer. Any suggestions?

ghost commented 9 years ago

Hmmm Indicator index? :)

RealJohnGalt commented 9 years ago

Thank you @Hapexamendios .

I like it better than "Trade Indicators," but I don't think it describes the functionality for setting the indicators to be used. I just came up with a new idea though.

What do you think of "Indicator Strategy," or "Indicator Strategies?" Something like "Trade Strategy" seems to be most descriptive, but I don't want people to think it only applies to trader and not simulator. I might be over thinking this though :).

Anyway, I'm open to as many ideas as you can throw out. It will be a bit before this is completely ready for release, so names can change easily.

RealJohnGalt commented 9 years ago

What about just "Strategy" or "Strategies"?

ghost commented 9 years ago

I like strategies. :)

RealJohnGalt commented 9 years ago

It's decided :+1:

Regarding the "rewrite," it's going to be rather minor at first. I'm focusing on getting the GUI layer done and integrated. From there I'll be working on threading, making indicators take arguments, and store in separate keys using arguments. Former capabilities will be used for preset support to allow running multiple instances of an indicator with differing configurations.

I'd like to end up with a repo of preset strategies the GUI layer can pull from. If a user would like to share a strategy preset, they may do so with a pull request on the repo.

Preset support is going to be the absolute last to be completed. After preset support, windows and osx GUIs will be thrown together using GUI layer.

RealJohnGalt commented 9 years ago

Indicator configuration page and indicator configuration backend (guilayer) nearly complete (https://github.com/Galts-Gulch/avarice/commits/gui-prep). Strategies page up next, then general configuration page/backend.

RealJohnGalt commented 9 years ago

screenshot from 2015-09-02 00-36-48

Indicator page getting there. Needs some guilayer work for adjustment sizes for SpinButtons, layout work (divider underneath Indicator row for instance), ComboBox types added, buttons sorted in a more sane manner (like config.ini), and defaults loaded for each button type. All indicator pages are generated from guilayer to make the code more portable for different gui.

Once I have a good structure, the general configuration page will be quick to hammer out. The only difference will be a stack_switcher (like the history tab in previous images) for General Configuration. Due to the number of indicators, this wasn't a good option for Indicators.

Indicator page uses a hidden notebook for each indicator. indicator pages are stored in an auto scroll window. Changing the Indicator ComboBox changes the notebook page and ComboBox default on the selected page.

RealJohnGalt commented 9 years ago

I've been rather busy recently, but almost have the GUI and gui-prep complete :+1:

Edit: have a few new TODOs including "restart" prompts on configuration changes, gtk3 notifier support, and some threading improvements.

aehaynes commented 9 years ago

Good stuff!

RealJohnGalt commented 9 years ago

Thanks man.

New TODO:

After first release:

Also, will probably reset versioning entirely and be saner about it. I don't want to give people the wrong idea about the project.

RealJohnGalt commented 8 years ago

Yes, this is still a WIP. I got held up with real work, trading, and getting a decent API figured out.

ghostnegotiator commented 8 years ago

This is definitely interesting, I am hoping I can contribute soon! :+1: