1 package autotrade
::Market
::MtGox
;
4 extends
'autotrade::Market';
5 use autotrade
::MarketTools
;
7 sub _build_fee
{ 0.0065; }
9 has
'rcfile' => ( isa
=> 'Str', is
=> 'ro', default => '~/.mgrc' );
11 has
'dummy' => ( isa
=> 'Int', is
=> 'rw', default => 0 );
13 use WebService
::MtGox
;
14 has
'mtgox' => ( isa
=> 'WebService::MtGox', is
=> 'ro', lazy_build
=> 1 );
17 my $rcfile = $self->rcfile();
18 my @mgrc = split /\n/, `cat $rcfile`;
19 return WebService
::MtGox
->new(user
=> $mgrc[0], password
=> $mgrc[1]);
22 override market_data
=> sub {
24 return autotrade
::MarketData
::MtGox
->new(m
=> $self);
29 my ($amount, $rate) = @_;
31 print "buy(amount => ".curr_str
($amount).", price => ".curr_str
($rate).")\n";
33 $self->mtgox()->buy(amount
=> curr_str
($amount), price
=> curr_str
($rate));
37 override sell
=> sub {
39 my ($amount, $rate) = @_;
41 print "sell(amount => ".curr_str
($amount).", price => ".curr_str
($rate).")\n";
43 $self->mtgox()->sell(amount
=> curr_str
($amount), price
=> curr_str
($rate));
47 override cancel
=> sub {
51 print "cancel(oid => ".$o->oid().", type => ".$o->otype().")\n";
53 $self->mtgox()->cancel(oid
=> $o->oid(), type
=> ($o->otype() eq 'sell' ?
1 : 2));
58 __PACKAGE__
->meta->make_immutable;
61 package autotrade
::MarketData
::MtGox
;
64 extends
'autotrade::MarketData';
65 use autotrade
::MarketTools
;
67 has
'+m' => (isa
=> 'autotrade::Market::MtGox', is
=> 'ro', required
=> 1, handles
=> ['mtgox']);
69 # Info on our balance and outstanding orders.
70 has
'status' => (isa
=> 'HashRef', is
=> 'ro', lazy_build
=> 1);
71 sub _build_status
{ my $self = shift; $self->mtgox()->list(); }
74 has
'ticker' => (isa
=> 'HashRef', is
=> 'ro', lazy_build
=> 1);
75 sub _build_ticker
{ my $self = shift; $self->mtgox()->get_ticker()->{ticker
}; }
77 sub _build_bal_btc
{ my $self = shift; str_curr
($self->status()->{btcs
}); }
78 sub _build_bal_rwm
{ my $self = shift; str_curr
($self->status()->{usds
}); }
80 sub _build_rate_buybtc
{ my $self = shift; str_curr
($self->ticker()->{buy
}); }
81 sub _build_rate_sellbtc
{ my $self = shift; str_curr
($self->ticker()->{sell
}); }
85 [ map { autotrade
::MarketData
::Order
->new(
86 otype
=> ($_->{type
} == 1 ?
'sell' : 'buy'),
88 amount
=> str_curr
($_->{amount
}),
89 rate
=> str_curr
($_->{price
}),
91 } @
{$self->status()->{orders
}} ];
95 __PACKAGE__
->meta->make_immutable;