Skip to content

Instantly share code, notes, and snippets.

View miohtama's full-sized avatar
🏠
https://tradingstrategy.ai

Mikko Ohtamaa miohtama

🏠
https://tradingstrategy.ai
View GitHub Profile
@indicators.define(dependencies=[ath, ath, daily_rsi])
def signal(
close: pd.Series,
ath_delay_bars: int,
ath_window_bars: int,
ath_threshold: float,
ath_span: int,
daily_rsi_bars: int,
daily_rsi_threshold: float,
pair: TradingPairIdentifier,
@miohtama
miohtama / yubikey.md
Last active February 17, 2025 13:16
How to use Yubikey with SSH and macOS

Guide to Setting Up and Using FIDO2 SSH Keys on macOS

About YubiKey and FIDO2

YubiKey is a hardware-authentication device that securely stores your SSH key. You need the physical device to login over SSH, which is protected with both touch (separate button on the device itself) and PIN code (need to be typed to unlock the SSH key).

FIDO2 (Fast Identity Online 2) is a set of standards for secure authentication that aims to replace password-based logins with more secure methods.

1. System Requirements

@miohtama
miohtama / gist:63e96ff6d7b61584284000ec4989a0af
Created October 5, 2024 09:05
Render a text mode progress bar in node.js
/**
* Render a text mode progress bar.
*
* For characters see
*
* - https://en.wikipedia.org/wiki/Geometric_Shapes_(Unicode_block)
* - https://en.wikipedia.org/wiki/Block_Elements
*
* @param {number} width Width in characters
* @param {number} progress Current progress as percent 0....1
@miohtama
miohtama / datalore-with-talib.dockerfile
Created October 3, 2024 10:31
Datalore agent Dockerfile w/Talib installed
FROM jetbrains/datalore-agent:2024.1
USER root
ENV DEBIAN_FRONTEND noninteractive
# add deadsnakes ppa and install python 3.11
RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt-get update && \
apt-get install -y python3.11 python3.11-venv python3.11-dev && \
rm -rf /var/lib/apt/lists/* && \
@miohtama
miohtama / poetry-activate.zsh
Created October 1, 2024 18:51
Poetry activate virtual environment one-liner
# Does not create subshell
poetry-activate() {
source $( poetry env list --full-path | grep Activated | cut -d' ' -f1 )/bin/activate
}
This strategy is a momentum and breakout strategy.
- The strategy trades ETH and BTC over long term time horizon, doing only few trades per a year.
- The strategy delivers similar profits as buying and holding ETH and BTC, but with much less severe drawdowns.
- The strategy performs well in long-term Bitcoin [bull market](https://tradingstrategy.ai/glossary/bull-market).
- In [bear](https://tradingstrategy.ai/glossary/bear-market) and sideways markets the strategy does not perform well.
- It is based on [RSI technical indicator](https://tradingstrategy.ai/glossary/relative-strength-index-rsi), the strategy is buying when others are buying, and the strategy is selling when others are selling.
- The strategy deposits excess cash to Aave V3 USDC pool to gain interest on cash
- This is the second version of this strategy. [See the earlier version](https://tradingstrategy.ai/strategies/enzyme-polygon-eth-btc-usdc).
As the time-in-market os low, the Aave support was added to gain profits on the cash reserves.
@miohtama
miohtama / signal-vs-profit.py
Created November 8, 2023 22:33
Trading signal vs. price movement vs. profit analysis using Pandas
def calculate_signal_vs_profit(
df,
signal_window: pd.Timedelta,
profit_window: pd.Timedelta,
data_time_bucket: pd.Timedelta,
) -> pd.DataFrame:
"""Calculate signals and profits for all incoming candles."""
# Create entries for past price to be used for signal
# and future price (used for the price correlation)
@miohtama
miohtama / cloudflare-ip-list.sh
Created August 11, 2023 10:13
Cloudflare IP list printer
#!/bin/sh
#
# Prints out the latest Cloudflare IP list.
#
# Note: Third party Cloudflare workers can still access your site even if you
# block traffic from this range.
#
for i in `curl -s https://www.cloudflare.com/ips-v4`; do echo -n "$i "; done
for i in `curl -s https://www.cloudflare.com/ips-v6`; do echo -n "$i "; done
@miohtama
miohtama / resize.svelte
Created July 7, 2023 01:04
Resizing cross-domain iframe automatically in svelte
<!--
Page to display the strategy backtest results.
- We are working hard to make iframe resize to work cross-domain,
because trade-executor HTML report is being served from a different domain
and the web browser policy prevents us to access iframe content to read its internal height
- We work around this using a postMessage hack
https://stackoverflow.com/a/44547866/315168
# Erigon modified compose.
#
# - Assumes data volume is mounted at /bsc
# - Txpool disabled
#
#
# Useful commands
# - logs: docker compose logs --follow erigon
#
# To start: