autotrade::Market::MtGox::dummy: New flag for easier debugging
[autotrade.git] / autotrade / Market / MtGox.pm
blobbaccd99e672644371fa462d520940d58c183add1
1 package autotrade::Market::MtGox;
3 use Moose;
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 );
15 sub _build_mtgox {
16 my $self = shift;
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 {
23 my $self = shift;
24 return autotrade::MarketData::MtGox->new(m => $self);
27 override buy => sub {
28 my $self = shift;
29 my ($amount, $rate) = @_;
30 if ($self->dummy()) {
31 print "buy(amount => ".curr_str($amount).", price => ".curr_str($rate).")\n";
32 } else {
33 $self->mtgox()->buy(amount => curr_str($amount), price => curr_str($rate));
37 override sell => sub {
38 my $self = shift;
39 my ($amount, $rate) = @_;
40 if ($self->dummy()) {
41 print "sell(amount => ".curr_str($amount).", price => ".curr_str($rate).")\n";
42 } else {
43 $self->mtgox()->sell(amount => curr_str($amount), price => curr_str($rate));
47 override cancel => sub {
48 my $self = shift;
49 my ($o) = @_;
50 if ($self->dummy()) {
51 print "cancel(oid => ".$o->oid().", type => ".$o->otype().")\n";
52 } else {
53 $self->mtgox()->cancel(oid => $o->oid(), type => ($o->otype() eq 'sell' ? 1 : 2));
57 no Moose;
58 __PACKAGE__->meta->make_immutable;
61 package autotrade::MarketData::MtGox;
63 use Moose;
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(); }
73 # Info on rates.
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}); }
83 sub _build_orders {
84 my $self = shift;
85 [ map { autotrade::MarketData::Order->new(
86 otype => ($_->{type} == 1 ? 'sell' : 'buy'),
87 oid => $_->{oid},
88 amount => str_curr($_->{amount}),
89 rate => str_curr($_->{price}),
90 time => $_->{date})
91 } @{$self->status()->{orders}} ];
94 no Moose;
95 __PACKAGE__->meta->make_immutable;