Skip to content

Latest commit

 

History

History
493 lines (369 loc) · 12.8 KB

File metadata and controls

493 lines (369 loc) · 12.8 KB

🤝 Contributing to Pandas-TA GUI Suite

Join Our Educational Programming Community!

⚠️ Educational Learning Project

🎓 LEARNING OPPORTUNITY: Contributing to this project is an excellent way to learn modern Python development, GUI frameworks, and software engineering best practices.

🚫 NOT FOR TRADING: This is an educational project only. All contributions should focus on learning programming concepts, not trading functionality.

📖 Educational Disclaimer


We welcome contributions from learners at all levels! Whether you're a student, self-taught developer, or experienced programmer looking to learn new frameworks, this project offers valuable learning opportunities.

🎓 Learning Through Contributing

Skills You'll Develop:

  • Python Programming: Object-oriented design, error handling, and best practices
  • GUI Development: tkinter desktop applications and event-driven programming
  • Web Frameworks: Streamlit for rapid web application development
  • Data Visualization: Interactive charting with Plotly and data presentation
  • Software Engineering: Version control, testing, documentation, and project structure
  • Open Source Collaboration: Working with Git, GitHub, and community development

📋 Learning Table of Contents

  1. Code of Conduct
  2. Getting Started as a Learner
  3. Types of Learning Contributions
  4. Educational Development Setup
  5. Coding Guidelines for Learners
  6. Submitting Learning Projects
  7. Learning Community

📜 Code of Conduct

This project and everyone participating in it is governed by our Code of Conduct. By participating, you are expected to uphold this code.

Our Standards

Examples of behavior that contributes to a positive environment:

  • Using welcoming and inclusive language
  • Being respectful of differing viewpoints and experiences
  • Gracefully accepting constructive criticism
  • Focusing on what is best for the community
  • Showing empathy towards other community members

Examples of unacceptable behavior:

  • Trolling, insulting/derogatory comments, and personal attacks
  • Public or private harassment
  • Publishing others' private information without explicit permission
  • Other conduct which could reasonably be considered inappropriate

🚀 Getting Started

First Time Contributors

New to open source? Check out these resources:

Finding Ways to Contribute

  1. Browse Issues: Look for issues labeled good first issue or help wanted
  2. Check Discussions: Join conversations about features and improvements
  3. Review Documentation: Help improve guides and examples
  4. Test Features: Try new features and report bugs

🎯 Types of Contributions

🐛 Bug Reports

Before submitting a bug report:

  • Check if the issue already exists
  • Try the latest version
  • Read the TROUBLESHOOTING.md guide

When submitting a bug report, include:

  • Clear, descriptive title
  • Steps to reproduce the issue
  • Expected vs actual behavior
  • System information (OS, Python version, package versions)
  • Screenshots if applicable
  • Error messages (complete stack trace)

Bug Report Template:

**Bug Description**
A clear description of what the bug is.

**Steps to Reproduce**
1. Go to '...'
2. Click on '...'
3. See error

**Expected Behavior**
What you expected to happen.

**Screenshots**
If applicable, add screenshots.

**System Information**
- OS: [e.g., Windows 10, macOS 12.0, Ubuntu 20.04]
- Python Version: [e.g., 3.9.7]
- Package Versions: [run `pip list` and paste relevant packages]

**Additional Context**
Any other context about the problem.

💡 Feature Requests

Before suggesting a feature:

  • Check if it already exists or is planned
  • Consider if it fits the project's scope
  • Think about how it benefits users

When suggesting a feature, include:

  • Clear use case and benefits
  • Detailed description of the feature
  • Examples of how it would work
  • Consider implementation complexity

📝 Documentation Improvements

Documentation contributions are highly valued!

  • Fix typos and grammatical errors
  • Improve clarity and examples
  • Add missing documentation
  • Create tutorials and guides
  • Update outdated information

🔧 Code Contributions

Areas where code contributions are welcome:

  • New technical indicators
  • UI/UX improvements
  • Performance optimizations
  • Mobile interface enhancements
  • Testing and quality assurance
  • Bug fixes and stability improvements

🛠️ Development Setup

Prerequisites

  • Python 3.8 or higher
  • Git
  • Text editor or IDE (VS Code recommended)

Setup Instructions

  1. Fork the Repository

    # Click "Fork" on GitHub, then clone your fork
    git clone https://github.com/YOUR-USERNAME/pandas-ta-gui-suite.git
    cd pandas-ta-gui-suite
  2. Create Virtual Environment

    python -m venv venv
    
    # Activate virtual environment
    # Windows:
    venv\Scripts\activate
    # Mac/Linux:
    source venv/bin/activate
  3. Install Dependencies

    # Install main dependencies
    pip install -r requirements.txt
    
    # Install development dependencies
    pip install pytest pytest-cov black flake8
  4. Verify Installation

    # Test desktop GUI
    python pandas_ta_gui.py
    
    # Test web demo
    streamlit run web_demo.py

Development Environment

Recommended VS Code Extensions:

  • Python
  • Pylance
  • Black Formatter
  • GitLens
  • Markdown Preview Enhanced

VS Code Settings (.vscode/settings.json):

{
    "python.formatting.provider": "black",
    "python.linting.enabled": true,
    "python.linting.flake8Enabled": true,
    "python.testing.pytestEnabled": true
}

📏 Coding Guidelines

Python Style Guide

