edtechre / pybroker

Algorithmic Trading in Python with Machine Learning
https://www.pybroker.com
Other
2.09k stars 262 forks source link

How to buy and sell on the same day? How to get the price of today? #37

Closed cyoki closed 1 year ago

cyoki commented 1 year ago

Thank you for your wonderful tool.

(1) May I ask how to buy and sell on the same day? when the sell strategy is satisfied it will sell the stocks, then moved to the next day. It just ignore if there exist a buy strategy on the same day. How to make it possible to buy and sell on the same day?

(2) how to get the price of today? I want to buy the stock on the same day it satisfied the strategy, but it seems the system only allow the transactions on the next day

(3) is there any ways to get the current profit or loss percent directly? I use the code below to get the current profit

    initial_cash = ctx.config.initial_cash
    current_cash = ctx.total_market_value + ctx.cash
    profit_pct = current_cash/initial_cash - 1

(4) how can I control the buy or sell action manually? just set the sell_shares/sell_fill_price? it will sell immediately when I set them?

edtechre commented 1 year ago

Hi @cyoki,

(1) May I ask how to buy and sell on the same day? when the sell strategy is satisfied it will sell the stocks, then moved to the next day. It just ignore if there exist a buy strategy on the same day. How to make it possible to buy and sell on the same day?

You cannot buy and sell the same stock at the same time. Doing so would result in holding both a long and a short position in the same stock, which would not make sense. However, you can buy and sell different stocks on the same day using multiple executions, as demonstrated in this notebook.

(2) how to get the price of today? I want to buy the stock on the same day it satisfied the strategy, but it seems the system only allow the transactions on the next day

You cannot buy or sell stock so that it executes on the same day as the current bar. This is by design. An execution runs on each bar of data, where each bar represents a time step that has already finished. It is not possible to make a purchase or sale on the same bar because it would introduce lookahead bias. Such an action would essentially involve going back in time and having knowledge of the open, high, low, close, and volume (OHLCV) data of the bar before it completed.

You can, however, manually set the buy_fill_price or sell_fill_price to control how the order is filled.

(3) is there any ways to get the current profit or loss percent directly? I use the code below to get the current profit

The total_market_value already includes cash, so this can just be:

profit_pct = (ctx.total_market_value / ctx.config.initial_cash - 1) * 100

(4) how can I control the buy or sell action manually? just set the sell_shares/sell_fill_price? it will sell immediately when I set them?

Yes. As explained, the order will be placed on the following bar of data.