Conditions | 15 |
Total Lines | 226 |
Lines | 0 |
Ratio | 0 % |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
Complex classes like tests.finance.SlippageTestCase.test_orders_stop_limit() often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
1 | # |
||
509 | def test_orders_stop_limit(self): |
||
510 | slippage_model = VolumeShareSlippage() |
||
511 | slippage_model.data_portal = self.data_portal |
||
512 | |||
513 | # long, does not trade |
||
514 | open_orders = [ |
||
515 | Order(**{ |
||
516 | 'dt': datetime.datetime(2006, 1, 5, 14, 30, tzinfo=pytz.utc), |
||
517 | 'amount': 100, |
||
518 | 'filled': 0, |
||
519 | 'sid': 133, |
||
520 | 'stop': 4.0, |
||
521 | 'limit': 3.0}) |
||
522 | ] |
||
523 | |||
524 | bar_data = BarData(self.data_portal, |
||
525 | lambda: self.minutes[2], |
||
526 | self.sim_params.data_frequency) |
||
527 | |||
528 | orders_txns = list(slippage_model.simulate( |
||
529 | bar_data[133], |
||
530 | open_orders, |
||
531 | )) |
||
532 | |||
533 | self.assertEquals(len(orders_txns), 0) |
||
534 | |||
535 | bar_data = BarData(self.data_portal, |
||
536 | lambda: self.minutes[3], |
||
537 | self.sim_params.data_frequency) |
||
538 | |||
539 | orders_txns = list(slippage_model.simulate( |
||
540 | bar_data[133], |
||
541 | open_orders, |
||
542 | )) |
||
543 | |||
544 | self.assertEquals(len(orders_txns), 0) |
||
545 | |||
546 | # long, does not trade - impacted price worse than limit price |
||
547 | open_orders = [ |
||
548 | Order(**{ |
||
549 | 'dt': datetime.datetime(2006, 1, 5, 14, 30, tzinfo=pytz.utc), |
||
550 | 'amount': 100, |
||
551 | 'filled': 0, |
||
552 | 'sid': 133, |
||
553 | 'stop': 4.0, |
||
554 | 'limit': 3.5}) |
||
555 | ] |
||
556 | |||
557 | bar_data = BarData(self.data_portal, |
||
558 | lambda: self.minutes[2], |
||
559 | self.sim_params.data_frequency) |
||
560 | |||
561 | orders_txns = list(slippage_model.simulate( |
||
562 | bar_data[133], |
||
563 | open_orders, |
||
564 | )) |
||
565 | |||
566 | self.assertEquals(len(orders_txns), 0) |
||
567 | |||
568 | bar_data = BarData(self.data_portal, |
||
569 | lambda: self.minutes[3], |
||
570 | self.sim_params.data_frequency) |
||
571 | |||
572 | orders_txns = list(slippage_model.simulate( |
||
573 | bar_data[133], |
||
574 | open_orders, |
||
575 | )) |
||
576 | |||
577 | self.assertEquals(len(orders_txns), 0) |
||
578 | |||
579 | # long, does trade |
||
580 | open_orders = [ |
||
581 | Order(**{ |
||
582 | 'dt': datetime.datetime(2006, 1, 5, 14, 30, tzinfo=pytz.utc), |
||
583 | 'amount': 100, |
||
584 | 'filled': 0, |
||
585 | 'sid': 133, |
||
586 | 'stop': 4.0, |
||
587 | 'limit': 3.6}) |
||
588 | ] |
||
589 | |||
590 | bar_data = BarData(self.data_portal, |
||
591 | lambda: self.minutes[2], |
||
592 | self.sim_params.data_frequency) |
||
593 | |||
594 | orders_txns = list(slippage_model.simulate( |
||
595 | bar_data[133], |
||
596 | open_orders, |
||
597 | )) |
||
598 | |||
599 | self.assertEquals(len(orders_txns), 0) |
||
600 | |||
601 | bar_data = BarData(self.data_portal, |
||
602 | lambda: self.minutes[3], |
||
603 | self.sim_params.data_frequency) |
||
604 | |||
605 | orders_txns = list(slippage_model.simulate( |
||
606 | bar_data[133], |
||
607 | open_orders, |
||
608 | )) |
||
609 | |||
610 | self.assertEquals(len(orders_txns), 1) |
||
611 | _, txn = orders_txns[0] |
||
612 | |||
613 | expected_txn = { |
||
614 | 'price': float(3.50021875), |
||
615 | 'dt': datetime.datetime( |
||
616 | 2006, 1, 5, 14, 34, tzinfo=pytz.utc), |
||
617 | 'amount': int(50), |
||
618 | 'sid': int(133) |
||
619 | } |
||
620 | |||
621 | for key, value in expected_txn.items(): |
||
622 | self.assertEquals(value, txn[key]) |
||
623 | |||
624 | # short, does not trade |
||
625 | |||
626 | open_orders = [ |
||
627 | Order(**{ |
||
628 | 'dt': datetime.datetime(2006, 1, 5, 14, 30, tzinfo=pytz.utc), |
||
629 | 'amount': -100, |
||
630 | 'filled': 0, |
||
631 | 'sid': 133, |
||
632 | 'stop': 3.0, |
||
633 | 'limit': 4.0}) |
||
634 | ] |
||
635 | |||
636 | bar_data = BarData(self.data_portal, |
||
637 | lambda: self.minutes[0], |
||
638 | self.sim_params.data_frequency) |
||
639 | |||
640 | orders_txns = list(slippage_model.simulate( |
||
641 | bar_data[133], |
||
642 | open_orders, |
||
643 | )) |
||
644 | |||
645 | self.assertEquals(len(orders_txns), 0) |
||
646 | |||
647 | bar_data = BarData(self.data_portal, |
||
648 | lambda: self.minutes[1], |
||
649 | self.sim_params.data_frequency) |
||
650 | |||
651 | orders_txns = list(slippage_model.simulate( |
||
652 | bar_data[133], |
||
653 | open_orders, |
||
654 | )) |
||
655 | |||
656 | self.assertEquals(len(orders_txns), 0) |
||
657 | |||
658 | # short, does not trade - impacted price worse than limit price |
||
659 | open_orders = [ |
||
660 | Order(**{ |
||
661 | 'dt': datetime.datetime(2006, 1, 5, 14, 30, tzinfo=pytz.utc), |
||
662 | 'amount': -100, |
||
663 | 'filled': 0, |
||
664 | 'sid': 133, |
||
665 | 'stop': 3.0, |
||
666 | 'limit': 3.5}) |
||
667 | ] |
||
668 | |||
669 | bar_data = BarData(self.data_portal, |
||
670 | lambda: self.minutes[0], |
||
671 | self.sim_params.data_frequency) |
||
672 | |||
673 | orders_txns = list(slippage_model.simulate( |
||
674 | bar_data[133], |
||
675 | open_orders, |
||
676 | )) |
||
677 | |||
678 | self.assertEquals(len(orders_txns), 0) |
||
679 | |||
680 | bar_data = BarData(self.data_portal, |
||
681 | lambda: self.minutes[1], |
||
682 | self.sim_params.data_frequency) |
||
683 | |||
684 | orders_txns = list(slippage_model.simulate( |
||
685 | bar_data[133], |
||
686 | open_orders, |
||
687 | )) |
||
688 | |||
689 | self.assertEquals(len(orders_txns), 0) |
||
690 | |||
691 | # short, does trade |
||
692 | open_orders = [ |
||
693 | Order(**{ |
||
694 | 'dt': datetime.datetime(2006, 1, 5, 14, 30, tzinfo=pytz.utc), |
||
695 | 'amount': -100, |
||
696 | 'filled': 0, |
||
697 | 'sid': 133, |
||
698 | 'stop': 3.0, |
||
699 | 'limit': 3.4}) |
||
700 | ] |
||
701 | |||
702 | bar_data = BarData(self.data_portal, |
||
703 | lambda: self.minutes[0], |
||
704 | self.sim_params.data_frequency) |
||
705 | |||
706 | orders_txns = list(slippage_model.simulate( |
||
707 | bar_data[133], |
||
708 | open_orders, |
||
709 | )) |
||
710 | |||
711 | self.assertEquals(len(orders_txns), 0) |
||
712 | |||
713 | bar_data = BarData(self.data_portal, |
||
714 | lambda: self.minutes[1], |
||
715 | self.sim_params.data_frequency) |
||
716 | |||
717 | orders_txns = list(slippage_model.simulate( |
||
718 | bar_data[133], |
||
719 | open_orders, |
||
720 | )) |
||
721 | |||
722 | self.assertEquals(len(orders_txns), 1) |
||
723 | _, txn = orders_txns[0] |
||
724 | |||
725 | expected_txn = { |
||
726 | 'price': float(3.49978125), |
||
727 | 'dt': datetime.datetime( |
||
728 | 2006, 1, 5, 14, 32, tzinfo=pytz.utc), |
||
729 | 'amount': int(-50), |
||
730 | 'sid': int(133) |
||
731 | } |
||
732 | |||
733 | for key, value in expected_txn.items(): |
||
734 | self.assertEquals(value, txn[key]) |
||
735 |