Follow PEP 8 with these specifics:

  • Line length: 88 characters (Black default)
  • Use Black for automatic formatting
  • Use meaningful variable names
  • Add type hints where helpful
  • Write docstrings for functions and classes

Example Function:

def calculate_rsi(data: pd.DataFrame, period: int = 14) -> pd.Series:
    """
    Calculate Relative Strength Index (RSI).
    
    Args:
        data: DataFrame with OHLCV data
        period: Number of periods for RSI calculation
        
    Returns:
        Series containing RSI values
        
    Raises:
        ValueError: If period is less than 1
    """
    if period < 1:
        raise ValueError("Period must be at least 1")
    
    # Implementation here
    return rsi_series

GUI Development Guidelines

Desktop GUI (tkinter):

  • Follow VS Code theme color scheme
  • Use consistent spacing and padding
  • Implement proper error handling
  • Add status updates for long operations
  • Ensure responsive design

Mobile Web (Streamlit):

  • Mobile-first design approach
  • Touch-friendly interface elements
  • Minimal sidebar usage
  • Fast loading and performance
  • Cross-browser compatibility

Testing Guidelines

Write tests for:

  • New functions and methods
  • Bug fixes
  • Critical functionality
  • Edge cases and error conditions

Test Structure:

import pytest
import pandas as pd
from pandas_ta_gui import PandasTAGUI

class TestPandasTAGUI:
    def test_sample_data_generation(self):
        """Test sample data generation functionality."""
        gui = PandasTAGUI()
        data = gui.generate_sample_data(days=100, start_price=100.0)
        
        assert len(data) == 100
        assert 'Close' in data.columns
        assert data['Close'].iloc[0] == 100.0
    
    def test_indicator_calculation(self):
        """Test technical indicator calculations."""
        # Test implementation
        pass

Documentation Guidelines

Docstring Style (Google format):

def function_name(param1: type, param2: type) -> return_type:
    """Brief description of function.
    
    Longer description if needed. Explain the purpose,
    behavior, and any important details.
    
    Args:
        param1: Description of first parameter.
        param2: Description of second parameter.
        
    Returns:
        Description of return value.
        
    Raises:
        ExceptionType: Description of when this exception is raised.
        
    Example:
        >>> result = function_name("example", 42)
        >>> print(result)
        "expected output"
    """

🔄 Submitting Changes

Pull Request Process

  1. Create Feature Branch

    git checkout -b feature/your-feature-name
    # or
    git checkout -b bugfix/issue-number
  2. Make Changes

    • Write code following our guidelines
    • Add tests for new functionality
    • Update documentation as needed
    • Test your changes thoroughly
  3. Format and Lint

    # Format code with Black
    black .
    
    # Check with flake8
    flake8 .
    
    # Run tests
    pytest
  4. Commit Changes

    git add .
    git commit -m "Add feature: brief description
    
    - Detailed description of changes
    - List specific improvements
    - Reference issue numbers if applicable"
  5. Push and Create PR

    git push origin feature/your-feature-name

    Then create a Pull Request on GitHub.

Pull Request Guidelines

PR Title Format:

  • Add: New feature description
  • Fix: Bug description
  • Update: Documentation/improvement description
  • Refactor: Code improvement description

PR Description Template:

## Summary
Brief description of changes.

## Changes Made
- List of specific changes
- Include any breaking changes
- Note any new dependencies

## Testing
- [ ] Tested on Windows
- [ ] Tested on Mac/Linux
- [ ] Added/updated tests
- [ ] Manual testing completed

## Screenshots
Include screenshots for UI changes.

## Checklist
- [ ] Code follows project style guidelines
- [ ] Documentation updated
- [ ] Tests added/updated
- [ ] No breaking changes (or clearly documented)

Fixes #issue-number

Review Process

  1. Automated Checks: PRs run automated tests
  2. Code Review: Maintainers review code and provide feedback
  3. Discussion: Address any questions or requested changes
  4. Approval: Once approved, PR will be merged

🎪 Community

Communication Channels

  • GitHub Issues: Bug reports and feature requests
  • GitHub Discussions: Questions, ideas, and general discussion
  • Pull Requests: Code review and collaboration

Getting Help

For Contributors:

  • Ask questions in GitHub Discussions
  • Reference existing issues and PRs
  • Read documentation thoroughly
  • Start with small contributions

For Users:

  • Check TROUBLESHOOTING.md first
  • Search existing issues
  • Create detailed bug reports
  • Be patient and respectful

Recognition

Contributors will be:

  • Listed in project contributors
  • Mentioned in release notes
  • Credited for significant contributions
  • Invited to join maintainer team for ongoing contributors

📚 Additional Resources

Learning Resources

Python Development:

GUI Development:

Technical Analysis:

Project Structure

pandas-ta-gui-suite/
├── pandas_ta_gui.py          # Main desktop application
├── web_demo.py               # Mobile web interface
├── stable_web_launcher.py    # Web server launcher
├── requirements.txt          # Dependencies
├── setup_gui.py             # Package setup
├── tests/                   # Test suite
├── docs/                    # Documentation
├── examples/                # Usage examples
└── data/                    # Sample data

Thank you for contributing to the Pandas-TA GUI Suite!

Your contributions help make technical analysis more accessible to everyone. Whether you're fixing a typo or adding a major feature, every contribution matters.

🌟 Don't forget to star the repository if you find it useful!