Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

"""

from pyalgotrading.strategy import StrategyOptionsBase, OptionsStrikeDirection, OptionsInstrumentDirection
from pyalgotrading.strategy import StrategyOptionsBase


class StrategyOptionsBearCallLadderIntraday(StrategyOptionsBase):
Expand All @@ -22,23 +22,22 @@ def __init__(self, *args, **kwargs):
# Parameters (currently set with default values, can be overridden from the Parameters Configuration Pane)
self._leg_one_transaction_type = self.strategy_parameters.get('LEG_ONE_TRANSACTION_TYPE', 1) # BUY: 1 | SELL: 2
self._leg_one_tradingsymbol_suffix = self.strategy_parameters.get('LEG_ONE_TRADING_SYMBOL_SUFFIX', 1) # CE: 1 | PE: 2
self._leg_one_strike_direction = self.strategy_parameters.get('LEG_ONE_STRIKE_DIRECTION', 1) # ITM: 0| ATM: 1| OTM: 2
self._leg_one_strike_direction = OptionsStrikeDirectionMap[self.strategy_parameters.get('LEG_ONE_STRIKE_DIRECTION', 1)] # ITM: 0| ATM: 1| OTM: 2
self._leg_one_number_of_strikes = self.strategy_parameters.get('LEG_ONE_NUMBER_OF_STRIKES', 0)

self._leg_two_transaction_type = self.strategy_parameters.get('LEG_TWO_TRANSACTION_TYPE', 1) # BUY: 1 | SELL: 2
self._leg_two_tradingsymbol_suffix = self.strategy_parameters.get('LEG_TWO_TRADING_SYMBOL_SUFFIX', 1) # CE: 1 | PE: 2
self._leg_two_strike_direction = self.strategy_parameters.get('LEG_TWO_STRIKE_DIRECTION', 2) # ITM: 0| ATM: 1| OTM: 2
self._leg_two_strike_direction = OptionsStrikeDirectionMap[self.strategy_parameters.get('LEG_TWO_STRIKE_DIRECTION', 2)] # ITM: 0| ATM: 1| OTM: 2
self._leg_two_number_of_strikes = self.strategy_parameters.get('LEG_TWO_NUMBER_OF_STRIKES', 2)

self._leg_three_transaction_type = self.strategy_parameters.get('LEG_THREE_TRANSACTION_TYPE', 2) # BUY: 1 | SELL: 2
self._leg_three_tradingsymbol_suffix = self.strategy_parameters.get('LEG_THREE_TRADING_SYMBOL_SUFFIX', 1) # CE: 1 | PE: 2
self._leg_three_strike_direction = self.strategy_parameters.get('LEG_THREE_STRIKE_DIRECTION', 0) # ITM: 0| ATM: 1| OTM: 2
self._leg_three_strike_direction = OptionsStrikeDirectionMap[self.strategy_parameters.get('LEG_THREE_STRIKE_DIRECTION', 0)] # ITM: 0| ATM: 1| OTM: 2
self._leg_three_number_of_strikes = self.strategy_parameters.get('LEG_THREE_NUMBER_OF_STRIKES', 2)

# Maps
self.transaction_type_map = {1: "BUY", 2: "SELL"}
self.tradingsymbol_suffix_map = {1: "CE", 2: "PE"}
self.strike_direction_map = {0: OptionsStrikeDirection.ITM, 1: OptionsStrikeDirection.ATM, 2: OptionsStrikeDirection.OTM}

# Variables
self.number_of_allowed_expiry_dates = 1
Expand All @@ -48,34 +47,23 @@ def initialize(self):
super().initialize()
self.instruments_done_for_the_day = []

def get_child_instrument_details(self, base_instrument, tradingsymbol_suffix, strike_direction, no_of_strikes):
expiry_date = self.get_allowed_expiry_dates()[0]
child_instrument = self.get_options_instrument_with_strike_direction(base_instrument, expiry_date, tradingsymbol_suffix, strike_direction, no_of_strikes)
return child_instrument

def options_instruments_set_up_local(self, base_instrument, tradingsymbol_suffix, current_close, direction=OptionsInstrumentDirection.EXACT):
expiry_dates = self.get_allowed_expiry_dates()
for expiry_date in expiry_dates:
self.options_instruments_set_up(base_instrument, direction, expiry_date, tradingsymbol_suffix, current_close)

def strategy_select_instruments_for_entry(self, candle, instruments_bucket):
selected_instruments, meta = [], []

for instrument in instruments_bucket:
if instrument not in self.instruments_done_for_the_day:
self.instruments_done_for_the_day.append(instrument)
ltp = self.broker.get_ltp(instrument)

self.options_instruments_set_up_local(instrument, "CE", ltp)
self.options_instruments_set_up_local(instrument, "PE", ltp)
self.options_instruments_set_up_all_expiries(instrument, "CE", ltp)
self.options_instruments_set_up_all_expiries(instrument, "PE", ltp)

leg_wise_list = [('LEG_ONE', self._leg_one_tradingsymbol_suffix, self._leg_one_strike_direction, self._leg_one_number_of_strikes, self._leg_one_transaction_type),
('LEG_TWO', self._leg_two_tradingsymbol_suffix, self._leg_two_strike_direction, self._leg_two_number_of_strikes, self._leg_two_transaction_type),
('LEG_THREE', self._leg_three_tradingsymbol_suffix, self._leg_three_strike_direction, self._leg_three_number_of_strikes, self._leg_three_transaction_type)]

for leg_number, tradingingsymbol_suffix, strike_direction, number_of_strikes, transaction_type in leg_wise_list:
self.logger.info(f'Processing {leg_number}...')
child_instrument = self.get_child_instrument_details(instrument, self.tradingsymbol_suffix_map[tradingingsymbol_suffix], self.strike_direction_map[strike_direction], number_of_strikes)
child_instrument = self.get_child_instrument_details(instrument, self.tradingsymbol_suffix_map[tradingingsymbol_suffix], strike_direction, number_of_strikes)
selected_instruments.append(child_instrument)
meta.append({'base_instrument': instrument, 'action': self.transaction_type_map[transaction_type]})

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

"""

