Exemple #1
0
class CoinflexPerpetulTestnetConfigMap(BaseConnectorConfigMap):
    connector: str = Field(default="coinflex_perpetual_testnet",
                           const=True,
                           client_data=None)
    coinflex_perpetual_testnet_api_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your Coinflex Perpetual testnet API key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ),
    )
    coinflex_perpetual_testnet_api_secret: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm:
            "Enter your Coinflex Perpetual testnet API secret",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))

    class Config:
        title = "coinflex_perpetual_testnet"
Exemple #2
0
class OKXConfigMap(BaseConnectorConfigMap):
    connector: str = Field(default="okx", const=True, client_data=None)
    okx_api_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your OKX API key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ),
    )
    okx_secret_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your OKX secret key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ),
    )
    okx_passphrase: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your OKX passphrase key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ),
    )
Exemple #3
0
class FromDateToDateModel(BaseClientModel):
    start_datetime: datetime = Field(
        default=...,
        description=
        "The start date and time for date-to-date execution timeframe.",
        client_data=ClientFieldData(
            prompt=lambda mi:
            "Please enter the start date and time (YYYY-MM-DD HH:MM:SS)",
            prompt_on_new=True,
        ),
    )
    end_datetime: datetime = Field(
        default=...,
        description=
        "The end date and time for date-to-date execution timeframe.",
        client_data=ClientFieldData(
            prompt=lambda mi:
            "Please enter the end date and time (YYYY-MM-DD HH:MM:SS)",
            prompt_on_new=True,
        ),
    )

    class Config:
        title = "from_date_to_date"

    @validator("start_datetime", "end_datetime", pre=True)
    def validate_execution_time(cls, v: str) -> Optional[str]:
        ret = validate_datetime_iso_string(v)
        if ret is not None:
            raise ValueError(ret)
        return v
class BitmartConfigMap(BaseConnectorConfigMap):
    connector: str = Field(default="bitmart", client_data=None)
    bitmart_api_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your BitMart API key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))
    bitmart_secret_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your BitMart secret key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))
    bitmart_memo: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your BitMart API Memo",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))

    class Config:
        title = "bitmart"
Exemple #5
0
class DailyBetweenTimesModel(BaseClientModel):
    start_time: time = Field(
        default=...,
        description=
        "The start time for daily-between-times execution timeframe.",
        client_data=ClientFieldData(
            prompt=lambda mi: "Please enter the start time (HH:MM:SS)",
            prompt_on_new=True,
        ),
    )
    end_time: time = Field(
        default=...,
        description="The end time for daily-between-times execution timeframe.",
        client_data=ClientFieldData(
            prompt=lambda mi: "Please enter the end time (HH:MM:SS)",
            prompt_on_new=True,
        ),
    )

    class Config:
        title = "daily_between_times"

    @validator("start_time", "end_time", pre=True)
    def validate_execution_time(cls, v: str) -> Optional[str]:
        ret = validate_time_iso_string(v)
        if ret is not None:
            raise ValueError(ret)
        return v
Exemple #6
0
class CoinzoomConfigMap(BaseConnectorConfigMap):
    connector: str = Field(default="coinzoom", client_data=None)
    coinzoom_api_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: f"Enter your {Constants.EXCHANGE_NAME} API key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))
    coinzoom_secret_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm:
            f"Enter your {Constants.EXCHANGE_NAME} secret key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))
    coinzoom_username: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm:
            f"Enter your {Constants.EXCHANGE_NAME} ZoomMe username",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))

    class Config:
        title = "coinzoom"
Exemple #7
0
class KrakenConfigMap(BaseConnectorConfigMap):
    connector: str = Field(default="kraken", client_data=None)
    kraken_api_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your Kraken API key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))
    kraken_secret_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your Kraken secret key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))
    kraken_api_tier: str = Field(
        default="Starter",
        client_data=ClientFieldData(
            prompt=lambda cm:
            "Enter your Kraken API Tier (Starter/Intermediate/Pro)",
            is_connect_key=True,
            prompt_on_new=True,
        ))

    class Config:
        title = "kraken"
