A complete production-ready system for managing Forex trading strategies with AI-powered parsing, backtesting, and demo trading capabilities.
- API Integration: Connect multiple data providers (TwelveData, MetalsAPI, OANDA)
- Strategy Management: Upload and manage text-based trading strategies
- AI Module: Placeholder for NLP-based strategy parsing
- Backtesting: Test strategies against historical data
- Demo Trading: Simulate live trading with demo accounts
- Performance Analytics: View detailed results with charts and metrics
- Cost Optimized: Designed for low-budget, single-developer use
SmartAITradingStrategyOptimizer/
├── backend/ # Django Backend Application
│ ├── tests/ # All test files
│ ├── ai_module/ # AI and NLP modules
│ ├── api/ # API endpoints and views
│ ├── config/ # Django settings
│ └── core/ # Core models and migrations
├── frontend/ # React Frontend Application
├── docs/ # All documentation files
├── scripts/ # All executable scripts (.ps1, .bat, .sh)
├── README.md # Main documentation
└── ...
Note: The project structure has been reorganized for better maintainability:
- All documentation files are in
docs/ - All scripts are in
scripts/ - All test files are in
backend/tests/
For detailed structure information, see docs/PROJECT_STRUCTURE.md.
- Django with Django REST Framework
- PostgreSQL for production, SQLite for local development
- Celery + Redis for asynchronous task processing
- Data caching to minimize API calls
- React + TypeScript
- TailwindCSS with dark mode
- Chart.js for performance visualization
- Vite for fast development and optimized builds
- Docker Compose for local development
- Gunicorn for production WSGI server
- Nginx for serving frontend and proxying API requests
این بخش تصویری کلی از فرایند هوشمند سیستم ارائه میدهد تا بدانید هنگام فشردن دکمه «پردازش» دقیقاً چه مراحلی رخ میدهد و چه تنظیماتی اهمیت دارند.
-
پیکربندی کلیدهای API
- ثبت کلیدهای داده: در صفحه مدیریت API ابتدا کلیدهای FinancialModelingPrep، TwelveData، MetalsAPI و سایر منابع داده را فعال کنید. هر کلید میتواند از طریق Environment یا مدل
APIConfigurationثبت شود؛ سیستم به صورت خودکار جدیدترین کلید فعال را تشخیص میدهد. - ثبت کلیدهای هوش مصنوعی: کلیدهای OpenAI/ChatGPT، Gemini و سایر LLM ها را وارد کنید. کلاس
AIProviderManagerتمام نامهای مستعار مانندchatgpt,gpt,gpt-4را هم به عنوان OpenAI تشخیص میدهد و بر اساس ترتیب اولویت در تنظیماتAI_PROVIDER_PRIORITYآنها را امتحان میکند. - مانیتورینگ صحت کلیدها: پس از ثبت، از دکمه «تست» در داشبورد استفاده کنید یا لاگهای سیستم (
api_usage_tracker) را بررسی کنید تا مطمئن شوید درخواستها با موفقیت پاسخ میگیرند. پیامهای شکست شامل علت دقیق (مثلاً «missing_api_key») ثبت میشوند.
- ثبت کلیدهای داده: در صفحه مدیریت API ابتدا کلیدهای FinancialModelingPrep، TwelveData، MetalsAPI و سایر منابع داده را فعال کنید. هر کلید میتواند از طریق Environment یا مدل
-
آپلود و مدیریت استراتژی
- بارگذاری فایل: در تب «استراتژیهای معاملاتی» فایل متنی استراتژی را آپلود کنید. سیستم فایل را ذخیره کرده و وضعیت اولیه را
not_processedقرار میدهد. - مدیریت فعال بودن: با دکمه «فعال/غیرفعال» میتوانید مشخص کنید کدام استراتژی در فهرست نشان داده شود یا در ماژولهای دیگر قابل انتخاب باشد.
- استراتژی اصلی: دکمه «استراتژی اصلی» اکنون عمل toggle دارد؛ یعنی اگر استراتژی از قبل اصلی باشد با کلیک دوباره غیرفعال میشود. بکتست رسمی تنها زمانی اجازه اجرا دارد که حداقل یک استراتژی اصلی موجود باشد، بنابراین انتخاب دقیق این مورد حائز اهمیت است.
- پیگیری خطاها: اگر پردازش یا بکتست با شکست مواجه شود، پیام خطا در فیلد
processing_errorو توستهای رابط کاربری ثبت شده و برای بررسی بعدی قابل مشاهده است.
- بارگذاری فایل: در تب «استراتژیهای معاملاتی» فایل متنی استراتژی را آپلود کنید. سیستم فایل را ذخیره کرده و وضعیت اولیه را
-
فشار دادن دکمه «پردازش»
- تحلیل متن استراتژی: ماژول
nlp_parserفایل را میخواند و خروجی ساختیافته (entry/exit، مدیریت ریسک، اندیکاتورها، تایمفریم، نماد و …) درparsed_strategy_dataذخیره میشود. - استخراج و پردازش تایمفریم: سیستم به صورت خودکار تایمفریم را از استراتژی استخراج میکند. اگر تایمفریم استاندارد MT5 باشد (M1, M5, M15, M30, H1, H4, D1)، مستقیماً از MT5 استفاده میشود. اگر تایمفریم غیرمتداول باشد (مثل 77 دقیقه)، سیستم از کندلهای M1 استفاده میکند و آنها را به تایمفریم موردنظر تجمیع میکند. برای جزئیات بیشتر، به راهنمای تایمفریم و بکتست مراجعه کنید.
- فراخوانی هوش مصنوعی با اولویت ChatGPT: تابع
analyze_strategy_with_geminiابتدا از طریقAIProviderManagerتلاش میکند پاسخ JSON را از ChatGPT/OpenAI دریافت کند. در صورت موفقیت، مدل و نتیجه ثبت میشود؛ در غیر این صورت، سیستم به ترتیب سراغ Gemini و سایر ارائهدهندهها میرود و در آخر «تحلیل پایه» تولید میکند. تمام دلایل fallback درanalysis_sourcesذخیره و در داشبورد نشان داده میشوند. - دریافت داده بازار:
DataProviderManager.get_historical_dataنماد را نرمال میکند، اگر ارائهدهندهی ترجیحی تعیین شده باشد آن را امتحان میکند و در صورت نیاز بین ارائهدهندهها جابهجا میشود. برای نمادهای طلا، آخرین قیمت لحظهای MetalsAPI نیز ضمیمه داده تاریخی میشود تا بکتست بهروز باشد. نام ارائهدهنده و تعداد نقاط داده درanalysis_sources.data_sourcesثبت میشود. - بهروزرسانی وضعیت: پس از اتمام، وضعیت پردازش به
processedتغییر میکند، زمان شروع/پایان پردازش ذخیره میشود و رابط کاربری توست موفقیت نمایش میدهد.
- تحلیل متن استراتژی: ماژول
-
بهینهسازی ژنتیک و بکتست طلا
- آمادهسازی دادهها: اگر دادهی تاریخی کافی وجود داشته باشد، ابتدا بکتست پایه با همان پارامترهای استخراجشده انجام میشود تا معیار مرجع (return، sharpe، win rate و …) در دسترس باشد.
- اجرای الگوریتم ژنتیک:
OptimizationEngine.optimizeبا تنظیماتmethod='dl'وdl_method='neural_evolution'اجرا میشود. جمعیت اولیه با تغییرات تصادفی پیرامون پارامترهای موجود ساخته و طی اپیزودهای پیدرپی انتخاب، crossover و mutation انجام میشود. - حاصل نهایی: بهترین پارامترها، تاریخچه مختصر نسلها، امتیاز شارپ و نتایج بکتست پایه/بهینه در
parsed_strategy_data.genetic_optimizationذخیره میشوند. این اطلاعات برای مقایسه در رابط کاربری و گزارشدهی استفاده میشود. - مدیریت خطا: اگر دادهی تاریخی یافت نشود یا خطایی در فرآیند رخ دهد، وضعیت
genetic_optimizationبرابرerrorیاno_dataثبت میشود تا کاربر از طریق رابط کاربری مطلع گردد.
-
نکته تکمیلی: اجبار به استراتژی اصلی برای بکتست
- منطق اعتبارسنجی: قبل از ساخت Job جدید با نوع «backtest»، کنترل میشود که حداقل یک استراتژی اصلی در پایگاه داده وجود دارد و همان استراتژی انتخابی نیز
is_primary=Trueباشد. - هدف این محدودیت: این شرط از اجرای بکتست روی استراتژیهای آزمایشی یا ناقص جلوگیری کرده و تضمین میکند نتایج رسمی همیشه بر اساس آخرین استراتژی تأیید شده محاسبه شوند.
- پیامرسانی به کاربر: در صورت عدم رعایت شرایط، API پاسخ خطای مشخص (همراه با متن فارسی راهنمای اقدام بعدی) میدهد و رابط کاربری پیام مناسب را نمایش میدهد تا کاربر استراتژی اصلی را تغییر دهد یا ابتدا استراتژیای را به عنوان اصلی تعیین کند.
- منطق اعتبارسنجی: قبل از ساخت Job جدید با نوع «backtest»، کنترل میشود که حداقل یک استراتژی اصلی در پایگاه داده وجود دارد و همان استراتژی انتخابی نیز
یادآوری: برای اجرای تستهای خودکار باید محیط مجازی Python (
venv) سالم باشد. در وضعیت فعلی مسیر مفسر اصلی در ویندوز حذف شده است؛ قبل از اجرایpytest،venvرا بازسازی یا مسیر Python را اصلاح کنید.
- Docker and Docker Compose
- Python 3.11+ (for local development without Docker)
- Node.js 18+ (for frontend development)
- تمام وابستگیهای Python در
backend/requirements.txtبا نسخه دقیق قفل شدهاند؛ لطفاً از همین فایل برای استقرار Production (pip install -r backend/requirements.txt) استفاده کنید.
- Clone the repository
git clone <repository-url>
cd Smart-AI-Trading-Strategy-Optimizer- Set up environment variables
cp env.example .env
# Edit .env with your API keys- Start all services
docker-compose up --buildThe application will be available at:
- Frontend: http://localhost
- Backend API: http://localhost:8000
- Admin Panel: http://localhost:8000/admin
Quick Start Scripts (Windows):
# Start all services
.\scripts\START_ALL.ps1
# Or start individually
.\scripts\start_backend.ps1
.\scripts\start_frontend.ps1cd backend
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
# Run migrations
python manage.py migrate
# Create superuser (optional)
python manage.py createsuperuser
# Start Django server
python manage.py runserver
# In another terminal, start Celery worker
celery -A config worker --loglevel=infocd frontend
npm install
npm run devThe frontend will be available at http://localhost:3000
- Push your code to GitHub
- Connect your repository to Render
- Use the provided
render.yamlconfiguration - Set environment variables in Render dashboard
- Push your code to GitHub
- Connect your repository to Vercel
- Use the provided
vercel.jsonconfiguration - Set environment variables in Vercel dashboard
- Update the
vercel.jsonrewrite destination URL to point to your Render backend
چابکان سه سرویس اصلی (Python/Django، Node.js و Docker) را در قالب پلنهای جداگانه ارائه میکند. ترکیب پیشنهادی:
-
سرویس Django
- پلتفرم:
django - نسخه Python: 3.11
- حجم پیشنهادی: حداقل
0.5 vCPU / 0.5 GB RAM / 5 GB Disk(برای بار متوسط 1 vCPU و 1 GB مطمئنتر است) - دستور Build:
pip install -r backend/requirements.txt && python backend/manage.py migrate && python backend/manage.py collectstatic --noinput - دستور Start:
cd backend && gunicorn config.wsgi:application --bind 0.0.0.0:$PORT - متغیرها:
SECRET_KEY،DEBUG=False,ENV=PRODUCTIONDATABASE_URLیاDB_NAME,DB_USER,DB_PASSWORD,DB_HOST,DB_PORTREDIS_URL,CELERY_BROKER_URLADMIN_NOTIFICATION_PHONES(لیست شمارههای موبایل برای هشدارها)- کلیدهای API (TwelveData، FinancialModelingPrep، OANDA، MetalsAPI، Gemini و ...)
- پلتفرم:
-
سرویس Node.js (فرانتاند React)
- پلتفرم:
nodejs(Node 18) - دستور Build:
npm ci && npm run build - دستور Start (یکی را انتخاب کنید):
- استفاده از Vite Preview:
npm run preview -- --port $PORT --host 0.0.0.0 - یا استفاده از بسته
serve:npx serve -s dist -l $PORT
- استفاده از Vite Preview:
- منابع پیشنهادی:
0.25 vCPU / 0.5 GB RAM / 5 GB Disk
- پلتفرم:
-
سرویس Docker برای Redis
- پلتفرم:
docker - تصویر پیشنهادی:
redis:7-alpine - پورت:
6379 - حجم پیشنهادی:
0.15 vCPU / 0.25 GB RAM / 2 GB Disk - مقدار
REDIS_URLوCELERY_BROKER_URLرا در سرویس Django بهredis://<redis_service_host>:6379/0تنظیم کنید.
- پلتفرم:
npm install -g @cloudiva.net/cli
cloudiva login
cloudiva init
cloudiva deployنکته: قبل از cloudiva deploy فایلهای کانفیگ (backend/requirements.txt, render.yaml, docker-compose.yml) را بررسی کنید تا با پلن انتخابی همخوان باشند.
GET /api/apis/- List all API configurationsPOST /api/apis/- Add new API configurationPUT /api/apis/{id}/- Update API configurationDELETE /api/apis/{id}/- Delete API configurationPOST /api/apis/{id}/test/- Test API connection
GET /api/strategies/- List all strategiesGET /api/strategies/{id}/- Get strategy detailsPOST /api/strategies/- Upload new strategy (multipart/form-data)DELETE /api/strategies/{id}/- Delete strategyGET /api/strategies/{id}/download/- Download strategy file
GET /api/jobs/- List all jobsGET /api/jobs/{id}/- Get job detailsPOST /api/jobs/- Create new job (backtest or demo trade)GET /api/jobs/{id}/status/- Get job status
GET /api/results/- List all backtest resultsGET /api/results/{id}/- Get result detailsGET /api/results/summary/- Get summary of all results
- Free API Tiers: Uses free tiers of data providers
- Data Caching: Caches market data locally (SQLite) to minimize API calls
- SQLite for Local Dev: No database cost in development
- Optimized Docker Images: Uses slim Python and Alpine images
- Static File Caching: Long-term caching of static assets
- Celery Task Batching: Efficient task processing
The AI module (/backend/ai_module/) contains placeholders for:
nlp_parser.py: Text-based strategy parsing using NLPoptimizer.py: Hyperparameter optimization using Optuna
The parser uses a cost-optimized hybrid approach:
- First, a fast local regex/keyword parser extracts
entry_conditions,exit_conditions,risk_management,timeframe,symbol,indicators. - If confidence is low or key sections are missing, it calls Google Gemini to fill gaps and returns a compact JSON. Results are cached to reduce API costs.
Configuration (set in .env):
GEMINI_ENABLED=True
GEMINI_API_KEY=your_google_gemini_api_key
GEMINI_MODEL=gemini-1.5-flash
GEMINI_MAX_OUTPUT_TOKENS=8000Notes:
- Gemini integration is optional. اگر کلید API تنظیم نشده باشد، سرویس پیام «AI analysis unavailable. Please configure your AI provider (OpenAI ChatGPT or Gemini) in Settings.» را برمیگرداند و سیستم با تحلیل پایه ادامه میدهد.
- تمام پاسخهای Gemini در ساختار JSON استاندارد (
entry_conditions,exit_conditions,risk_management,ai_status,raw_output) بازگردانده میشوند تا در فرانتاند و تستها به سادگی پردازش شوند. - ورودیها حوالی ۳۲٬۰۰۰ توکن (حدود ۱۲۸هزار کاراکتر) قطع میشوند و خروجی حداکثر ۸٬۰۰۰ توکن است تا هزینه و ریسک خطا کاهش یابد.
- حداکثر ۶۰ فراخوانی در دقیقه پذیرفته میشود و نتایج تحلیل تا ۲۴ ساعت در کش فایل ذخیره میشود تا از هزینههای تکراری جلوگیری شود.
- در صورت بروز خطا، پیام مناسب («Gemini service temporarily unavailable.») به کاربر نمایش داده میشود و تحلیل پایه جایگزین میگردد.
- A local file cache in
backend/cache/gemini/prevents repeated calls for the same text.
اکنون علاوه بر Gemini میتوانید از OpenAI (ChatGPT)، Cohere، OpenRouter، Together AI، DeepInfra و GroqCloud نیز استفاده کنید. هر ارائهدهنده را در صفحهٔ «تنظیمات API» ثبت کنید یا در .env مقداردهی کنید:
OPENAI_API_KEY=...
OPENAI_MODEL=gpt-4.1-mini
COHERE_API_KEY=...
OPENROUTER_API_KEY=...
TOGETHER_API_KEY=...
DEEPINFRA_API_KEY=...
GROQ_API_KEY=...
AI_PROVIDER_PRIORITY=openai,gemini,cohere,openrouter,together_ai,deepinfra,groq
سامانه به ترتیب AI_PROVIDER_PRIORITY تلاش میکند تا پاسخ JSON دریافت کند؛ در صورت خطای یکی از سرویسها (مثلاً محدودیت نرخ یا عدم دسترسی) به سرویس بعدی میرود و تمام تلاشها با جزئیات در AI_USAGE_LOG و پیامک هشدار (در صورت فعالسازی) ثبت میشود.
- Backend: Add models in
core/models.py, create API endpoints inapi/views.py - Frontend: Add new components in
src/components/, update pages insrc/pages/ - Tasks: Add Celery tasks in
api/tasks.py
# Create migration
python manage.py makemigrations
# Apply migration
python manage.py migrate
# Create migration for specific app
python manage.py makemigrations api# Run tests
python manage.py test
# Run with coverage
coverage run --source='.' manage.py test
coverage report- Check Redis is running:
docker-compose ps - Check logs:
docker-compose logs backend - Restart services:
docker-compose restart backend
- Clear cache:
npm cache clean --force - Reinstall dependencies:
rm -rf node_modules && npm install - Check browser console for errors
- Reset database:
docker-compose down -vthendocker-compose up
- متغیر
ADMIN_NOTIFICATION_PHONESرا با لیست شمارههای ادمین (جدا شده با ویرگول) تنظیم کنید تا در صورت انقضای کلیدهای داده یا خطاهای مکرر، پیامک هشدار ارسال شود. - سرویس پیامک به Kavenegar وابسته است؛ حتماً
KAVENEGAR_API_KEYو در صورت نیازKAVENEGAR_SENDERرا تنظیم کنید. - سامانه برای هر ارائهدهنده (TwelveData، AlphaVantage، OANDA، MetalsAPI، FinancialModelingPrep) در صورت دریافت خطاهای ۴۰۱/۴۰۳/۴۲۹ یا نبود کلید معتبر، یک هشدار ثبت میکند و در هر ساعت فقط یکبار ادمین را مطلع میسازد.
MIT License - See LICENSE file for details
اگر قصد دارید بدون درگیری با تنظیم APIها و استقرار اولیه از سامانه استفاده کنید، میتوانید با شارژ حساب به مبلغ ۳۹۹٬۰۰۰ تومان نسخه آمادهٔ تحلیل و تست استراتژی را به همراه یک ماه پشتیبانی (آنلاین و تلفنی) دریافت کنید. در این نسخه:
- تمامی APIهای داده (TwelveData، FinancialModelingPrep، MetalsAPI، OANDA و ...) فعال و متصل میشوند.
- کلید Google Gemini در سامانه ثبت میشود و تحلیل هوش مصنوعی بدون وقفه در دسترس است.
- Redis، Celery و دیتابیس PostgreSQL روی هاست چابکان یا سرور اختصاصی شما راهاندازی و تست میشوند.
- در صورت انقضای کلیدها یا اتمام اعتبار رایگان، ادمین از طریق پیامک هشدار دریافت خواهد کرد.
برای هماهنگی بیشتر از تیکت «پشتیبانی ویژه ۳۹۹K» استفاده کنید.
For issues and questions, please open an issue on the GitHub repository.