CryptoCulture: A programozás mint alap nyelvtudás…

Adja magát, hogy a pénzügyi forradalomnak álcázott kriptovaluta térhódítás fő célja a “pénzből még több pénzt csinálni” elv manifesztálása, azonban aki minimálisan is veszi a fáradtságot, hogy mindezek mögé nézzen, az pontosan látja, hogy itt a világ legnagyobb géniuszai már a jövő kultúráját építik. Azt a kultúrát, ahol nem kerülsz hátrányba a származásod, a vallásod vagy akár a születési helyed okán. Bár tudom, itthon kifejezetten nem trendi a ‘nyílt társadalom’ mint eszme, sőt tűzzel-vassal és királykék óriásplakátokkal űldözött, mindettől függetlenül a blog  informális jellegét kihasználva engedjétek meg, hogy felhívjam a figyelmeteket arra, hogy a kriptokultúrák legfrissebb vívmányait javarészt olyan emberek készítik, akik származásuk és kasztrendszerüknek megfelelően egyébként életük legnagyobb eredményeként csak azt tudhatnák felmutatni, hogy a mindenkori legfrissebb iPhone kamerájának optikáját polírozták egy koszos, poros műhelyben valamelyik kimondhatatlan nevű kínai városkában. Ha belepillantotok az összes szörnyen menő éppen felfutófélben lévő ICO marketing anyagába, akkor ott az esetek elsöprő részében orosz vagy kínai esetleg arab illetőségű csapatokat láttok. Hogy mitől jók ezek a csapatok? Leginkább attól, hogy az anyanyelvül mellett folyékonyan beszélnek angolul és legalább ennyire készség szinten tudnak programozni is. Ja és persze a buy és sell gomb nyomogatása helyett legalább addig eljutottak, hogy legyen egy jó ötletük…

Ebben a cikkben egy olyan gondolatmenetet akarok veletek megosztani (ezáltal gyakorolni blockchain evangelista szerepemet), amit az alábbi olvasói hozzászólás ihletett meg:

Nagy élmény részese lenni az új forradalomnak. Amit eddig elért a fejlődés, arra létrát téve új szintekre jutunk. Még csak 44 éves vagyok, így remélhetőleg lesz időm végigélni mindennek a kibontakozását. Lehet, hogy most fog egymásra találni az emberiség. A pénz/nyereség pedig csak hab a tortán.

Ez a cikk most nem azoknak szól, akik megélhetési nyerészkedés miatt találtak a cryptovaluta világra, bár talán őket is meg tudom győzni arról, hogy bőven többet lehetne ebből kihozni, ha kicsit megpróbálunk nagyobban gondolkodni. A cikk címe jól meghatározza a témát. Ahogy 10 éve ciki volt angol nyelvtudás nélkül IT szakmában elhelyezkedni, úgy ma egyre inkább lehetetlen modern pénzügyi sikereket elérni programozási tudás nélkül. Nyilván az én látásmódom ezen a téren eléggé parciális, nem ismerek minden létező kereskedő robotot (bár jópárat láttam már…) és nem is hiszem, hogy rálátásom lenne a legnagyobb pénzügyi mogulok munkásságára (bár ismerem jónéhány hazai nagyágyút); mindettől függetlenül engedjétek meg, hogy ezzel a cikkel midenkit megpróbáljak kicsit meggyőzni arról, hogy perpillanat semmi hasznosabbat nem tudnál tenni, mint hogy megtanulj mondjuk python nyelven programozni, vagy ha már tudsz, akkor használd is azt. Ha már fentebb pont Cryptopresence-től idéztem, akkor most újra had idézzem őt:

Fenébe. Én meg átaludtam. Nem lesz ez így jó. A hagyományos tőzsdéken H-P 9-5, a forexen ha jól tudom H-P 0-24 – azaz legalább a hétvége nyugi. Itt 24/7 pörögnek az események. Ha áttér a pénzvilág a kriptóra, mikor fognak aludni?

