Vibe Finance
From idea to live trading in 60 seconds. Vibe‑Fi lets you build and launch instances of professional-grade automated strategies using nothing but plain English. We handle the infrastructure, allowing you to focus on what's important.
User Prompt:
When the 50-day SMA crosses above the 200-day SMA on SPY, go long. Exit when it crosses back below. Risk 1% per trade and cap exposure at 20%.
Generated Logic:
1from AlgorithmImports import *
2
3class SMACrossRiskManaged(QCAlgorithm):
4 def Initialize(self):
5 self.SetStartDate(2010, 1, 1)
6 self.SetCash(100000)
7
8 self.SetBrokerageModel(BrokerageName.Alpaca, AccountType.Cash)
9
10
11 equity = self.AddEquity("SPY", Resolution.Daily, Market.USA)
12 self.symbol = equity.Symbol
13
14 self.SetBenchmark(self.symbol)
15
16 self.fast_period = 50
17 self.slow_period = 200
18 self.atr_period = 14
19
20 self.fast = self.SMA(self.symbol, self.fast_period, Resolution.Daily)
21 self.slow = self.SMA(self.symbol, self.slow_period, Resolution.Daily)
22 self.atr = self.ATR(self.symbol, self.atr_period, MovingAverageType.Simple, Resolution.Daily)
23
24
25 self.SetWarmUp(timedelta(days=self.slow_period + 20))
26
27 self.last_signal = 0 # -1 = below, 0 = neutral/unknown, 1 = above
28 self.stop_ticket = None
29
30 self.risk_fraction = 0.01 # 1% of portfolio per trade
31 self.max_exposure = 0.20 # 20% notional cap
32 self.stop_atr_multiplier = 2.0
33
34 def OnData(self, data: Slice):
35 if self.IsWarmingUp:
36 return
37
38 bar = data.Bars.get(self.symbol)
39 if bar is None:
40 return
41
42 if not (self.fast.IsReady and self.slow.IsReady and self.atr.IsReady):
43 return
44
45 price = bar.Close
46 if price <= 0:
47 return
48
49 fast_value = self.fast.Current.Value
50 slow_value = self.slow.Current.Value
51
52 if fast_value > slow_value:
53 current_signal = 1
54 elif fast_value < slow_value:
55 current_signal = -1
56 else:
57 current_signal = self.last_signal
58
59 bullish_cross = current_signal == 1 and self.last_signal <= 0
60 bearish_cross = current_signal == -1 and self.last_signal >= 0
61
62 invested = self.Portfolio[self.symbol].Invested
63
64 if bullish_cross and not invested:
65 self.EnterLong(price)
66
67 elif bearish_cross and invested:
68 self.ExitPosition("MA cross exit")
69
70 self.last_signal = current_signal
71
72 def EnterLong(self, price: float):
73 portfolio_value = self.Portfolio.TotalPortfolioValue
74 if portfolio_value <= 0:
75 return
76
77 atr_value = self.atr.Current.Value
78 if atr_value <= 0:
79 return
80
81 stop_price = price - self.stop_atr_multiplier * atr_value
82 if stop_price <= 0 or stop_price >= price:
83 stop_price = price * 0.95
84
85 risk_per_share = price - stop_price
86 if risk_per_share <= 0:
87 return
88
89 max_risk_capital = portfolio_value * self.risk_fraction
90 qty_by_risk = max_risk_capital / risk_per_share
91
92 max_notional = portfolio_value * self.max_exposure
93 qty_by_exposure = max_notional / price
94
95 raw_qty = min(qty_by_risk, qty_by_exposure)
96 if raw_qty <= 0:
97 return
98
99 qty = int(raw_qty * 0.99)
100 if qty <= 0:
101 return
102
103 self.Debug(f"Entering long {self.symbol} | Price: {price:.2f}, Qty: {qty}, Stop: {stop_price:.2f}")
104 ticket = self.MarketOrder(self.symbol, qty)
105
106 self.CancelStop()
107
108 self.stop_ticket = self.StopMarketOrder(self.symbol, -qty, stop_price)
109 self.Debug(f"Placed stop for {self.symbol} | Qty: {-qty}, Stop: {stop_price:.2f}")
110
111 def ExitPosition(self, reason: str):
112 if not self.Portfolio[self.symbol].Invested:
113 return
114
115 self.Debug(f"Exiting {self.symbol} due to: {reason}")
116 self.CancelStop()
117 self.Liquidate(self.symbol)
118
119 def CancelStop(self):
120 if self.stop_ticket is None:
121 return
122 status = self.stop_ticket.Status
123 if status in [OrderStatus.Submitted, OrderStatus.PartiallyFilled]:
124 self.Transactions.CancelOrder(self.stop_ticket.OrderId)
125 self.stop_ticket = None
126
127 def OnOrderEvent(self, orderEvent: OrderEvent):
128 if orderEvent is None:
129 return
130
131 if orderEvent.Status == OrderStatus.Filled:
132 self.Debug(f"Order filled: {orderEvent.Symbol} | "
133 f"Qty: {orderEvent.FillQuantity} @ {orderEvent.FillPrice:.2f} | "
134 f"Direction: {orderEvent.Direction}")
135
136 if self.stop_ticket is not None and orderEvent.OrderId == self.stop_ticket.OrderId:
137 if orderEvent.Status in [OrderStatus.Filled, OrderStatus.Canceled]:
138 self.stop_ticket = None
139What you get
Conversational Design
Turn plain English into an auditable, rules‑based trading algorithm instantly.
Institutional Backtesting
Test on historical data with professional metrics like Sharpe, Drawdown, and Alpha.
Secure Execution
One-click strategy instances in isolated Docker containers, powered by the battle‑tested open source LEAN trading engine.
Version Control
Track every change, compare performance across instances, and revert safely.
Full Audit Trail
Every backtest and live instance captures configs, metrics, logs, and fills so you always know why a trade happened.
Creator Tools
Build your following by sharing strategies publicly or offering access to paid subscribers.
How it works
01
Prompt It
Explain your idea in natural language. We'll infer the instruments, venues, risk, and constraints where needed.
02
Refine It
We compile your description into a Python trading algorithm you can inspect, tweak, and validate.
03
Launch It
Launch an instance of your algorithm with one click. We'll take care of the rest.
Live demo
Demo video and interactive preview coming soon.
Pricing
Hobbyist
Free
- 2 active strategies
- Access to daily timeframes
- Paper trading only
- Basic performance metrics
Pro
$28/mo
- 10 active strategies
- Access to daily + hourly timeframes
- Trade using real money Real trading support coming soon!
- Advanced analytics
- Email support
Elite
$88/mo
- Includes everything in Pro, plus:
- Unlimited strategies
- Access to all timeframes, including minute and tick-level
- Priority support
- Account history export
- API access
FAQ
How easy is it to get started?
You can sign up in seconds with Google or GitHub. Once you're in, you can launch your first strategy instance with just one click using our pre-built templates, or create your own.
Do I own my strategies?
Absolutely. Your intellectual property is yours. We do not use your private strategies for our own trading, and you can export your logic and data at any time.
Do I need to know how to code?
Not at all. You can build purely with natural language, but we also expose the generated Python or C# code so developers can inspect, edit, and extend their strategies manually.
What markets can I trade?
Currently, we support US Equities and Crypto. Options support is on our roadmap.
Get early access
Join the waitlist and be the first to try Vibe‑Fi.
We’ll never share your email. Unsubscribe anytime.