from pyalgotrading.strategy import StrategyOptionsBase, OptionsStrikeDirection, OptionsInstrumentDirection
from pyalgotrading.strategy import StrategyOptionsBase


class StrategyOptionsBearPutLadderIntraday(StrategyOptionsBase):
Expand All @@ -22,23 +22,22 @@ def __init__(self, *args, **kwargs):
# Parameters (currently set with default values, can be overridden from the Parameters Configuration Pane)
self._leg_one_transaction_type = self.strategy_parameters.get('LEG_ONE_TRANSACTION_TYPE', 1) # BUY: 1 | SELL: 2
self._leg_one_tradingsymbol_suffix = self.strategy_parameters.get('LEG_ONE_TRADING_SYMBOL_SUFFIX', 2) # CE: 1 | PE: 2
self._leg_one_strike_direction = self.strategy_parameters.get('LEG_ONE_STRIKE_DIRECTION', 1) # ITM: 0| ATM: 1| OTM: 2
self._leg_one_strike_direction = OptionsStrikeDirectionMap[self.strategy_parameters.get('LEG_ONE_STRIKE_DIRECTION', 1)] # ITM: 0| ATM: 1| OTM: 2
self._leg_one_number_of_strikes = self.strategy_parameters.get('LEG_ONE_NUMBER_OF_STRIKES', 0)

self._leg_two_transaction_type = self.strategy_parameters.get('LEG_TWO_TRANSACTION_TYPE', 1) # BUY: 1 | SELL: 2
self._leg_two_tradingsymbol_suffix = self.strategy_parameters.get('LEG_TWO_TRADING_SYMBOL_SUFFIX', 2) # CE: 1 | PE: 2
self._leg_two_strike_direction = self.strategy_parameters.get('LEG_TWO_STRIKE_DIRECTION', 2) # ITM: 0| ATM: 1| OTM: 2
self._leg_two_strike_direction = OptionsStrikeDirectionMap[self.strategy_parameters.get('LEG_TWO_STRIKE_DIRECTION', 2)] # ITM: 0| ATM: 1| OTM: 2
self._leg_two_number_of_strikes = self.strategy_parameters.get('LEG_TWO_NUMBER_OF_STRIKES', 2)

self._leg_three_transaction_type = self.strategy_parameters.get('LEG_THREE_TRANSACTION_TYPE', 2) # BUY: 1 | SELL: 2
self._leg_three_tradingsymbol_suffix = self.strategy_parameters.get('LEG_THREE_TRADING_SYMBOL_SUFFIX', 2) # CE: 1 | PE: 2
self._leg_three_strike_direction = self.strategy_parameters.get('LEG_THREE_STRIKE_DIRECTION', 0) # ITM: 0| ATM: 1| OTM: 2
self._leg_three_strike_direction = OptionsStrikeDirectionMap[self.strategy_parameters.get('LEG_THREE_STRIKE_DIRECTION', 0)] # ITM: 0| ATM: 1| OTM: 2
self._leg_three_number_of_strikes = self.strategy_parameters.get('LEG_THREE_NUMBER_OF_STRIKES', 2)