Pont ez a lényeg. Ha valaki a kripto tőzsdéken akar daytradelni, és kockázatos rövid kifutású ügyleteken akar nyerészkedni, akkor ehhez a hét minden napjának összes órájában a gépnél kell lenni, vagy legalábbis internet/okostelefon közelben. Mindezt csak azért, mert még az igen fejlett kripto tőzsdék (pl. kraken), sem adnak kellően szofisztikált lehetőségeket egy-egy order létrehozásához. A helyzet az, hogy egyébként de, adnak… ezt hívják APInak, azaz programozható interfésznek. Ha szabad szövegesen meg tudsz fogalmazni egy feltétel halmazt, akkor azt le is tudod programozni. Méghozzá általában pofon egyszerűen. Had mutassak erre egy példát:

 

#!/usr/bin/python3

import time
import krakenex
import json
import sys

k = krakenex.API()
pairs = ['ETHEUR','']

def get_lock(process_name):
    get_lock._lock_socket = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
    try:
        get_lock._lock_socket.bind('\0' + process_name)
        print('I got the lock')
    except socket.error:
        sys.exit()

def get_pairname(dobj):
  for i in dobj['result']:
     if (i != 'last'): 
        return i
  return 'nill';

def im_robot(last, trades, ohlc, orderbook):
  print (last)
  pass

try:
  get_lock("kraken_bot.py");            #double-running protection
  loop = 1;
  while (loop == 1):
     trades=[]; ohlc_1h=[]; orderbook=[];
     time.sleep(3);                     #stupid kraken timelock on API requests
     try:
        trades = k.query_public('Trades',{'pair': pairs[0]})
        orderbook = k.query_public('Depth',{'pair': pairs[0]})
        ohlc_1h = k.query_public('OHLC',{'pair': pairs[0], 'interval': 60})
     except:
        print("Unexcepted error when download API data for ",pairs[0]," ",sys.exc_info())
        continue
     if( len( trades['error']) != 0):
        print("Invalid JSON response from kraken (Trades):"+ ",".join(trades['error']));
        continue
     last = trades['result'][get_pairname(trades)][len(trades['result'][get_pairname(trades)])-1];
     im_robot(last, trades, ohlc_1h, orderbook)

finally:
   pass;

Akik már tudnak python-ban programozni, azoknak a számára nyilvánvaló, hogy mit csinál a fenti kód, akik pedig – még – nem, azoknak egy nagyon egyszerű kifejtés:

  • A kód 3 másodpercenként lekéri a kraken API-n keresztül az ETHEUR kereszt összes releváns adatát, beleértve a tradeket, az 1 órás ohlc-t és a pillanatnyi orderbookot is.
  • Ezekkel a fentebbi kód perpillanat csak annyit csinál, hogy kiírja a legutolsó ügylet adatait. Ami így elsőre nem biztos hogy izgalmasan hangzik…

Mielőtt viszont folytatnám egy pici kitérő: Miért pont python? A python az informatikában gyakorlatilag tényleg egy olyan alap eszköz, mint a köznyelvben az angol. A python lényegében egy script nyelv, be abból talán (szerintem) a legfejlettebb. Ráadásul egy olyan komplex library halmaz épül rá, amivel az informatika olyan nagyon távoli területeit tudod vegyíteni, mint például a machine learning, az advanced analytics vagy éppen a data visualization. Persze mindehhez az input lehet a cryptocurrency világ. A python igen kedvelt interpreter a blockchain világában, hiszen a blockchainre épülő alkalmazások jellemzően hatalmas mennyiségű strukturált adatokkal dolgoznak, amiben a python egyszerűen verhetetlen.

A fentebbi kis kód úgy van összerakva, hogy a végtelenségig fut és minden ciklusban meghívja az “im_robot” funkciót, mely valójában ugye a decision logic része a kódnak. Bármit is akarunk kezdeni a krakenről származó adatokkal, azt itt kell megtenni.

