Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,006 changes: 534 additions & 472 deletions frontend/package-lock.json

Large diffs are not rendered by default.

703 changes: 703 additions & 0 deletions handlers/bots/__init__.py

Large diffs are not rendered by default.

14,147 changes: 14,145 additions & 2 deletions handlers/bots/controller_handlers.py

Large diffs are not rendered by default.

38 changes: 37 additions & 1 deletion handlers/bots/controllers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,36 @@
from .grid_strike import GridStrikeController
from .pmm_mister import PmmMisterController
from .pmm_v1 import PmmV1Controller

from .arbitrage_controller import ArbitrageControllerController
from .dman_v3 import DManV3Controller
from .multi_grid_strike import MultiGridStrikeController
from .xemm_multiple_levels import XEMMMultipleLevelsController
from .macd_bb_v1 import MacdBbV1Controller
from .supertrend_v1 import SuperTrendV1Controller
from .anti_folla_v1 import AntiFollaV1Controller
from .funding_rate_arb import FundingRateArbController
from .delta_neutral_mm import DeltaNeutralMMController
from .bollingrid import BollinGridController
from .quantum_grid_allocator import QuantumGridAllocatorController
from .stat_arb_v2 import StatArbV2Controller
from .lm_multi_pair_dex import LMMultiPairDEXController
# Registry of controller types
_CONTROLLER_REGISTRY: Dict[str, Type[BaseController]] = {
"grid_strike": GridStrikeController,
"pmm_mister": PmmMisterController,
"pmm_v1": PmmV1Controller,
"dman_v3": DManV3Controller,
"arbitrage_controller": ArbitrageControllerController,
"xemm_multiple_levels": XEMMMultipleLevelsController,
"macd_bb_v1": MacdBbV1Controller,
"supertrend_v1": SuperTrendV1Controller,
"anti_folla_v1": AntiFollaV1Controller,
"funding_rate_arb": FundingRateArbController,
"delta_neutral_mm": DeltaNeutralMMController,
"bollingrid": BollinGridController,
"quantum_grid_allocator": QuantumGridAllocatorController,
"stat_arb_v2": LMMultiPairDEXController,
"lm_multi_pair_dex": LMMultiPairDEXController,
}


Expand Down Expand Up @@ -102,6 +126,18 @@ def get_controller_info() -> Dict[str, Dict[str, str]]:
"GridStrikeController",
"PmmMisterController",
"PmmV1Controller",
"DManV3Controller",
"ArbitrageControllerController",
"XEMMMultipleLevelsController",
"MacdBbV1Controller",
"SuperTrendV1Controller",
"AntiFollaV1Controller",
"FundingRateArbController",
"DeltaNeutralMMController",
"BollinGridController",
"QuantumGridAllocatorController",
"StatArbV2Controller",
"LMMultiPairDEXController",
# Backwards compatibility
"SUPPORTED_CONTROLLERS",
]
42 changes: 42 additions & 0 deletions handlers/bots/controllers/anti_folla_v1/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
"""Anti-Folla V1 Controller Module - Directional trading with crowd-contrarian indicators."""

import io
from typing import Any, Dict, List, Optional, Tuple

from .._base import BaseController, ControllerField
from .chart import generate_chart, generate_preview_chart
from .config import DEFAULTS, EDITABLE_FIELDS, FIELD_ORDER, FIELDS, generate_id, validate_config


class AntiFollaV1Controller(BaseController):
controller_type = "anti_folla_v1"
display_name = "Anti-Folla V1"
description = "Crowd-contrarian directional trading: VWAP, Donchian, OBV, OBI, Volume Spike, Trade Flow, Funding Rate"

@classmethod
def get_defaults(cls) -> Dict[str, Any]:
return DEFAULTS.copy()

@classmethod
def get_fields(cls) -> Dict[str, ControllerField]:
return FIELDS

@classmethod
def get_field_order(cls) -> List[str]:
return FIELD_ORDER

@classmethod
def validate_config(cls, config: Dict[str, Any]) -> Tuple[bool, Optional[str]]:
return validate_config(config)

@classmethod
def generate_chart(cls, config: Dict[str, Any], candles_data: List[Dict[str, Any]], current_price: Optional[float] = None) -> io.BytesIO:
return generate_chart(config, candles_data, current_price)

@classmethod
def generate_id(cls, config: Dict[str, Any], existing_configs: List[Dict[str, Any]]) -> str:
return generate_id(config, existing_configs)


__all__ = ["AntiFollaV1Controller", "DEFAULTS", "FIELDS", "FIELD_ORDER", "EDITABLE_FIELDS",
"validate_config", "generate_id", "generate_chart", "generate_preview_chart"]
Loading