|  | @@ -1,405 +0,0 @@
 | 
	
		
			
				|  |  | -package main
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -import (
 | 
	
		
			
				|  |  | -	"fmt"
 | 
	
		
			
				|  |  | -	"git.beejay.kim/Gshopper/sentio"
 | 
	
		
			
				|  |  | -	"github.com/samber/lo"
 | 
	
		
			
				|  |  | -	"reflect"
 | 
	
		
			
				|  |  | -	"slices"
 | 
	
		
			
				|  |  | -	"testing"
 | 
	
		
			
				|  |  | -	"time"
 | 
	
		
			
				|  |  | -)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -func Test__ibkr_IsOpen(t *testing.T) {
 | 
	
		
			
				|  |  | -	tests := []struct {
 | 
	
		
			
				|  |  | -		time string
 | 
	
		
			
				|  |  | -		want bool
 | 
	
		
			
				|  |  | -	}{
 | 
	
		
			
				|  |  | -		{
 | 
	
		
			
				|  |  | -			time: "2024-08-26T13:29:59Z", // 1s before open
 | 
	
		
			
				|  |  | -			want: false,
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | -		{
 | 
	
		
			
				|  |  | -			time: "2024-08-02T15:04:05Z", // Opened
 | 
	
		
			
				|  |  | -			want: true,
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | -		{
 | 
	
		
			
				|  |  | -			time: "2024-08-03T18:34:00Z", // Saturday
 | 
	
		
			
				|  |  | -			want: false,
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | -		{
 | 
	
		
			
				|  |  | -			time: "2024-08-25T15:00:00Z", // Sunday
 | 
	
		
			
				|  |  | -			want: false,
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | -		{
 | 
	
		
			
				|  |  | -			time: "2024-08-26T19:00:05Z", // Closed
 | 
	
		
			
				|  |  | -			want: false,
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	for _, tt := range tests {
 | 
	
		
			
				|  |  | -		var (
 | 
	
		
			
				|  |  | -			c   ClockFixed
 | 
	
		
			
				|  |  | -			s   _ibkr
 | 
	
		
			
				|  |  | -			err error
 | 
	
		
			
				|  |  | -		)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		if c.fix, err = time.ParseInLocation(time.RFC3339, tt.time, time.UTC); err != nil {
 | 
	
		
			
				|  |  | -			t.Errorf("ParseInLocation() = %v", err)
 | 
	
		
			
				|  |  | -			return
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		s = _ibkr{
 | 
	
		
			
				|  |  | -			clock: c,
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		t.Run(fmt.Sprintf("IBKR:IsOpen:%s", tt.time), func(t *testing.T) {
 | 
	
		
			
				|  |  | -			got := s.IsOpen()
 | 
	
		
			
				|  |  | -			if got != tt.want {
 | 
	
		
			
				|  |  | -				t.Errorf("IsOpen() = %v, want %v", got, tt.want)
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		})
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -func Test__ibkr_ShouldClosePositions(t *testing.T) {
 | 
	
		
			
				|  |  | -	type args struct {
 | 
	
		
			
				|  |  | -		portfolio sentio.Portfolio
 | 
	
		
			
				|  |  | -		proba     float64
 | 
	
		
			
				|  |  | -		time      string
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	tests := []struct {
 | 
	
		
			
				|  |  | -		args args
 | 
	
		
			
				|  |  | -		want []string
 | 
	
		
			
				|  |  | -	}{
 | 
	
		
			
				|  |  | -		{ // should close SHORT position
 | 
	
		
			
				|  |  | -			args: args{
 | 
	
		
			
				|  |  | -				portfolio: newStubPortfolio(
 | 
	
		
			
				|  |  | -					PositionStub{
 | 
	
		
			
				|  |  | -						symbol: "521525019",
 | 
	
		
			
				|  |  | -						size:   10,
 | 
	
		
			
				|  |  | -						price:  20,
 | 
	
		
			
				|  |  | -					},
 | 
	
		
			
				|  |  | -					PositionStub{
 | 
	
		
			
				|  |  | -						symbol: "569311092",
 | 
	
		
			
				|  |  | -						size:   10,
 | 
	
		
			
				|  |  | -						price:  8,
 | 
	
		
			
				|  |  | -					},
 | 
	
		
			
				|  |  | -				),
 | 
	
		
			
				|  |  | -				proba: 1.00001,
 | 
	
		
			
				|  |  | -				time:  "2024-08-02T15:04:05Z",
 | 
	
		
			
				|  |  | -			},
 | 
	
		
			
				|  |  | -			want: []string{"569311092"},
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | -		{ // should close LONG position
 | 
	
		
			
				|  |  | -			args: args{
 | 
	
		
			
				|  |  | -				portfolio: newStubPortfolio(
 | 
	
		
			
				|  |  | -					PositionStub{
 | 
	
		
			
				|  |  | -						symbol: "521525019",
 | 
	
		
			
				|  |  | -						size:   10,
 | 
	
		
			
				|  |  | -						price:  20,
 | 
	
		
			
				|  |  | -					},
 | 
	
		
			
				|  |  | -					PositionStub{
 | 
	
		
			
				|  |  | -						symbol: "569311092",
 | 
	
		
			
				|  |  | -						size:   10,
 | 
	
		
			
				|  |  | -						price:  8,
 | 
	
		
			
				|  |  | -					},
 | 
	
		
			
				|  |  | -				),
 | 
	
		
			
				|  |  | -				proba: .9,
 | 
	
		
			
				|  |  | -				time:  "2024-08-02T15:04:05Z",
 | 
	
		
			
				|  |  | -			},
 | 
	
		
			
				|  |  | -			want: []string{"521525019"},
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | -		{ // nothing to close
 | 
	
		
			
				|  |  | -			args: args{
 | 
	
		
			
				|  |  | -				portfolio: newStubPortfolio(),
 | 
	
		
			
				|  |  | -				proba:     .9,
 | 
	
		
			
				|  |  | -				time:      "2024-08-02T15:04:05Z",
 | 
	
		
			
				|  |  | -			},
 | 
	
		
			
				|  |  | -			want: nil,
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | -		{ // should close both positions
 | 
	
		
			
				|  |  | -			args: args{
 | 
	
		
			
				|  |  | -				portfolio: newStubPortfolio(
 | 
	
		
			
				|  |  | -					PositionStub{
 | 
	
		
			
				|  |  | -						symbol: "521525019",
 | 
	
		
			
				|  |  | -						size:   10,
 | 
	
		
			
				|  |  | -						price:  20,
 | 
	
		
			
				|  |  | -					},
 | 
	
		
			
				|  |  | -					PositionStub{
 | 
	
		
			
				|  |  | -						symbol: "521525020",
 | 
	
		
			
				|  |  | -						size:   10,
 | 
	
		
			
				|  |  | -						price:  20,
 | 
	
		
			
				|  |  | -					},
 | 
	
		
			
				|  |  | -					PositionStub{
 | 
	
		
			
				|  |  | -						symbol: "569311092",
 | 
	
		
			
				|  |  | -						size:   10,
 | 
	
		
			
				|  |  | -						price:  8,
 | 
	
		
			
				|  |  | -					},
 | 
	
		
			
				|  |  | -				),
 | 
	
		
			
				|  |  | -				proba: .9,
 | 
	
		
			
				|  |  | -				time:  "2024-08-02T19:00:05Z",
 | 
	
		
			
				|  |  | -			},
 | 
	
		
			
				|  |  | -			want: []string{"521525019", "569311092"},
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | -		{ // should close nothing
 | 
	
		
			
				|  |  | -			args: args{
 | 
	
		
			
				|  |  | -				portfolio: newStubPortfolio(
 | 
	
		
			
				|  |  | -					PositionStub{
 | 
	
		
			
				|  |  | -						symbol: "569311092",
 | 
	
		
			
				|  |  | -						size:   10,
 | 
	
		
			
				|  |  | -						price:  8,
 | 
	
		
			
				|  |  | -					},
 | 
	
		
			
				|  |  | -					PositionStub{
 | 
	
		
			
				|  |  | -						symbol: "521525020",
 | 
	
		
			
				|  |  | -						size:   10,
 | 
	
		
			
				|  |  | -						price:  20,
 | 
	
		
			
				|  |  | -					},
 | 
	
		
			
				|  |  | -				),
 | 
	
		
			
				|  |  | -				proba: .9,
 | 
	
		
			
				|  |  | -				time:  "2024-08-02T18:00:05Z",
 | 
	
		
			
				|  |  | -			},
 | 
	
		
			
				|  |  | -			want: nil,
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | -		{ // should close nothing
 | 
	
		
			
				|  |  | -			args: args{
 | 
	
		
			
				|  |  | -				portfolio: newStubPortfolio(
 | 
	
		
			
				|  |  | -					PositionStub{
 | 
	
		
			
				|  |  | -						symbol: "521525019",
 | 
	
		
			
				|  |  | -						size:   10,
 | 
	
		
			
				|  |  | -						price:  20,
 | 
	
		
			
				|  |  | -					},
 | 
	
		
			
				|  |  | -					PositionStub{
 | 
	
		
			
				|  |  | -						symbol: "521525020",
 | 
	
		
			
				|  |  | -						size:   10,
 | 
	
		
			
				|  |  | -						price:  20,
 | 
	
		
			
				|  |  | -					},
 | 
	
		
			
				|  |  | -				),
 | 
	
		
			
				|  |  | -				proba: 1.2,
 | 
	
		
			
				|  |  | -				time:  "2024-08-02T18:00:05Z",
 | 
	
		
			
				|  |  | -			},
 | 
	
		
			
				|  |  | -			want: nil,
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | -		{ // should close all
 | 
	
		
			
				|  |  | -			args: args{
 | 
	
		
			
				|  |  | -				portfolio: newStubPortfolio(
 | 
	
		
			
				|  |  | -					PositionStub{
 | 
	
		
			
				|  |  | -						symbol: "521525019",
 | 
	
		
			
				|  |  | -						size:   10,
 | 
	
		
			
				|  |  | -						price:  20,
 | 
	
		
			
				|  |  | -					},
 | 
	
		
			
				|  |  | -					PositionStub{
 | 
	
		
			
				|  |  | -						symbol: "521525020",
 | 
	
		
			
				|  |  | -						size:   10,
 | 
	
		
			
				|  |  | -						price:  20,
 | 
	
		
			
				|  |  | -					},
 | 
	
		
			
				|  |  | -				),
 | 
	
		
			
				|  |  | -				proba: 1.2,
 | 
	
		
			
				|  |  | -				time:  "2024-08-02T12:00:05Z",
 | 
	
		
			
				|  |  | -			},
 | 
	
		
			
				|  |  | -			want: []string{"521525019"},
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | -		{ // should close nothing
 | 
	
		
			
				|  |  | -			args: args{
 | 
	
		
			
				|  |  | -				portfolio: newStubPortfolio(
 | 
	
		
			
				|  |  | -					PositionStub{
 | 
	
		
			
				|  |  | -						symbol: "521525020",
 | 
	
		
			
				|  |  | -						size:   10,
 | 
	
		
			
				|  |  | -						price:  20,
 | 
	
		
			
				|  |  | -					},
 | 
	
		
			
				|  |  | -				),
 | 
	
		
			
				|  |  | -				proba: 1.1,
 | 
	
		
			
				|  |  | -				time:  "2024-08-02T12:00:05Z",
 | 
	
		
			
				|  |  | -			},
 | 
	
		
			
				|  |  | -			want: nil,
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | -		{
 | 
	
		
			
				|  |  | -			args: args{
 | 
	
		
			
				|  |  | -				portfolio: newStubPortfolio(
 | 
	
		
			
				|  |  | -					PositionStub{
 | 
	
		
			
				|  |  | -						symbol: "569311092",
 | 
	
		
			
				|  |  | -						size:   10938,
 | 
	
		
			
				|  |  | -						price:  8.24685045,
 | 
	
		
			
				|  |  | -					}),
 | 
	
		
			
				|  |  | -				proba: 0.9972525825782994,
 | 
	
		
			
				|  |  | -				time:  "2024-09-03T04:00:00Z",
 | 
	
		
			
				|  |  | -			},
 | 
	
		
			
				|  |  | -			want: []string{"569311092"},
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	for _, tt := range tests {
 | 
	
		
			
				|  |  | -		var (
 | 
	
		
			
				|  |  | -			c   ClockFixed
 | 
	
		
			
				|  |  | -			s   _ibkr
 | 
	
		
			
				|  |  | -			err error
 | 
	
		
			
				|  |  | -		)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		if c.fix, err = time.ParseInLocation(time.RFC3339, tt.args.time, time.UTC); err != nil {
 | 
	
		
			
				|  |  | -			t.Errorf("ParseInLocation() = %v", err)
 | 
	
		
			
				|  |  | -			return
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		s = _ibkr{
 | 
	
		
			
				|  |  | -			clock: c,
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		t.Run("IBKR:ShouldClosePositions", func(t *testing.T) {
 | 
	
		
			
				|  |  | -			if got := s.ShouldClosePositions(tt.args.portfolio, tt.args.proba); !slices.Equal(got, tt.want) {
 | 
	
		
			
				|  |  | -				t.Errorf("ShouldClosePositions() = %v, want %v", got, tt.want)
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		})
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -func Test__ibkr_ShouldOpenPosition(t *testing.T) {
 | 
	
		
			
				|  |  | -	type args struct {
 | 
	
		
			
				|  |  | -		portfolio sentio.Portfolio
 | 
	
		
			
				|  |  | -		proba     float64
 | 
	
		
			
				|  |  | -		time      string
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	tests := []struct {
 | 
	
		
			
				|  |  | -		args   args
 | 
	
		
			
				|  |  | -		symbol *string
 | 
	
		
			
				|  |  | -		size   float64
 | 
	
		
			
				|  |  | -	}{
 | 
	
		
			
				|  |  | -		{
 | 
	
		
			
				|  |  | -			args: args{
 | 
	
		
			
				|  |  | -				portfolio: newStubPortfolio(),
 | 
	
		
			
				|  |  | -				proba:     1.00201,
 | 
	
		
			
				|  |  | -				time:      "2024-08-02T18:30:00Z",
 | 
	
		
			
				|  |  | -			},
 | 
	
		
			
				|  |  | -			symbol: lo.ToPtr("521525019"),
 | 
	
		
			
				|  |  | -			size:   .6,
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | -		{
 | 
	
		
			
				|  |  | -			args: args{
 | 
	
		
			
				|  |  | -				portfolio: newStubPortfolio(
 | 
	
		
			
				|  |  | -					PositionStub{
 | 
	
		
			
				|  |  | -						symbol: "521525019",
 | 
	
		
			
				|  |  | -						size:   1,
 | 
	
		
			
				|  |  | -						price:  19,
 | 
	
		
			
				|  |  | -					},
 | 
	
		
			
				|  |  | -				),
 | 
	
		
			
				|  |  | -				proba: 1.00201,
 | 
	
		
			
				|  |  | -				time:  "2024-08-02T18:30:00Z",
 | 
	
		
			
				|  |  | -			},
 | 
	
		
			
				|  |  | -			symbol: lo.ToPtr("521525019"),
 | 
	
		
			
				|  |  | -			size:   .3,
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | -		{
 | 
	
		
			
				|  |  | -			args: args{
 | 
	
		
			
				|  |  | -				portfolio: newStubPortfolio(
 | 
	
		
			
				|  |  | -					PositionStub{
 | 
	
		
			
				|  |  | -						symbol: "521525019",
 | 
	
		
			
				|  |  | -						size:   -.2,
 | 
	
		
			
				|  |  | -						price:  19,
 | 
	
		
			
				|  |  | -					},
 | 
	
		
			
				|  |  | -				),
 | 
	
		
			
				|  |  | -				proba: 1.00201,
 | 
	
		
			
				|  |  | -				time:  "2024-08-02T18:30:00Z",
 | 
	
		
			
				|  |  | -			},
 | 
	
		
			
				|  |  | -			symbol: lo.ToPtr("521525019"),
 | 
	
		
			
				|  |  | -			size:   .6,
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | -		{
 | 
	
		
			
				|  |  | -			args: args{
 | 
	
		
			
				|  |  | -				portfolio: newStubPortfolio(
 | 
	
		
			
				|  |  | -					PositionStub{
 | 
	
		
			
				|  |  | -						symbol: "521525020",
 | 
	
		
			
				|  |  | -						size:   3,
 | 
	
		
			
				|  |  | -						price:  19,
 | 
	
		
			
				|  |  | -					},
 | 
	
		
			
				|  |  | -				),
 | 
	
		
			
				|  |  | -				proba: 1.00201,
 | 
	
		
			
				|  |  | -				time:  "2024-08-02T18:30:00Z",
 | 
	
		
			
				|  |  | -			},
 | 
	
		
			
				|  |  | -			symbol: lo.ToPtr("521525019"),
 | 
	
		
			
				|  |  | -			size:   .6,
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | -		{
 | 
	
		
			
				|  |  | -			args: args{
 | 
	
		
			
				|  |  | -				portfolio: newStubPortfolio(),
 | 
	
		
			
				|  |  | -				proba:     .9979,
 | 
	
		
			
				|  |  | -				time:      "2024-08-02T18:30:00Z",
 | 
	
		
			
				|  |  | -			},
 | 
	
		
			
				|  |  | -			symbol: lo.ToPtr("569311092"),
 | 
	
		
			
				|  |  | -			size:   .8,
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | -		{
 | 
	
		
			
				|  |  | -			args: args{
 | 
	
		
			
				|  |  | -				portfolio: newStubPortfolio(
 | 
	
		
			
				|  |  | -					PositionStub{
 | 
	
		
			
				|  |  | -						symbol: "569311092",
 | 
	
		
			
				|  |  | -						size:   100,
 | 
	
		
			
				|  |  | -						price:  8,
 | 
	
		
			
				|  |  | -					},
 | 
	
		
			
				|  |  | -				),
 | 
	
		
			
				|  |  | -				proba: .9979,
 | 
	
		
			
				|  |  | -				time:  "2024-08-02T18:30:00Z",
 | 
	
		
			
				|  |  | -			},
 | 
	
		
			
				|  |  | -			symbol: lo.ToPtr("569311092"),
 | 
	
		
			
				|  |  | -			size:   .3,
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | -		{
 | 
	
		
			
				|  |  | -			args: args{
 | 
	
		
			
				|  |  | -				portfolio: newStubPortfolio(
 | 
	
		
			
				|  |  | -					PositionStub{
 | 
	
		
			
				|  |  | -						symbol: "521525020",
 | 
	
		
			
				|  |  | -						size:   100,
 | 
	
		
			
				|  |  | -						price:  8,
 | 
	
		
			
				|  |  | -					},
 | 
	
		
			
				|  |  | -				),
 | 
	
		
			
				|  |  | -				proba: .9979,
 | 
	
		
			
				|  |  | -				time:  "2024-08-02T19:00:00Z",
 | 
	
		
			
				|  |  | -			},
 | 
	
		
			
				|  |  | -			symbol: nil,
 | 
	
		
			
				|  |  | -			size:   0,
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | -		{
 | 
	
		
			
				|  |  | -			args: args{
 | 
	
		
			
				|  |  | -				portfolio: newStubPortfolio(
 | 
	
		
			
				|  |  | -					PositionStub{
 | 
	
		
			
				|  |  | -						symbol: "569311092",
 | 
	
		
			
				|  |  | -						size:   100,
 | 
	
		
			
				|  |  | -						price:  8,
 | 
	
		
			
				|  |  | -					},
 | 
	
		
			
				|  |  | -				),
 | 
	
		
			
				|  |  | -				proba: -1,
 | 
	
		
			
				|  |  | -				time:  "2024-08-02T18:30:00Z",
 | 
	
		
			
				|  |  | -			},
 | 
	
		
			
				|  |  | -			symbol: nil,
 | 
	
		
			
				|  |  | -			size:   0,
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	for _, tt := range tests {
 | 
	
		
			
				|  |  | -		t.Run("IBKR:ShouldOpenPosition", func(t *testing.T) {
 | 
	
		
			
				|  |  | -			var (
 | 
	
		
			
				|  |  | -				c   ClockFixed
 | 
	
		
			
				|  |  | -				s   _ibkr
 | 
	
		
			
				|  |  | -				err error
 | 
	
		
			
				|  |  | -			)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -			if c.fix, err = time.ParseInLocation(time.RFC3339, tt.args.time, time.UTC); err != nil {
 | 
	
		
			
				|  |  | -				t.Errorf("ParseInLocation() = %v", err)
 | 
	
		
			
				|  |  | -				return
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -			s = _ibkr{
 | 
	
		
			
				|  |  | -				clock: c,
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -			symbol, size := s.ShouldOpenPosition(tt.args.portfolio, tt.args.proba)
 | 
	
		
			
				|  |  | -			if !reflect.DeepEqual(symbol, tt.symbol) {
 | 
	
		
			
				|  |  | -				t.Errorf("ShouldOpenPosition() symbol = %v, want %v", symbol, tt.symbol)
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -			if size != tt.size {
 | 
	
		
			
				|  |  | -				t.Errorf("ShouldOpenPosition() size = %v, want %v", size, tt.size)
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		})
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -}
 |