Nézzünk is egy konkrét példát, amit az egyik olvasó (K. Ákos) küldött:

Hogyan tudom beállítani, hogyha a jelenlegi ár fölött akarok vásárolni, de csak akkor, ha elért egy bizonyos ár fölött. Pl: jelenlegi ár 80. Én 101-n akarok venni, de csak akkor, ha az ár 100-at átlépte

Na ezt már pl. nem tudod beállítani a kraken jelenleg funkcióival. Viszont ennyire pofon egyszerű ezt megcsinálni az api-n keresztül:

 

def im_robot(last, trades, ohlc, orderbook):
  _activation = 270.0
  _buylimit = 275.0
  _volume = 0.1
  print(last)
  if (float(last[0]) > _activation):
    k.load_key('kraken.key')
    order = k.query_private('AddOrder', {'pair': get_pairname(trades), 'type': 'buy', 'ordertype': 'limit', 'volume': str(_volume), 'expiretm': '+120', 'price': _buylimit, 'validate': 'true'});
    print (order)

Azt hiszem a példa eléggé magáért beszél. Definiálva vannak a küszöbértékek ETHEUR-ra: keressük az aktiválási küszöböt (270 EUR árfolyam), majd ha azt elérjük, akkor rakjunk be az új limit áras order 0.1 ETH volumenre 275 EUR limit áron. A minta eredménye:

[kraken_tst]$ ./zs.py
I got the lock
['258.40110', '0.35713961', 1502919471.3903, 'b', 'm', '']
['258.12120', '1.35713961', 1502919472.2933, 'b', 'm', '']
['260.97100', '2.35713961', 1502919475.1953, 'b', 'm', '']
['264.21100', '3.35713961', 1502919476.7903, 'b', 'm', '']
['270.00100', '4.35713961', 1502919479.2913, 'b', 'm', '']
{'error': [], 'result': {'descr': {'order': 'buy 0.10000000 ETHEUR @ limit 275.00000'}}}

Miért is érdekes ez az order? Itt az eredeti felvetés minden bizonnyal azt az ötletet szolgálta, hogy ha adott asset értéke folyamatosan 80 dolláron mozog, majd egyszer csak felugrik 100 dollárra, na akkor abból biztos érdemes lehet venni, hiszen ami felugrik hirtelen 20%-ot, az hátha felugrik még többet is. Bár itt a példában kraken API-t használok, de ehhez hasonló apival rendelkezik pl a bittrex is (API reference), ami közismerten a sikervárományos gadget token-ek legfőbb beszerzési forrása lehet.

A fenti ‘robot’, persze itt még nagyon buta, de ezen a ponton el lehet ereszteni a fantáziát. Pl mi van akkor, ha mi csak akkor akarunk bevásárolni, ha az elmúlt 12 db órás gyerta záró árainak átlagát 10%-kal haladta meg a pillanatnyi árfolyam:

 

def im_robot(last, trades, ohlc, orderbook):
  _activation = 0.0
  for i in range(len(ohlc['result'][get_pairname(ohlc)])-13,len(ohlc['result'][get_pairname(ohlc)])-1): _activation = _activation + float(ohlc['result'][get_pairname(ohlc)][i][4])
  _activation = _activation /12 * 1.2;
  _buylimit = _activation * 1.01;
  _volume = 0.1
  print(_activation, _buylimit, last)
  if (float(last[0]) > _activation):
    k.load_key('kraken.key')
    order = k.query_private('AddOrder', {'pair': get_pairname(trades), 'type': 'buy', 'ordertype': 'limit', 'volume': str(_volume), 'expiretm': '+120', 'price': _buylimit, 'validate': 'true'});
    print (order)

