You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.5 KiB
41 lines
1.5 KiB
from hummingbot.core.event.events import (
|
|
BuyOrderCompletedEvent,
|
|
SellOrderCompletedEvent
|
|
)
|
|
from hummingbot.pmm_script.pmm_script_base import PMMScriptBase
|
|
|
|
|
|
class PingPongPMMScript(PMMScriptBase):
|
|
"""
|
|
Demonstrates how to set up a ping pong trading strategy which alternates buy and sell orders.
|
|
If a buy order is filled, there will be one less buy order submitted at the next refresh cycle.
|
|
If a sell order is filled, there will be one less sell order submitted at the next refresh cycle.
|
|
The balance is positive if there are more completed buy orders than sell orders.
|
|
"""
|
|
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.ping_pong_balance = 0
|
|
|
|
def on_tick(self):
|
|
strategy = self.pmm_parameters
|
|
buys = strategy.order_levels
|
|
sells = strategy.order_levels
|
|
if self.ping_pong_balance > 0:
|
|
buys -= self.ping_pong_balance
|
|
buys = max(0, buys)
|
|
elif self.ping_pong_balance < 0:
|
|
sells -= abs(self.ping_pong_balance)
|
|
sells = max(0, sells)
|
|
strategy.buy_levels = buys
|
|
strategy.sell_levels = sells
|
|
|
|
def on_buy_order_completed(self, event: BuyOrderCompletedEvent):
|
|
self.ping_pong_balance += 1
|
|
|
|
def on_sell_order_completed(self, event: SellOrderCompletedEvent):
|
|
self.ping_pong_balance -= 1
|
|
|
|
def on_status(self):
|
|
# return the current balance here to be displayed when status command is executed.
|
|
return f"ping_pong_balance: {self.ping_pong_balance}"
|
|
|