Exemple #8
0
class CoinbaseProConfigMap(BaseConnectorConfigMap):
    connector: str = Field(default="coinbase_pro", client_data=None)
    coinbase_pro_api_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your Coinbase API key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        )
    )
    coinbase_pro_secret_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your Coinbase secret key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        )
    )
    coinbase_pro_passphrase: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your Coinbase passphrase",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        )
    )

    class Config:
        title = "coinbase_pro"
class KuCoinTestnetConfigMap(BaseConnectorConfigMap):
    connector: str = Field(default="kucoin_testnet", client_data=None)
    kucoin_testnet_api_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your KuCoin Testnet API key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))
    kucoin_testnet_secret_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your KuCoin Testnet secret key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))
    kucoin_testnet_passphrase: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your KuCoin Testnet passphrase",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))

    class Config:
        title = "kucoin_testnet"
Exemple #10
0
class FtxConfigMap(BaseConnectorConfigMap):
    connector: str = Field(default="ftx", client_data=None)
    ftx_api_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your FTX API key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))
    ftx_secret_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your FTX API secret",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))
    ftx_subaccount_name: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm:
            "Enter your FTX subaccount name (if this is not a subaccount, leave blank)",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))

    class Config:
        title = "ftx"
class TakerToMakerConversionRateMode(ConversionRateModel):
    taker_to_maker_base_conversion_rate: Decimal = Field(
        default=Decimal("1.0"),
        description=
        "A fixed conversion rate between the maker and taker tradin pairs based on the maker base asset.",
        gt=0.0,
        client_data=ClientFieldData(
            prompt=lambda mi:
            ("Enter conversion rate for taker base asset value to maker base asset value, e.g. "
             "if maker base asset is USD and the taker is DAI, 1 DAI is valued at 1.25 USD, "
             "the conversion rate is 1.25"),
            prompt_on_new=True,
        ),
    )
    taker_to_maker_quote_conversion_rate: Decimal = Field(
        default=Decimal("1.0"),
        description=
        "A fixed conversion rate between the maker and taker tradin pairs based on the maker quote asset.",
        gt=0.0,
        client_data=ClientFieldData(
            prompt=lambda mi:
            ("Enter conversion rate for taker quote asset value to maker quote asset value, e.g. "
             "if maker quote asset is USD and the taker is DAI, 1 DAI is valued at 1.25 USD, "
             "the conversion rate is 1.25"),
            prompt_on_new=True,
        ),
    )

    class Config:
        title = "fixed_conversion_rate"

    def get_taker_to_maker_conversion_rate(
        self, market_pair: CrossExchangeMarketPair
    ) -> Tuple[str, str, Decimal, str, str, Decimal]:
        """
        Find conversion rates from taker market to maker market
        :param market_pair: maker and taker trading pairs for which to do conversion
        :return: A tuple of quote pair symbol, quote conversion rate source, quote conversion rate,
        base pair symbol, base conversion rate source, base conversion rate
        """
        quote_pair = f"{market_pair.taker.quote_asset}-{market_pair.maker.quote_asset}"
        quote_rate_source = "fixed"
        quote_rate = self.taker_to_maker_quote_conversion_rate

        base_pair = f"{market_pair.taker.base_asset}-{market_pair.maker.base_asset}"
        base_rate_source = "fixed"
        base_rate = self.taker_to_maker_base_conversion_rate

        return quote_pair, quote_rate_source, quote_rate, base_pair, base_rate_source, base_rate

    @validator(
        "taker_to_maker_base_conversion_rate",
        "taker_to_maker_quote_conversion_rate",
        pre=True,
    )
    def validate_decimal(cls, v: str, values: Dict, config: BaseModel.Config,
                         field: Field):
        return super().validate_decimal(v=v, field=field)