Lefuttatva az ETCEUR kereszre máris megkapjuk, hogy bár most 12.05 EUR az ETC árfolyama, de a script vételt kezdeményez, ha innen felugrik az árfolyam 13.18-ra, méghozzá úgy, hogy közben a 12 órás átlag lényegesen nem emelkedik, ehhez ugye az kell, hogy ekezdjék vadul pumpálni az árfolyamot.

Az egy órás OHLC (interval: 60) melett ha lekérjük mondjuk az 5 perces gyertyákat is, akkor máris be tudunk rakni egy másodlagos ellenőrzést, ami csak akkor engedi aktiválni az ordert, ha a 12 órás átlag +10% mellett az a feltétel is igaz, hogy az utolsó 10 db 5 perces gyertya átlagához képest is növekedett legalább 8%-ot az árfolyam. Ez ugye egyfajta indikátora annak, hogy az árfolyam valóban rocket-jumpol felfelé.

Ez az a pont ahol lelőném magam, nem szeretnék itt a blog hasábjain összerakni egy ‘ultimate trading bot’-ot, hisz olyan nem létezik, ellenben a fentebbiek alapján kellő motivációval és némi utánjárással bárki össze tudja rakni a saját elképzeléseinek megfelelő alkalmazást, ami mellett akár aludni is fog tudni 🙂

Szóval az üzenet egyszerű: Ne a chartok és a buy/sell gombok előtt ülve akarjátok megélni, átélni és túlélni azt a kultúra váltást, amit a blockchain technológiák elhoznak. Helyette tanuljatok és a tudásotokat hasznosítsátok ahhoz, hogy szabadidőt, nyugalmas és aktív pihenésre szolgáló időt teremtsetek magatoknak. Immáron majd 5 éves a blog azon postja amiben magamat mutatom be, ebben szerepel a következő gondolat: “[…]képes vagyok napokig szüttyögni valaminek a leprogramozásával, amivel azt követően napi 5-10 percet spórolok meg az életemből… egyszer biztos megtérül[…]“.

Zárszóként még egy gondolat, ha már szóba került a postban a gépi tanulás (machine learning): Anno elkezdtem itt a blogon egy machine learning cikksorozatot, ami nem élt meg túlságosan hosszú életet. A kipublikált két etapon túl további két fejezet munkaanyaga van kész, melyek egyelőre még nincsennek publikálható állapotba. Mindettől függetlenül az első két fejezet is érdekes lehet azoknak akik komolyabban belemélyednének abba, hogy mit is lehet kezdeni a kriptovaluták temérdek adatával…

Bookmark the permalink.

