├── README.md └── straddle_backtest_bnf.ipynb /README.md: -------------------------------------------------------------------------------- 1 | # Algorithmic-Trading---Backtesting---Banknifty-Straddle-using-Python 2 | Python code of complete backtest of Banknifty Option Straddle 3 | -------------------------------------------------------------------------------- /straddle_backtest_bnf.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "Bank Nifty short Straddle\n", 8 | "\n", 9 | "Selling 1 CE ATM & 1 PE ATM option at 9:20 and exit at 15:10 with a stoploss of 20% each" 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": 1, 15 | "metadata": {}, 16 | "outputs": [], 17 | "source": [ 18 | "#importing all liabraries\n", 19 | "import pandas as pd\n", 20 | "import numpy as np\n", 21 | "import datetime\n", 22 | "import matplotlib.pyplot as plt\n", 23 | "from glob import glob\n", 24 | "from dateutil.relativedelta import relativedelta,TH" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": 63, 30 | "metadata": {}, 31 | "outputs": [], 32 | "source": [ 33 | "#fething all data\n", 34 | "path=pd.DataFrame(glob('E:/sample_nfo_2019-20_data/*'),columns=['location'])\n", 35 | "path['datadate']=path['location'].apply(lambda x: x.split('_')[-1].split('.')[0])\n", 36 | "path['datadate']=path['datadate'].apply(lambda x: datetime.datetime.strptime(x,'%Y-%m-%d'))\n", 37 | "path=path.sort_values('datadate')\n", 38 | "path.reset_index(drop=True,inplace=True)" 39 | ] 40 | }, 41 | { 42 | "cell_type": "code", 43 | "execution_count": 64, 44 | "metadata": {}, 45 | "outputs": [], 46 | "source": [ 47 | "trade_log=pd.DataFrame(columns=['Entry_date_time', 'Future_price', 'ATM', 'Days_to_expiry',\n", 48 | " 'CE_symbol','CE_entry_price','CE_exit_price','CE_exit_datetime','CE_pnl',\n", 49 | " 'PE_symbol','PE_entry_price','PE_exit_price','PE_exit_datetime','PE_pnl', 'Total_pnl'])" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 65, 55 | "metadata": { 56 | "code_folding": [] 57 | }, 58 | "outputs": [ 59 | { 60 | "name": "stdout", 61 | "output_type": "stream", 62 | "text": [ 63 | "0\n", 64 | "PE SL hit\n", 65 | "CE SL hit\n", 66 | "1\n", 67 | "PE SL hit\n", 68 | "CE SL hit\n", 69 | "2\n", 70 | "CE SL hit\n", 71 | "PE SL hit\n", 72 | "3\n", 73 | "PE SL hit\n", 74 | "CE SL hit\n", 75 | "4\n", 76 | "PE SL hit\n", 77 | "CE exit at 15:10\n", 78 | "5\n", 79 | "CE SL hit\n", 80 | "PE exit at 15:10\n", 81 | "6\n", 82 | "PE SL hit\n", 83 | "CE exit at 15:10\n", 84 | "7\n", 85 | "PE SL hit\n", 86 | "CE exit at 15:10\n", 87 | "8\n", 88 | "PE SL hit\n", 89 | "CE exit at 15:10\n", 90 | "9\n", 91 | "CE & PE did not hit SL, both exit at 15:10\n", 92 | "10\n", 93 | "CE SL hit\n", 94 | "PE exit at 15:10\n", 95 | "11\n", 96 | "CE SL hit\n", 97 | "PE exit at 15:10\n", 98 | "12\n", 99 | "PE SL hit\n", 100 | "CE exit at 15:10\n", 101 | "13\n", 102 | "PE SL hit\n", 103 | "CE exit at 15:10\n", 104 | "14\n", 105 | "CE SL hit\n", 106 | "PE exit at 15:10\n", 107 | "15\n", 108 | "CE & PE did not hit SL, both exit at 15:10\n", 109 | "16\n", 110 | "PE SL hit\n", 111 | "CE exit at 15:10\n", 112 | "17\n", 113 | "PE SL hit\n", 114 | "CE SL hit\n", 115 | "18\n", 116 | "PE SL hit\n", 117 | "CE exit at 15:10\n", 118 | "19\n", 119 | "PE SL hit\n", 120 | "CE exit at 15:10\n" 121 | ] 122 | } 123 | ], 124 | "source": [ 125 | "for index, row in path.iterrows():\n", 126 | " try:\n", 127 | " print(index)\n", 128 | " data=pd.read_pickle(row['location'])\n", 129 | " \n", 130 | " entry_datetime=datetime.datetime.combine(row['datadate'].date(),datetime.time(9,20))\n", 131 | " exit_dateitme=datetime.datetime.combine(row['datadate'].date(),datetime.time(15,10))\n", 132 | "\n", 133 | " # bnf future data & ATM\n", 134 | " data['expiry_type']=np.where((data['instrument_type']=='FUT'),(data['ticker'].apply(lambda x:x.split('-')[-1].split('.')[0])),\"\")\n", 135 | " current_month_exp= 'I' # I-current month expiry, II-next month expiry, III- far month expiry\n", 136 | " instrument='BANKNIFTY'\n", 137 | " future_data=data[(data['instrument_type']=='FUT') & (data['instrument_name']==instrument) & (data['expiry_type']==current_month_exp)]\n", 138 | " future_data.reset_index(drop=True,inplace=True)\n", 139 | " atm=future_data[future_data['datetime']==entry_datetime]['open'].iloc[0]\n", 140 | " base_price=100\n", 141 | " atm=base_price*round(atm/base_price)\n", 142 | "\n", 143 | " # CE data & PE data\n", 144 | " nearest_expiry=row['datadate'].date()+relativedelta(weekday=TH)\n", 145 | " ce_data=data[(data['instrument_type']=='CE') & (data['instrument_name']==instrument) & (data['strike_price']==atm) & ((data['expiry_date']==nearest_expiry)|(data['expiry_date']==nearest_expiry-datetime.timedelta(days=1))|(data['expiry_date']==nearest_expiry-datetime.timedelta(days=2)))]\n", 146 | " ce_data.reset_index(drop=True,inplace=True)\n", 147 | " pe_data=data[(data['instrument_type']=='PE') & (data['instrument_name']==instrument) & (data['strike_price']==atm) & ((data['expiry_date']==nearest_expiry)|(data['expiry_date']==nearest_expiry-datetime.timedelta(days=1))|(data['expiry_date']==nearest_expiry-datetime.timedelta(days=2)))]\n", 148 | " pe_data.reset_index(drop=True,inplace=True)\n", 149 | "\n", 150 | " #symbol & entry price\n", 151 | " ce_symbol=ce_data['ticker'].iloc[0]\n", 152 | " pe_symbol=pe_data['ticker'].iloc[0]\n", 153 | " future_price= future_data[future_data['datetime']==entry_datetime]['open'].iloc[0]\n", 154 | " ce_entry_price= ce_data[ce_data['datetime']==entry_datetime]['close'].iloc[0]\n", 155 | " pe_entry_price=pe_data[pe_data['datetime']==entry_datetime]['close'].iloc[0]\n", 156 | "\n", 157 | " #test data\n", 158 | " future_data=future_data[['datetime','close']].set_index(['datetime'])\n", 159 | " ce_data=ce_data[['datetime','close']].set_index(['datetime'])\n", 160 | " pe_data=pe_data[['datetime','close']].set_index(['datetime'])\n", 161 | " intraday_data=pd.concat([future_data,ce_data,pe_data],axis=1)\n", 162 | " intraday_data.columns=['future_close','ce_close','pe_close']\n", 163 | " intraday_data=intraday_data.ffill()\n", 164 | " intraday_data.reset_index(inplace=True)\n", 165 | " entry_datetime_index=intraday_data[intraday_data['datetime']==entry_datetime].index[0]\n", 166 | " exit_datetime_index=intraday_data[intraday_data['datetime']==exit_dateitme].index[0]\n", 167 | " intraday_data=intraday_data[entry_datetime_index:exit_datetime_index+1]\n", 168 | " intraday_data['ce_pnl']=0\n", 169 | " intraday_data['pe_pnl']=0\n", 170 | " intraday_data.reset_index(drop=True,inplace=True)\n", 171 | "\n", 172 | " #stoploss\n", 173 | " stop_loss= 20/100\n", 174 | " ce_stop_loss=ce_entry_price+ce_entry_price*stop_loss\n", 175 | " pe_stop_loss=pe_entry_price+pe_entry_price*stop_loss\n", 176 | "\n", 177 | " #backtest\n", 178 | " ce_stop_loss_counter=0\n", 179 | " pe_stop_loss_counter=0\n", 180 | " ce_exit_datetime=''\n", 181 | " pe_exit_datetime=''\n", 182 | " ce_exit_price=0\n", 183 | " pe_exit_price=0\n", 184 | " ce_pnl=0\n", 185 | " pe_pnl=0\n", 186 | " pnl=0\n", 187 | "\n", 188 | " for index, row in intraday_data.iterrows():\n", 189 | " ce_ltp=row['ce_close']\n", 190 | " pe_ltp=row['pe_close']\n", 191 | " #print(f\"{row['datetime']}::{ce_ltp}::{pe_ltp}\")\n", 192 | " #Exit crateria\n", 193 | " #1. CE & PE didn't hit SL & both reach exit time limit 15:10\n", 194 | " if (ce_stop_loss_counter==0) & (pe_stop_loss_counter==0) & (row['datetime']==exit_dateitme):\n", 195 | " ce_pnl=ce_entry_price-ce_ltp\n", 196 | " pe_pnl=pe_entry_price-pe_ltp\n", 197 | " ce_stop_loss_counter=1\n", 198 | " pe_stop_loss_counter=1\n", 199 | " ce_exit_datetime=row['datetime']\n", 200 | " pe_exit_datetime=row['datetime']\n", 201 | " ce_exit_price=ce_ltp\n", 202 | " pe_exit_price=pe_ltp\n", 203 | " intraday_data.loc[index,'ce_pnl']=ce_pnl\n", 204 | " intraday_data.loc[index,'pe_pnl']=pe_pnl\n", 205 | " print('CE & PE did not hit SL, both exit at 15:10')\n", 206 | " pnl=ce_pnl+pe_pnl\n", 207 | " break \n", 208 | " #2. CE is now hit SL, none were hit SL till now\n", 209 | " elif (ce_ltp>=ce_stop_loss) & (ce_stop_loss_counter==0) & (pe_stop_loss_counter==0):\n", 210 | " ce_pnl=ce_entry_price-ce_stop_loss\n", 211 | " pe_pnl=pe_entry_price-pe_ltp\n", 212 | " ce_stop_loss_counter=1\n", 213 | " ce_exit_datetime=row['datetime']\n", 214 | " ce_exit_price=ce_stop_loss\n", 215 | " intraday_data.loc[index,'ce_pnl']=ce_pnl\n", 216 | " intraday_data.loc[index,'pe_pnl']=pe_pnl\n", 217 | " print('CE SL hit')\n", 218 | " pnl=ce_pnl+pe_pnl\n", 219 | "\n", 220 | " #3. PE is now hit SL, none were hit SL till now\n", 221 | " elif (pe_ltp>=pe_stop_loss) & (ce_stop_loss_counter==0) & (pe_stop_loss_counter==0):\n", 222 | " ce_pnl=ce_entry_price-ce_ltp\n", 223 | " pe_pnl=pe_entry_price-pe_stop_loss\n", 224 | " pe_stop_loss_counter=1\n", 225 | " pe_exit_datetime=row['datetime']\n", 226 | " pe_exit_price=pe_stop_loss\n", 227 | " intraday_data.loc[index,'ce_pnl']=ce_pnl\n", 228 | " intraday_data.loc[index,'pe_pnl']=pe_pnl\n", 229 | " print('PE SL hit')\n", 230 | " pnl=ce_pnl+pe_pnl\n", 231 | " #4. CE was hit SL, (PE is either hit SL or reach exit time limit 15:10)\n", 232 | " elif (ce_stop_loss_counter==1) & (pe_stop_loss_counter==0):\n", 233 | " if (pe_ltp>=pe_stop_loss) & (row['datetime']=ce_stop_loss) & (row['datetime']\n", 314 | "\n", 327 | "\n", 328 | " \n", 329 | " \n", 330 | " \n", 331 | " \n", 332 | " \n", 333 | " \n", 334 | " \n", 335 | " \n", 336 | " \n", 337 | " \n", 338 | " \n", 339 | " \n", 340 | " \n", 341 | " \n", 342 | " \n", 343 | " \n", 344 | " \n", 345 | " \n", 346 | " \n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | " \n", 451 | " \n", 452 | " \n", 453 | " \n", 454 | " \n", 455 | " \n", 456 | " \n", 457 | " \n", 458 | " \n", 459 | " \n", 460 | " \n", 461 | " \n", 462 | " \n", 463 | " \n", 464 | " \n", 465 | " \n", 466 | " \n", 467 | " \n", 468 | " \n", 469 | " \n", 470 | " \n", 471 | " \n", 472 | " \n", 473 | " \n", 474 | " \n", 475 | " \n", 476 | " \n", 477 | " \n", 478 | " \n", 479 | " \n", 480 | " \n", 481 | " \n", 482 | " \n", 483 | " \n", 484 | " \n", 485 | " \n", 486 | " \n", 487 | " \n", 488 | " \n", 489 | " \n", 490 | " \n", 491 | " \n", 492 | " \n", 493 | " \n", 494 | " \n", 495 | " \n", 496 | " \n", 497 | " \n", 498 | " \n", 499 | " \n", 500 | " \n", 501 | " \n", 502 | " \n", 503 | " \n", 504 | " \n", 505 | " \n", 506 | " \n", 507 | " \n", 508 | " \n", 509 | " \n", 510 | " \n", 511 | " \n", 512 | " \n", 513 | " \n", 514 | " \n", 515 | " \n", 516 | " \n", 517 | " \n", 518 | " \n", 519 | " \n", 520 | " \n", 521 | " \n", 522 | " \n", 523 | " \n", 524 | " \n", 525 | " \n", 526 | " \n", 527 | " \n", 528 | " \n", 529 | " \n", 530 | " \n", 531 | " \n", 532 | " \n", 533 | " \n", 534 | " \n", 535 | " \n", 536 | " \n", 537 | " \n", 538 | " \n", 539 | " \n", 540 | " \n", 541 | " \n", 542 | " \n", 543 | " \n", 544 | " \n", 545 | " \n", 546 | " \n", 547 | " \n", 548 | " \n", 549 | " \n", 550 | " \n", 551 | " \n", 552 | " \n", 553 | " \n", 554 | " \n", 555 | " \n", 556 | " \n", 557 | " \n", 558 | " \n", 559 | " \n", 560 | " \n", 561 | " \n", 562 | " \n", 563 | " \n", 564 | " \n", 565 | " \n", 566 | " \n", 567 | " \n", 568 | " \n", 569 | " \n", 570 | " \n", 571 | " \n", 572 | " \n", 573 | " \n", 574 | " \n", 575 | " \n", 576 | " \n", 577 | " \n", 578 | " \n", 579 | " \n", 580 | " \n", 581 | " \n", 582 | " \n", 583 | " \n", 584 | " \n", 585 | " \n", 586 | " \n", 587 | " \n", 588 | " \n", 589 | " \n", 590 | " \n", 591 | " \n", 592 | " \n", 593 | " \n", 594 | " \n", 595 | " \n", 596 | " \n", 597 | " \n", 598 | " \n", 599 | " \n", 600 | " \n", 601 | " \n", 602 | " \n", 603 | " \n", 604 | " \n", 605 | " \n", 606 | " \n", 607 | " \n", 608 | " \n", 609 | " \n", 610 | " \n", 611 | " \n", 612 | " \n", 613 | " \n", 614 | " \n", 615 | " \n", 616 | " \n", 617 | " \n", 618 | " \n", 619 | " \n", 620 | " \n", 621 | " \n", 622 | " \n", 623 | " \n", 624 | " \n", 625 | " \n", 626 | " \n", 627 | " \n", 628 | " \n", 629 | " \n", 630 | " \n", 631 | " \n", 632 | " \n", 633 | " \n", 634 | " \n", 635 | " \n", 636 | " \n", 637 | " \n", 638 | " \n", 639 | " \n", 640 | " \n", 641 | " \n", 642 | " \n", 643 | " \n", 644 | " \n", 645 | " \n", 646 | " \n", 647 | " \n", 648 | " \n", 649 | " \n", 650 | " \n", 651 | " \n", 652 | " \n", 653 | " \n", 654 | " \n", 655 | " \n", 656 | " \n", 657 | " \n", 658 | " \n", 659 | " \n", 660 | " \n", 661 | " \n", 662 | " \n", 663 | " \n", 664 | " \n", 665 | " \n", 666 | " \n", 667 | " \n", 668 | " \n", 669 | " \n", 670 | " \n", 671 | " \n", 672 | " \n", 673 | " \n", 674 | " \n", 675 | " \n", 676 | " \n", 677 | " \n", 678 | " \n", 679 | " \n", 680 | " \n", 681 | " \n", 682 | " \n", 683 | " \n", 684 | " \n", 685 | " \n", 686 | " \n", 687 | " \n", 688 | " \n", 689 | " \n", 690 | " \n", 691 | " \n", 692 | " \n", 693 | " \n", 694 | " \n", 695 | " \n", 696 | " \n", 697 | " \n", 698 | " \n", 699 | " \n", 700 | " \n", 701 | " \n", 702 | " \n", 703 | " \n", 704 | " \n", 705 | " \n", 706 | " \n", 707 | " \n", 708 | " \n", 709 | " \n", 710 | "
Entry_date_timeFuture_priceATMDays_to_expiryCE_symbolCE_entry_priceCE_exit_priceCE_exit_datetimeCE_pnlPE_symbolPE_entry_pricePE_exit_pricePE_exit_datetimePE_pnlTotal_pnl
02019-01-01 09:20:0027260.00273002BANKNIFTY03JAN1927300CE.NFO100.00120.002019-01-01 14:31:00-20.00BANKNIFTY03JAN1927300PE.NFO225.60270.722019-01-01 09:54:00-45.12-65.12
12019-01-02 09:20:0027427.00274001BANKNIFTY03JAN1927400CE.NFO99.05118.862019-01-02 10:21:00-19.81BANKNIFTY03JAN1927400PE.NFO157.55189.062019-01-02 09:35:00-31.51-51.32
22019-01-03 09:20:0027241.10272000BANKNIFTY03JAN1927200CE.NFO48.1057.722019-01-03 09:38:00-9.62BANKNIFTY03JAN1927200PE.NFO135.30162.362019-01-03 11:36:00-27.06-36.68
32019-01-04 09:20:0027177.30272006BANKNIFTY10JAN1927200CE.NFO179.60215.522019-01-04 11:41:00-35.92BANKNIFTY10JAN1927200PE.NFO283.05339.662019-01-04 09:45:00-56.61-92.53
42019-01-07 09:20:0027508.20275003BANKNIFTY10JAN1927500CE.NFO137.7582.352019-01-07 15:10:0055.40BANKNIFTY10JAN1927500PE.NFO204.00244.802019-01-07 14:45:00-40.8014.60
52019-01-08 09:20:0027327.65273002BANKNIFTY10JAN1927300CE.NFO110.30132.362019-01-08 09:49:00-22.06BANKNIFTY10JAN1927300PE.NFO199.5070.252019-01-08 15:10:00129.25107.19
62019-01-09 09:20:0027709.45277001BANKNIFTY10JAN1927700CE.NFO81.8582.652019-01-09 15:10:00-0.80BANKNIFTY10JAN1927700PE.NFO167.60201.122019-01-09 10:05:00-33.52-34.32
72019-01-10 09:20:0027702.45277000BANKNIFTY10JAN1927700CE.NFO44.150.052019-01-10 15:10:0044.10BANKNIFTY10JAN1927700PE.NFO120.15144.182019-01-10 09:37:00-24.0320.07
82019-01-11 09:20:0027665.50277006BANKNIFTY17JAN1927700CE.NFO172.10119.752019-01-11 15:10:0052.35BANKNIFTY17JAN1927700PE.NFO259.00310.802019-01-11 10:44:00-51.800.55
92019-01-14 09:20:0027397.90274003BANKNIFTY17JAN1927400CE.NFO141.30118.502019-01-14 15:10:0022.80BANKNIFTY17JAN1927400PE.NFO221.90216.002019-01-14 15:10:005.9028.70
102019-01-15 09:20:0027437.60274002BANKNIFTY17JAN1927400CE.NFO138.10165.722019-01-15 11:30:00-27.62BANKNIFTY17JAN1927400PE.NFO160.35112.602019-01-15 15:10:0047.7520.13
112019-01-16 09:20:0027537.00275001BANKNIFTY17JAN1927500CE.NFO99.30119.162019-01-16 09:30:00-19.86BANKNIFTY17JAN1927500PE.NFO127.2583.452019-01-16 15:10:0043.8023.94
122019-01-17 09:20:0027581.15276000BANKNIFTY17JAN1927600CE.NFO26.000.102019-01-17 15:10:0025.90BANKNIFTY17JAN1927600PE.NFO98.50118.202019-01-17 10:30:00-19.706.20
132019-01-18 09:20:0027615.00276006BANKNIFTY24JAN1927600CE.NFO166.05151.302019-01-18 15:10:0014.75BANKNIFTY24JAN1927600PE.NFO207.45248.942019-01-18 09:28:00-41.49-26.74
142019-01-21 09:20:0027460.65275003BANKNIFTY24JAN1927500CE.NFO151.30181.562019-01-21 09:40:00-30.26BANKNIFTY24JAN1927500PE.NFO202.45143.302019-01-21 15:10:0059.1528.89
152019-01-22 09:20:0027507.90275002BANKNIFTY24JAN1927500CE.NFO141.45142.852019-01-22 15:10:00-1.40BANKNIFTY24JAN1927500PE.NFO176.25141.552019-01-22 15:10:0034.7033.30
162019-01-23 09:20:0027547.55275001BANKNIFTY24JAN1927500CE.NFO148.0031.202019-01-23 15:10:00116.80BANKNIFTY24JAN1927500PE.NFO107.10128.522019-01-23 14:29:00-21.4295.38
172019-01-24 09:20:0027288.00273000BANKNIFTY24JAN1927300CE.NFO36.8044.162019-01-24 10:46:00-7.36BANKNIFTY24JAN1927300PE.NFO91.45109.742019-01-24 09:24:00-18.29-25.65
182019-01-25 09:20:0027435.00274006BANKNIFTY31JAN1927400CE.NFO224.35109.752019-01-25 15:10:00114.60BANKNIFTY31JAN1927400PE.NFO165.20198.242019-01-25 13:36:00-33.0481.56
192019-01-28 09:20:0027090.00271003BANKNIFTY31JAN1927100CE.NFO204.0059.952019-01-28 15:10:00144.05BANKNIFTY31JAN1927100PE.NFO182.00218.402019-01-28 09:34:00-36.40107.65
\n", 711 | "" 712 | ], 713 | "text/plain": [ 714 | " Entry_date_time Future_price ATM Days_to_expiry \\\n", 715 | "0 2019-01-01 09:20:00 27260.00 27300 2 \n", 716 | "1 2019-01-02 09:20:00 27427.00 27400 1 \n", 717 | "2 2019-01-03 09:20:00 27241.10 27200 0 \n", 718 | "3 2019-01-04 09:20:00 27177.30 27200 6 \n", 719 | "4 2019-01-07 09:20:00 27508.20 27500 3 \n", 720 | "5 2019-01-08 09:20:00 27327.65 27300 2 \n", 721 | "6 2019-01-09 09:20:00 27709.45 27700 1 \n", 722 | "7 2019-01-10 09:20:00 27702.45 27700 0 \n", 723 | "8 2019-01-11 09:20:00 27665.50 27700 6 \n", 724 | "9 2019-01-14 09:20:00 27397.90 27400 3 \n", 725 | "10 2019-01-15 09:20:00 27437.60 27400 2 \n", 726 | "11 2019-01-16 09:20:00 27537.00 27500 1 \n", 727 | "12 2019-01-17 09:20:00 27581.15 27600 0 \n", 728 | "13 2019-01-18 09:20:00 27615.00 27600 6 \n", 729 | "14 2019-01-21 09:20:00 27460.65 27500 3 \n", 730 | "15 2019-01-22 09:20:00 27507.90 27500 2 \n", 731 | "16 2019-01-23 09:20:00 27547.55 27500 1 \n", 732 | "17 2019-01-24 09:20:00 27288.00 27300 0 \n", 733 | "18 2019-01-25 09:20:00 27435.00 27400 6 \n", 734 | "19 2019-01-28 09:20:00 27090.00 27100 3 \n", 735 | "\n", 736 | " CE_symbol CE_entry_price CE_exit_price \\\n", 737 | "0 BANKNIFTY03JAN1927300CE.NFO 100.00 120.00 \n", 738 | "1 BANKNIFTY03JAN1927400CE.NFO 99.05 118.86 \n", 739 | "2 BANKNIFTY03JAN1927200CE.NFO 48.10 57.72 \n", 740 | "3 BANKNIFTY10JAN1927200CE.NFO 179.60 215.52 \n", 741 | "4 BANKNIFTY10JAN1927500CE.NFO 137.75 82.35 \n", 742 | "5 BANKNIFTY10JAN1927300CE.NFO 110.30 132.36 \n", 743 | "6 BANKNIFTY10JAN1927700CE.NFO 81.85 82.65 \n", 744 | "7 BANKNIFTY10JAN1927700CE.NFO 44.15 0.05 \n", 745 | "8 BANKNIFTY17JAN1927700CE.NFO 172.10 119.75 \n", 746 | "9 BANKNIFTY17JAN1927400CE.NFO 141.30 118.50 \n", 747 | "10 BANKNIFTY17JAN1927400CE.NFO 138.10 165.72 \n", 748 | "11 BANKNIFTY17JAN1927500CE.NFO 99.30 119.16 \n", 749 | "12 BANKNIFTY17JAN1927600CE.NFO 26.00 0.10 \n", 750 | "13 BANKNIFTY24JAN1927600CE.NFO 166.05 151.30 \n", 751 | "14 BANKNIFTY24JAN1927500CE.NFO 151.30 181.56 \n", 752 | "15 BANKNIFTY24JAN1927500CE.NFO 141.45 142.85 \n", 753 | "16 BANKNIFTY24JAN1927500CE.NFO 148.00 31.20 \n", 754 | "17 BANKNIFTY24JAN1927300CE.NFO 36.80 44.16 \n", 755 | "18 BANKNIFTY31JAN1927400CE.NFO 224.35 109.75 \n", 756 | "19 BANKNIFTY31JAN1927100CE.NFO 204.00 59.95 \n", 757 | "\n", 758 | " CE_exit_datetime CE_pnl PE_symbol PE_entry_price \\\n", 759 | "0 2019-01-01 14:31:00 -20.00 BANKNIFTY03JAN1927300PE.NFO 225.60 \n", 760 | "1 2019-01-02 10:21:00 -19.81 BANKNIFTY03JAN1927400PE.NFO 157.55 \n", 761 | "2 2019-01-03 09:38:00 -9.62 BANKNIFTY03JAN1927200PE.NFO 135.30 \n", 762 | "3 2019-01-04 11:41:00 -35.92 BANKNIFTY10JAN1927200PE.NFO 283.05 \n", 763 | "4 2019-01-07 15:10:00 55.40 BANKNIFTY10JAN1927500PE.NFO 204.00 \n", 764 | "5 2019-01-08 09:49:00 -22.06 BANKNIFTY10JAN1927300PE.NFO 199.50 \n", 765 | "6 2019-01-09 15:10:00 -0.80 BANKNIFTY10JAN1927700PE.NFO 167.60 \n", 766 | "7 2019-01-10 15:10:00 44.10 BANKNIFTY10JAN1927700PE.NFO 120.15 \n", 767 | "8 2019-01-11 15:10:00 52.35 BANKNIFTY17JAN1927700PE.NFO 259.00 \n", 768 | "9 2019-01-14 15:10:00 22.80 BANKNIFTY17JAN1927400PE.NFO 221.90 \n", 769 | "10 2019-01-15 11:30:00 -27.62 BANKNIFTY17JAN1927400PE.NFO 160.35 \n", 770 | "11 2019-01-16 09:30:00 -19.86 BANKNIFTY17JAN1927500PE.NFO 127.25 \n", 771 | "12 2019-01-17 15:10:00 25.90 BANKNIFTY17JAN1927600PE.NFO 98.50 \n", 772 | "13 2019-01-18 15:10:00 14.75 BANKNIFTY24JAN1927600PE.NFO 207.45 \n", 773 | "14 2019-01-21 09:40:00 -30.26 BANKNIFTY24JAN1927500PE.NFO 202.45 \n", 774 | "15 2019-01-22 15:10:00 -1.40 BANKNIFTY24JAN1927500PE.NFO 176.25 \n", 775 | "16 2019-01-23 15:10:00 116.80 BANKNIFTY24JAN1927500PE.NFO 107.10 \n", 776 | "17 2019-01-24 10:46:00 -7.36 BANKNIFTY24JAN1927300PE.NFO 91.45 \n", 777 | "18 2019-01-25 15:10:00 114.60 BANKNIFTY31JAN1927400PE.NFO 165.20 \n", 778 | "19 2019-01-28 15:10:00 144.05 BANKNIFTY31JAN1927100PE.NFO 182.00 \n", 779 | "\n", 780 | " PE_exit_price PE_exit_datetime PE_pnl Total_pnl \n", 781 | "0 270.72 2019-01-01 09:54:00 -45.12 -65.12 \n", 782 | "1 189.06 2019-01-02 09:35:00 -31.51 -51.32 \n", 783 | "2 162.36 2019-01-03 11:36:00 -27.06 -36.68 \n", 784 | "3 339.66 2019-01-04 09:45:00 -56.61 -92.53 \n", 785 | "4 244.80 2019-01-07 14:45:00 -40.80 14.60 \n", 786 | "5 70.25 2019-01-08 15:10:00 129.25 107.19 \n", 787 | "6 201.12 2019-01-09 10:05:00 -33.52 -34.32 \n", 788 | "7 144.18 2019-01-10 09:37:00 -24.03 20.07 \n", 789 | "8 310.80 2019-01-11 10:44:00 -51.80 0.55 \n", 790 | "9 216.00 2019-01-14 15:10:00 5.90 28.70 \n", 791 | "10 112.60 2019-01-15 15:10:00 47.75 20.13 \n", 792 | "11 83.45 2019-01-16 15:10:00 43.80 23.94 \n", 793 | "12 118.20 2019-01-17 10:30:00 -19.70 6.20 \n", 794 | "13 248.94 2019-01-18 09:28:00 -41.49 -26.74 \n", 795 | "14 143.30 2019-01-21 15:10:00 59.15 28.89 \n", 796 | "15 141.55 2019-01-22 15:10:00 34.70 33.30 \n", 797 | "16 128.52 2019-01-23 14:29:00 -21.42 95.38 \n", 798 | "17 109.74 2019-01-24 09:24:00 -18.29 -25.65 \n", 799 | "18 198.24 2019-01-25 13:36:00 -33.04 81.56 \n", 800 | "19 218.40 2019-01-28 09:34:00 -36.40 107.65 " 801 | ] 802 | }, 803 | "execution_count": 66, 804 | "metadata": {}, 805 | "output_type": "execute_result" 806 | } 807 | ], 808 | "source": [ 809 | "trade_log" 810 | ] 811 | }, 812 | { 813 | "cell_type": "code", 814 | "execution_count": null, 815 | "metadata": {}, 816 | "outputs": [], 817 | "source": [] 818 | } 819 | ], 820 | "metadata": { 821 | "kernelspec": { 822 | "display_name": "Python 3", 823 | "language": "python", 824 | "name": "python3" 825 | }, 826 | "language_info": { 827 | "codemirror_mode": { 828 | "name": "ipython", 829 | "version": 3 830 | }, 831 | "file_extension": ".py", 832 | "mimetype": "text/x-python", 833 | "name": "python", 834 | "nbconvert_exporter": "python", 835 | "pygments_lexer": "ipython3", 836 | "version": "3.8.5" 837 | } 838 | }, 839 | "nbformat": 4, 840 | "nbformat_minor": 4 841 | } 842 | --------------------------------------------------------------------------------