(27.11.2018, 11:19)atze2000 schrieb: [ -> ] (26.11.2018, 14:59)Solventix schrieb: [ -> ]Vielleicht sollten wir mal eine kleine Programmier-Ecke mit Tipps und Tricks zur Kursversorgung, Webscraping und Tradingsystemen aufbauen?
Ich lass mir mal was einfallen, mir würde so eine Ecke auch gefallen.
Das kannst Du ja dann in die entsprechende Ecke verschieben:
Download einer dynamischen Webpage (also mit JavaScript-generierten Inhalten).
Node.js und Puppeteer müssen installiert sein.
Code:
// DownloadScript.js
const puppeteer = require("puppeteer");
const fs = require("fs");
async function run() {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto("https://www.trading-stocks.de/index.php", { waitUntil: 'domcontentloaded'});
// wait a bit so that the browser finishes executing JavaScript
await page.waitFor(1 * 1000);
const html = await page.content();
fs.writeFileSync("Trading-Stocks.htm", html);
await browser.close();
}
run();
Aufruf dann mit
node DownloadScript.js
Statt der Sekunde Warten kann man auch auf das Erscheinen eines Elementes warten, wenn man es kennt, beispielsweise:
await page.waitForSelector('h1');
Tools zum Webscraping:
https://www.scraperapi.com/blog/the-10-b...ping-tools
Da ich gerade await und async lese. Man kann in Javascript auch aus asynchronen Methoden "Pseudosynchrone" machen. Normalerweise wird mit asynchronen Methoden so gearbeitet, dass man Callbacks (Methoden) übergibt die am Ende der asynchronen Methode dann aufgerufen werden. Dies führt dazu, dass wenn mann damit oft hantieren muss, der Code sehr unübersichtlich wird.
Wie das aussehen kann:
Code:
var fs = require ('fs');
const readSync = async function () {
return new Promise(resolve => {
fs.readFile("Dateiname", (err, data) => {
resolve (data);
});
});
};
const ttt = async function ()
{
....
var res = await readSync ();
...
}
ttt ();
Hier am Beispiel von readFile(), klar dass es auch readFileSync() gibt, aber es geht ja nur um's Beispiel. Entscheidend ist dabei, dass der Code nicht tatsächlich synchron abläuft, sondern einfach die Lesbarkeit vom Code verbessert wird. Der Funktionsaufruf in Main ttt(), kommt sofort zurück. Der Ablauf in der Funktion ttt() kann man sich als synchron denken. D.h. readSync() kommt erst zurück wenn die Datei gelesen wurde. Die Rückgabe der Daten erfolgt dabei per Promise-Object und resolve().
Man kann auch Main selbst synchron machen, dazu muss es entsprechend umklammert werden.
Mehr dazu:
https://www.heise.de/developer/artikel/a...33105.html
(30.11.2018, 06:58)Solventix schrieb: [ -> ][quote='atze2000' pid='2935' dateline='1543310365']
[quote='Solventix' pid='2713' dateline='1543237141']
Vielleicht sollten wir mal eine kleine Programmier-Ecke mit Tipps und Tricks zur Kursversorgung, Webscraping und Tradingsystemen aufbauen?
Ich lass mir mal was einfallen, mir würde so eine Ecke auch gefallen.
Das kannst Du ja dann in die entsprechende Ecke verschieben:
mit großem Interesse die Beiträge gelesen und links besucht.
Könnte mich an diesem Thema EOD, webscrap, Programmierecke beteiligen mit excel vba (makros) und eingeschränkt java und py.
Bin beim Thema Stillhalter im DAX + anderen Werten - Tradingstrategien unterwegs.
Aufzeichnung und Analyse /Auswertung der Aktien und Options trades mit excel VBA, RT data via webscrap, etc.......
Ich fände den start der...kleine Programmier-Ecke mit Tipps und Tricks zur Kursversorgung, Webscraping und Tradingsystemen .....sehr hilfreich. Sind Vorschläge erwünscht?
Allen noch ein gutes Neues Jahr und ein gutes Händchen beim traden :-))
(26.11.2018, 14:59)Solventix schrieb: [ -> ]Vielleicht sollten wir mal eine kleine Programmier-Ecke mit Tipps und Tricks zur Kursversorgung, Webscraping und Tradingsystemen aufbauen?
Gibt es diese Ecke schon??? Habe ich sie übersehen???
Ich könnte mit Excel-VBA etwas beitragen.....
Gruß Faultier
(07.02.2019, 14:42)Faultier schrieb: [ -> ] (26.11.2018, 14:59)Solventix schrieb: [ -> ]Vielleicht sollten wir mal eine kleine Programmier-Ecke mit Tipps und Tricks zur Kursversorgung, Webscraping und Tradingsystemen aufbauen?
Gibt es diese Ecke schon??? Habe ich sie übersehen???
Ich könnte mit Excel-VBA etwas beitragen.....
Gruß Faultier
Ich wäre mit Python dabei :)
TWS und IBPy:
ref: stackoverflow
ich nehme ein py-modul und ruf die tickerdaten EUR/USD auf
#! /usr/bin/env python
# -*- coding: utf-8 -*-
from ib.ext.Contract import Contract
from ib.opt import ibConnection, message
from time import sleep
# print all messages from TWS
def watcher(msg):
print (msg)
# show Bid and Ask quotes
def my_BidAsk(msg):
if msg.field == 1:
print ('%s:%s: bid: %s' % (contractTuple[0],
contractTuple[6], msg.price))
elif msg.field == 2:
print ('%s:%s: ask: %s' % (contractTuple[0], contractTuple[6], msg.price))
def makeStkContract(contractTuple):
newContract = Contract()
newContract.m_symbol = contractTuple[0]
newContract.m_secType = contractTuple[1]
newContract.m_exchange = contractTuple[2]
newContract.m_currency = contractTuple[3]
newContract.m_expiry = contractTuple[4]
newContract.m_strike = contractTuple[5]
newContract.m_right = contractTuple[6]
print ('Contract Values:%s,%s,%s,%s,%s,%s,%s:' % contractTuple)
return newContract
if __name__ == '__main__':
con = ibConnection()
con.registerAll(watcher)
showBidAskOnly = True # set False to see the raw messages
if showBidAskOnly:
con.unregister(watcher, message.tickSize, message.tickPrice,
message.tickString, message.tickOptionComputation)
con.register(my_BidAsk, message.tickPrice)
con.connect()
sleep(1)
tickId = 1
# Note: Option quotes will give an error if they aren't shown in TWS
#contractTuple = ('QQQQ', 'STK', 'SMART', 'USD', '', 0.0, '')
#contractTuple = ('QQQQ', 'OPT', 'SMART', 'USD', '20070921', 47.0, 'CALL')
#contractTuple = ('ES', 'FUT', 'GLOBEX', 'USD', '200709', 0.0, '')
#contractTuple = ('ES', 'FOP', 'GLOBEX', 'USD', '20070920', 1460.0, 'CALL')
contractTuple = ('EUR', 'CASH', 'IDEALPRO', 'USD', '', 0.0, '')
stkContract = makeStkContract(contractTuple)
print ('* * * * REQUESTING MARKET DATA * * * *')
con.reqMktData(tickId, stkContract, '', False)
sleep(15)
print ('* * * * CANCELING MARKET DATA * * * *')
con.cancelMktData(tickId)
sleep(1)
con.disconnect()
sleep(1)
------------------------------------------------------------------------
# Note: Option quotes will give an error if they aren't shown in TWS
#contractTuple = ('QQQQ', 'STK', 'SMART', 'USD', '', 0.0, '')
#contractTuple = ('QQQQ', 'OPT', 'SMART', 'USD', '20070921', 47.0, 'CALL')
#contractTuple = ('ES', 'FUT', 'GLOBEX', 'USD', '200709', 0.0, '')
#contractTuple = ('ES', 'FOP', 'GLOBEX', 'USD', '20070920', 1460.0, 'CALL')
---------------------------------------------------------------------
contractTuple = ('EUR', 'CASH', 'IDEALPRO', 'USD', '', 0.0, '')
also nur diese 'EUR' Abfrage zu den nachfolgenden Antworten der TWS führt
* * * * REQUESTING MARKET DATA * * * *
<marketDataType reqId=1, marketDataType=1>
EUR:: bid: 1.1337
EUR:: ask: 1.13375
<tickGeneric tickerId=1, tickType=49, value=0.0>
<tickGeneric tickerId=1, tickType=49, value=0.0>
* * * * CANCELING MARKET DATA * * * *
-----------------------------------------------------------------
ergo - irgendwie stimmen die parameter und die Folge der Parameter Eingaben nicht
Fehler noch nicht gefunden ??
-----------------------------------------------------------------
Test gemacht mit IDLE 3.6 (32 bit ) 3.7 geht nicht
das ist mein Startbeitrag - wobei mein Ziel ist - Stockdaten und Optionsdaten in ein excelsheet zu bringen und da die Auswertungen zu machen.
excel sheet benötigt Daten für Optionen closing und strike (clsPr2 und cls str2) - die nicht manuell sondern auto via TWS streaming daten und py eingefügt werden sollen
was ist euer Bedarf mit py ??
oder excel od. java oder IB API's ?
im py script Anweisung verwenden und getestet- Ergebnis stirng bringt daten hervor-->
läuft -> bringt DAX Daten von IBIS (ohne delay) aus TWS datenfeed
contractTuple = ('ADS', 'STK', 'IBIS', 'EUR', '',0.0, '')
-------------------------------------------------------------
USA Symbole erbingen daten... :-)
upadte: folgende parameter string brint die Optionsdaten für
ADS AK 198.05 strike 200 mit 1.54/1.64 aktuell
hier ist die zeile für den py sccript davor.
contractTuple = ('ADS', 'OPT', 'DTB', 'EUR', '20190215', 200.0, 'CALL')
mit dem Ergebnis:
Contract Values:ADS,OPT,DTB,EUR,20190215,200.0,CALL:
* * * * REQUESTING MARKET DATA * * * *
<marketDataType reqId=1, marketDataType=1>
ADS:CALL: bid: 1.58
ADS:CALL: ask: 1.67
<tickGeneric tickerId=1, tickType=49, value=0.0>
ADS:CALL: ask: 1.68
<tickGeneric tickerId=1, tickType=49, value=0.0>
ADS:CALL: ask: 1.67
ADS:CALL: bid: 1.56
ADS:CALL: ask: 1.65
ADS:CALL: bid: 1.54
ADS:CALL: ask: 1.64
* * * * CANCELING MARKET DATA * * * *
>>>
jetzt nur noch die daten für strike, aks,bid ins excelsheet transferieren...hat jemand einen Vorschlag
(21.11.2018, 18:23)saphir schrieb: [ -> ]https://stooq.com / stooq.pl (dazu muss .US an das Symbol angehängt werden)
Kann man hier auch den end-of-Day Kurs von mehreren Aktienwerten gleichzeitig abrufen?
Ich suche nämlich noch eine Seite, auf der ich auch von europäische Werte die end-of-Day Kurse bekomme und das am liebsten als Sammelabfrage....
Gruß Faultier