Exemple #12
0
        class DummyModel(BaseStrategyConfigMap):
            strategy: str = Field(default="pure_market_making", client_data=None)
            some_attr: int = Field(default=1, client_data=ClientFieldData(prompt=lambda mi: "some prompt"))
            nested_model: NestedModel = Field(default=NestedModel())

            class Config:
                title = "dummy_model"
Exemple #13
0
        class NestedModel(BaseClientModel):
            nested_attr: str = Field(
                default="some value", client_data=ClientFieldData(prompt=lambda mi: "some prompt")
            )

            class Config:
                title = "nested_model"
Exemple #14
0
        class DummyModel(BaseStrategyConfigMap):
            strategy: str = Field(default="pure_market_making", client_data=None)
            some_attr: int = Field(default=1, client_data=ClientFieldData(prompt=lambda mi: "some prompt"))
            another_attr: Decimal = Field(default=Decimal("1.0"))

            class Config:
                title = "dummy_model"
        class DummyModel(BaseClientModel):
            some_attr: int = Field(default=1, client_data=ClientFieldData())
            nested_model: Union[NestedModelTwo, NestedModelOne] = Field(default=NestedModelOne())
            another_attr: Decimal = Field(default=Decimal("1.0"))

            class Config:
                title = "dummy_model"
 class DummyModel(BaseClientModel):
     some_attr: str = Field(
         default=...,
         client_data=ClientFieldData(
             prompt=lambda mi: "Some prompt?",
             prompt_on_new=True,
         ),
     )
class BitmexPerpetualConfigMap(BaseConnectorConfigMap):
    connector: str = Field(default="bitmex_perpetual", client_data=None)
    bitmex_perpetual_api_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your Bitmex Perpetual API key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        )
    )
    bitmex_perpetual_api_secret: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your Bitmex Perpetual API secret",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        )
    )
class PassiveOrderRefreshMode(OrderRefreshMode):
    cancel_order_threshold: Decimal = Field(
        default=Decimal("5.0"),
        description="Profitability threshold to cancel a trade.",
        gt=-100.0,
        lt=100.0,
        client_data=ClientFieldData(
            prompt=lambda mi:
            "What is the threshold of profitability to cancel a trade? (Enter 1 to indicate 1%)",
            prompt_on_new=True,
        ),
    )

    limit_order_min_expiration: Decimal = Field(
        default=130.0,
        description="Limit order expiration time limit.",
        gt=0.0,
        client_data=ClientFieldData(
            prompt=lambda mi:
            "How often do you want limit orders to expire (in seconds)?",
            prompt_on_new=True,
        ),
    )

    class Config:
        title = "passive_order_refresh"

    def get_cancel_order_threshold(self) -> Decimal:
        return self.cancel_order_threshold / Decimal("100")

    def get_expiration_seconds(self) -> Decimal:
        return self.limit_order_min_expiration

    @validator(
        "cancel_order_threshold",
        "limit_order_min_expiration",
        pre=True,
    )
    def validate_decimal(cls, v: str, values: Dict, config: BaseModel.Config,
                         field: Field):
        return super().validate_decimal(v=v, field=field)
class BeaxyConfigMap(BaseConnectorConfigMap):
    connector: str = Field(default="beaxy", client_data=None)
    beaxy_api_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your Beaxy API key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))
    beaxy_secret_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your Beaxy secret key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))

    class Config:
        title = "beaxy"
Exemple #20
0
class BybitPerpetualTestnetConfigMap(BaseConnectorConfigMap):
    connector: str = Field(default="bybit_perpetual_testnet", client_data=None)
    bybit_perpetual_testnet_api_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your Bybit Perpetual Testnet API key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))
    bybit_perpetual_testnet_secret_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your Bybit Perpetual Testnet secret key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))

    class Config:
        title = "bybit_perpetual_testnet"
Exemple #21
0
class MexcConfigMap(BaseConnectorConfigMap):
    connector: str = Field(default="mexc", client_data=None)
    mexc_api_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your MEXC API key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))
    mexc_secret_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your MEXC secret key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))

    class Config:
        title = "mexc"