# Maps
self.transaction_type_map = {1: "BUY", 2: "SELL"}
self.tradingsymbol_suffix_map = {1: "CE", 2: "PE"}
self.strike_direction_map = {0: OptionsStrikeDirection.ITM, 1: OptionsStrikeDirection.ATM, 2: OptionsStrikeDirection.OTM}

# Variables
self.number_of_allowed_expiry_dates = 1
Expand All @@ -48,36 +47,23 @@ def initialize(self):
super().initialize()
self.instruments_done_for_the_day = []

def get_child_instrument_details(self, base_instrument, tradingsymbol_suffix, strike_direction, no_of_strikes):
expiry_date = self.get_allowed_expiry_dates()[0]
child_instrument = self.get_options_instrument_with_strike_direction(base_instrument, expiry_date, tradingsymbol_suffix, strike_direction, no_of_strikes)
return child_instrument

def options_instruments_set_up_local(self, base_instrument, tradingsymbol_suffix, current_close, direction=OptionsInstrumentDirection.EXACT):
expiry_dates = self.get_allowed_expiry_dates()
for expiry_date in expiry_dates:
self.options_instruments_set_up(base_instrument, direction, expiry_date, tradingsymbol_suffix, current_close)

def strategy_select_instruments_for_entry(self, candle, instruments_bucket):
selected_instruments, meta = [], []

for instrument in instruments_bucket:
if instrument not in self.instruments_done_for_the_day:
self.instruments_done_for_the_day.append(instrument)

ltp = self.broker.get_ltp(instrument)

# setup child instruments
self.options_instruments_set_up_local(instrument, "CE", ltp)
self.options_instruments_set_up_local(instrument, "PE", ltp)
self.options_instruments_set_up_all_expiries(instrument, "CE", ltp)
self.options_instruments_set_up_all_expiries(instrument, "PE", ltp)

leg_wise_list = [('LEG_ONE', self._leg_one_tradingsymbol_suffix, self._leg_one_strike_direction, self._leg_one_number_of_strikes, self._leg_one_transaction_type),
('LEG_TWO', self._leg_two_tradingsymbol_suffix, self._leg_two_strike_direction, self._leg_two_number_of_strikes, self._leg_two_transaction_type),
('LEG_THREE', self._leg_three_tradingsymbol_suffix, self._leg_three_strike_direction, self._leg_three_number_of_strikes, self._leg_three_transaction_type)]

for leg_number, tradingingsymbol_suffix, strike_direction, number_of_strikes, transaction_type in leg_wise_list:
self.logger.info(f'Processing {leg_number}...')
child_instrument = self.get_child_instrument_details(instrument, self.tradingsymbol_suffix_map[tradingingsymbol_suffix], self.strike_direction_map[strike_direction], number_of_strikes)
child_instrument = self.get_child_instrument_details(instrument, self.tradingsymbol_suffix_map[tradingingsymbol_suffix], strike_direction, number_of_strikes)
selected_instruments.append(child_instrument)
meta.append({'base_instrument': instrument, 'action': self.transaction_type_map[transaction_type]})

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

