VOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS0.00%
Net Worth
0.048USD
STEEM
0.000STEEM
SBD
0.028SBD
Effective Power
5.001SP
├── Own SP
0.636SP
└── Incoming DelegationsDeleg
+4.365SP
Detailed Balance
| STEEM | ||
| balance | 0.000STEEM | STEEM |
| market_balance | 0.000STEEM | STEEM |
| savings_balance | 0.000STEEM | STEEM |
| reward_steem_balance | 0.000STEEM | STEEM |
| STEEM POWER | ||
| Own SP | 0.636SP | SP |
| Delegated Out | 0.000SP | SP |
| Delegation In | 4.365SP | SP |
| Effective Power | 5.001SP | SP |
| Reward SP (pending) | 0.013SP | SP |
| SBD | ||
| sbd_balance | 0.000SBD | SBD |
| sbd_conversions | 0.000SBD | SBD |
| sbd_market_balance | 0.000SBD | SBD |
| savings_sbd_balance | 0.000SBD | SBD |
| reward_sbd_balance | 0.028SBD | SBD |
{
"balance": "0.000 STEEM",
"savings_balance": "0.000 STEEM",
"reward_steem_balance": "0.000 STEEM",
"vesting_shares": "1035.378065 VESTS",
"delegated_vesting_shares": "0.000000 VESTS",
"received_vesting_shares": "7108.281741 VESTS",
"sbd_balance": "0.000 SBD",
"savings_sbd_balance": "0.000 SBD",
"reward_sbd_balance": "0.028 SBD",
"conversions": []
}Account Info
| name | joeldg |
| id | 190593 |
| rank | 687,338 |
| reputation | 38293879 |
| created | 2017-06-13T17:58:42 |
| recovery_account | steem |
| proxy | None |
| post_count | 2 |
| comment_count | 0 |
| lifetime_vote_count | 0 |
| witnesses_voted_for | 0 |
| last_post | 2017-06-13T21:10:27 |
| last_root_post | 2017-06-13T19:20:33 |
| last_vote_time | 2017-06-13T19:20:33 |
| proxied_vsf_votes | 0, 0, 0, 0 |
| can_vote | 1 |
| voting_power | 0 |
| delayed_votes | 0 |
| balance | 0.000 STEEM |
| savings_balance | 0.000 STEEM |
| sbd_balance | 0.000 SBD |
| savings_sbd_balance | 0.000 SBD |
| vesting_shares | 1035.378065 VESTS |
| delegated_vesting_shares | 0.000000 VESTS |
| received_vesting_shares | 7108.281741 VESTS |
| reward_vesting_balance | 26.909666 VESTS |
| vesting_balance | 0.000 STEEM |
| vesting_withdraw_rate | 0.000000 VESTS |
| next_vesting_withdrawal | 1969-12-31T23:59:59 |
| withdrawn | 0 |
| to_withdraw | 0 |
| withdraw_routes | 0 |
| savings_withdraw_requests | 0 |
| last_account_recovery | 1970-01-01T00:00:00 |
| reset_account | null |
| last_owner_update | 1970-01-01T00:00:00 |
| last_account_update | 2017-06-13T19:25:00 |
| mined | No |
| sbd_seconds | 0 |
| sbd_last_interest_payment | 1970-01-01T00:00:00 |
| savings_sbd_last_interest_payment | 1970-01-01T00:00:00 |
{
"id": 190593,
"name": "joeldg",
"owner": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM7gERi7sLrFSz1BmaEty5ujc8jbyayte6AaZA7k4RC5PetPMVS9",
1
]
]
},
"active": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM7STLeDgvvzgTZWpCbtwRQFsUcMuhAV16noZ3SkRxMSUi61YVWX",
1
]
]
},
"posting": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM6J5XhcAVpUV3TkNJfpxzYe1dnLRkSmj9BENf2KBNqLMgfJKbsu",
1
]
]
},
"memo_key": "STM8YMGFmpw9oP29dxkUuauT5d8PYtGHX6dyVLAT9iJiupZPJ6SE5",
"json_metadata": "{\"profile\":{\"profile_image\":\"https://media.licdn.com/mpr/mpr/shrinknp_400_400/p/8/005/07c/069/16a2188.jpg\",\"name\":\"joeldg\",\"about\":\"I code and write and stuff\",\"location\":\"Venice \"}}",
"posting_json_metadata": "{\"profile\":{\"profile_image\":\"https://media.licdn.com/mpr/mpr/shrinknp_400_400/p/8/005/07c/069/16a2188.jpg\",\"name\":\"joeldg\",\"about\":\"I code and write and stuff\",\"location\":\"Venice \"}}",
"proxy": "",
"last_owner_update": "1970-01-01T00:00:00",
"last_account_update": "2017-06-13T19:25:00",
"created": "2017-06-13T17:58:42",
"mined": false,
"recovery_account": "steem",
"last_account_recovery": "1970-01-01T00:00:00",
"reset_account": "null",
"comment_count": 0,
"lifetime_vote_count": 0,
"post_count": 2,
"can_vote": true,
"voting_manabar": {
"current_mana": "8143659806",
"last_update_time": 1779069501
},
"downvote_manabar": {
"current_mana": 2035914951,
"last_update_time": 1779069501
},
"voting_power": 0,
"balance": "0.000 STEEM",
"savings_balance": "0.000 STEEM",
"sbd_balance": "0.000 SBD",
"sbd_seconds": "0",
"sbd_seconds_last_update": "1970-01-01T00:00:00",
"sbd_last_interest_payment": "1970-01-01T00:00:00",
"savings_sbd_balance": "0.000 SBD",
"savings_sbd_seconds": "0",
"savings_sbd_seconds_last_update": "1970-01-01T00:00:00",
"savings_sbd_last_interest_payment": "1970-01-01T00:00:00",
"savings_withdraw_requests": 0,
"reward_sbd_balance": "0.028 SBD",
"reward_steem_balance": "0.000 STEEM",
"reward_vesting_balance": "26.909666 VESTS",
"reward_vesting_steem": "0.013 STEEM",
"vesting_shares": "1035.378065 VESTS",
"delegated_vesting_shares": "0.000000 VESTS",
"received_vesting_shares": "7108.281741 VESTS",
"vesting_withdraw_rate": "0.000000 VESTS",
"next_vesting_withdrawal": "1969-12-31T23:59:59",
"withdrawn": 0,
"to_withdraw": 0,
"withdraw_routes": 0,
"curation_rewards": 0,
"posting_rewards": 26,
"proxied_vsf_votes": [
0,
0,
0,
0
],
"witnesses_voted_for": 0,
"last_post": "2017-06-13T21:10:27",
"last_root_post": "2017-06-13T19:20:33",
"last_vote_time": "2017-06-13T19:20:33",
"post_bandwidth": 0,
"pending_claimed_accounts": 0,
"vesting_balance": "0.000 STEEM",
"reputation": 38293879,
"transfer_history": [],
"market_history": [],
"post_history": [],
"vote_history": [],
"other_history": [],
"witness_votes": [],
"tags_usage": [],
"guest_bloggers": [],
"rank": 687338
}Withdraw Routes
| Incoming | Outgoing |
|---|---|
Empty | Empty |
{
"incoming": [],
"outgoing": []
}From Date
To Date
2026/05/18 01:58:21
2026/05/18 01:58:21
| delegator | steem |
| delegatee | joeldg |
| vesting shares | 7108.281741 VESTS |
| Transaction Info | Block #106145501/Trx a3991ba1bf7d51893a8c283c03415b39fb7bdd50 |
View Raw JSON Data
{
"trx_id": "a3991ba1bf7d51893a8c283c03415b39fb7bdd50",
"block": 106145501,
"trx_in_block": 0,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2026-05-18T01:58:21",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "joeldg",
"vesting_shares": "7108.281741 VESTS"
}
]
}2026/05/12 10:49:09
2026/05/12 10:49:09
| delegator | steem |
| delegatee | joeldg |
| vesting shares | 4396.071336 VESTS |
| Transaction Info | Block #105984069/Trx 0b3f013e86456bd9cc1927c3dca87138c8d217db |
View Raw JSON Data
{
"trx_id": "0b3f013e86456bd9cc1927c3dca87138c8d217db",
"block": 105984069,
"trx_in_block": 2,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2026-05-12T10:49:09",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "joeldg",
"vesting_shares": "4396.071336 VESTS"
}
]
}2026/04/26 01:16:30
2026/04/26 01:16:30
| delegator | steem |
| delegatee | joeldg |
| vesting shares | 7120.797497 VESTS |
| Transaction Info | Block #105513102/Trx 32701ce590c4fdfbabd8cac4021031506887871f |
View Raw JSON Data
{
"trx_id": "32701ce590c4fdfbabd8cac4021031506887871f",
"block": 105513102,
"trx_in_block": 0,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2026-04-26T01:16:30",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "joeldg",
"vesting_shares": "7120.797497 VESTS"
}
]
}2026/01/23 12:24:57
2026/01/23 12:24:57
| delegator | steem |
| delegatee | joeldg |
| vesting shares | 4437.618155 VESTS |
| Transaction Info | Block #102857341/Trx a83e0e8ec05a2f22fc34490bdd3d6a9490648bda |
View Raw JSON Data
{
"trx_id": "a83e0e8ec05a2f22fc34490bdd3d6a9490648bda",
"block": 102857341,
"trx_in_block": 1,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2026-01-23T12:24:57",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "joeldg",
"vesting_shares": "4437.618155 VESTS"
}
]
}2024/12/17 07:41:36
2024/12/17 07:41:36
| delegator | steem |
| delegatee | joeldg |
| vesting shares | 4601.837352 VESTS |
| Transaction Info | Block #91303690/Trx bdf6c7717a086662e18f1ff5dcb8a12387e86aa5 |
View Raw JSON Data
{
"trx_id": "bdf6c7717a086662e18f1ff5dcb8a12387e86aa5",
"block": 91303690,
"trx_in_block": 1,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2024-12-17T07:41:36",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "joeldg",
"vesting_shares": "4601.837352 VESTS"
}
]
}2023/11/13 23:23:36
2023/11/13 23:23:36
| delegator | steem |
| delegatee | joeldg |
| vesting shares | 4770.970884 VESTS |
| Transaction Info | Block #79857874/Trx 83398e0048e56092d997d1fa9cd0a56f66bd7f96 |
View Raw JSON Data
{
"trx_id": "83398e0048e56092d997d1fa9cd0a56f66bd7f96",
"block": 79857874,
"trx_in_block": 3,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2023-11-13T23:23:36",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "joeldg",
"vesting_shares": "4770.970884 VESTS"
}
]
}2023/09/21 23:51:33
2023/09/21 23:51:33
| delegator | steem |
| delegatee | joeldg |
| vesting shares | 7708.249670 VESTS |
| Transaction Info | Block #78350257/Trx 24804f6b674897f7f21993477bc4dc3a20f73a28 |
View Raw JSON Data
{
"trx_id": "24804f6b674897f7f21993477bc4dc3a20f73a28",
"block": 78350257,
"trx_in_block": 6,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2023-09-21T23:51:33",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "joeldg",
"vesting_shares": "7708.249670 VESTS"
}
]
}2022/11/03 13:23:30
2022/11/03 13:23:30
| delegator | steem |
| delegatee | joeldg |
| vesting shares | 7929.931108 VESTS |
| Transaction Info | Block #69115277/Trx 0a2ee26e5cbb5b3dc64d2411fb9fb546a5a416b0 |
View Raw JSON Data
{
"trx_id": "0a2ee26e5cbb5b3dc64d2411fb9fb546a5a416b0",
"block": 69115277,
"trx_in_block": 4,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2022-11-03T13:23:30",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "joeldg",
"vesting_shares": "7929.931108 VESTS"
}
]
}2022/01/17 16:46:48
2022/01/17 16:46:48
| delegator | steem |
| delegatee | joeldg |
| vesting shares | 8150.166244 VESTS |
| Transaction Info | Block #60816367/Trx ecd6e32f3810cdf875afe939c776e1e5a6e7bd97 |
View Raw JSON Data
{
"trx_id": "ecd6e32f3810cdf875afe939c776e1e5a6e7bd97",
"block": 60816367,
"trx_in_block": 7,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2022-01-17T16:46:48",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "joeldg",
"vesting_shares": "8150.166244 VESTS"
}
]
}2021/06/14 02:22:00
2021/06/14 02:22:00
| delegator | steem |
| delegatee | joeldg |
| vesting shares | 8334.232997 VESTS |
| Transaction Info | Block #54609574/Trx 6dec12baae0ee0c8990025ea52434aa55d8fc067 |
View Raw JSON Data
{
"trx_id": "6dec12baae0ee0c8990025ea52434aa55d8fc067",
"block": 54609574,
"trx_in_block": 1,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2021-06-14T02:22:00",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "joeldg",
"vesting_shares": "8334.232997 VESTS"
}
]
}2020/12/11 12:38:45
2020/12/11 12:38:45
| delegator | steem |
| delegatee | joeldg |
| vesting shares | 8521.654971 VESTS |
| Transaction Info | Block #49356972/Trx 27517c24f2335eb1f26dc0fe4ffde5cd7749b1c9 |
View Raw JSON Data
{
"trx_id": "27517c24f2335eb1f26dc0fe4ffde5cd7749b1c9",
"block": 49356972,
"trx_in_block": 8,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-12-11T12:38:45",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "joeldg",
"vesting_shares": "8521.654971 VESTS"
}
]
}2020/12/06 06:15:33
2020/12/06 06:15:33
| delegator | steem |
| delegatee | joeldg |
| vesting shares | 1912.543513 VESTS |
| Transaction Info | Block #49208527/Trx fe84935999620a72fff6dbc5f39d1a788d420e43 |
View Raw JSON Data
{
"trx_id": "fe84935999620a72fff6dbc5f39d1a788d420e43",
"block": 49208527,
"trx_in_block": 1,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-12-06T06:15:33",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "joeldg",
"vesting_shares": "1912.543513 VESTS"
}
]
}2020/12/05 16:16:54
2020/12/05 16:16:54
| delegator | steem |
| delegatee | joeldg |
| vesting shares | 8527.862825 VESTS |
| Transaction Info | Block #49192070/Trx 9c32bc54d8094459ee61372d1d31139635e53298 |
View Raw JSON Data
{
"trx_id": "9c32bc54d8094459ee61372d1d31139635e53298",
"block": 49192070,
"trx_in_block": 8,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-12-05T16:16:54",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "joeldg",
"vesting_shares": "8527.862825 VESTS"
}
]
}2020/11/02 18:46:06
2020/11/02 18:46:06
| delegator | steem |
| delegatee | joeldg |
| vesting shares | 1920.017158 VESTS |
| Transaction Info | Block #48261489/Trx 8333dc37dafd7210cc5f66bd99bd1d23d3ae9ae7 |
View Raw JSON Data
{
"trx_id": "8333dc37dafd7210cc5f66bd99bd1d23d3ae9ae7",
"block": 48261489,
"trx_in_block": 2,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-11-02T18:46:06",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "joeldg",
"vesting_shares": "1920.017158 VESTS"
}
]
}2020/05/09 07:14:27
2020/05/09 07:14:27
| delegator | steem |
| delegatee | joeldg |
| vesting shares | 8730.668184 VESTS |
| Transaction Info | Block #43218795/Trx b5733d1faaa287079723d55f769b33867f235194 |
View Raw JSON Data
{
"trx_id": "b5733d1faaa287079723d55f769b33867f235194",
"block": 43218795,
"trx_in_block": 22,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-05-09T07:14:27",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "joeldg",
"vesting_shares": "8730.668184 VESTS"
}
]
}2020/05/08 11:04:15
2020/05/08 11:04:15
| delegator | steem |
| delegatee | joeldg |
| vesting shares | 1953.311140 VESTS |
| Transaction Info | Block #43195158/Trx 9aed8694bdfc721bf9216ec520c58621ec02f6c7 |
View Raw JSON Data
{
"trx_id": "9aed8694bdfc721bf9216ec520c58621ec02f6c7",
"block": 43195158,
"trx_in_block": 5,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-05-08T11:04:15",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "joeldg",
"vesting_shares": "1953.311140 VESTS"
}
]
}2020/04/16 00:52:03
2020/04/16 00:52:03
| delegator | steem |
| delegatee | joeldg |
| vesting shares | 8743.555632 VESTS |
| Transaction Info | Block #42566338/Trx f48deb3478fa2c8eadcff4815ce5743189512169 |
View Raw JSON Data
{
"trx_id": "f48deb3478fa2c8eadcff4815ce5743189512169",
"block": 42566338,
"trx_in_block": 17,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-04-16T00:52:03",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "joeldg",
"vesting_shares": "8743.555632 VESTS"
}
]
}2019/06/13 19:40:18
2019/06/13 19:40:18
| parent author | joeldg |
| parent permlink | let-s-write-a-cryptocurrency-bot-part-1 |
| author | steemitboard |
| permlink | steemitboard-notify-joeldg-20190613t194017000z |
| title | |
| body | Congratulations @joeldg! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@joeldg/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@joeldg) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=joeldg)_</sub> ###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| Transaction Info | Block #33771913/Trx 6b0024ec18441d80fe6debedae1a16068b47a108 |
View Raw JSON Data
{
"trx_id": "6b0024ec18441d80fe6debedae1a16068b47a108",
"block": 33771913,
"trx_in_block": 9,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-06-13T19:40:18",
"op": [
"comment",
{
"parent_author": "joeldg",
"parent_permlink": "let-s-write-a-cryptocurrency-bot-part-1",
"author": "steemitboard",
"permlink": "steemitboard-notify-joeldg-20190613t194017000z",
"title": "",
"body": "Congratulations @joeldg! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@joeldg/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@joeldg) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=joeldg)_</sub>\n\n\n###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}"
}
]
}2019/05/12 17:57:36
2019/05/12 17:57:36
| delegator | steem |
| delegatee | joeldg |
| vesting shares | 8939.172445 VESTS |
| Transaction Info | Block #32849155/Trx 4909b3133cd79c460727ccee67264493e0bf67db |
View Raw JSON Data
{
"trx_id": "4909b3133cd79c460727ccee67264493e0bf67db",
"block": 32849155,
"trx_in_block": 13,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-05-12T17:57:36",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "joeldg",
"vesting_shares": "8939.172445 VESTS"
}
]
}2018/05/16 22:01:45
2018/05/16 22:01:45
| delegator | steem |
| delegatee | joeldg |
| vesting shares | 9138.783313 VESTS |
| Transaction Info | Block #22491936/Trx 02999038176efe1c259f0216783b4023ed149feb |
View Raw JSON Data
{
"trx_id": "02999038176efe1c259f0216783b4023ed149feb",
"block": 22491936,
"trx_in_block": 1,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-16T22:01:45",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "joeldg",
"vesting_shares": "9138.783313 VESTS"
}
]
}2018/01/09 06:40:21
2018/01/09 06:40:21
| delegator | steem |
| delegatee | joeldg |
| vesting shares | 29689.811227 VESTS |
| Transaction Info | Block #18819605/Trx a96d48763cba07602ec14d1959f1f60b81b210c1 |
View Raw JSON Data
{
"trx_id": "a96d48763cba07602ec14d1959f1f60b81b210c1",
"block": 18819605,
"trx_in_block": 14,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-01-09T06:40:21",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "joeldg",
"vesting_shares": "29689.811227 VESTS"
}
]
}2017/08/04 05:18:54
2017/08/04 05:18:54
| delegator | steem |
| delegatee | joeldg |
| vesting shares | 29940.621935 VESTS |
| Transaction Info | Block #14271455/Trx d7a51884afc7bc98df7ce185905cff065689d1c7 |
View Raw JSON Data
{
"trx_id": "d7a51884afc7bc98df7ce185905cff065689d1c7",
"block": 14271455,
"trx_in_block": 5,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2017-08-04T05:18:54",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "joeldg",
"vesting_shares": "29940.621935 VESTS"
}
]
}2017/07/29 22:46:54
2017/07/29 22:46:54
| parent author | joeldg |
| parent permlink | let-s-write-a-cryptocurrency-bot-part-1 |
| author | wachtoufofit |
| permlink | re-joeldg-let-s-write-a-cryptocurrency-bot-part-1-20170729t224829087z |
| title | |
| body | Good! |
| json metadata | {"tags":["cryptocurrency"],"app":"steemit/0.1"} |
| Transaction Info | Block #14119734/Trx 77c0cdadb53fd4aa59ee5808fe0372c3c80fdb47 |
View Raw JSON Data
{
"trx_id": "77c0cdadb53fd4aa59ee5808fe0372c3c80fdb47",
"block": 14119734,
"trx_in_block": 24,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2017-07-29T22:46:54",
"op": [
"comment",
{
"parent_author": "joeldg",
"parent_permlink": "let-s-write-a-cryptocurrency-bot-part-1",
"author": "wachtoufofit",
"permlink": "re-joeldg-let-s-write-a-cryptocurrency-bot-part-1-20170729t224829087z",
"title": "",
"body": "Good!",
"json_metadata": "{\"tags\":[\"cryptocurrency\"],\"app\":\"steemit/0.1\"}"
}
]
}bencampbellupvoted (100.00%) @joeldg / let-s-write-a-cryptocurrency-bot-part-12017/06/21 23:11:15
bencampbellupvoted (100.00%) @joeldg / let-s-write-a-cryptocurrency-bot-part-1
2017/06/21 23:11:15
| voter | bencampbell |
| author | joeldg |
| permlink | let-s-write-a-cryptocurrency-bot-part-1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #13027348/Trx 62f1b57820887a2d0eb83c325a268264a6ec0b9b |
View Raw JSON Data
{
"trx_id": "62f1b57820887a2d0eb83c325a268264a6ec0b9b",
"block": 13027348,
"trx_in_block": 22,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2017-06-21T23:11:15",
"op": [
"vote",
{
"voter": "bencampbell",
"author": "joeldg",
"permlink": "let-s-write-a-cryptocurrency-bot-part-1",
"weight": 10000
}
]
}joeldgreceived 0.028 SBD, 0.017 SP author reward for @joeldg / let-s-write-a-cryptocurrency-bot-part-12017/06/20 19:20:33
joeldgreceived 0.028 SBD, 0.017 SP author reward for @joeldg / let-s-write-a-cryptocurrency-bot-part-1
2017/06/20 19:20:33
| author | joeldg |
| permlink | let-s-write-a-cryptocurrency-bot-part-1 |
| sbd payout | 0.028 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 26.909666 VESTS |
| Transaction Info | Block #12994065/Virtual Operation #11 |
View Raw JSON Data
{
"trx_id": "0000000000000000000000000000000000000000",
"block": 12994065,
"trx_in_block": 4294967295,
"op_in_trx": 0,
"virtual_op": 11,
"timestamp": "2017-06-20T19:20:33",
"op": [
"author_reward",
{
"author": "joeldg",
"permlink": "let-s-write-a-cryptocurrency-bot-part-1",
"sbd_payout": "0.028 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "26.909666 VESTS"
}
]
}neprocupvoted (100.00%) @joeldg / let-s-write-a-cryptocurrency-bot-part-12017/06/17 09:48:27
neprocupvoted (100.00%) @joeldg / let-s-write-a-cryptocurrency-bot-part-1
2017/06/17 09:48:27
| voter | neproc |
| author | joeldg |
| permlink | let-s-write-a-cryptocurrency-bot-part-1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #12896432/Trx 2e298b81f3f4a001bd50b4036e26580a708ca38d |
View Raw JSON Data
{
"trx_id": "2e298b81f3f4a001bd50b4036e26580a708ca38d",
"block": 12896432,
"trx_in_block": 11,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2017-06-17T09:48:27",
"op": [
"vote",
{
"voter": "neproc",
"author": "joeldg",
"permlink": "let-s-write-a-cryptocurrency-bot-part-1",
"weight": 10000
}
]
}2017/06/14 04:50:15
2017/06/14 04:50:15
| parent author | joeldg |
| parent permlink | re-jek-re-joeldg-let-s-write-a-cryptocurrency-bot-part-1-20170613t211027459z |
| author | jek |
| permlink | re-joeldg-re-jek-re-joeldg-let-s-write-a-cryptocurrency-bot-part-1-20170614t045013989z |
| title | |
| body | I guess there are fees for switching between cryptos? So the strategy would have to be careful not to erode any potential value. |
| json metadata | {"tags":["cryptocurrency"],"app":"steemit/0.1"} |
| Transaction Info | Block #12804163/Trx b3d886aa1ef8653f8cb7cc74588ce8965f7aa211 |
View Raw JSON Data
{
"trx_id": "b3d886aa1ef8653f8cb7cc74588ce8965f7aa211",
"block": 12804163,
"trx_in_block": 1,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2017-06-14T04:50:15",
"op": [
"comment",
{
"parent_author": "joeldg",
"parent_permlink": "re-jek-re-joeldg-let-s-write-a-cryptocurrency-bot-part-1-20170613t211027459z",
"author": "jek",
"permlink": "re-joeldg-re-jek-re-joeldg-let-s-write-a-cryptocurrency-bot-part-1-20170614t045013989z",
"title": "",
"body": "I guess there are fees for switching between cryptos? So the strategy would have to be careful not to erode any potential value.",
"json_metadata": "{\"tags\":[\"cryptocurrency\"],\"app\":\"steemit/0.1\"}"
}
]
}2017/06/13 21:10:27
2017/06/13 21:10:27
| parent author | jek |
| parent permlink | re-joeldg-let-s-write-a-cryptocurrency-bot-part-1-20170613t204058671z |
| author | joeldg |
| permlink | re-jek-re-joeldg-let-s-write-a-cryptocurrency-bot-part-1-20170613t211027459z |
| title | |
| body | Quantopian, definitely. |
| json metadata | {"tags":["cryptocurrency"],"app":"steemit/0.1"} |
| Transaction Info | Block #12794968/Trx 414216c5f4d074e8a858d801bb936ec26f071f9c |
View Raw JSON Data
{
"trx_id": "414216c5f4d074e8a858d801bb936ec26f071f9c",
"block": 12794968,
"trx_in_block": 20,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2017-06-13T21:10:27",
"op": [
"comment",
{
"parent_author": "jek",
"parent_permlink": "re-joeldg-let-s-write-a-cryptocurrency-bot-part-1-20170613t204058671z",
"author": "joeldg",
"permlink": "re-jek-re-joeldg-let-s-write-a-cryptocurrency-bot-part-1-20170613t211027459z",
"title": "",
"body": "Quantopian, definitely.",
"json_metadata": "{\"tags\":[\"cryptocurrency\"],\"app\":\"steemit/0.1\"}"
}
]
}2017/06/13 20:41:00
2017/06/13 20:41:00
| parent author | joeldg |
| parent permlink | let-s-write-a-cryptocurrency-bot-part-1 |
| author | jek |
| permlink | re-joeldg-let-s-write-a-cryptocurrency-bot-part-1-20170613t204058671z |
| title | |
| body | Whats a good place to learn about different trading strategies? |
| json metadata | {"tags":["cryptocurrency"],"app":"steemit/0.1"} |
| Transaction Info | Block #12794379/Trx b45d3ba135c33398a2d3f3ca92a0b3b35c5a54a0 |
View Raw JSON Data
{
"trx_id": "b45d3ba135c33398a2d3f3ca92a0b3b35c5a54a0",
"block": 12794379,
"trx_in_block": 3,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2017-06-13T20:41:00",
"op": [
"comment",
{
"parent_author": "joeldg",
"parent_permlink": "let-s-write-a-cryptocurrency-bot-part-1",
"author": "jek",
"permlink": "re-joeldg-let-s-write-a-cryptocurrency-bot-part-1-20170613t204058671z",
"title": "",
"body": "Whats a good place to learn about different trading strategies?",
"json_metadata": "{\"tags\":[\"cryptocurrency\"],\"app\":\"steemit/0.1\"}"
}
]
}2017/06/13 20:03:09
2017/06/13 20:03:09
| parent author | joeldg |
| parent permlink | let-s-write-a-cryptocurrency-bot-part-1 |
| author | laurel666 |
| permlink | re-joeldg-let-s-write-a-cryptocurrency-bot-part-1-20170613t200241292z |
| title | |
| body | GREAT Article! |
| json metadata | {"tags":["cryptocurrency"],"app":"steemit/0.1"} |
| Transaction Info | Block #12793622/Trx 0971ef11ac33d947f73e7f40c2acf8b100ff9e85 |
View Raw JSON Data
{
"trx_id": "0971ef11ac33d947f73e7f40c2acf8b100ff9e85",
"block": 12793622,
"trx_in_block": 11,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2017-06-13T20:03:09",
"op": [
"comment",
{
"parent_author": "joeldg",
"parent_permlink": "let-s-write-a-cryptocurrency-bot-part-1",
"author": "laurel666",
"permlink": "re-joeldg-let-s-write-a-cryptocurrency-bot-part-1-20170613t200241292z",
"title": "",
"body": "GREAT Article!",
"json_metadata": "{\"tags\":[\"cryptocurrency\"],\"app\":\"steemit/0.1\"}"
}
]
}laurel666upvoted (100.00%) @joeldg / let-s-write-a-cryptocurrency-bot-part-12017/06/13 20:02:36
laurel666upvoted (100.00%) @joeldg / let-s-write-a-cryptocurrency-bot-part-1
2017/06/13 20:02:36
| voter | laurel666 |
| author | joeldg |
| permlink | let-s-write-a-cryptocurrency-bot-part-1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #12793611/Trx d9556438eac6ab54d8e3c515cb35e9fa53eff168 |
View Raw JSON Data
{
"trx_id": "d9556438eac6ab54d8e3c515cb35e9fa53eff168",
"block": 12793611,
"trx_in_block": 12,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2017-06-13T20:02:36",
"op": [
"vote",
{
"voter": "laurel666",
"author": "joeldg",
"permlink": "let-s-write-a-cryptocurrency-bot-part-1",
"weight": 10000
}
]
}adipranatahendiremoved vote from (0.00%) @joeldg / let-s-write-a-cryptocurrency-bot-part-12017/06/13 19:29:03
adipranatahendiremoved vote from (0.00%) @joeldg / let-s-write-a-cryptocurrency-bot-part-1
2017/06/13 19:29:03
| voter | adipranatahendi |
| author | joeldg |
| permlink | let-s-write-a-cryptocurrency-bot-part-1 |
| weight | 0 (0.00%) |
| Transaction Info | Block #12792940/Trx 62d4c386fc596ace29ff3e1049cbe139e1a3f16d |
View Raw JSON Data
{
"trx_id": "62d4c386fc596ace29ff3e1049cbe139e1a3f16d",
"block": 12792940,
"trx_in_block": 9,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2017-06-13T19:29:03",
"op": [
"vote",
{
"voter": "adipranatahendi",
"author": "joeldg",
"permlink": "let-s-write-a-cryptocurrency-bot-part-1",
"weight": 0
}
]
}adipranatahendiupvoted (100.00%) @joeldg / let-s-write-a-cryptocurrency-bot-part-12017/06/13 19:28:54
adipranatahendiupvoted (100.00%) @joeldg / let-s-write-a-cryptocurrency-bot-part-1
2017/06/13 19:28:54
| voter | adipranatahendi |
| author | joeldg |
| permlink | let-s-write-a-cryptocurrency-bot-part-1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #12792937/Trx 3e40c3487470890e6f4a73eaf6b479eea542389e |
View Raw JSON Data
{
"trx_id": "3e40c3487470890e6f4a73eaf6b479eea542389e",
"block": 12792937,
"trx_in_block": 10,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2017-06-13T19:28:54",
"op": [
"vote",
{
"voter": "adipranatahendi",
"author": "joeldg",
"permlink": "let-s-write-a-cryptocurrency-bot-part-1",
"weight": 10000
}
]
}2017/06/13 19:27:57
2017/06/13 19:27:57
| parent author | joeldg |
| parent permlink | let-s-write-a-cryptocurrency-bot-part-1 |
| author | cheetah |
| permlink | cheetah-re-joeldglet-s-write-a-cryptocurrency-bot-part-1 |
| title | |
| body | Hi! I am a robot. I just upvoted you! I found similar content that readers might be interested in: https://medium.com/@joeldg/an-advanced-tutorial-a-new-crypto-currency-trading-bot-boilerplate-framework-e777733607ae |
| json metadata | |
| Transaction Info | Block #12792918/Trx 0928c66cba58a7eef4b6d279c524a04e67567d18 |
View Raw JSON Data
{
"trx_id": "0928c66cba58a7eef4b6d279c524a04e67567d18",
"block": 12792918,
"trx_in_block": 12,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2017-06-13T19:27:57",
"op": [
"comment",
{
"parent_author": "joeldg",
"parent_permlink": "let-s-write-a-cryptocurrency-bot-part-1",
"author": "cheetah",
"permlink": "cheetah-re-joeldglet-s-write-a-cryptocurrency-bot-part-1",
"title": "",
"body": "Hi! I am a robot. I just upvoted you! I found similar content that readers might be interested in:\nhttps://medium.com/@joeldg/an-advanced-tutorial-a-new-crypto-currency-trading-bot-boilerplate-framework-e777733607ae",
"json_metadata": ""
}
]
}cheetahupvoted (1.00%) @joeldg / let-s-write-a-cryptocurrency-bot-part-12017/06/13 19:27:51
cheetahupvoted (1.00%) @joeldg / let-s-write-a-cryptocurrency-bot-part-1
2017/06/13 19:27:51
| voter | cheetah |
| author | joeldg |
| permlink | let-s-write-a-cryptocurrency-bot-part-1 |
| weight | 100 (1.00%) |
| Transaction Info | Block #12792916/Trx 060b21328a0aa45f42258834802cf5d34e3d08b7 |
View Raw JSON Data
{
"trx_id": "060b21328a0aa45f42258834802cf5d34e3d08b7",
"block": 12792916,
"trx_in_block": 25,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2017-06-13T19:27:51",
"op": [
"vote",
{
"voter": "cheetah",
"author": "joeldg",
"permlink": "let-s-write-a-cryptocurrency-bot-part-1",
"weight": 100
}
]
}joeldgupdated their account properties2017/06/13 19:25:00
joeldgupdated their account properties
2017/06/13 19:25:00
| account | joeldg |
| memo key | STM8YMGFmpw9oP29dxkUuauT5d8PYtGHX6dyVLAT9iJiupZPJ6SE5 |
| json metadata | {"profile":{"profile_image":"https://media.licdn.com/mpr/mpr/shrinknp_400_400/p/8/005/07c/069/16a2188.jpg","name":"joeldg","about":"I code and write and stuff","location":"Venice "}} |
| Transaction Info | Block #12792859/Trx c621317abcbdc49d1b74d41be0f52ab997a1144e |
View Raw JSON Data
{
"trx_id": "c621317abcbdc49d1b74d41be0f52ab997a1144e",
"block": 12792859,
"trx_in_block": 9,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2017-06-13T19:25:00",
"op": [
"account_update",
{
"account": "joeldg",
"memo_key": "STM8YMGFmpw9oP29dxkUuauT5d8PYtGHX6dyVLAT9iJiupZPJ6SE5",
"json_metadata": "{\"profile\":{\"profile_image\":\"https://media.licdn.com/mpr/mpr/shrinknp_400_400/p/8/005/07c/069/16a2188.jpg\",\"name\":\"joeldg\",\"about\":\"I code and write and stuff\",\"location\":\"Venice \"}}"
}
]
}coeurdelionupvoted (100.00%) @joeldg / let-s-write-a-cryptocurrency-bot-part-12017/06/13 19:24:45
coeurdelionupvoted (100.00%) @joeldg / let-s-write-a-cryptocurrency-bot-part-1
2017/06/13 19:24:45
| voter | coeurdelion |
| author | joeldg |
| permlink | let-s-write-a-cryptocurrency-bot-part-1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #12792854/Trx 80ad7639e51701f2bd4abbfdb0b10add01eef8b5 |
View Raw JSON Data
{
"trx_id": "80ad7639e51701f2bd4abbfdb0b10add01eef8b5",
"block": 12792854,
"trx_in_block": 5,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2017-06-13T19:24:45",
"op": [
"vote",
{
"voter": "coeurdelion",
"author": "joeldg",
"permlink": "let-s-write-a-cryptocurrency-bot-part-1",
"weight": 10000
}
]
}francis228upvoted (100.00%) @joeldg / let-s-write-a-cryptocurrency-bot-part-12017/06/13 19:23:09
francis228upvoted (100.00%) @joeldg / let-s-write-a-cryptocurrency-bot-part-1
2017/06/13 19:23:09
| voter | francis228 |
| author | joeldg |
| permlink | let-s-write-a-cryptocurrency-bot-part-1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #12792822/Trx 3a8a2ad90e1c954bf5294fc292ca59c327a5f01a |
View Raw JSON Data
{
"trx_id": "3a8a2ad90e1c954bf5294fc292ca59c327a5f01a",
"block": 12792822,
"trx_in_block": 3,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2017-06-13T19:23:09",
"op": [
"vote",
{
"voter": "francis228",
"author": "joeldg",
"permlink": "let-s-write-a-cryptocurrency-bot-part-1",
"weight": 10000
}
]
}joeldgupvoted (100.00%) @joeldg / let-s-write-a-cryptocurrency-bot-part-12017/06/13 19:20:33
joeldgupvoted (100.00%) @joeldg / let-s-write-a-cryptocurrency-bot-part-1
2017/06/13 19:20:33
| voter | joeldg |
| author | joeldg |
| permlink | let-s-write-a-cryptocurrency-bot-part-1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #12792770/Trx ea9f527d86f2f84a9038db5b9fb413f2bc78352c |
View Raw JSON Data
{
"trx_id": "ea9f527d86f2f84a9038db5b9fb413f2bc78352c",
"block": 12792770,
"trx_in_block": 8,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2017-06-13T19:20:33",
"op": [
"vote",
{
"voter": "joeldg",
"author": "joeldg",
"permlink": "let-s-write-a-cryptocurrency-bot-part-1",
"weight": 10000
}
]
}joeldgpublished a new post: let-s-write-a-cryptocurrency-bot-part-12017/06/13 19:20:33
joeldgpublished a new post: let-s-write-a-cryptocurrency-bot-part-1
2017/06/13 19:20:33
| parent author | |
| parent permlink | cryptocurrency |
| author | joeldg |
| permlink | let-s-write-a-cryptocurrency-bot-part-1 |
| title | Let’s write a cryptocurrency bot. (part 1) |
| body |  ##### Want to make your own BTC bot? I’ll walk you through the full setup, on to your first execution of an automated trade, and beyond. ### Cryptocurrencies I should not need to tell you but, a couple months ago you could buy the cryptocurrency Etherium for $11, it rapidly went up to $43 (I bought in between those prices) and has now currently gone to over $335 as of June 2017. Those kinds of gains are nearly unbelievable to a traditional investor and yet these are across the board in this space. Excited yet? So here is a scenario: So you made a ton of money on cryptocurrencies and have some concerns about shuffling it through your bank because of potential capital gains tax issues. There are places who have a solution for you if you want to be able to use this money for other investments. These places won’t make you photograph your license and send it in, just use an email and they provide you with a BTC deposit wallet, demo accounts, API’s, then when you are ready, you send money in and it’s ‘go time’, you can trade everything from treasury bonds to Forex using Cryptocurrencies as your base monetary instrument. But, you say, I am a coder who likes to automate things, surely we can fire up some BTCbot and we can have it just do the work for us, it will make us millions in our sleep, right? — probably not. ### My solution: I don’t want to write a bot and publish it with a single strategy and just say “here, use this”, I don’t think that is helpful to anyone, I would rather give you the tools and show you how to write strategies yourself, show you how to set up data collection for the strategies and how to implement them in a trading system and see the results. > note: Also, I don’t want to create this in a new or arcane language, I want this written in PHP which the most number of people are familiar with and in a framework (Laravel) that is simple to use but powerful enough that you can create what you need. If you think PHP is just for web pages, read on, this should surprise you. I like to build systems, I have been working on this post for a while and it represents a good deal of non-derivative custom work. If you have read some of my other tutorials you know that I like to write tutorials that “I wish that I had found instead of having to to write”, so you are in for a thorough read, with a lot of copy-paste style recipes. Let’s get started. ### Steps we are going to take: * Get boilerplate/framework installed. * Walk through the core parts of the system, see what is where. * Install and configure software we need. * Account creation at the brokerages we will be using, setting up the API keys for the scripts. * Run tests and examples, lets get it ready. * Set up websocket streams to get data. * Finding strategies for our automated agents * Deep dive into Indicators and Candles available to us. *Coding up our first agent. * Testing the agent. * A few closing words about the risks you are taking. ### Get boilerplate/framework installed (Bowhead) You can find the repository for the Bowhead boilerplate at it’s github repository home here. [joeldg/bowhead](https://github.com/joeldg/bowhead) > note: You will need [composer](https://getcomposer.org/doc/00-intro.md) installed. > note2: If you are on a Mac, I would strongly suggest the following tools: [iTerm2](https://www.iterm2.com/) with the [screen](https://ss64.com/osx/screen.html) command, [Sequel Pro](https://www.sequelpro.com/) and of course [PHPStorm](https://www.jetbrains.com/phpstorm/) ###Bring the project in locally with: ```` git clone https://github.com/joeldg/bowhead.git cd bowhead composer update cp .env-example .env # now to the other required software # If you are on a Mac (this is very roughly) brew install redis brew install mysql brew install php7.1 curl -O http://pear.php.net/go-pear.phar sudo php -d detect_unicode=0 go-pear.phar sudo pecl install trader mkfifo quotes # on ubuntu something like this needs to be done sudo add-apt-repository ppa:ondrej/php sudo apt-get update sudo apt-get install php7.1 php7.1-opcache php7.1-sqlite3 php7.1-readline php7.1-mysql php7.1-mcrypt php7.1-mbstring php7.1-json php7.1-intl php7.1-gd php7.1-curl php7.1-bz2 php7.1-bcmath php7.1-cli php7.1-zip sudo apt-get install redis-server sudo apt-get install mysql-server sudo apt-get install screen autoconf automake libtool m4 pkg-config sudo apt-get install php-pear unzip ImageMagick-devel python-pip supervisor curl -O http://pear.php.net/go-pear.phar sudo php -d detect_unicode=0 go-pear.phar sudo pecl install trader mkfifo quotes ```` ### Let’s go over the core parts of the system Fire up PHPStorm or your favorite editor and load up the project. This system is using the Laravel PHP framework, don’t worry you don’t need to be familiar with Laravel here, you can learn that on your own time if you want. The primary parts we are concerned with are located in: #### app/Console/Commands/ which is where all our console commands are located ```` BitfinexWebsocketCommand.php - Stream market data from Bitfinex CoinbaseWebsocketCommand.php - Stream market data from GDAX ExampleForexStrategyCommand.php - Forex example strategy ExampleStrategyCommand.php - Our example of a strategy ExampleUsageCommand.php - Basic usage examples GetHistoricalCommand.php - Pull in historic data from broker OandaStreamCommand.php - Stream market data from Oanda ```` #### app/Util/ which is all the utility classes that are available ```` Bitfinex.php - Bitfinex API wrapper BrokersUtil.php - Utilities for various brokers [Candles.php](https://github.com/joeldg/bowhead/blob/master/app/Util/Candles.php) - All 60 TALib candle methods wrapped Coinbase.php - GDAX API wrapper Console.php - Console color, tables and progress [Indicators.php](https://github.com/joeldg/bowhead/blob/master/app/Util/Indicators.php) - 21 TALib indicators and moving averages. Oanda.php - Oanda API wrapper OneBroker.php - 1Broker API wrapper Other.php - possible indicators, not implemented yet testStrategy.php - Here is your test strategy Whaleclub.php - Whaleclub API wrapper ```` #### app/Scripts which has a couple extras and some testing data, these scripts are SKLearn price forecasting scripts taken from a study on beer consumption I thought was really useful, these might be used for market price predictions. ```` close_prediction.py - SKLearn script to predict a closing price ohlc-btc.csv - Sample CSV data, if needed open_prediction.py - SKLearn script to predict an opening price a python script in the root dir called ‘streaming.py’ which is part of the Oanda streaming command. the .env-example file which will need your API keys and be moved to .env ```` Now, in a terminal in this directory type `php artisan` You should see something like the following, the part you are interested in is below. ### Redis and MySql If you followed the directions above you should have [Redis](https://redis.io/) installed as well as [MySql](https://www.mysql.com/) and a few other things. Redis really does not need any tweaking out of the box, just don’t open up ports for it to the outside if you have it on a cloud instance, you don’t want people messing with your systems. MySQL will need a database and a few tables, create your database, I call mine ‘bowhead’ but you if you want to change this or need to have prefixed database names then you can change the options in the .env file, here are the defaults in the .env file. ``` DB_CONNECTION=mysql DB_HOST=localhost DB_PORT=3306 DB_DATABASE=bowhead DB_USERNAME=root DB_PASSWORD=password ``` Once you are satisfied and can connect to your database, then from the terminal you will want to load up our testing data with. Change this command as per your modifications to the .env params above. `mysql -u root -p bowhead < app\Script\DBdump.sql` Open up the database in Sequel Pro and you will the sample data in the bowhead_ohlc (open, high, low, close) table. ### API accounts we need in order to set up automated trading. > Note: Where possible I have set up bonuses for you on these links, all sites below offer free accounts which do not require ‘verification’ and do not require a deposit. 1) [Whaleclub](https://whaleclub.co/join/tn6uE) the main site we want to trade on for this tutorial. They key their market data off of the Bitfinex websocket and match with Oanda streaming data for Forex. This site allows you to trade many instruments and commodities with BTC at up to 20x leverage, Forex up to 222x as well as providing BTC-based binary options. They have a simple easy to understand interface and excellent API. The API key is found by clicking on your name in the upper-right, and clicking on API. (use DEMO API key to start) 2) [1Broker](https://1broker.com/?r=21434) the secondary site we want to trade on, they are similar to other BTC-based market makers and have a ‘trader follow’ system as well that is fairly interesting, particularly to get people following ‘you’. API key is found on the right, just under the email icon, there is a small box with what looks like sliders on it, then click on Access & API Management. 3) [Oanda](https://www.oanda.com/) is where we get our streaming Forex data, you need an account. API access is found [here](https://www.oanda.com/demo-account/tpa/personal_token). 4) [Coinbase/GDAX](https://www.coinbase.com/join/51950ca286c21b84dd000021) what used to be called ‘Coinbase Exchange’ is now called GDAX, I have been automated trading there since they first opened. API key is found at far upper-right then click on API and create your keys. 5) [Bitfinex](https://www.bitfinex.com/) you need an account here with an API key so we can get Cryptocurrency quotes. API keys are found under ‘Account’ then click on API. 6) [Poloniex](https://poloniex.com/) is like Bitfinex but supports many alt-coins. API keys are found here. 7) [TradingView](http://tradingview.go2cloud.org/SHpx) not mandatory, but you will want an account there because all the indicators bowhead uses can be viewed on charts to help you build your strategies. The reasoning behind this combination is that the Whaleclub and 1Broker API’s are rate limited, WC only allows 60 requests per minute, if we want to make sure we have streaming real-time data to work with we need to stream from a BTC brokerage. Same with Forex. Definitely look around on these sites and see what they have to offer, I’ve been around the block with a lot of brokers and market maker sites and for BTC, these are all good as of June 2017. For Forex, Oanda is great, but for the purposes here of trading using BTC we just need their streaming Forex data. Once you get the API keys for these sites, you will want to put them in your .env file in the root bowhead directory. This file is added to the .gitignore so if you like to keep your code in github, then you will be fine. > NOTE: Start off by using DEMO/TEST API keys, DO NOT use real money API keys with untested trading scripts. ### Let’s test that we are set up right. bowhead has a testing script to verify that everything is set up correctly and that you have the right API keys, PHP version and the Trader extension is correctly installed. `php artisan bowhead:example_usage` This script will stop on any issues that you may have and provide commands to run to fix the issue or links to get API keys you will need. ### Let’s get data flowing in We have two things we need to do for data here so we can create an automated trading system that can trade both Crypto and Forex pairs. We will be using this data to trade on BTC market maker sites in real time. * Get streaming Forex data coming into our database from Oanda. * Get streaming Cryptocurrency data coming into our database from Bitfinex > Note: You should have the screen command installed on either your mac or the cloud instance you are using. Screen is a terminal tool for detaching windows and keeping them running in the background. You can detach a screen, log off and come back and reattach to it from another location at another time. ``` ~$ screen python streaming.py *press {control+a+d} to detach* ~$ screen php artisan bowhead:oanda_stream *press {control+a+d} to detach* ```  This is what the Forex streamer looks like if you turn the echo back on. Now if the Forex markets are open (U.S.A Eastern time, Sunday 5:00pm to Friday 4pm) you will start to see data flowing into the bowhead_ohlc table for the currency pairs that are traded on Whaleclub. The list is in streaming.py and can be modified there. The following pairs are all streaming into your database in real time now. USD_JPY, EUR_USD, AUD_USD, EUR_GBP, USD_CAD, USD_CHF, USD_MXN, USD_TRY, USD_CNH, NZD_USD Now we have regular Forex data, lets add in the BTC/USD currency pair. ``` ~$ screen php artisan bowhead:websocket_bitfinex *press {control+a+d} to detach* ``` Crypto markets are open 24/7 and you should begin to see current data flowing in immediately. To see these running processes and reattach to them use `screen -list` and `screen -r` ``` ~$ screen -list There are screens on: 4604.ttys005.Joels-MacBook-Pro-2 (Detached) 4636.ttys005.Joels-MacBook-Pro-2 (Detached) 4652.ttys005.Joels-MacBook-Pro-2 (Detached) 3 Sockets in /var/folders/bq/79z2kd916hbd39n5bckb5_s00000gn/T/.screen. ``` The numbers on the left are the screen ID’s so in this instance you can reattach to the latest (Bitfinex) screen by using the following command. ``` ~$ screen -r 4604 ``` Your number will be different, screen assigns numbers based on PID. We are only using screen for the purposes of this tutorial on a local machine, for a server environment we put these on supervisord to make sure they are always running on our server and if they die, then they are restarted. This is the supervisord conf I use for this, you may need to change the directory for your user. ```` #~$ more /etc/supervisor/conf.d/crypt.conf [program:oanda] command=/usr/bin/python streaming.py user=ubuntu directory=/home/ubuntu/bowhead startretries=3 stopwaitsecs=10 autostart=true [program:o_stream] command=/usr/bin/php artisan bowhead:oanda_stream user=ubuntu directory=/home/ubuntu/bowhead startretries=3 stopwaitsecs=10 autostart=true [program:wsbitfinex] command=/usr/bin/php artisan bowhead:websocket_bitfinex directory=/home/ubuntu/bowhead startretries=3 stopwaitsecs=10 autostart=true ```` You can see what these look like in Supervisor with ``` ~$ sudo supervisorctl o_stream RUNNING pid 31644, uptime 1 day, 22:15:24 oanda RUNNING pid 31645, uptime 1 day, 22:15:24 wsbitfinex RUNNING pid 31646, uptime 1 day, 22:15:24 supervisor> help default commands (type help <topic>): ===================================== add exit open reload restart start tail avail fg pid remove shutdown status update clear maintail quit reread signal stop version supervisor> ``` > note: Currently bowhead only supports BTC/USD from Bitfinex, I will be adding ETH and LTC in future revisions. You can create an ETH version of this if you want by copying and modifying the BitfinexWebsockCommand.php file to use ETHUSD and renaming the class. You will need to add any new commands class to the $commands array in app/Console/Kernel.php ### Finding strategies So, we have our boilerplate/framework set up. We have accounts and we have data flowing into our database. we also have our indicator/signals and candles working. Lets jump in and see how to create a very simple strategy. Now that we see how we can use this, we need strategies and we need to know how to find more strategies. and Quantopian is a great resource for strategies. for instance, two that I was recently looking at Stocks On The Move and Trading on multiple TA-Lib signals are both interesting, however saying we use TALib methods in bowhead, lets go with the later, additionally this will only be for BTC as Oanda does not return Volume with forex pairs. You will notice that this strategy uses three signals to determining if a stock (or in our case a pair) is overbought (sell) or underbought (buy). * Money flow index (mfi) * Commodity channel index (cci) * Chande momentum oscillator (cmo) This is a simple technicals strategy where if all three of these indicators agree then we go the direction they say to go. Here is the core part of the strategy in code. ```` $indicators = new \Bowhead\Util\Indicators(); $recentData = $util->getRecentData('BTC/USD'); $cci = $indicators->cci($instrument, $recentData); $cmo = $indicators->cmo($instrument, $recentData); $mfi = $indicators->mfi($instrument, $recentData); /** instrument is overbought, we will short */ if ($cci == -1 && $cmo == -1 && $mfi == -1) { $overbought = 1; } /** It is underbought, we will go LONG */ if ($cci == 1 && $cmo == 1 && $mfi == 1) { $underbought = 1; } ```` Don’t worry about putting this anywhere, this strategy is included in bowhead as a console command php artisan bowhead:example_strategy > NOTE: __DO NOT__ RUN THIS ON YOUR LIVE ACCOUNT UNTIL YOU HAVE TESTED IT, USE YOUR DEMO API KEY TO START. The output will look like this If you would like to see what these look like on a chart, then head over to TradingView and add the indicators, TradingView idea stream is another great place to find strategies and see what other people are doing and you can view the strategies in the source code section of of TradingView. ### Bowhead Indicators and Candles I provide two classes in bowhead for checking signals on data, Candles and Indicators. Each class has a ‘all’ method which will run all the methods in it’s parent class over the data you provide. To keep things as __simple as possible without sacrifice of functionality__ all methods in both of these libraries provide a return as -1, 0 or 1. Where ‘1’ will always be the buy or ‘bullish’ side and ‘-1’ will always be the sell or ‘bearish’ side, where applicable. There are a couple which return -100 and 100 as returns, please read the comments above each method and in each class for more info about abnormal return values as there are links to explain what they do and why we use them as well as what they represent and how you can use them in your scripts. [Candles.php](https://github.com/joeldg/bowhead/blob/master/app/Util/Candles.php) — The Candles class allCandles() method will check for the presence of 60 specific candles across your dataset. It returns a complex array which will even provide the data point location of the candle and data points around the candle. For purposes of automated scripting, the [‘current’] array in the return is the candles that are currently active. [Indicators.php](https://github.com/joeldg/bowhead/blob/master/app/Util/Indicators.php) —Provides multiple indicators over a dataset, these are all the common technical indicators such as Bollinger bands, RSI and many types of moving averages. These include overlap studies, momentum indicators, volume indicators and volatility indicators. There are no cycle indicators yet. The core methodss are ‘adx’, ’aroonosc’, ’cmo’, ’sar’, ’cci’, ’mfi’, ’obv’, ’stoch’, ’rsi’, ’macd’, ’bollingerBands’, ’atr’ with MA methods of ‘sma’, ’ema’, ’wma’, ’dema’, ’tema’, ’trima’, ’kama’, ’mama’ and ’t3' which can be combined using macdext() fairly dynamically. > SMA methods are typically called by themselves as they cannot respond with a buy or sell signal These two sets of indicators and candles can be combined in many different ways that have been noted in the comments at the top of each class. Combining MA cross overs with Bearish/Bullish candle patterns (which would not be apparent to a moving average) you can pinpoint your entries and exits much better. Packaging these trader methods in this way provides a lot of flexibility to you to be able to use them very easily and as you notice above, translating a strategy is very simple when you have only buy(1)/hold(0)/sell(-1) signals. ### Code it up So, lets do another quick script that will showcase what we do, this time lets do a Forex bot that trades all the pairs on WC, and it will use the following technical strategy. * Average directional movement index (ADX) is a trend indicator that typically returns a number from 0–100, under 20 it indicates a weak trend, over 50 it indicates a strong trend. Bowhead returns a -1 for under 20 and a 1 for over 50; * Two simple moving averages, on period 6 and period 40. Period 6 SMA will follow the price very closely and just smooth out any spikes. An SMA 40 is a much more smoothed average which will cross the period 6 at various points when movements start taking place. The ADX is a check that we are indeed in a trend and not in a ranging (sideways)market. * When ADX registers a trend (over 50), and our SMA(40) down-crosses the SMA(6) we can buy as the trend is now moving up. * When ADX registers a trend and our SMA (40) up-crosses the SMA(6) we can sell as the trend is now moving down. Here is what this looks like on TradingView, orange in the bottom is the ADX, the green line is the SMA(6) and the blue line is the SMA(40). You can see where you would most likely ‘want’ to do your trades and ‘low and behold’, we have some line crossings at or near those exact places. Seems kind of complicated? Not when you are working in bowhead. The main thing is we need to get the data off the stack for checking previous and current values, that way you can tell when a moving average has crossed another moving average. ```` $recentData = $util->getRecentData($instrument); $adx = $indicators->adx($instrument, $recentData); $_sma6 = trader_sma($recentData['close'], 6); $sma6 = array_pop($_sma6); $prior_sma6 = array_pop($_sma6); $_sma40 = trader_sma($recentData['close'], 40); $sma40 = array_pop($_sma40); $prior_sma40 = array_pop($_sma40); /** have the lines crossed? */ $down_cross = (($prior_sma6 <= $sma40 && $sma6 > $sma40) ? 1 : 0); $up_cross = (($prior_sma40 <= $sma6 && $sma40 > $sma6) ? 1 : 0); Now you can just if ($adx == 1 && $down_cross) { $buy = 1; } if ($adx == 1 && $up_cross) { $sell = 1; } ```` ### Testing it Okay, so I provided this as the following file, ADX will spit errors (-9) without at least 21 data points, so keep that in mind. ``` app/Console/Commands/ExampleForexStrategyCommand.php ~$ php artisan bowhead:example_forex_strategy ``` This is what it looks like. ### Closing words and a note about risk So now you can find strategies and quickly build your own scripts to trade cryptocurrencies via technical indicators and candle patterns. The sky is the limit. Because this is within the Laravel framework, you can create web pages to manage your automated trading, easily create strategies using web-based tools. You can use the queues and jobs system to have strategy ‘workers’ (I will be adding this as I update it), broadcasts and so on. Laravel is a great framework. Now to talk about risk. #### I would like to point out that there is SUBSTANTIAL risk involved in cryptocurrency trading and you need to make sure you are in demo mode when testing and working out your strategies. This is of paramount importance as I would hate to hear of someone who lost any amount of money because of this. Myself I am fairly risk tolerant and sometimes it pays off. I use Bowhead to do WC ‘Turbo’ trading (which is Forex Binary options), these are a ‘guess’ if the price will be up or be down in 1 minute and 5 minute contracts. If you guess right then win up to 75% return, if you guess wrong then you lose your entire bet. There are some Forex strategies specifically for Turbo trading that I have had some good luck with. However be aware that most require you are in a trending market. So an indicator like ADX on a longer period is not a bad choice. Here is an example of one strategy that was working. een%20Shot%202017-06-08%20at%209.15.56%20PM.png) ### Final note Part 2 will go over making your bot talk to all the exchanges and even attempt to discern price discrepancies, building real-time GDAX straddle-bot using about five Forex strategies and even setting up Bowhead as an API. If you notice any errors here or have any issues with the code, please let me know, make a comment here or open an issue in the github repository and I will address it. — Keep in mind that this project is under active development. Thanks and enjoy. Joel De Gan ### Get social: If you enjoyed this article, recommend by clicking on that heart icon on the left of this text, and feel free to share it, I work hard on these and feel they are useful You can also upvote this article on Reddit in r/Bitcoin at this link. https://redd.it/6gpiy6 And of course HN https://news.ycombinator.com/item?id=14538377 This article originally was posted to Medium under the title "[Let's write a cryptocurrency bot (part 1)](https://medium.com/@joeldg/an-advanced-tutorial-a-new-crypto-currency-trading-bot-boilerplate-framework-e777733607ae)" |
| json metadata | {"tags":["cryptocurrency","ethereum","bitcoin","blockchain","money"],"image":["https://steemitimages.com/DQmT6Kf3DutQ3C9dZWLUfEKGdU3GqVFFj5b6PE7a2FxU6tH/awesome-robot-wallpaper.jpg","https://steemitimages.com/DQmRoAZVBrXUajSfAcC7xwuAy1PSJbmKSYhyYLFXKK1wDKV/Screen%20Shot%202017-06-11%20at%201.08.02%20AM.png","https://steemitimages.com/DQmaKQ68yxCnrWKh1op18hmUJHVT1zhWp2VDM9kybuE6Wo6/Screen%20Shot%202017-06-11%20at%203.46.42%20PM.png","https://steemitimages.com/DQmaiRkzDwbqj43LHrteYtZUU1L2JJCpzyeRRrszDuv2p11/Screen%20Shot%202017-06-11%20at%201.02.00%20PM.png","https://steemitimages.com/DQmdXs4Lg65R1Hx2DVYEhBXcroKBJqvLHmPnTB5iXPSbP2p/Screen%20Shot%202017-06-11%20at%202.17.14%20PM.png","https://steemitimages.com/DQmdKjxYgD3qGRuCYoKbGTMGqGCAGhz6jt76WAwH8ecU6cg/Screen%20Shot%202017-06-07%20at%206.41.23%20PM.png"],"links":["https://github.com/joeldg/bowhead","https://getcomposer.org/doc/00-intro.md","https://www.iterm2.com/","https://ss64.com/osx/screen.html","https://www.sequelpro.com/","https://www.jetbrains.com/phpstorm/","https://redis.io/","https://www.mysql.com/","https://whaleclub.co/join/tn6uE","https://1broker.com/?r=21434","https://www.oanda.com/","https://www.oanda.com/demo-account/tpa/personal_token","https://www.coinbase.com/join/51950ca286c21b84dd000021","https://www.bitfinex.com/","https://poloniex.com/","http://tradingview.go2cloud.org/SHpx","https://github.com/joeldg/bowhead/blob/master/app/Util/Candles.php","https://github.com/joeldg/bowhead/blob/master/app/Util/Indicators.php","https://redd.it/6gpiy6","https://news.ycombinator.com/item?id=14538377","https://medium.com/@joeldg/an-advanced-tutorial-a-new-crypto-currency-trading-bot-boilerplate-framework-e777733607ae"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #12792770/Trx ea9f527d86f2f84a9038db5b9fb413f2bc78352c |
View Raw JSON Data
{
"trx_id": "ea9f527d86f2f84a9038db5b9fb413f2bc78352c",
"block": 12792770,
"trx_in_block": 8,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2017-06-13T19:20:33",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "cryptocurrency",
"author": "joeldg",
"permlink": "let-s-write-a-cryptocurrency-bot-part-1",
"title": "Let’s write a cryptocurrency bot. (part 1)",
"body": "\n##### Want to make your own BTC bot? I’ll walk you through the full setup, on to your first execution of an automated trade, and beyond.\n\n### Cryptocurrencies\nI should not need to tell you but, a couple months ago you could buy the cryptocurrency Etherium for $11, it rapidly went up to $43 (I bought in between those prices) and has now currently gone to over $335 as of June 2017. Those kinds of gains are nearly unbelievable to a traditional investor and yet these are across the board in this space.\nExcited yet? So here is a scenario:\n\nSo you made a ton of money on cryptocurrencies and have some concerns about shuffling it through your bank because of potential capital gains tax issues. There are places who have a solution for you if you want to be able to use this money for other investments. These places won’t make you photograph your license and send it in, just use an email and they provide you with a BTC deposit wallet, demo accounts, API’s, then when you are ready, you send money in and it’s ‘go time’, you can trade everything from treasury bonds to Forex using Cryptocurrencies as your base monetary instrument.\nBut, you say, I am a coder who likes to automate things, surely we can fire up some BTCbot and we can have it just do the work for us, it will make us millions in our sleep, right?\n\n— probably not.\n\n### My solution:\nI don’t want to write a bot and publish it with a single strategy and just say “here, use this”, I don’t think that is helpful to anyone, I would rather give you the tools and show you how to write strategies yourself, show you how to set up data collection for the strategies and how to implement them in a trading system and see the results.\n\n> note: Also, I don’t want to create this in a new or arcane language, I want this written in PHP which the most number of people are familiar with and in a framework (Laravel) that is simple to use but powerful enough that you can create what you need. If you think PHP is just for web pages, read on, this should surprise you.\n\nI like to build systems, I have been working on this post for a while and it represents a good deal of non-derivative custom work. If you have read some of my other tutorials you know that I like to write tutorials that “I wish that I had found instead of having to to write”, so you are in for a thorough read, with a lot of copy-paste style recipes.\nLet’s get started.\n\n### Steps we are going to take:\n* Get boilerplate/framework installed.\n* Walk through the core parts of the system, see what is where.\n* Install and configure software we need.\n* Account creation at the brokerages we will be using, setting up the API keys for the scripts.\n* Run tests and examples, lets get it ready.\n* Set up websocket streams to get data.\n* Finding strategies for our automated agents\n* Deep dive into Indicators and Candles available to us.\n*Coding up our first agent.\n* Testing the agent.\n* A few closing words about the risks you are taking.\n \n### Get boilerplate/framework installed (Bowhead)\nYou can find the repository for the Bowhead boilerplate at it’s github repository home here.\n[joeldg/bowhead](https://github.com/joeldg/bowhead)\n\n\n\n> note: You will need [composer](https://getcomposer.org/doc/00-intro.md) installed.\n> note2: If you are on a Mac, I would strongly suggest the following tools: [iTerm2](https://www.iterm2.com/) with the [screen](https://ss64.com/osx/screen.html) command, [Sequel Pro](https://www.sequelpro.com/) and of course [PHPStorm](https://www.jetbrains.com/phpstorm/)\n\n###Bring the project in locally with:\n````\ngit clone https://github.com/joeldg/bowhead.git\ncd bowhead\ncomposer update\ncp .env-example .env\n\n# now to the other required software\n# If you are on a Mac (this is very roughly)\nbrew install redis\nbrew install mysql\nbrew install php7.1\ncurl -O http://pear.php.net/go-pear.phar\nsudo php -d detect_unicode=0 go-pear.phar\nsudo pecl install trader\nmkfifo quotes\n\n# on ubuntu something like this needs to be done\nsudo add-apt-repository ppa:ondrej/php\nsudo apt-get update\nsudo apt-get install php7.1 php7.1-opcache php7.1-sqlite3 php7.1-readline php7.1-mysql php7.1-mcrypt php7.1-mbstring php7.1-json php7.1-intl php7.1-gd php7.1-curl php7.1-bz2 php7.1-bcmath php7.1-cli php7.1-zip\nsudo apt-get install redis-server\nsudo apt-get install mysql-server\nsudo apt-get install screen autoconf automake libtool m4 pkg-config\nsudo apt-get install php-pear unzip ImageMagick-devel python-pip supervisor\ncurl -O http://pear.php.net/go-pear.phar\nsudo php -d detect_unicode=0 go-pear.phar\nsudo pecl install trader\nmkfifo quotes\n````\n### Let’s go over the core parts of the system\nFire up PHPStorm or your favorite editor and load up the project. This system is using the Laravel PHP framework, don’t worry you don’t need to be familiar with Laravel here, you can learn that on your own time if you want. The primary parts we are concerned with are located in:\n#### app/Console/Commands/ \nwhich is where all our console commands are located\n````\nBitfinexWebsocketCommand.php - Stream market data from Bitfinex\nCoinbaseWebsocketCommand.php - Stream market data from GDAX\nExampleForexStrategyCommand.php - Forex example strategy\nExampleStrategyCommand.php - Our example of a strategy\nExampleUsageCommand.php - Basic usage examples\nGetHistoricalCommand.php - Pull in historic data from broker\nOandaStreamCommand.php - Stream market data from Oanda\n````\n#### app/Util/ \nwhich is all the utility classes that are available\n````\nBitfinex.php - Bitfinex API wrapper\nBrokersUtil.php - Utilities for various brokers\n[Candles.php](https://github.com/joeldg/bowhead/blob/master/app/Util/Candles.php) - All 60 TALib candle methods wrapped\nCoinbase.php - GDAX API wrapper\nConsole.php - Console color, tables and progress\n[Indicators.php](https://github.com/joeldg/bowhead/blob/master/app/Util/Indicators.php) - 21 TALib indicators and moving averages.\nOanda.php - Oanda API wrapper\nOneBroker.php - 1Broker API wrapper\nOther.php - possible indicators, not implemented yet\ntestStrategy.php - Here is your test strategy\nWhaleclub.php - Whaleclub API wrapper\n````\n#### app/Scripts \nwhich has a couple extras and some testing data, these scripts are SKLearn price forecasting scripts taken from a study on beer consumption I thought was really useful, these might be used for market price predictions.\n````\nclose_prediction.py - SKLearn script to predict a closing price\nohlc-btc.csv - Sample CSV data, if needed\nopen_prediction.py - SKLearn script to predict an opening price\na python script in the root dir called ‘streaming.py’ which is part of the Oanda streaming command.\nthe .env-example file which will need your API keys and be moved to .env\n````\n\nNow, in a terminal in this directory type\n`php artisan`\nYou should see something like the following, the part you are interested in is below.\n\n\n### Redis and MySql\nIf you followed the directions above you should have [Redis](https://redis.io/) installed as well as [MySql](https://www.mysql.com/) and a few other things.\nRedis really does not need any tweaking out of the box, just don’t open up ports for it to the outside if you have it on a cloud instance, you don’t want people messing with your systems.\nMySQL will need a database and a few tables, create your database, I call mine ‘bowhead’ but you if you want to change this or need to have prefixed database names then you can change the options in the .env file, here are the defaults in the .env file.\n\n```\nDB_CONNECTION=mysql\nDB_HOST=localhost\nDB_PORT=3306\nDB_DATABASE=bowhead\nDB_USERNAME=root\nDB_PASSWORD=password\n```\n\nOnce you are satisfied and can connect to your database, then from the terminal you will want to load up our testing data with. Change this command as per your modifications to the .env params above.\n\n`mysql -u root -p bowhead < app\\Script\\DBdump.sql`\n\nOpen up the database in Sequel Pro and you will the sample data in the bowhead_ohlc (open, high, low, close) table.\n\n### API accounts we need in order to set up automated trading.\n> Note: Where possible I have set up bonuses for you on these links, all sites below offer free accounts which do not require ‘verification’ and do not require a deposit.\n\n1) [Whaleclub](https://whaleclub.co/join/tn6uE) the main site we want to trade on for this tutorial. They key their market data off of the Bitfinex websocket and match with Oanda streaming data for Forex. This site allows you to trade many instruments and commodities with BTC at up to 20x leverage, Forex up to 222x as well as providing BTC-based binary options. They have a simple easy to understand interface and excellent API. The API key is found by clicking on your name in the upper-right, and clicking on API. (use DEMO API key to start)\n\n2) [1Broker](https://1broker.com/?r=21434) the secondary site we want to trade on, they are similar to other BTC-based market makers and have a ‘trader follow’ system as well that is fairly interesting, particularly to get people following ‘you’. API key is found on the right, just under the email icon, there is a small box with what looks like sliders on it, then click on Access & API Management.\n\n3) [Oanda](https://www.oanda.com/) is where we get our streaming Forex data, you need an account. API access is found [here](https://www.oanda.com/demo-account/tpa/personal_token).\n\n4) [Coinbase/GDAX](https://www.coinbase.com/join/51950ca286c21b84dd000021) what used to be called ‘Coinbase Exchange’ is now called GDAX, I have been automated trading there since they first opened. API key is found at far upper-right then click on API and create your keys.\n\n5) [Bitfinex](https://www.bitfinex.com/) you need an account here with an API key so we can get Cryptocurrency quotes. API keys are found under ‘Account’ then click on API.\n\n6) [Poloniex](https://poloniex.com/) is like Bitfinex but supports many alt-coins. API keys are found here.\n\n7) [TradingView](http://tradingview.go2cloud.org/SHpx) not mandatory, but you will want an account there because all the indicators bowhead uses can be viewed on charts to help you build your strategies.\n\nThe reasoning behind this combination is that the Whaleclub and 1Broker API’s are rate limited, WC only allows 60 requests per minute, if we want to make sure we have streaming real-time data to work with we need to stream from a BTC brokerage. Same with Forex.\n\nDefinitely look around on these sites and see what they have to offer, I’ve been around the block with a lot of brokers and market maker sites and for BTC, these are all good as of June 2017. For Forex, Oanda is great, but for the purposes here of trading using BTC we just need their streaming Forex data.\n\nOnce you get the API keys for these sites, you will want to put them in your .env file in the root bowhead directory. This file is added to the .gitignore so if you like to keep your code in github, then you will be fine.\n\n> NOTE: Start off by using DEMO/TEST API keys, DO NOT use real money API keys with untested trading scripts.\n\n### Let’s test that we are set up right.\n\nbowhead has a testing script to verify that everything is set up correctly and that you have the right API keys, PHP version and the Trader extension is correctly installed.\n\n`php artisan bowhead:example_usage`\n\nThis script will stop on any issues that you may have and provide commands to run to fix the issue or links to get API keys you will need.\n\n### Let’s get data flowing in\nWe have two things we need to do for data here so we can create an automated trading system that can trade both Crypto and Forex pairs. We will be using this data to trade on BTC market maker sites in real time.\n\n* Get streaming Forex data coming into our database from Oanda.\n* Get streaming Cryptocurrency data coming into our database from Bitfinex\n\n> Note: You should have the screen command installed on either your mac or the cloud instance you are using. Screen is a terminal tool for detaching windows and keeping them running in the background. You can detach a screen, log off and come back and reattach to it from another location at another time.\n\n```\n~$ screen python streaming.py\n*press {control+a+d} to detach*\n~$ screen php artisan bowhead:oanda_stream\n*press {control+a+d} to detach*\n```\n\nThis is what the Forex streamer looks like if you turn the echo back on.\n\nNow if the Forex markets are open (U.S.A Eastern time, Sunday 5:00pm to Friday 4pm) you will start to see data flowing into the bowhead_ohlc table for the currency pairs that are traded on Whaleclub. The list is in streaming.py and can be modified there. The following pairs are all streaming into your database in real time now. USD_JPY, EUR_USD, AUD_USD, EUR_GBP, USD_CAD, USD_CHF, USD_MXN, USD_TRY, USD_CNH, NZD_USD\n\nNow we have regular Forex data, lets add in the BTC/USD currency pair.\n\n```\n~$ screen php artisan bowhead:websocket_bitfinex\n*press {control+a+d} to detach*\n```\n\nCrypto markets are open 24/7 and you should begin to see current data flowing in immediately.\nTo see these running processes and reattach to them use `screen -list` and `screen -r`\n```\n~$ screen -list\nThere are screens on:\n 4604.ttys005.Joels-MacBook-Pro-2 (Detached)\n 4636.ttys005.Joels-MacBook-Pro-2 (Detached)\n 4652.ttys005.Joels-MacBook-Pro-2 (Detached)\n3 Sockets in /var/folders/bq/79z2kd916hbd39n5bckb5_s00000gn/T/.screen.\n```\n\nThe numbers on the left are the screen ID’s so in this instance you can reattach to the latest (Bitfinex) screen by using the following command.\n```\n~$ screen -r 4604\n```\n\nYour number will be different, screen assigns numbers based on PID.\n\nWe are only using screen for the purposes of this tutorial on a local machine, for a server environment we put these on supervisord to make sure they are always running on our server and if they die, then they are restarted.\nThis is the supervisord conf I use for this, you may need to change the directory for your user.\n\n````\n#~$ more /etc/supervisor/conf.d/crypt.conf\n[program:oanda]\ncommand=/usr/bin/python streaming.py\nuser=ubuntu\ndirectory=/home/ubuntu/bowhead\nstartretries=3\nstopwaitsecs=10\nautostart=true\n[program:o_stream]\ncommand=/usr/bin/php artisan bowhead:oanda_stream\nuser=ubuntu\ndirectory=/home/ubuntu/bowhead\nstartretries=3\nstopwaitsecs=10\nautostart=true\n[program:wsbitfinex]\ncommand=/usr/bin/php artisan bowhead:websocket_bitfinex\ndirectory=/home/ubuntu/bowhead\nstartretries=3\nstopwaitsecs=10\nautostart=true\n````\n\nYou can see what these look like in Supervisor with\n\n```\n~$ sudo supervisorctl\no_stream RUNNING pid 31644, uptime 1 day, 22:15:24\noanda RUNNING pid 31645, uptime 1 day, 22:15:24\nwsbitfinex RUNNING pid 31646, uptime 1 day, 22:15:24\nsupervisor> help\ndefault commands (type help <topic>):\n=====================================\nadd exit open reload restart start tail\navail fg pid remove shutdown status update\nclear maintail quit reread signal stop version\nsupervisor>\n```\n\n> note: Currently bowhead only supports BTC/USD from Bitfinex, I will be adding ETH and LTC in future revisions. You can create an ETH version of this if you want by copying and modifying the BitfinexWebsockCommand.php file to use ETHUSD and renaming the class. You will need to add any new commands class to the $commands array in app/Console/Kernel.php\n\n### Finding strategies\nSo, we have our boilerplate/framework set up. We have accounts and we have data flowing into our database. we also have our indicator/signals and candles working. Lets jump in and see how to create a very simple strategy.\n\nNow that we see how we can use this, we need strategies and we need to know how to find more strategies. and Quantopian is a great resource for strategies.\n\nfor instance, two that I was recently looking at Stocks On The Move and Trading on multiple TA-Lib signals are both interesting, however saying we use TALib methods in bowhead, lets go with the later, additionally this will only be for BTC as Oanda does not return Volume with forex pairs.\n\nYou will notice that this strategy uses three signals to determining if a stock (or in our case a pair) is overbought (sell) or underbought (buy).\n\n* Money flow index (mfi)\n* Commodity channel index (cci)\n* Chande momentum oscillator (cmo)\n\nThis is a simple technicals strategy where if all three of these indicators agree then we go the direction they say to go. Here is the core part of the strategy in code.\n````\n$indicators = new \\Bowhead\\Util\\Indicators();\n$recentData = $util->getRecentData('BTC/USD');\n$cci = $indicators->cci($instrument, $recentData);\n$cmo = $indicators->cmo($instrument, $recentData);\n$mfi = $indicators->mfi($instrument, $recentData);\n\n/** instrument is overbought, we will short */\nif ($cci == -1 && $cmo == -1 && $mfi == -1) {\n $overbought = 1;\n}\n/** It is underbought, we will go LONG */\nif ($cci == 1 && $cmo == 1 && $mfi == 1) {\n $underbought = 1;\n}\n````\n\nDon’t worry about putting this anywhere, this strategy is included in bowhead as a console command\nphp artisan bowhead:example_strategy\n\n> NOTE: __DO NOT__ RUN THIS ON YOUR LIVE ACCOUNT UNTIL YOU HAVE TESTED IT, USE YOUR DEMO API KEY TO START.\n\nThe output will look like this\n\n\nIf you would like to see what these look like on a chart, then head over to TradingView and add the indicators, TradingView idea stream is another great place to find strategies and see what other people are doing and you can view the strategies in the source code section of of TradingView.\n\n### Bowhead Indicators and Candles\nI provide two classes in bowhead for checking signals on data, Candles and Indicators. Each class has a ‘all’ method which will run all the methods in it’s parent class over the data you provide.\n\nTo keep things as __simple as possible without sacrifice of functionality__ all methods in both of these libraries provide a return as -1, 0 or 1. Where ‘1’ will always be the buy or ‘bullish’ side and ‘-1’ will always be the sell or ‘bearish’ side, where applicable. There are a couple which return -100 and 100 as returns, please read the comments above each method and in each class for more info about abnormal return values as there are links to explain what they do and why we use them as well as what they represent and how you can use them in your scripts.\n\n[Candles.php](https://github.com/joeldg/bowhead/blob/master/app/Util/Candles.php) — The Candles class allCandles() method will check for the presence of 60 specific candles across your dataset. It returns a complex array which will even provide the data point location of the candle and data points around the candle. For purposes of automated scripting, the [‘current’] array in the return is the candles that are currently active.\n\n[Indicators.php](https://github.com/joeldg/bowhead/blob/master/app/Util/Indicators.php) —Provides multiple indicators over a dataset, these are all the common technical indicators such as Bollinger bands, RSI and many types of moving averages. These include overlap studies, momentum indicators, volume indicators and volatility indicators. There are no cycle indicators yet. The core methodss are ‘adx’, ’aroonosc’, ’cmo’, ’sar’, ’cci’, ’mfi’, ’obv’, ’stoch’, ’rsi’, ’macd’, ’bollingerBands’, ’atr’ with MA methods of ‘sma’, ’ema’, ’wma’, ’dema’, ’tema’, ’trima’, ’kama’, ’mama’ and ’t3' which can be combined using macdext() fairly dynamically.\n\n> SMA methods are typically called by themselves as they cannot respond with a buy or sell signal\n\nThese two sets of indicators and candles can be combined in many different ways that have been noted in the comments at the top of each class. Combining MA cross overs with Bearish/Bullish candle patterns (which would not be apparent to a moving average) you can pinpoint your entries and exits much better.\n\nPackaging these trader methods in this way provides a lot of flexibility to you to be able to use them very easily and as you notice above, translating a strategy is very simple when you have only buy(1)/hold(0)/sell(-1) signals.\n\n### Code it up\n\nSo, lets do another quick script that will showcase what we do, this time lets do a Forex bot that trades all the pairs on WC, and it will use the following technical strategy.\n\n* Average directional movement index (ADX) is a trend indicator that typically returns a number from 0–100, under 20 it indicates a weak trend, over 50 it indicates a strong trend. Bowhead returns a -1 for under 20 and a 1 for over 50;\n\n* Two simple moving averages, on period 6 and period 40. Period 6 SMA will follow the price very closely and just smooth out any spikes. An SMA 40 is a much more smoothed average which will cross the period 6 at various points when movements start taking place. The ADX is a check that we are indeed in a trend and not in a ranging (sideways)market.\n\n* When ADX registers a trend (over 50), and our SMA(40) down-crosses the SMA(6) we can buy as the trend is now moving up.\n\n* When ADX registers a trend and our SMA (40) up-crosses the SMA(6) we can sell as the trend is now moving down.\n\nHere is what this looks like on TradingView, orange in the bottom is the ADX, the green line is the SMA(6) and the blue line is the SMA(40). You can see where you would most likely ‘want’ to do your trades and ‘low and behold’, we have some line crossings at or near those exact places.\n\nSeems kind of complicated? Not when you are working in bowhead. The main thing is we need to get the data off the stack for checking previous and current values, that way you can tell when a moving average has crossed another moving average.\n\n````\n$recentData = $util->getRecentData($instrument);\n\n$adx = $indicators->adx($instrument, $recentData);\n$_sma6 = trader_sma($recentData['close'], 6);\n$sma6 = array_pop($_sma6);\n$prior_sma6 = array_pop($_sma6);\n$_sma40 = trader_sma($recentData['close'], 40);\n$sma40 = array_pop($_sma40);\n$prior_sma40 = array_pop($_sma40);\n/** have the lines crossed? */\n$down_cross = (($prior_sma6 <= $sma40 && $sma6 > $sma40) ? 1 : 0);\n$up_cross = (($prior_sma40 <= $sma6 && $sma40 > $sma6) ? 1 : 0);\nNow you can just\nif ($adx == 1 && $down_cross) {\n $buy = 1;\n}\nif ($adx == 1 && $up_cross) {\n $sell = 1;\n}\n````\n\n### Testing it\nOkay, so I provided this as the following file, ADX will spit errors (-9) without at least 21 data points, so keep that in mind.\n```\napp/Console/Commands/ExampleForexStrategyCommand.php\n~$ php artisan bowhead:example_forex_strategy\n```\nThis is what it looks like.\n\n\n### Closing words and a note about risk\nSo now you can find strategies and quickly build your own scripts to trade cryptocurrencies via technical indicators and candle patterns. The sky is the limit.\n\nBecause this is within the Laravel framework, you can create web pages to manage your automated trading, easily create strategies using web-based tools. You can use the queues and jobs system to have strategy ‘workers’ (I will be adding this as I update it), broadcasts and so on. Laravel is a great framework.\n\nNow to talk about risk.\n\n#### I would like to point out that there is SUBSTANTIAL risk involved in cryptocurrency trading and you need to make sure you are in demo mode when testing and working out your strategies. This is of paramount importance as I would hate to hear of someone who lost any amount of money because of this.\n\nMyself I am fairly risk tolerant and sometimes it pays off. I use Bowhead to do WC ‘Turbo’ trading (which is Forex Binary options), these are a ‘guess’ if the price will be up or be down in 1 minute and 5 minute contracts. If you guess right then win up to 75% return, if you guess wrong then you lose your entire bet. There are some Forex strategies specifically for Turbo trading that I have had some good luck with. However be aware that most require you are in a trending market. So an indicator like ADX on a longer period is not a bad choice.\n\nHere is an example of one strategy that was working.\neen%20Shot%202017-06-08%20at%209.15.56%20PM.png)\n\n### Final note\nPart 2 will go over making your bot talk to all the exchanges and even attempt to discern price discrepancies, building real-time GDAX straddle-bot using about five Forex strategies and even setting up Bowhead as an API.\n\nIf you notice any errors here or have any issues with the code, please let me know, make a comment here or open an issue in the github repository and I will address it.\n\n— Keep in mind that this project is under active development.\n\nThanks and enjoy.\n\nJoel De Gan\n\n### Get social:\nIf you enjoyed this article, recommend by clicking on that heart icon on the left of this text, and feel free to share it, I work hard on these and feel they are useful\n\nYou can also upvote this article on Reddit in r/Bitcoin at this link. https://redd.it/6gpiy6\n\nAnd of course HN https://news.ycombinator.com/item?id=14538377\n\nThis article originally was posted to Medium under the title \"[Let's write a cryptocurrency bot (part 1)](https://medium.com/@joeldg/an-advanced-tutorial-a-new-crypto-currency-trading-bot-boilerplate-framework-e777733607ae)\"",
"json_metadata": "{\"tags\":[\"cryptocurrency\",\"ethereum\",\"bitcoin\",\"blockchain\",\"money\"],\"image\":[\"https://steemitimages.com/DQmT6Kf3DutQ3C9dZWLUfEKGdU3GqVFFj5b6PE7a2FxU6tH/awesome-robot-wallpaper.jpg\",\"https://steemitimages.com/DQmRoAZVBrXUajSfAcC7xwuAy1PSJbmKSYhyYLFXKK1wDKV/Screen%20Shot%202017-06-11%20at%201.08.02%20AM.png\",\"https://steemitimages.com/DQmaKQ68yxCnrWKh1op18hmUJHVT1zhWp2VDM9kybuE6Wo6/Screen%20Shot%202017-06-11%20at%203.46.42%20PM.png\",\"https://steemitimages.com/DQmaiRkzDwbqj43LHrteYtZUU1L2JJCpzyeRRrszDuv2p11/Screen%20Shot%202017-06-11%20at%201.02.00%20PM.png\",\"https://steemitimages.com/DQmdXs4Lg65R1Hx2DVYEhBXcroKBJqvLHmPnTB5iXPSbP2p/Screen%20Shot%202017-06-11%20at%202.17.14%20PM.png\",\"https://steemitimages.com/DQmdKjxYgD3qGRuCYoKbGTMGqGCAGhz6jt76WAwH8ecU6cg/Screen%20Shot%202017-06-07%20at%206.41.23%20PM.png\"],\"links\":[\"https://github.com/joeldg/bowhead\",\"https://getcomposer.org/doc/00-intro.md\",\"https://www.iterm2.com/\",\"https://ss64.com/osx/screen.html\",\"https://www.sequelpro.com/\",\"https://www.jetbrains.com/phpstorm/\",\"https://redis.io/\",\"https://www.mysql.com/\",\"https://whaleclub.co/join/tn6uE\",\"https://1broker.com/?r=21434\",\"https://www.oanda.com/\",\"https://www.oanda.com/demo-account/tpa/personal_token\",\"https://www.coinbase.com/join/51950ca286c21b84dd000021\",\"https://www.bitfinex.com/\",\"https://poloniex.com/\",\"http://tradingview.go2cloud.org/SHpx\",\"https://github.com/joeldg/bowhead/blob/master/app/Util/Candles.php\",\"https://github.com/joeldg/bowhead/blob/master/app/Util/Indicators.php\",\"https://redd.it/6gpiy6\",\"https://news.ycombinator.com/item?id=14538377\",\"https://medium.com/@joeldg/an-advanced-tutorial-a-new-crypto-currency-trading-bot-boilerplate-framework-e777733607ae\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}2017/06/13 17:58:42
2017/06/13 17:58:42
| fee | 0.500 STEEM |
| delegation | 57000.000000 VESTS |
| creator | steem |
| new account name | joeldg |
| owner | {"weight_threshold":1,"account_auths":[],"key_auths":[["STM7gERi7sLrFSz1BmaEty5ujc8jbyayte6AaZA7k4RC5PetPMVS9",1]]} |
| active | {"weight_threshold":1,"account_auths":[],"key_auths":[["STM7STLeDgvvzgTZWpCbtwRQFsUcMuhAV16noZ3SkRxMSUi61YVWX",1]]} |
| posting | {"weight_threshold":1,"account_auths":[],"key_auths":[["STM6J5XhcAVpUV3TkNJfpxzYe1dnLRkSmj9BENf2KBNqLMgfJKbsu",1]]} |
| memo key | STM8YMGFmpw9oP29dxkUuauT5d8PYtGHX6dyVLAT9iJiupZPJ6SE5 |
| json metadata | |
| extensions | [] |
| Transaction Info | Block #12791133/Trx d34d0b892b1c100ecb990fc2ca65bbfcf29606b1 |
View Raw JSON Data
{
"trx_id": "d34d0b892b1c100ecb990fc2ca65bbfcf29606b1",
"block": 12791133,
"trx_in_block": 5,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2017-06-13T17:58:42",
"op": [
"account_create_with_delegation",
{
"fee": "0.500 STEEM",
"delegation": "57000.000000 VESTS",
"creator": "steem",
"new_account_name": "joeldg",
"owner": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM7gERi7sLrFSz1BmaEty5ujc8jbyayte6AaZA7k4RC5PetPMVS9",
1
]
]
},
"active": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM7STLeDgvvzgTZWpCbtwRQFsUcMuhAV16noZ3SkRxMSUi61YVWX",
1
]
]
},
"posting": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM6J5XhcAVpUV3TkNJfpxzYe1dnLRkSmj9BENf2KBNqLMgfJKbsu",
1
]
]
},
"memo_key": "STM8YMGFmpw9oP29dxkUuauT5d8PYtGHX6dyVLAT9iJiupZPJ6SE5",
"json_metadata": "",
"extensions": []
}
]
}Manabar
Voting Power100.00%
Downvote Power100.00%
Resource Credits100.00%
Reputation Progress0.00%
{
"voting_manabar": {
"current_mana": "8143659806",
"last_update_time": 1779069501
},
"downvote_manabar": {
"current_mana": 2035914951,
"last_update_time": 1779069501
},
"rc_account": {
"account": "joeldg",
"rc_manabar": {
"current_mana": "10164408779",
"last_update_time": 1779069501
},
"max_rc_creation_adjustment": {
"amount": "2020748973",
"precision": 6,
"nai": "@@000000037"
},
"max_rc": "10164408779"
}
}Account Metadata
| POSTING JSON METADATA | |
| profile | {"profile_image":"https://media.licdn.com/mpr/mpr/shrinknp_400_400/p/8/005/07c/069/16a2188.jpg","name":"joeldg","about":"I code and write and stuff","location":"Venice "} |
| JSON METADATA | |
| profile | {"profile_image":"https://media.licdn.com/mpr/mpr/shrinknp_400_400/p/8/005/07c/069/16a2188.jpg","name":"joeldg","about":"I code and write and stuff","location":"Venice "} |
{
"posting_json_metadata": {
"profile": {
"profile_image": "https://media.licdn.com/mpr/mpr/shrinknp_400_400/p/8/005/07c/069/16a2188.jpg",
"name": "joeldg",
"about": "I code and write and stuff",
"location": "Venice "
}
},
"json_metadata": {
"profile": {
"profile_image": "https://media.licdn.com/mpr/mpr/shrinknp_400_400/p/8/005/07c/069/16a2188.jpg",
"name": "joeldg",
"about": "I code and write and stuff",
"location": "Venice "
}
}
}Auth Keys
Owner
Single Signature
Public Keys
STM7gERi7sLrFSz1BmaEty5ujc8jbyayte6AaZA7k4RC5PetPMVS91/1
Active
Single Signature
Public Keys
STM7STLeDgvvzgTZWpCbtwRQFsUcMuhAV16noZ3SkRxMSUi61YVWX1/1
Posting
Single Signature
Public Keys
STM6J5XhcAVpUV3TkNJfpxzYe1dnLRkSmj9BENf2KBNqLMgfJKbsu1/1
Memo
STM8YMGFmpw9oP29dxkUuauT5d8PYtGHX6dyVLAT9iJiupZPJ6SE5
{
"owner": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM7gERi7sLrFSz1BmaEty5ujc8jbyayte6AaZA7k4RC5PetPMVS9",
1
]
]
},
"active": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM7STLeDgvvzgTZWpCbtwRQFsUcMuhAV16noZ3SkRxMSUi61YVWX",
1
]
]
},
"posting": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM6J5XhcAVpUV3TkNJfpxzYe1dnLRkSmj9BENf2KBNqLMgfJKbsu",
1
]
]
},
"memo": "STM8YMGFmpw9oP29dxkUuauT5d8PYtGHX6dyVLAT9iJiupZPJ6SE5"
}Witness Votes
0 / 30
No active witness votes.
[]