This repository has been archived by the owner on Oct 25, 2018. It is now read-only.
/
main.go
70 lines (61 loc) · 2.05 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package main
import (
"github.com/Efruit/marqit/bank"
bank1 "github.com/Efruit/marqit/bank/v1"
"github.com/Efruit/marqit/broker/irrational"
"github.com/Efruit/marqit/exchange"
"github.com/Efruit/marqit/managers"
market1 "github.com/Efruit/marqit/market/v1"
"github.com/Efruit/marqit/trader/netplayer"
// "code.google.com/p/gocircuit/src/circuit/kit/debug"
"github.com/inconshreveable/log15"
"math/rand"
"time"
)
func main() {
log15.Info("Starting Marqit")
// debug.InstallCtrlCPanic()
Mkt := market1.NewMarket1()
Bnk, AKey := bank1.NewBank1()
log15.Info("Bank created", "admin", AKey)
Mkt.RegisterBank("the bank", Bnk)
Mkt.RegisterTrader("t.irrational", irrational.NewIrrational)
Mkt.RegisterTrader("t.netplayer", netplayer.NewNetPlayer)
Mkt.SetCount(manager.TraderCfg{Type: "t.irrational", Count: 10}, manager.TraderCfg{Type: "t.netplayer", Count: 1})
Mkt.SpawnTraders()
NStocks := 2 + rand.Intn(30)
log15.Info("Creating stocks", "n", NStocks)
for i := 0; i <= NStocks; i++ {
symbol := ""
sl := 1 + rand.Intn(3)
for n := 0; n <= sl; n++ {
symbol += string(byte(65 + rand.Intn(26)))
}
s := exchange.Stock{
Symbol: exchange.Symbol(symbol),
Shares: uint(rand.Int31n(100000)),
Trading: true,
Mode: exchange.M_AUCTION,
}
log15.Info("Adding", "symbol", s.Symbol, "shares", s.Shares)
Mkt.AddStock(s)
}
for _, v := range Mkt.List() {
recip := 2 * (1 + rand.Intn(5))
log15.Info("Spreading initial", "symbol", v.Symbol, "volume", v.Shares, "recipients", recip)
NTraders := len(Mkt.Traders())
for i := 0; i <= recip; i++ {
act := rand.Intn(NTraders - 1)
ba := Mkt.Traders()[act].GetAcct()
log15.Info("Initial", "recipient", ba, "count", uint64(int(v.Shares)/recip))
Bnk.SetAsset(ba, v.Symbol, uint64(int(v.Shares)/recip))
}
}
for k := range Mkt.Traders() {
act := Mkt.Traders()[k].GetAcct()
amt := float32(rand.Int31n(100000))
log15.Info("Granting funds", "recipient", act, "ammount", amt)
Bnk.Transfer(bank.Token{Account: bank.BA_Start, PIN: AKey}, amt, act)
}
Mkt.Start(10*time.Second, 15*time.Second, 5)
}