"""

from pyalgotrading.strategy import StrategyOptionsBase, OptionsStrikeDirection, OptionsInstrumentDirection
from pyalgotrading.strategy import StrategyOptionsBase


class StrategyOptionsBullCallLadderIntraday(StrategyOptionsBase):
Expand All @@ -22,23 +22,22 @@ def __init__(self, *args, **kwargs):
# Parameters (currently set with default values, can be overridden from the Parameters Configuration Pane)
self._leg_one_transaction_type = self.strategy_parameters.get('LEG_ONE_TRANSACTION_TYPE', 1) # BUY: 1 | SELL: 2
self._leg_one_tradingsymbol_suffix = self.strategy_parameters.get('LEG_ONE_TRADING_SYMBOL_SUFFIX', 1) # CE: 1 | PE: 2
self._leg_one_strike_direction = self.strategy_parameters.get('LEG_ONE_STRIKE_DIRECTION', 1) # ITM: 0| ATM: 1| OTM: 2
self._leg_one_strike_direction = OptionsStrikeDirectionMap[self.strategy_parameters.get('LEG_ONE_STRIKE_DIRECTION', 1)] # ITM: 0| ATM: 1| OTM: 2
self._leg_one_number_of_strikes = self.strategy_parameters.get('LEG_ONE_NUMBER_OF_STRIKES', 0)

self._leg_two_transaction_type = self.strategy_parameters.get('LEG_TWO_TRANSACTION_TYPE', 1) # BUY: 1 | SELL: 2
self._leg_two_tradingsymbol_suffix = self.strategy_parameters.get('LEG_TWO_TRADING_SYMBOL_SUFFIX', 1) # CE: 1 | PE: 2
self._leg_two_strike_direction = self.strategy_parameters.get('LEG_TWO_STRIKE_DIRECTION', 2) # ITM: 0| ATM: 1| OTM: 2
self._leg_two_strike_direction = OptionsStrikeDirectionMap[self.strategy_parameters.get('LEG_TWO_STRIKE_DIRECTION', 2)] # ITM: 0| ATM: 1| OTM: 2
self._leg_two_number_of_strikes = self.strategy_parameters.get('LEG_TWO_NUMBER_OF_STRIKES', 2)

self._leg_three_transaction_type = self.strategy_parameters.get('LEG_THREE_TRANSACTION_TYPE', 2) # BUY: 1 | SELL: 2
self._leg_three_tradingsymbol_suffix = self.strategy_parameters.get('LEG_THREE_TRADING_SYMBOL_SUFFIX', 1) # CE: 1 | PE: 2
self._leg_three_strike_direction = self.strategy_parameters.get('LEG_THREE_STRIKE_DIRECTION', 2) # ITM: 0| ATM: 1| OTM: 2
self._leg_three_strike_direction = OptionsStrikeDirectionMap[self.strategy_parameters.get('LEG_THREE_STRIKE_DIRECTION', 2)] # ITM: 0| ATM: 1| OTM: 2
self._leg_three_number_of_strikes = self.strategy_parameters.get('LEG_THREE_NUMBER_OF_STRIKES', 4)

# Maps
self.transaction_type_map = {1: "BUY", 2: "SELL"}
self.tradingsymbol_suffix_map = {1: "CE", 2: "PE"}
self.strike_direction_map = {0: OptionsStrikeDirection.ITM, 1: OptionsStrikeDirection.ATM, 2: OptionsStrikeDirection.OTM}

# Variables
self.number_of_allowed_expiry_dates = 1
Expand All @@ -48,36 +47,23 @@ def initialize(self):
super().initialize()
self.instruments_done_for_the_day = []

def get_child_instrument_details(self, base_instrument, tradingsymbol_suffix, strike_direction, no_of_strikes):
expiry_date = self.get_allowed_expiry_dates()[0]
child_instrument = self.get_options_instrument_with_strike_direction(base_instrument, expiry_date, tradingsymbol_suffix, strike_direction, no_of_strikes)
return child_instrument

def options_instruments_set_up_local(self, base_instrument, tradingsymbol_suffix, current_close, direction=OptionsInstrumentDirection.EXACT):
expiry_dates = self.get_allowed_expiry_dates()
for expiry_date in expiry_dates:
self.options_instruments_set_up(base_instrument, direction, expiry_date, tradingsymbol_suffix, current_close)

def strategy_select_instruments_for_entry(self, candle, instruments_bucket):
selected_instruments, meta = [], []

for instrument in instruments_bucket:
if instrument not in self.instruments_done_for_the_day:
self.instruments_done_for_the_day.append(instrument)

ltp = self.broker.get_ltp(instrument)

# setup child instruments
self.options_instruments_set_up_local(instrument, "CE", ltp)
self.options_instruments_set_up_local(instrument, "PE", ltp)
self.options_instruments_set_up_all_expiries(instrument, "CE", ltp)
self.options_instruments_set_up_all_expiries(instrument, "PE", ltp)

leg_wise_list = [('LEG_ONE', self._leg_one_tradingsymbol_suffix, self._leg_one_strike_direction, self._leg_one_number_of_strikes, self._leg_one_transaction_type),
('LEG_TWO', self._leg_two_tradingsymbol_suffix, self._leg_two_strike_direction, self._leg_two_number_of_strikes, self._leg_two_transaction_type),
('LEG_THREE', self._leg_three_tradingsymbol_suffix, self._leg_three_strike_direction, self._leg_three_number_of_strikes, self._leg_three_transaction_type)]

for leg_number, tradingingsymbol_suffix, strike_direction, number_of_strikes, transaction_type in leg_wise_list:
self.logger.info(f'Processing {leg_number}...')
child_instrument = self.get_child_instrument_details(instrument, self.tradingsymbol_suffix_map[tradingingsymbol_suffix], self.strike_direction_map[strike_direction], number_of_strikes)
child_instrument = self.get_child_instrument_details(instrument, self.tradingsymbol_suffix_map[tradingingsymbol_suffix], strike_direction, number_of_strikes)
selected_instruments.append(child_instrument)
meta.append({'base_instrument': instrument, 'action': self.transaction_type_map[transaction_type]})

Expand Down
Loading