class AscendExConfigMap(BaseConnectorConfigMap):
    connector: str = Field(default="ascend_ex", client_data=None)
    ascend_ex_api_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your AscendEx API key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))
    ascend_ex_secret_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your AscendEx secret key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))

    class Config:
        title = "ascend_ex"
Exemple #23
0
class BinanceUSConfigMap(BaseConnectorConfigMap):
    connector: str = Field(default="binance_us", const=True, client_data=None)
    binance_api_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your Binance US API key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))
    binance_api_secret: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your Binance US API secret",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))

    class Config:
        title = "binance_us"
Exemple #24
0
class WazirxConfigMap(BaseConnectorConfigMap):
    connector: str = Field(default="wazirx", client_data=None)
    wazirx_api_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your WazirX API key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))
    wazirx_secret_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your WazirX secret key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))

    class Config:
        title = "wazirx"
class HuobiConfigMap(BaseConnectorConfigMap):
    connector: str = Field(default="huobi", client_data=None)
    huobi_api_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your Huobi API key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))
    huobi_secret_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your Huobi secret key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))

    class Config:
        title = "huobi"
class LatokenConfigMap(BaseConnectorConfigMap):
    connector: str = Field(default="latoken", const=True, client_data=None)
    latoken_api_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your Latoken API key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))
    latoken_api_secret: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your Latoken API secret",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))

    class Config:
        title = "latoken"
Exemple #27
0
class ProbitConfigMap(BaseConnectorConfigMap):
    connector: str = Field(default="probit", client_data=None)
    probit_api_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your ProBit Client ID",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))
    probit_secret_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: "Enter your ProBit secret key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))

    class Config:
        title = "probit"
Exemple #28
0
class MultiOrderLevelModel(BaseClientModel):
    order_levels: int = Field(
        default=2,
        description=
        "The number of orders placed on either side of the order book.",
        ge=2,
        client_data=ClientFieldData(
            prompt=lambda mi:
            "How many orders do you want to place on both sides?",
            prompt_on_new=True,
        ),
    )
    level_distances: Decimal = Field(
        default=Decimal("0"),
        description=
        "The spread between order levels, expressed in % of optimal spread.",
        ge=0,
        client_data=ClientFieldData(
            prompt=lambda mi:
            "How far apart in % of optimal spread should orders on one side be?",
            prompt_on_new=True,
        ),
    )

    class Config:
        title = "multi_order_level"

    @validator("order_levels", pre=True)
    def validate_int_zero_or_above(cls, v: str):
        ret = validate_int(v, min_value=2)
        if ret is not None:
            raise ValueError(ret)
        return v

    @validator("level_distances", pre=True)
    def validate_decimal_zero_or_above(cls, v: str):
        ret = validate_decimal(v, min_value=Decimal("0"), inclusive=True)
        if ret is not None:
            raise ValueError(ret)
        return v
class GateIOConfigMap(BaseConnectorConfigMap):
    connector: str = Field(default="gate_io", client_data=None)
    gate_io_api_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: f"Enter your {CONSTANTS.EXCHANGE_NAME} API key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))
    gate_io_secret_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm:
            f"Enter your {CONSTANTS.EXCHANGE_NAME} secret key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))

    class Config:
        title = "gate_io"
class AltmarketsConfigMap(BaseConnectorConfigMap):
    connector: str = Field(default="altmarkets", client_data=None)
    altmarkets_api_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm: f"Enter your {Constants.EXCHANGE_NAME} API key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))
    altmarkets_secret_key: SecretStr = Field(
        default=...,
        client_data=ClientFieldData(
            prompt=lambda cm:
            f"Enter your {Constants.EXCHANGE_NAME} secret key",
            is_secure=True,
            is_connect_key=True,
            prompt_on_new=True,
        ))

    class Config:
        title = "altmarkets"