Skip to content

Commit

Permalink
gainable_unit_cc_sold_jpy -> gainable_unit_cc_sold_ratio
Browse files Browse the repository at this point in the history
  • Loading branch information
seii-saintway committed Feb 3, 2021
1 parent 18e1199 commit cc58d05
Showing 1 changed file with 28 additions and 13 deletions.
41 changes: 28 additions & 13 deletions graph/main-martingale.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -34,17 +34,16 @@
"\n",
"TRADE_UNIT = Decimal('0.0001')\n",
"\n",
"GAINABLE_UNIT_CC_SOLD_JPY = 25000 # TODO: self-adaptive by trend analysis\n",
"GAINABLE_UNIT_CC_SOLD_RATIO = Decimal('0.1') # TODO: self-adaptive by trend analysis\n",
"LOSSABLE_UNIT_CC_BOUGHT_RATIO = Decimal('0.9')\n",
"\n",
"MIN_UNIT_CC_TRADE_JPY = 5000\n",
"MAX_UNIT_CC_TRADE_JPY = MIN_UNIT_CC_TRADE_JPY << 10\n",
"MAX_UNIT_CC_TRADE_JPY = Decimal('Infinity')\n",
"LOSSABLE_UNIT_CC_SELL_JPY = MAX_UNIT_CC_TRADE_JPY\n",
"\n",
"import sys\n",
"MAX_GAIN_JPY = sys.maxsize # useless\n",
"MAX_LOSS_JPY = sys.maxsize # useless\n",
"MAX_LOST_JPY = sys.maxsize"
"MAX_GAIN_JPY = Decimal('Infinity') # useless\n",
"MAX_LOSS_JPY = Decimal('Infinity') # useless\n",
"MAX_LOST_JPY = Decimal('Infinity')"
]
},
{
Expand Down Expand Up @@ -125,7 +124,17 @@
" robot_status_description = f'{self.bought_average_fiat_price:.2f} / {robot_status_description}'\n",
" return f'{self.robot_name} ({robot_status_description}) at {datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\")}'\n",
"\n",
" def has_enough_unused_fiat_money(self, fiat_money):\n",
" return fiat_money <= self.unused_fiat_money * Decimal('0.75')\n",
"\n",
" def has_buyable_fiat_price(self):\n",
" return self.now_buy_fiat_price > MIN_UNIT_CC_TRADE_JPY and self.now_buy_fiat_price < MAX_UNIT_CC_TRADE_JPY\n",
"\n",
" def is_fiat_price_lower_than_average(self):\n",
" return self.bought_average_fiat_price is not None and self.now_buy_fiat_price < self.bought_average_fiat_price\n",
"\n",
" def get_gain_fiat_money(self):\n",
" self.gain_fiat_money = self.now_sell_fiat_price * self.bought_amount - self.used_fiat_money\n",
" return self.now_sell_fiat_price * self.bought_amount - self.used_fiat_money\n",
"\n",
" def get_total_gain_fiat_money(self):\n",
Expand Down Expand Up @@ -570,6 +579,7 @@
"metadata": {},
"outputs": [],
"source": [
"from decimal import Decimal\n",
"import math\n",
"from scipy import optimize as opt\n",
"from numpy.lib import scimath\n",
Expand All @@ -581,6 +591,7 @@
" lossable_unit_cc_bought_jpy = (status.bought_average_fiat_price - MIN_UNIT_CC_TRADE_JPY) * LOSSABLE_UNIT_CC_BOUGHT_RATIO\n",
" min_unit_cc_diff_jpy = float(lossable_unit_cc_bought_jpy) / scimath.log(float(status.get_max_used_fiat_money() / status.used_fiat_money))\n",
" status.min_bought_average_fiat_price = status.bought_average_fiat_price - lossable_unit_cc_bought_jpy\n",
" status.max_next_buy_fiat_price = status.bought_average_fiat_price - Decimal(repr(min_unit_cc_diff_jpy))\n",
"\n",
" bought_average_fiat_price = float(status.bought_average_fiat_price)\n",
" now_buy_fiat_price = float(status.now_buy_fiat_price)\n",
Expand All @@ -601,8 +612,9 @@
" sold_unit_amount = float(status.sold_unit_amount)\n",
" unit_cc_diff_jpy = float(abs(status.now_sell_fiat_price - status.sold_average_fiat_price))\n",
"\n",
" min_unit_cc_diff_jpy = float(GAINABLE_UNIT_CC_SOLD_JPY) / scimath.log(float(status.get_max_sold_unit_amount() / status.sold_unit_amount))\n",
" status.max_sold_average_fiat_price = status.sold_average_fiat_price + GAINABLE_UNIT_CC_SOLD_JPY\n",
" status.max_sold_average_fiat_price = status.bought_average_fiat_price * (1 + GAINABLE_UNIT_CC_SOLD_RATIO)\n",
" min_unit_cc_diff_jpy = float(status.max_sold_average_fiat_price - status.sold_average_fiat_price) / scimath.log(float(status.get_max_sold_unit_amount() / status.sold_unit_amount))\n",
" status.min_next_sell_fiat_price = status.sold_average_fiat_price + Decimal(repr(min_unit_cc_diff_jpy))\n",
"\n",
" return math.ceil(\n",
" sold_unit_amount * opt.fsolve(\n",
Expand Down Expand Up @@ -732,14 +744,17 @@
"# continue\n",
"\n",
" init_buy_jpy = status.get_max_used_fiat_money() / Decimal(math.exp(LOSSABLE_UNIT_CC_BOUGHT_RATIO / (1 - LOSSABLE_UNIT_CC_BOUGHT_RATIO)))\n",
" if status.used_fiat_money < init_buy_jpy and init_buy_jpy - status.used_fiat_money <= (status.get_max_used_fiat_money() - status.used_fiat_money) * Decimal('0.75') \\\n",
" and status.now_buy_fiat_price > MIN_UNIT_CC_TRADE_JPY and status.now_buy_fiat_price < MAX_UNIT_CC_TRADE_JPY:\n",
" if status.used_fiat_money == 0 and status.has_enough_unused_fiat_money(init_buy_jpy) and status.has_buyable_fiat_price():\n",
" status.sample_number = 0\n",
" status.please_buy_unit_amount = math.ceil(init_buy_jpy / status.now_buy_fiat_price / status.trade_unit)\n",
"\n",
" if status.used_fiat_money < init_buy_jpy and status.is_fiat_price_lower_than_average() and status.has_enough_unused_fiat_money(init_buy_jpy - status.used_fiat_money) and status.has_buyable_fiat_price():\n",
" status.sample_number = 0\n",
" status.please_buy_unit_amount = math.ceil((init_buy_jpy - status.used_fiat_money) / status.now_buy_fiat_price / status.trade_unit)\n",
"\n",
" if status.used_fiat_money >= init_buy_jpy and status.bought_average_fiat_price is not None and status.now_buy_fiat_price < status.bought_average_fiat_price:\n",
" if status.used_fiat_money >= init_buy_jpy and status.is_fiat_price_lower_than_average():\n",
" trade_unit_amount = get_buy_unit_amount(status)\n",
" while trade_unit_amount > 0 and status.now_buy_fiat_price * status.trade_unit * trade_unit_amount > (status.get_max_used_fiat_money() - status.used_fiat_money) * Decimal('0.75'):\n",
" while trade_unit_amount > 0 and not status.has_enough_unused_fiat_money(status.now_buy_fiat_price * status.trade_unit * trade_unit_amount):\n",
" trade_unit_amount >>= 1\n",
" if trade_unit_amount > 0:\n",
" status.sample_number = 0\n",
Expand Down Expand Up @@ -800,7 +815,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.0"
"version": "3.6.7"
}
},
"nbformat": 4,
Expand Down

0 comments on commit cc58d05

Please sign in to comment.