19 Comments

  1. Ha esetleg nem csak a crypto világról lenne szó, hanem úgy általánosságban a programozásról, akkor melyik programozási nyelvet érné meg szted megtanulni( nehézségi szint, elterjedés, jövőbeni kilátások). Esetleg az adott nyelvhez van vmi tipped, hogy hol lehetne a neten elkezdeni tanulni? Tudom, hogy van rengeteg oldal, de nagyon sok nem éppen tanuló barát, rengeteg felesleges információ halmazzal bombázzák az ember agyát, és nem biztos, hogy hatékonyak.
    UI: nulla infós háttérrel
    Köszi

    • A python leginkább abban jó, ha nagy mennyiségű adatot kell értelmezni és elemezni. Az általam vízionált jövőben olyan mennyiségű hasznos nyers adat fog körülvenni bennünket, amely elmezési és értelmezési képessége kulcsa lesz a mindennapi sikerekhez. Ezt a nagy vállalatok már is alkalmazzák, 10 éve ezt még adatbányászatnak nevezték, ma a bigdata a divatos trendi neve. Nem is oly sokára ez a képesség a mindennapi életben is meg fog jelenni és meg fog különböztetni embereket. Ennek egy nagyon érdekes előszele pont az amiről ez a cikk is szólni akar. A kripto piacokon 10-20 tőzsdén képes vagy hozzáférni akár több száz assethez is. Ezeket képtelenség emberi aggyal elemezni és figyelni, hogy melyik hajt végre éppen egy rocket jumpot. Ha viszont az API-kon keresztül hozzáférsz ezen tőzsdékhez és tudod definiálni a “rocket-jump” akkor máris tudsz készíteni egy olyan eszközt, ami elvégzi ezt helyetted és neked csak a “pingekre” kell figyelned.

      Ha csak úgy egyébként akar megtanulni valami programozni, hogy a MA álláslehetőségein rúgjon labdába, akkor ehhez most a kulcs az SQL és java. Ha e kettőhöz kellően profin értesz, akkor megnyílnak előtted a kapuk. Egyébként nagyon sok multi itthon már kínál olyan állást, amit betöltve 3 hónapig csak tanulsz programozni, jellemzően javaban és jellemzően egy konkrét célfeladatra specializálva, majd 3 hónap után mehet is az illető a bit-gyárba. Egy-egy ilyen tanfolyam jó alapokat adhat ha valaki hozzá tanul folyamatosan. Itthon úgy tudom, hogy az EPAM és a T-Systems is végez ilyen bootcamp trainingeket.

      • Én még a “C” nyelveket emelném ki (C++,C#), esetleg 1-2 script-nyelv lehet még hasznos.. De egyébként nem tudok belekötni, tökéletes javaslatok.

      • Én pont ilyen rocket-jump alapon kereskedek EURUSD páron csak ott momentumkereskedésnek hívják, mert nem igazi rocket 🙂

  2. TLDR: JS-NodeJS-HTML és C#

    Jaja, nekem még lenne két szavazatom a JS+HTML párosra és C#-ra. Míg előbbi teljesen általános webes rálátást és életben maradást tesz lehetővé (nem mellesleg izgalmas, látványos, gyors eredménnyel kecsegtető világ), utóbbi lehetővé teszi, hogy többféle fronton is helyt állj és biztosítja számodra, hogy választhass később, amikor már kikristályosodott, hogy a programozáson belül is melyik platform/környezet érdekel a leginkább. Mire gondolok? (két női mellre, de hogy jön ez ide?) Arra, hogy C#-ot használhatod M$ eszközökhöz, .NET fejlesztéshez, de multiplatformos mobil fejlesztéshez is (ld. Xamarin) éééééés, amit én nagyon csipázok: Unity. Játékprogramokat, multimédiás alkalmazásokat is készíthetsz vele. A C# mellett szól (szerintem) még az is, hogy meglehetősen jól ötvözi a modern nyelvek szemantikáját a “komolyabb” nyelvek képességeivel. Többek közt pl. objektumorientált, nagy eszköztárral bír, közben nem sz*patja az embert alacsonyszintű problémák kezelésével. .NET esetén a Data Binding is szenzációsan hatékony tud lenni.

    És persze bármiben is csinálsz picit is komolyabbat egy Hello World-nél, az SQL sosem árt.

  3. Majd elfelejtettem: Ha pedig hamar akarsz nagyon (NAGYON) gazdag lenni, sürgősen tanuld meg a GPU-kat programozni, CUDA, OpenCL és a shaderek világát. Dobj piacra egy bányász programot, ami a Vega FE és hasonló kártyák esetén is extrém hatékony, sápold be csak a 0.5%-át a bányászott javaknak és dőlj hátra. Ja igen, első dolgod legyen megvenni egy nagy telket, ahol random áshatod el a HW walletjeidet, hogy másnak esélytelen legyen elcsórni tőled.

    • Kedves JUKE!
      Ezt kifejtenéd bővebben? Mármint a bányászprogramok fejlesztését?

      • Ott van Claymore. Minden, aki pl. az egyik legnépszerűbb Ether bányászprogramot fejleszti. “Ingyen.” Letöltöd, futtatod és szedi a zsét neked. Is. Van egy úgynevezett devfee (developer fee, vagyis fejlesztői díj), ami 1%-nyi GPU időt arra fordít minden egyes futó példány esetében, hogy az ő walletjébe termeli a coint. Ha duálban tolod, akkor 2%. Ő folyamatosan azon van, hogy az ő programja legyen a leggyorsabb, így minél többen használják, cserébe egyre nagyobb lesz a részesedése azzal az 1%-kal.

        Na, most számold ki, hogy vajon napi(!) mennyit tehet zsebre. Sokat. Nagyon sokat. A legtöbb magyar állampolgár éves megtakarítása sem közelíti meg. Ehhez persze spílernek kell lenni és egy megbízható, majdhogynem szerver szoftver szintű üzembiztonságú szofvert írni, amiben se memory leak, se random fagyást okozó bugok nem lehetnek, vagy csak extrém kis mennyiségben. A monitorozási képességekről, a naplózásról, az on-the-fly paraméterezhetőségről, a különböző driver verziókkal való kompatibilitásokról nem beszélve.

        • Köszönöm a gyors infókat. Megnézem. Engem az érdekel, hogy milyen tudás kell egy ilyen lefejlesztésére. Amiket említettél: CUDA, OpenCL… ezeknek is utánanézek.

        • teljesen realis egyebkent, hogy valaki olvas erröl egy forumban, majd leül programozni tanulni, es fejleszt egy olyan miner programot ami lenyomja a Claymore-t.

          • gratulálok az értelmes hozzászólásodhoz

          • az en hozzaszolasom eleve egy gratulacio volt az ertelmes kerdeseidhez, igy asszem a kor be is zarult.
            de ne ertsd felre, drukkolok hogy boldogulj a temaban, sok sikert!

        • 0xB9cF2dA90Bdff1BC014720Cc84F5Ab99d7974EbA

  4. Köszi a válaszokat! Megnéztem a két képzést, de vagy min középfokú IT végzettség és vagy tapasztalat szükséges. Teljesen kezdők számára ezek kiesnek. Esetleg vmi tipp, h neten milyen oldalon lenne érdemes elkezdeni javat vagy pythont tanulni?

  5. Biztos bután hangzik a kérdésem, ide az ilyen API-n keresztüli kód futtatáshoz kell valami extra szoftver, vagy ezt pl. a Kraken-en belül egy felületen tudom üzemeltetni?

    • A posztban szereplő program futtatásához Python 3 értelmezőre van szükséged:
      https://www.python.org/downloads/
      Meg hozzá még a kód elején importált python könyvtárakra.

      Ez a kód linuxon futott, ott viszont mintha egy “import socket” hiányozna az elejéről. Windowson nekem (kezdő vagyok pythonból) get_lock() függvény nélkül működött.

      Adatok lekérdezéséhez és kereskedéshez alapvetően a Kraken API ( https://www.kraken.com/help/api ) parancsait használva a Kraken szerverével http protokolon keresztül kell kommunikálnod. Gyakorlatilag magadnak kellene megírni a kliens szoftvert ami ezt megvalósítja, viszont több programozási nyelven jófej programozók ennek nagy részét már megcsinálták és elérhetővé tették a forráskódokat:
      https://www.kraken.com/help/api#example-api-code
      amiket felhasználva, kiegészítve akár saját kereskedőprogramot is el tudsz készíteni gyakorlattól függően több-kevesebb idő alatt.

  6. Sziasztok! Tudnátok segíteni abban, hogy milyen mobil appal tudok papír Ethert utalni? Bitcoinra ott a király blockchaininfos mobil app, ott beszkennelem a címet, láthatom az egyenleget mindig, ha utalni akarok akkor meg a privátot, ilyet keresnék Etherben is. Találtam a Jaxx-ot de az azzal kezdi, hogy scanneljem be neki a privát kulcsot, aztán ha jól sejtem beutalja magának, nem túl szimpatikus ez így. Tudna segíteni valaki ebben? Köszönöm!

Szólj hozzá: