lunedì 31 agosto 2020

PYTHON - MACHINE LEARNING

I couldn't rely on existing databases for my machine learning project. I need a highly plastic database, so I decided to implement mine. 
Using json and python files I can modify the structures of the tables without having to worry about modifying existing queries, they adapt to changes automatically.
The idea is that, when the machine does not find the data in its databases, it searches for them with the means at its disposal, automatically evaluating which is the best way to search for a given data. The decision tree will automatically expand with the accumulated experience. 
It is not impossible, but it will be long. For now I start building my database.



venerdì 28 agosto 2020

PYTHON - INDICATORE

Ore 13:25 del 28 agosto 2020
Grafico tracciato da Indicatore.
Vendere BATUSDT a 0.3484
TP a 0.3427

Non è un suggerimento di investimento.
Sto solo testando il mio nuovo BOT INDICATORE scritto in Python.

mercoledì 26 agosto 2020

PYTHON - MA and BOOKORDER SCALPING


Scalping signal indicator written in python. It is based on Binance data.
The simpleBinanceFut.py module can be downloaded from GitHub.
https://github.com/DanielePorcari/simpleBinanceFutures

import simpleBinanceFut as sBF

def MA(dati,periodo):
    ris=0
    i=len(dati)-1
    for c in range(periodo):
        if i>=periodo:
            prezzo=(float(dati[i][4]))
            ris=ris+prezzo
            i-=1
    ris=ris/periodo
    return ris

def bookBot(up):
    volMax=0
    priceMax=0
    if up:
        for i in range(len(book['bids'])):
            price=float(book['bids'][i][0])
            vol=float(book['bids'][i][1])
            if float(vol)>float(volMax):
                volMax=vol
                priceMax=price
        print("Buy: ",priceMax)
        volMax=0
        priceMax=0
        for i in range(len(book['asks'])):
            price=book['asks'][i][0]
            vol=book['asks'][i][1]
            if float(vol)>float(volMax):
                volMax=vol
                priceMax=price
        print("TP: ",priceMax)
    else:
        for i in range(len(book['asks'])):
            price=float(book['asks'][i][0])
            vol=float(book['asks'][i][1])
            if float(vol)>float(volMax):
                volMax=vol
                priceMax=price
        print("Sell: ",priceMax)
        volMax=0
        priceMax=0
        for i in range(len(book['bids'])):
            price=book['bids'][i][0]
            vol=book['bids'][i][1]
            if float(vol)>float(volMax):
                volMax=vol
                priceMax=price
        print("TP: ",priceMax)

coppia=input("Insert asset: ")
print("Last price: ",sBF.fbin_ultimo_prezzo(coppia))
tf=input("Insert tf:")
book=sBF.fbin_book(coppia)
prezzi=sBF.fbin_candlestick(coppia,tf,"99")
ma9=MA(prezzi,50)
ma25=MA(prezzi,25)
if ma9>ma25:
    up=True
else:
    up=False
bookBot(up)

martedì 12 maggio 2020

PYTHON - AI SEE THE GRAPHIC PATTERNS

A prototype script that "sees" the configuration of graphic patterns. For now it only works on the pattern cup.
Download the data from Binance, draw the price line and compare it with the standard cup image.

#Riconoscimento pattern grafici tramite AI
#Porcari Daniele's code

from PIL import Image, ImageFilter
import imagehash
import matplotlib.pyplot as plt
import requests
import json

def binanceList(coppia,intervallo,limite):
    coppia=coppia.upper()
    indirizzo='https://fapi.binance.com/fapi/v1/klines?symbol='+coppia+'&interval='+intervallo+'&limit='+limite
    r=requests.get(indirizzo)
    file=r.text
    lista=json.loads(file)
    x=[]
    y=[]
    for i in range(len(lista)):
        x.append(lista[i][0])
        y.append(float(lista[i][4]))
    return x,y

def disegnaGrafico(x,y,asset):
    ok=False
    fig=plt.figure(figsize=(14,14))
    plt.plot(x,y,color='black')
    nome=asset+".png"
    plt.savefig(nome)
    return nome

def togliCornice(immagine,asset):
    ok=False
    img=Image.open(immagine)
    w,h=img.size
    l=180
    t=172
    r=w-159
    b=h-163
    nome=asset+"pronta.png"
    img.crop((l, t, r, b)).save(nome)
    img.close()
    return nome

def confronto(attuale,base,base2):
    tazza=True
    img = Image.open(base)
    image_one_hash = imagehash.whash(img)
    img2 = Image.open(attuale)
    image_two_hash = imagehash.whash(img2)
    similarity = image_one_hash - image_two_hash
    img.close()
    if similarity>20:
        img=Image.open(base2)
        image_one_hash = imagehash.whash(img)
        similarity2 = image_one_hash - image_two_hash
        if similarity>similarity2:
            similarity=similarity2
        tazza=False
    img.close()
    img2.close()
    return similarity,tazza

def confrontoTestaSpalle():
    ok=False
    return ok


linea=['BTCUSDT',
'LINKUSDT',
'BATUSDT',
'VETUSDT',
'TRXUSDT',
'ETHUSDT',
'BCHUSDT',
'LTCUSDT',
'XRPUSDT',
'EOSUSDT',
'ETCUSDT',
'XTZUSDT',
'BNBUSDT',
'ADAUSDT',
'NEOUSDT',
'XLMUSDT',
'DASHUSDT',
'ZECUSDT',
'XMRUSDT',
'ATOMUSDT',
'ONTUSDT',
'IOTAUSDT',
'QTUMUSDT',
'IOSTUSDT']

for i in range(len(linea)):
    print(linea[i])
    x,y=binanceList(linea[i],'4h','50')
    nomeGraf=disegnaGrafico(x,y,linea[i])
    grafOk=togliCornice(nomeGraf,linea[i])
    similarity,cup=confronto(grafOk,'tazza.png','tazza2.png')
    if cup==True:
        print("Possibile tazza ",similarity," - ",linea[i])
    else:
        print(similarity," - ",linea[i])

Copy and save the following images with the name of: cup.png and cup2.png
If you like the blog remember that you can support my work by donating cryptocurrencies to the addresses at the top right or at this link go fund me



domenica 3 maggio 2020

PYTHON - SIMPLE BINANCE FUTURES API

The Binance Futures API returned data as strings, and it was unmanageable (at least for me) so I wrote this form which returns the responses of the Binance Futures API in lists and dictionaries. 
You can use this module without logging in to Binance. I hope you find it useful.


#Porcari Daniele https://danieleporcaripython.blogspot.com
#Simple Binance Futures API for Python
import requests
import json

def fbin_ultimo_prezzo(coppia):
    coppia=coppia.upper()
    indirizzo='https://fapi.binance.com/fapi/v1/ticker/price?symbol='+coppia
    r=requests.get(indirizzo)
    file=r.text
    prezzo=json.loads(file)
    return prezzo['price']

def fbin_book(coppia):
    coppia=coppia.upper()
    indirizzo='https://fapi.binance.com/fapi/v1/depth?symbol='+coppia
    r=requests.get(indirizzo)
    file=r.text
    return json.loads(file)

def fbin_scambi24H(coppia,limite):
    coppia=coppia.upper()
    indirizzo='https://fapi.binance.com/fapi/v1/depth?symbol='+coppia+'&limit='+limite
    r=requests.get(indirizzo)
    file=r.text
    return json.loads(file)

def fbin_candlestick(coppia,intervallo,limite):
    coppia=coppia.upper()
    indirizzo='https://fapi.binance.com/fapi/v1/depth?symbol='+coppia+'&interval='+intervallo+'&limit='+limite
    r=requests.get(indirizzo)
    file=r.text
    return json.loads(file)

def fbin_prezzomercato(coppia):
    coppia=coppia.upper()
    indirizzo='https://fapi.binance.com//fapi/v1/premiumIndex?symbol='+coppia
    r=requests.get(indirizzo)
    file=r.text
    return json.loads(file)

def fbin_24h_statisticheprezzo(coppia):
    coppia=coppia.upper()
    if coppia=='NONE':
        indirizzo='https://fapi.binance.com/fapi/v1/ticker/24hr'
    else:
        indirizzo='https://fapi.binance.com/fapi/v1/ticker/24hr?symbol='+coppia
    r=requests.get(indirizzo)
    file=r.text
    return json.loads(file)

def fbin_book_migliorprezzo(coppia):
    coppia=coppia.upper()
    indirizzo='https://fapi.binance.com//fapi/v1/ticker/bookTicker?symbol='+coppia
    r=requests.get(indirizzo)
    file=r.text
    return json.loads(file)

sabato 2 maggio 2020

PYTHON - AI TESTING BOT TRADING SIGNALS

Some signals from the BOT that I am testing. It is not my responsibility to use these signals; the use of these signs is at your own risk. I remember that trading is a high risk investment and it is possible to lose all the capital invested.
BATUSDT Binance

03/05/2020   06:47:01
BATUSDT   DAY   10   1
23-Apr-20
Op:  Buy  Prezzo:  0.1914 
TP1: 0.20450  TP2: 0.19795  TP3: 0.19577
Il prezzo è tra 0.19610  e 0.18680 
The BOT I am testing has calculated an upward trend and proposes a long operation with three possible targets. It also indicates the price between which resistances and support. 

Same reading of the BOT signals on the next pairs 

03/05/2020   06:47:01
LINKUSDT   DAY   10   1
23-Apr-20
Op:  Buy  Prezzo:  3.824 
 TP1: 3.99728  TP2: 3.91064  TP3: 3.88176
Il prezzo è tra 3.83657  e 3.68133  vicino al livello massimo

03/05/2020   06:47:01
TRXUSDT   DAY   10   1
23-Apr-20
Op:  Buy  Prezzo:  0.01642 
 TP1: 0.01762  TP2: 0.01702  TP3: 0.01682
Il prezzo è tra 0.01740  e 0.01630 
03/05/2020   06:47:01
VETUSDT   DAY   10   1
23-Apr-20
Op:  Buy  Prezzo:  0.004557 
 TP1: 0.00484  TP2: 0.00470  TP3: 0.00465
Il prezzo è tra 0.00464  e 0.00439 
 
 
03/05/2020   07:16:54
BTCUSDT   DAY   10   1
23-Apr-20
Op:  Buy  Prezzo:  9101.81 
TP1: 9489.80920  TP2: 9295.80960  TP3: 9231.14307
Il prezzo è tra 9250.95667  e 8480.50333 

venerdì 1 maggio 2020

YOUTUBE ALGORITMI - AI

AI YouTube, dove AI non sta per intelligenza artificiale, ma per l'esclamazione di dolore...
Cosa hanno in comune un giornalista youtuber e il sottoscritto? Nulla, forse la curiosità.
Premetto che non siamo amici, non lo conosco e l'ho incontrato casualmente su Twitter qualche ora fa e qui entra in azione il magico YouTube e il suo algoritmo che è a dir poco pietoso, scadente e orribilmente programmato da handicappati mentali oppure che è, di volta in volta, pilotato dal sentiment della nazione in cui i suoi contenuti sono ospitati.
Ora vi racconto la strana storia di Livio Varriale, questo il suo canale su youtube. 
La storia inizia con l'ultimo video che ha postato in cui parla del Dark Scandals.
Dopo di che è tutto in discesa e perde addirittura l'idoneità agli annunci.
Il suo unico peccato? Aver parlato di OpSec e di argomenti come revenge porn  oppure dark web.
Prima di scrivere mi sono guardato i suoi ultimi video e non c'è nulla che possa giustificare tale azione.
Un mese emmezzo fa circa l'algoritmo di YouTube ha iniziato a chiudere canali che riguardavano le cripto valute, non erano canali di scam, ma tranquillissimi canali di analisi sui mercati crypto, e guarda caso questi canali evidenziavano la differenza tra i mercati crypto e la finanza classica...
Ipotizziamo che il video vero a dar fastidio sia stato quello sull'OpSec, in cui Livio illustra in modo chiaro e semplice la gestione di questa emergenza ... 

Non penso che gli sviluppatori dell'algoritmo di youtube siano tutti dei beoti che cassano i propri introiti... 
Quindi: finanza decentralizzata vs finanza classica in un momento in cui gli istituzionali soffrono e non vogliono perdere introiti youtube colpisce ... una informazione troppo chiara e forse troppo giusta e youtube colpisce ...
Ho detto tutto.




PYTHON - INTERROGATE THE WEB WITH APIs

With python's REQUEST and JSON module it's simple. Below is an example of a query to the GNEWS.IO API
This very simple script allows you to search for articles related to the keywords you enter, using the GNEWS.IO API

import requests
import json
#http://gnews.io
api_token=''#here your gnews api

keywords=input('Parole chiave:')
indirizzo='https://gnews.io/api/v3/search?q='+keywords+'&token='+api_token
print(indirizzo)
r=requests.get(indirizzo)
file=r.text
output=json.loads(file)
for i in range(len(output['articles'])):
    print('Articoli: '+output['articles'][i]['title'])
    print('Descrizione: '+output['articles'][i]['description'])
    print('URL: '+output['articles'][i]['url'])
    print('Pubblicato il: '+output['articles'][i]['publishedAt'])

The web is full of APIs that can be used to collect any type of data.
If you like the blog remember to support my work through gofundme or by sending cryptocurrencies. Thanks

domenica 26 aprile 2020

APP IMMUNI - CONSIDERAZIONI PERSONALI

Dopo aver sentito l'analisi dell'avvocato Marisa Marraffino, esperta del Sole 24 Ore, l'app Immuni è peggio di quello che pensavo. L'avvocato, giustamente, illustra le leggi per la difesa di questi dati, ma il problema è la tecnologia e il sistema che sono fragili.
Bluetooth: questa tecnologia va ben oltre il metro o due, in spazi aperti si possono raggiungere i 20 metri senza problemi e quindi venir registrati sui dispositivi altrui anche senza essere nella "zona di contagio". Si può limitare l'onda del Bluetooth? Certo, in modo hardware. Dopo di che bisognerebbe andarsene a zonzo con il bluetooth sempre attivo e aperto alle connessioni: il bluetooth a livello di sicurezza è già pietoso, immaginate a lasciare un canale aperto.
Gli ID degli altri utenti sono salvati sul nostro cellulare... ok un ID non porta nome e cognome, ma sicuramente con se il macaddress del dispositivo. Il macaddress è un numero'identificativo hardware che ogni dispositivo costruito per le comunicazioni ha, in questo modo, nel caso di illeciti, si può risalire a chi l'ha fabbricato e da li a chi è stato venduto.
Ad un certo punto parla di 'Controllo umano', poichè l'algoritmo è molto complesso... il problema più grande della tecnologia al giorno d'oggi è seduto davanti al monitor del PC.
Poi parla di crittografia, server centrale e database, nel momento in cui iniziano ad esserci i primi presunti infetti, il server centrale raccoglie i dati e fa una crittografia, chiava privata e chiave pubblica di quell'ID sono conservati su database diversi ok, ma il server è sempre unico.
Non riporterà nome e cognome ok, ma il macaddress? Abbiamo già visto che da li si arriva a chi ha comprato cosa e quando.
Sempre nel centro dell'intervista parla di trattamento massivo dei dati: che la legge sia complicatissima su questa roba non c'è dubbio, ma una legge complessa non garantisce la sicurezza.
Altro termine interessante è PSEUDOANONIMIZZAZIONE, questo vuol dire che non è ANONIMIZZAZIONE dei dati.
Prima di tutto il pandemonio parlavano di installare trojan horse statali: siamo sicuri che non sia quello? 
Ponendo che l'APP venga fatta open source, e su questo ho dei dubbi, i sorgenti saranno effettivamente quelli reali? 
Non mi fido, non mi fido perchè tutti i politici si sono giocati la mia fiducia e credo anche quella di tantissimi altri italiani.

giovedì 23 aprile 2020

PYTHON - IA TRADING CONVERGENCE MACD

This AI is done to find convergences between MACD and prices. 
Work on Binance's SPOT databases. 
You can enter the data manually; decide to make the program work on a pre-set text file; can understand the trend automatically.

You can choose the analysis on three time frames: DAY, 4 hour and 30 minute. 
This program is open source and licensed under GNUGPL v.3. 
Together with the automatic PIVOT POINT program it can be a useful and daily support for your trading strategies.
If you want you can support my works by donating BTC, BAT or LINK or by going to this link.
Download divMacd

lunedì 20 aprile 2020

PYTHON - LE BASI DELLA PROGRAMMAZIONE

English translation after Italian. 

C'è chi cerca soluzioni di algoritmi e chi le basi per iniziare a programmare in python e il mio blog è ben lontano da fornire informazioni di questo tipo, dato il già esteso numero di siti e blog pieni delle basi, ma il pdf a questo link credo che sia un eccezzionale libro thinkpython_italian.pdf che bisogna avere.
Oltre che spiegare bene la sintassi, spiega anche la logica del programmatore, cosa da non sottovalutare: un programma, a differenza di tante altre cose, può funzionare anche se scritto male. 

Quando ho iniziato a studiare informatica alle superiori oltre cha valutare se il programma funzionava veniva fatto anche il calcolo computazionale di tale programma, poichè le risorse dei PC erano limitate; ai giorni nostri ci sono PC molto potenti e le grandi software house commerciali tendono a sfruttare questa potenza nello spreco, allenarsi a sfruttare la potenza del linguaggio per sfruttare al meglio, senza sprechi, la potenza del PC.
 Qualcuno potrebbe obiettare che a livello commerciale non conviene "perdere tempo" ad ottimizzare i programmi, e potrei anche dargli ragione, ma credo che per quello che si chiama "amor proprio" ottimizzare ogni programma è una grande soddisfazione.


There are those looking for algorithm solutions and those who have the basics to start programming in python and my blog is far from providing information of this type, given the already extensive number of sites and blogs full of bases, but the pdf to this link I think it is an exceptional thinkpython_italian.pdf book that you must have. 
In addition to explaining the syntax well, it also explains the programmer's logic, which should not be underestimated: a program, unlike many other things, can work even if written poorly. 
When I started studying computer science in high school, besides evaluating if the program worked, the computational calculation of this program was also done, as the PC resources were limited; nowadays there are very powerful PCs and the big commercial software houses tend to exploit this power in waste, train to exploit the power of language to make the best use, without waste, of the power of the PC. 
Some might argue that on a commercial level it is not convenient to "waste time" on optimizing programs, and I might even agree with it, but I believe that for what is called "self-love" optimizing each program is a great satisfaction.

domenica 19 aprile 2020

PYTHON - MACD ALGORITHM

MACD is a momentum indicator. This algorithm will search for the divergences between price and indicator independently. It will find the trend automatically and then look for convergence.
Here you can see the script that builds only the MACD.

The vectorMA function builds the two moving average lists that will be used to build the MACD.
def vettoreMA(dati,periodo):
    itad=[]
    vMediaINV=[]
    mediaFinale=[]
    i=len(dati)
    c=0
    prov=0
    conta=0
    while i >0 :
        itad.append(dati[c])
        c+=1
        i-=1
    long1=len(itad)//int(periodo)
    for i in range(len(itad)-int(periodo)):
        for c in range(periodo):
            prov=float(itad[i+c][4])+prov
        vMediaINV.append(prov/periodo)
        prov=0
    i=len(vMediaINV)
    c=0
    while i >0:
        mediaFinale.append(vMediaINV[c])
        c+=1
        i-=1
    return mediaFinale

def vettoreMACD(mediasmall,mediabig):
    macd=[]
    for i in range(len(mediabig)):
        macd.append(mediabig[i]-mediasmall[i])
    return macd

PYTHON IA BINANCE API PIVOT CALCULATOR V.2

In this new version there is the possibility to automatically calculate the Fibonacci levels between the levels where the price is located. 


If you like you can help me continue the research on my AI written in Python by donating crypto currencies or by donating here

You can download the software from this link: PivotCalculator. If you are interested in the sources contact me.

venerdì 17 aprile 2020

PYTHON BINANCE API TRADING IA - EXAMPLE

What is an AI BOT trading? It's a software that trades for you. We must build the logic of the trading system.

If you want to help me you can choose to send me crypto currencies to my addresses indicated on the right of the blog or make a donation on gofundme.
This is a very trivial example of AI for trading. It is based only on book order volumes and two moving averages over a 5 minute time frame. 
I am developing algorithms for the recognition of graphic patterns, the management of the MACD (an example of MACD is already present in this blog). 
The function of the Pivot Point is already automated: my Pivot Point algorithm decides which is the right candle from which to extrapolate all the resistances and supports as well as the p.p.(.exe program for Windows here).

from binance.client import Client
from binance.enums import *
import string
import time
import dateparser
import sys

def accesso():
    f=open('chiavi.dat','r') #text file : pubblicAPIkey-privateAPIkey
    rawkeys=f.read()
    f.close()
    k=rawkeys.split('-')
    cl=Client(api_key=k[0], api_secret=k[1])
    return cl

def ultimoPrezzo(cl,coppia):
    lP=0.0
    while True:
        try:
            vPrz=cl.get_all_tickers()
            break
        except:
            print("Ticker connection - error")
    for i in range(len(vPrz)):
        if vPrz[i]['symbol']==coppia.upper():
            lP=vPrz[i]['price']
    return lP

def verificaTF(cl,tf):
    ok=False
    while True:
        try:
            t = cl.get_server_time()
            break
        except:
            print("Server Time Error")
    ms=str(t['serverTime'])
    data=dateparser.parse(ms)
    data=str(data)
    oD=data.split(" ")
    orario=oD[1].split(":")
    if tf=='4H':
        i=0
        d=4
    elif tf=='30M':
        i=1
        d=30
    elif tf=='15M':
        i=1
        d=15
    elif tf=='5M':
        i=1
        d=5
    resto=float(orario[i])%d
    if resto==0 and (int(orario[2])==0):
        ok=True
        time.sleep(10)
    return ok,oD[1]

def book(cl,cp):
    bidsPrice=[]
    asksPrice=[]
    while True:
        try:
            libro = cl.get_order_book(symbol=cp.upper())
            break
        except:
            print("book connection - error")
    for i in range(len(libro)):
        sumBidsVol=float(libro['bids'][i][1])
        sumAsksVol=float(libro['asks'][i][1])
    for i in range(30):
        bidsPrice.append(float(libro['bids'][i][0]))
        asksPrice.append(float(libro['asks'][i][0]))
    return bidsPrice, asksPrice,sumBidsVol,sumAsksVol

def MA(dati,periodo):
    prezzi=[]
    for i in range(len(dati)):
        prezzi.append(float(dati[i]))
    ris=0
    for i in range(periodo):
        ris=ris+prezzi[i]
    ris=ris/periodo
    return ris

def recuperoPrezzi(cl,coppia):
    vPrezzi=[]
    while True:
        try:
            vTot=cl.get_klines(symbol=coppia.upper(), interval=Client.KLINE_INTERVAL_5MINUTE)
            break
        except:
            print("kLines errore")
    for i in range(len(vTot)):
        vPrezzi.append(vTot[i][4])
    return vPrezzi

def main(coppia,diff):
    cl=accesso()
    vP=recuperoPrezzi(cl,coppia)
    buy=False
    sell=False
    inOp=False
    while True:
        stampa,ora=verificaTF(cl,'5M')#5M 15M 30M 4H
        prezzo = ultimoPrezzo(cl,coppia)
        if stampa:
            print("Prezzo ",prezzo," - ",ora)
            ma3=MA(vP,3)
            ma14=MA(vP,14)
            print("MA3 ",ma3,"\nMA14 ",ma14)
            vP.append(prezzo)
            bidsP,asksP,sumBV,sumAV=book(cl,coppia)#asset name
            f=open("dati.dat","a")
            stringa=str(prezzo)+","+str(ma3)+","+str(ma14)+","+str(ora)+"\n"
            f.write(stringa)
            f.close()
            if ((float(sumBV)-float(sumAV)) > 0) and (ma3>ma14) and not(inOp):
                print("BUY ",prezzo," ",ora)
                prezzoB=prezzo
                buy=True
                inOp=True
                sell=False
            elif ((float(sumBV)-float(sumAV)) < 0) and (ma3<ma14) and not(inOp):
                prezzoS=prezzo
                print("SELL ",prezzo," ",ora)
                buy=False
                inOp=True
                sell=True
        if buy:
            prezzo=ultimoPrezzo(cl,coppia)
            if float(prezzo)>(float(prezzoB)+float(diff)) :
                print("Preso Buy ",prezzoB," ",prezzo," ",ora)
                f=open("operazioni.dat","a")
                stringa="Prezzo Buy "+str(prezzoB)+" uscita: "+str(float(prezzoB)+float(diff))+"\n"
                f.write(stringa)
                f.close()
                buy=False
                inOp=False
        if sell:
            prezzo=ultimoPrezzo(cl,coppia)
            if float(prezzo)<(float(prezzoS)-float(diff)):
                print("Preso sell ",prezzoS," ",prezzo," ",ora)
                f=open("operazioni.dat","a")
                stringa="Prezzo Sell "+str(prezzoS)+" uscita: "+str(float(prezzoS)-float(diff))+"\n"
                f.write(stringa)
                f.close()
                sell=False
                inOp=False
#name asset takeprofit
main(sys.argv[1],sys.argv[2])

Sorry, alittle mistake in def MA: replace this with the one in the main listing.
def MA(dati,periodo):
    ris=0
    i=len(dati)-1
    for c in range(periodo):
        prezzo=(float(dati[i]))
        ris=ris+prezzo
        i-=1
    ris=ris/periodo
    return ris

PYTHON - BINANCE API - PRINT THE LATEST PRICE AT EACH TIME FRAME

This Python script print the last price for each time frame. 
TIME FRAME: 4H 30M 15M 5M
COUPLE: all those on spot Binance

from binance.client import Client
from twisted.internet import reactor
from binance.enums import *
import string
import time
import dateparser
import sys

def accesso():
    f=open('chiavi.dat','r') #text file : pubblicAPIkey-privateAPIkey
    rawkeys=f.read()
    f.close()
    k=rawkeys.split('-')
    cl=Client(api_key=k[0], api_secret=k[1])
    return cl

def ultimoPrezzo(cl,coppia):
    lP=0.0
    vPrz=cl.get_all_tickers()
    for i in range(len(vPrz)):
        if vPrz[i]['symbol']==coppia.upper():
            lP=vPrz[i]['price']
    return lP

def verificaTF(cl,tf):
    ok=False
    t = cl.get_server_time()
    ms=str(t['serverTime'])
    data=dateparser.parse(ms)
    data=str(data)
    oD=data.split(" ")
    orario=oD[1].split(":")
    if tf=='4H':
        i=0
        d=4
    elif tf=='30M':
        i=1
        d=30
    elif tf=='15M':
        i=1
        d=15
    elif tf=='5M':
        i=1
        d=5
    resto=float(orario[i])%d
    if resto==0 and (int(orario[2])==0):
        ok=True
        time.sleep(10)
    return ok,oD[1]

client=accesso()
while True:
    stampa,ora=verificaTF(client,sys.argv[2])#5M 15M 30M 4H
    if stampa:
        prezzo = ultimoPrezzo(client,sys.argv[1])#asset name
        print(prezzo," ",ora)

You must make a text file containing: public key API binance (dash) -private key API binance. You don't have to type send at the end of the line. You have to save it as: chiavi.dat .
This program is part of the next AI Signal Bot that I am programming.

martedì 14 aprile 2020

PYTHON - TELEGRAM IA TRADING SIGNAL INDICATOR CRYPTOCOINS -

The first BOT written in Python for Telegram is ready. Currently it communicates the trend of the couple, the pivot point with graph, and the maximum lows (in the test phase). 
 If you want to be inserted in the Telegram channel you can write me an email. 
If you want to help me you can support me with gofundme, or by sending me BTC, BAT or LINK to the addresses on the side. 
Send me an email for more information. 
I hope soon to be able to leave the BOT active 24 hours a day 7 days a week. The next features will be: entry and exit prices for scalping, recognition of graphic patterns such as cup and head and shoulders, recognition of differences. 
Here is the list of the main program of the bot with the Telegram API.
import time
import telepot
from pprint import pprint
import trFunz
import utils
import os
import sys
import keys

def handle(msg):
    content_type, chat_type, chat_id = telepot.glance(msg)
    if content_type == 'text':
        txt=msg['text']
        if txt.startswith('/help'):
            bot.sendMessage(chat_id,'Bot analizzatore di trading su crypto valute presenti sull\'exchange Binance')
            help=utils.archivioR("txt/help.bot")
            bot.sendMessage(chat_id,help)
        if txt.startswith('/email'):
            params=txt.split()
            if len(params) == 1:
                bot.sendMessage(chat_id,'Ti saranno inviate email con segnali di trading sulla coppia voluta\n/email  ')
            else:
                try:
                    dati=params[1]+","+params[2]+"\n"
                    utils.archivio('txt/email.bot','a',dati)
                    bot.sendMessage(chat_id,'Eseguito')
                except:
                    bot.sendMessage(chat_id,'Errore nel passaggio dei parametri')
        if txt.startswith('/pivot'):
            params = txt.split()
            if len(params) == 1:
                bot.sendMessage(chat_id, 'Uso: /pivot    Calcola il Pivot Point in automatico  DAY/4H')
            else:
                try:
                    client=utils.accesso()
                    print (params[1])
                    print (params[2])
                    coppia=params[1].upper()
                    periodo=int(params[2])
                    tf=params[3].upper()
                    print(tf)
                    bot.sendMessage(chat_id,(trFunz.calcPP(client,coppia,periodo,tf)))
                    bot.sendPhoto(chat_id, photo=open('img/pp.png', 'rb'))
                except:
                    bot.sendMessage(chat_id, 'Errore nei parametri')
        if txt.startswith('/trend'):
            params = txt.split()
            if len(params) == 1:
                bot.sendMessage(chat_id,'Uso: /trend   rileva il trend con le medie mobili')
            else:
                try:
                    client=utils.accesso()
                    coppia=params[1].upper()
                    term=params[2].upper()
                    trend=trFunz.scopriTrend(client,coppia,term,200)
                    trend=coppia+" "+trend
                    bot.sendMessage(chat_id,trend)
                except:
                    bot.sendMessage(chat_id,'Errore nei parametri')
        if txt.startswith('/ph'):
            bot.sendPhoto(chat_id, photo=open('img/test.png', 'rb'))
        if txt.startswith('/mm'):
            params = txt.split()
            if len(params) == 1:
                bot.sendMessage(chat_id,'Uso: /mm      Trova i massimi ed i minimi nel periodo n.giorni indicato. MAXVAL: il valore di soglia sotto il quale si vogliono trovare i minimi oppure per scelta automatica digitare \'a\'. N.DEC numero di decimali desiderati dopo la virgola.\nACorHL: 0 per lavorare su prezzi apertura/chiusura, 1 per lavorare su prezzi high/low')
            else:
                try:
                    client=utils.accesso()
                    giorni=int(params[1])
                    print(giorni)
                    coppia=params[2].upper()
                    print(coppia)
                    maxval=params[3]
                    print(maxval)
                    ndec=params[4]
                    print(ndec)
                    ACHL=int(params[5])
                    vMax,vmin=trFunz.minemax(client,giorni,coppia,maxval,ndec,ACHL)
                    bot.sendMessage(chat_id,'Massimi:'+str(vMax))
                    bot.sendMessage(chat_id,'Minimi:'+str(vmin))
                except:
                    bot.sendMessage(chat_id,'Errore nei parametri')

TOKEN = keys.Token
bot = telepot.Bot(TOKEN)
response = bot.getUpdates()
pprint(response)
bot.message_loop(handle)
print ('Listening ...')
while 1:
    time.sleep(20)

sabato 11 aprile 2020

PYTHON BINANCE API - HOW TO MAKE: A LIST OF SMA and MACD

This little python script uses the Binance API.
The customer position is opened to access the data.
Data on the chosen pair are retrieved in the chosen time frame.
The moving average vector is constructed.
The macd vector is constructed.
The macd vector is drawn.
As always if you like the blog you can help me by going on by donating BTC, Link, BAT or by donating through gofundme.
from binance.client import Client
from twisted.internet import reactor
from binance.enums import *
import matplotlib.pyplot as plt
import dateparser

def recuperoDati(coppia,tf):
    f=open('chiavi.dat')
    #esempio di chiavi.dat file: chiavepubblicabinance-chiaveprivatabinance
    #tra le due chiavi deve esserci '-' senza spazi, alla fine della riga non
    #deve essere battuto invio
    rawkeys=f.read()
    f.close()
    k=rawkeys.split('-')
    client=Client(api_key=k[0], api_secret=k[1])
    if tf=='DAY':
        rawData=client.get_klines(symbol=coppia, interval=client.KLINE_INTERVAL_1DAY)
    elif tf=='4H':
        rawData=client.get_klines(symbol=coppia, interval=client.KLINE_INTERVAL_4HOUR)
    elif tf=='30M':
        rawData=client.get_klines(symbol=coppia, interval=client.KLINE_INTERVAL_30MINUTE)
    elif tf=='15M':
        rawData=client.get_klines(symbol=coppia, interval=client.KLINE_INTERVAL_15MINUTE)
    elif tf=='5M':
        rawData=client.get_klines(symbol=coppia, interval=client.KLINE_INTERVAL_5MINUTE)
    return rawData

def vettoreMA(dati,periodo):
    itad=[]
    vMediaINV=[]
    mediaFinale=[]
    i=len(dati)
    c=0
    prov=0
    conta=0
    while i >0 :
        itad.append(dati[c])
        c+=1
        i-=1
    long1=len(itad)//int(periodo)
    for i in range(len(itad)-int(periodo)):
        for c in range(periodo):
            prov=float(itad[i+c][4])+prov
        vMediaINV.append(prov/periodo)
        prov=0
    i=len(vMediaINV)
    c=0
    while i >0:
        mediaFinale.append(vMediaINV[c])
        c+=1
        i-=1
    return mediaFinale

def vettoreMACD(mediasmall,mediabig):
    macd=[]
    for i in range(len(mediabig)):
        macd.append(mediabig[i]-mediasmall[i])
    return macd

def asseX(l,dati):
    x=[]
    for i in range(l):
        data=dateparser.parse(str(dati[i][0]))
        data=str(data)
        oD=data.split(" ")
        x.append(oD[0])
    return x

rawData=recuperoDati('BATUSDT','DAY')
ms=vettoreMA(rawData,12)
mb=vettoreMA(rawData,26)
macd=vettoreMACD(ms,mb)
x=asseX(len(macd),rawData)
fig=plt.figure(figsize=(20,17))
plt.plot(x, macd, color = 'black')
plt.show()

giovedì 9 aprile 2020

PYTHON API BINANCE - IA - PIVOT POINT AUTOMATIC -

BOT trading for crypto currencies based on Binance API. The pivot point is automatically calculated on the last important candle of the selected time frame, over the chosen days. The candle is selected based on its amplitude and volume. The results are printed on the monitor and on a graph.


BOT di trading per crypto valute basato su Binance API. Il pivot point viene calcolato in automatico sull'ultima candela importante del time frame selezionato, nell'arco dei giorni scelti. La candela viene selezionata in base all'ampiezza e il volume. I risultati sono stampati a monitor e su grafico.


You can download the zip of the executable file on windows from this link
Puoi scaricare lo zip del file eseguibile su windows da questo link:  Pivot Calc






mercoledì 8 aprile 2020

PYTHON SOCKET SEMPLICE SERVER E CLIENT

I due script scaricabili in pacchetto zip ECHO CLIENT E SERVER

Un semplice server e client programmati con python.
Si lancia il server, poi si lancia il client.
Una introduzione alla gestione dei socket con python, molto simile ovviamente alla programmazione in C. Funziona su windows, per macchine Unix like o Mac non è stato testato.

lunedì 6 aprile 2020

PYTHON - PROCEDURA RICORSIVA CON ESEMPIO DELLA POTENZA MATEMATICA

La ricorsione è una procedura che chiama se stessa. Molte formule matematiche utilizzano la ricorsività e anche alcuni algoritmi, tra i quali cito il famoso Quick Sort.

import sys

def potenza(b,e):
    if e==0:
        return 1
    else:
        return b * potenza(b, e-1)

print(potenza(int(sys.argv[1]),int(sys.argv[2])))

Sette righe e la potenza è calcolata. Ciao

domenica 5 aprile 2020

PYTHON - EMAIL SENDER CON FOGLIO CSV

Inviare email leggendo da un file oggetto, email e contenuto.

import smtplib
from email.mime.text import MIMEText
import emailAccount
'''
Esempio di file emailAccount.py da salvare nella stessa directory di questo
script
popserver = 'poptuoserver'
popport = 995
server = 'smtptuoserver'
porta=465
username='mio@username'
password='lapassword'
mitt='mio@indirizzoemail'
'''
import time
import sys

def leggiFoglioCSV(nomeF):
    f=open(nomeF,"r")
    m=[]
    for linea in f.readlines():
        col=linea.split(",")
        col = [item for item in col if item not in ['\n']]
        m.append(col)
    f.close()
    return m

def sendEmail2(oggetto,dest,contenuto):
    #              server SMTP del tuo gestore #porta del server
    email=smtplib.SMTP_SSL(emailAccount.server,emailAccount.porta)
    email.ehlo()
    #           il tuo account        #la tua password
    email.login(emailAccount.username,emailAccount.password)
    email.ehlo()
    print("Invio")
    msg=MIMEText(contenuto,'html','utf-8')
    msg['Subject']=oggetto
    msg['From']=emailAccount.mitt
    msg['To']=dest
    email.sendmail(emailAccount.mitt,dest,msg.as_string())
    email.quit

def spedisciEmail(nomeLista):
    lista=leggiFoglioCSV(nomeLista)
    for i in range(len(lista)):
        try:
            sendEmail2(lista[i][0],lista[i][1],lista[i][2])
            print("Email a: ",lista[i][1]," inviata")
        except smtplib.SMTPRecipientsRefused:
            print("Email a: ",lista[i][1]," non inviata. Indirizzo sbagliato")
'''
Il foglio CSV deve essere composto da tre colonne
oggetto,email destinatario,contenuto dell'email
Puoi fare anche un semplice file di testo scritto con blocco note.
Esempio
oggetto,email@email.email,contenuto del messaggio
oggetto2,email2@email.email, contenuto del messaggio
'''
spedisciEmail(sys.argv[1])

Semplice e funzionale come sempre. Come si usa: python script.py nomedelfile.csv
Se ti piace il blog dona, in alto a destra i miei indirizzi criptovalute.

MATRICI - COSTRUIRE MATRICI VUOTE

TRIS qui puoi scaricare gli script completi


Qui la funzione per costruire una matrice vuota, senza usare numpy, ma utilizzando due cicli while annidati e .append che abbiamo già visto per costruire vettori vuoti.
def nMatr(x,y):
    matrice=[]
    i=0
    c=0
    while i < y:
      a=[]
      while c < x:
        a.append(c)
        c+=1
      matrice.append(a)
      i+=1
      c=0
    return matrice

Basta passare alla funzione il numero di righe e colonne per avere la matrice pronta.
Per usarla:
matrice=nMatr(r,c)

Incapacità delle istituzioni di comunicare con i cittadini

Stiamo nel piccolo: comune di Parma (e stendiamo un velo pietoso sull'interfaccia INPS che è come sparare sulla croce rossa)
Ho fatto un piacere: compilazione modulo richiesta buoni spesa.
Qui il link dove scaricare acrobat reader: https://get.adobe.com/it/reader/ e seguire le istruzioni leggendo attentamente, è semplice, basta fare le cose con calma (sempre se il vostro PC è aggiornato altrimenti non funziona, è qui l'inghippo)
Per poter accedere ai buoni spesa si arriva ad un punto in cui bisogna scaricare un modulo in pdf precompilato dall'utente tramite la pagina web, poi bisogna aprire il modulo pdf ed inserire: n. di persone del nucleo famigliare, e flaggare 5 caselle... 
Allora per poter fare ciò bisogna scaricare l'ultimo Adobe Reader aggiornato ed installarlo.
Dopo di che, si compila il modulo e poi lo si ricarica sul sito e si procede.
La mia domanda è: se ho compilato campi "complessi" come codice fiscale, nome e cognome, via ecc ecc sul web, perchè per mettere un numero (n. di persone nel nucleo famigliare) e la possibilità di flaggare, cioè cliccare con il mouse per mettere una spunta, cinque voci, mi devi far scaricare il modulo e tutto ciò che ne deriva?
La mia risposta è questa: menefreghismo. 
Fondamentalmente le società che lavorano per le infrastrutture tecnologiche del bel paese Italia, se ne fregano di dare comodità all'utente finale e questo succede perchè le istituzioni stesse se ne fregano dei cittadini.
Non trovo nemmeno etico obbligare le persone a scaricare programmi proprietari, anche se gratuiti, sui propri personal computer.
Con questo virus stiamo scoprendo che il marcio ed il menefreghismo è ben presente anche nelle infrastrutture tecnologiche, e non pensate che sia roba da poco nel 2020.

sabato 4 aprile 2020

PYTHON MODULI PERSONALIZZATI

Tramite import possiamo importare le nostre funzioni da altri file. I file per import sono altri programmi python che contengono variabili, funzioni, valori statici. Salviamo nel file modulo.py il prossimo listato:

def calc(arg1,operatore,arg2):

    if operatore=="+":

        risultato=arg1+arg2

    elif operatore=="-":

        risultato=arg1-arg2

    elif operatore=="*":

        risultato=arg1*arg2

    elif operatore=="/":

        risultato=arg1/arg2

    return risultato

Per usare la funzione calc ora dovremo richiamarla nel programma principale:

import sys
import modulo

risultato=modulo.calc(int(sys.argv[1]),sys.argv[2],int(sys.argv[3]))
print("= ",risultato)
richiamiamo la funzione calc in questo modo: modulo.calc(...)



PYTHON - FOGLI CSV E MATRICI

Fogli CSV - programmi come Excel e Calc di Open Office, possono salvare i loro dati in fogli tipo CSV e caricare dati da fogli CSV, che non sono altro che file di testo.
Qui di seguito la costruzione di un CSV da una matrice e poi la trasformazione da CSV a matrice.

 '''
Da matrice a foglio.csv
'''
m=[['abc','def','ghi'],['abc','  ','ghi'],['  ','def','  ']]
f=open("foglio.csv","w")
for i in range(len(m)):
        for c in range(len(m[i])):
            f.write((m[i][c]+","))
        f.write("\n")
f.close()
f=open("foglio.csv","r")
fg=f.read()
f.close()
print("Il file CSV appena fatto: ")
print(fg)
nr=1
'''
Da foglio csv a matrice
'''
f=open("foglio.csv","r")
m=[]
for linea in f.readlines():
    col=linea.split(",")
    #eliminazione \n
    col = [item for item in col if item not in ['\n']]
    m.append(col)
f.close()
print("La matrice ottenuta dal foglio CSV\n")
print(m) 

PYTHON - API BINANCE: BUY/SELL AUTOMATICO

Potete scaricare il pacchetto zippato dei sorgenti da qui
Per utilizzarlo bisogna avere PYTHON installato insieme alle API BINANCE
Se vuoi sapere come installare python e API Binance lascia un commento.

Cosa fa questo script?
Al momento l'exchange Binance, sulla parte SPOT, non permette di settare dei take profit automatici, quindi questo script, sulle tue indicazioni di prezzo e quantità, piazza l'ordine e una volta eseguito piazza il contr'ordine di pari quantità.

Esempio:
voglio comprare sulla coppia BTC/USDT una quantità di BTC pari a 0.01 al volore
di 6000 USDT e rivendere la stessa quantità a 6100 USDT

> Coppia: btcusdt
> Ordine[BUY] or [SELL]: buy
> Prezzo di ingresso: 6000
> Prezzo di uscita: 6100
> Quantità: 0.01

fatto questo lo script piazza l'ordine, una volta che l'ordine è FILLED,
piazza l'ordine inverso, nel nostro caso un sell limit, e manda una email.
Perchè tutto funzioni correttamente il programma deve rimanere connesso al
server Binance.

Ricorda, se ti piace DONA e condividi il mio blog




venerdì 3 aprile 2020

LE FUNZIONI

Parola per definire la funzione: def
ritorno dei valori tramite return
una funzione può ritornare anche più valori o nemmeno uno

import sys



#definizione di una funzione

def calc(arg1,operatore,arg2):

    if operatore=="+":

        risultato=arg1+arg2

    elif operatore=="-":

        risultato=arg1-arg2

    elif operatore=="*":

        risultato=arg1*arg2

    elif operatore=="/":

        risultato=arg1/arg2

    return risultato



#programma principale

risultato=calc(int(sys.argv[1]),sys.argv[2],int(sys.argv[3]))

print("= ",risultato)



INPUT DA RIGA DI COMANDO

PASSARE ARGOMENTI DA RIGA DI COMANDO

#importazione di un modulo esterno
import sys
#input da linea di comando
print ("Nome dello script: ", sys.argv[0])
print ("Numero degli argomenti: ", len(sys.argv))
print ("Argomenti: " , str(sys.argv))
for i in range(len(sys.argv)):
    print(sys.argv[i])

Qui abbiamo anche importato il modulo sys tramite la parola import

PYTHON - DA MATPLOTLIB A FILE IMMAGINE

Matplotlib è il modulo python che ci permette di ottenere dei grafici dopo le elaborazioni di Python.
Tramite un semplice comando si può ottenere il file immagine salvato su hdd.

import matplotlib.pyplot as plt

plt.plot(range(10))
plt.savefig('testplot.png')
plt.show()
Questo script salva il grafico e poi lo mostra. ATTENZIONE, se volete salvare l'immagine dovete sempre farlo prima del plt.show() altrimenti otterete solo il riquadro bianco

Prossimamente arriverà anche qualche hack per matplotlib.

giovedì 2 aprile 2020

IF ELIF ELSE - SCELTE MULTIPLE

Scelte multiple in python con IF ELIF ELSE

''' selezioni multiple IF ELIF ELSE '''

while True:

    scelta=input("Immetti la tua scelta 1 2 3 e ")

    if (scelta=='1'):

        print("Hai digitato 1")

    elif (scelta=='2'):

        print("Hai digitato 2")

    elif (scelta=='3'):

        print("Hai digitato 3")

    elif (scelta=='e'):

        print("Ciao")

        break

    else:

        print("Non hai digitato nessuna scelta permessa")


FLICKR E IL NON DOWNLOAD IMBROGLIONE!

Flickr non è più gratuito come una volta, e capisco che lo spazio su server sia caro, quindi Flickr è diventato a pagamento.
Finchè era gratuito tutto va bene...
Ma ora no.
C'è la possibilità di bloccare il download delle foto da Flickr, presumo che alcuni utenti si sentano tranquilli davanti a questo blocco... peccato che è fittizio.
Aprite il vostro browser Firefox, andate su Flickr, trovate una foto che vi piace.
Andate a cliccare sul download, si aprirà una pagina con tutta la selezione delle foto.
Se il download è bloccato ci sarà questa scritta:

Download The owner has disabled downloading of their photos

Bene, scegliete la dimensione della foto che volete.
Click destro con il mouse, scegliere dal menu a tendina: Salva pagina con nome
Dategli un nome. Selezionate salva come pagina web completa.

Andate dove avete scaricato il file, ci sarà presente anche un cartella che inizia con lo stesso nome del file: all'interno della cartella c'è il file.jpg (la fotografia) che l'utente non voleva far scaricare, che flickr gli ha detto "No, impedisco lo scarico" e che ehm si può scaricare.

Per correttezza invito tutti a non scaricare le immagini di altri senza il loro consenso.
Per correttezza mi sembra giusto far notare a tutti questo "lieve" difetto.

mercoledì 1 aprile 2020

PYTHON - MASSIMI MASSIMI e MINIMI MINIMI - PROGRAMMAZIONE TRADING

Avevo bisogno di scoprire i MASSIMI di una serie di dati disordinati e tutti i MINIMI della stessa serie. Nel trading l'individuazione dei massimi e dei minimi è di fondamentale importanza. 

'''
RICERCA DEI MASSIMI IN UN VETTORE DISORDINATO
RICERCA DEI MINIMI IN UN VETTORE DISORDINATO
di PORCARI DANIELE
'''
import sys

def trovaMassimi(v):
    m=[]
    max=0
    for i in range(len(v)):
        try:
            if v[i]>max and v[i]>v[i+1]:
                m.append(v[i])
                max=v[i+1]
        except:
            if v[i]>max:
                m.append(v[i])
    return m

def trovaMinimi(v,min):
    m=[]
    for i in range(len(v)):
        try:
            if v[i]<min and v[i]<v[i+1]:
                m.append(v[i])
                min=v[i+1]
        except:
            if v[i]<min:
                m.append(v[i])
    return m

v=[10,2,5,3,3,1,2,1,4,6,2,3,2,7,13]
if len(sys.argv)>0:
    min=float(sys.argv[1])
else:
    min=20
m=trovaMassimi(v)
print (m)
m=trovaMinimi(v,min)
print (m)
L'output sono due liste: una contenente tutti i MASSIMI, l'altra tutti i MINIMI. Un MASSIMO è un dato contenuto tra almeno due dati più bassi. Un MINIMO è un dato contenuto tra almeno due dati più alti. Se vi piace il blog e le soluzioni le donazioni in BTC,USDT o LINK sono le benvenute.

CICLI FOR - WHILE - CONDIZIONE IF

FOR WHILE e IF
Per andare avanti con le basi di Python

array=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

print("Lunghezza :"+str(len(array)))

#ciclo for : finchè i è dentro alla lunghezza di array

#i si autoincrementa

for i in range(len(array)):

    print(array[i]," - ", i)

#a sinistra i valori dell'array

#a destra i valori di i

#SI CONTA DA 0 IN POI !!!

i=0

while i<len(array): #ATTENZIONE < non <=

    print(array[i]," - ", i)

    i=i+1

#se vuoi uscire dal ciclo quando hai trovato

#la condizione che ti soddisfa

condizione=5

i=0

while True:

    if (array[i]==condizione):

        print("Trovato ",condizione)

        break #termina il ciclo

    i+=1 #abbreviazione di i=i+1

''' c'è il rischio di mandare in crash

il programma se lacondizione non è presente

allora mettiamo una sicurezza : gestione errore

'''

i=0

condizione=20 #non è nella nostra lista

while True:

    try:

        if (array[i]==condizione):

            print("Trovato ",condizione)

            break #termina il ciclo

        i+=1

    except:

        print("Il numero ",condizione," non è presente")

        break

PYTHON - DOWNLOAD FILE DAL WEB - URLIB.REQUEST

Si può utilizzare wget, ma si tratta sempre di usare applicazioni fatte da altri.
Si potrebbe importare wget l'API per python, ma magari non ce n'è bisogno di tutte le sue funzionalità.
Poche righe di codice:

import urllib.request

url=sys.argv[1] #indirizzo web
nomedelfile=sys.argv[2] #nome del file

print('Download del file...')
urllib.request.urlretrieve(url, nomedelfile)

DDNS e INPS

Oggi partiva il giorno delle richieste all'inps per i 600 euro promessi alle p.iva italiane.
Ovviamente il sito è collassato e, hanno dato la colpa agli hacker per questo collasso...
IMO
Con la situazione attuale, in cui siamo in merda, la semplice richiesta di utenti normali al sito dell'INPS ha generato un DDNS.
 L'unico problema vero in tutta questa storia sono stati i metodi di (dis)informazione utilizzati per comunicare con la popolazione.


martedì 31 marzo 2020

PYTHON LE BASI

''' CON # commento UNA SOLA RIGA CON LE TRE VIRGOLETTE
APRO I COMMENTI E LI CHIUDO SU MULTI LINEA
'''

a=5 #integer
b='6' #stringa
c=a+int(b) #trasformo la stringa b in numero integer
#posso stampare a video così
print (str(a)+" + "+ b +" = "+str(c))
#oppure così
print(a," + " + b + " = ",c)
#se faccio questo assegnamento
d=a," + " + b + " = ",c
print (d)
#ottengo una lista
print (d[0])
print (d[1]) #guarda bene questo
print (d[2])
#ma se faccio questo assegnamento
d=str(a)+" + "+ b +" = "+str(c)
print (d)
#ottengo una stringa
str(variabile) trasforma da numero a stringa int(variabile) trasforma la stringa in valore integer float(variabile) trasforma la stringa in valore con virgola mobile

VPN - AVIRA PHANTOM VPN

Una VPN ci permette di navigare anonimi. Chiunque potrebbe rispondere non ho bisogno di navigare anonimo, non ho nulla da nascondere. Anche io non ho nulla da nascondere, ma non voglio nemmeno essere tracciato. AVIRA PHANTOM fornisce dei proxy anonimi veloci ed è gratuita fino a 500MB al mese.
Esempio d'uso:
il web banking è molto diffuso al giorno d'oggi, ed è molto sicuro, ma le informazioni che trasmettiamo passano tutte attraverso il nostro provider Interne (Tim, Vodafone ecc ecc) con una VPN il traffico tra il nostro PC ed il server è tutto criptato e chiuso in un tunnel, aggiungendo una nuova sicurezza.

PYTHON - TRASFORMAZIONE MILLI SECONDI IN DATA

PYTHON e BINANCE API
Binance rilascia le date in millisecondi, per renderle capibili basta importare dateparser.
File di esempio

from binance.client import Client
from binance.enums import *
import sys
import keys #un file contenente le chiavi Binance Pkeys la pubblica / Skeys la privata
import dateparser #per il parsing della data
'''
Trasformazione dei milli secondi in data e ora umanamente
capibili
'''
client=Client(api_key=keys.Pkeys, api_secret=keys.Skeys)
v=client.get_klines(symbol=sys.argv[1], interval=client.KLINE_INTERVAL_1DAY)
for i in range(len(v)):
    data=dateparser.parse(str(v[i][0]))#passaggio del valore in millisecondi
    data=str(data)#trasformo il tutto in stringa
    oD=data.split(" ")#splitto la stringa con lo spazio
    #oD è una lista composta da oD[0] e oD[1]
    print(oD[0],v[i][1],v[i][4])

L'esempio qui sopra riportato funziona solo se avete le chiavi per le API Binance.

lunedì 30 marzo 2020

PYTHON - DIZIONARIO - LISTA - VETTORE

Il dizionario raccoglie valori diversi, non ordinati, e tipi diversi. Al suo interno possono esserci liste. Adoro il dizionario e le sue potenzialità.
dizionario = {"chiave": "valore", "età": 24, 3.14: "pi_greco", "numeri": [1, 2, 3]}

print(dizionario['chiave'])

print(dizionario[3.14])

print(dizionario['numeri'][0])
print(dizionario['numeri'][1])
print(dizionario['numeri'][2])
Mi sembra chiaro no?

domenica 29 marzo 2020

PYHTON - ALGORITMO RICERCA PATTERN DI PREZZO

Elaborare algoritmi che valutano numeri è semplice.
Valutazione sui prezzi, sui tempi ciclici.
Valutare la formazione di figure quali tazze, testa e spalle e triangoli è un po' più complesso.
Un abbozzo di una prima soluzione:

'''ricerca del pattern tazza
programmazione per trading
soluzione algoritmica
di Porcari Daniele '''

vettorePrezziMedi=[45,42,41,24,22,25,18,15,21,22,38,44]
 
#divido il vettore in due con //
primaP=len(vettorePrezziMedi)//2
secP=len(vettorePrezziMedi)-primaP
#la prima parte deve essere discendente
#la seconda parte ascendente
max=vettorePrezziMedi[0]
discesa=False
print(max)
i=1
print(vettorePrezziMedi[i])
while i < primaP:
    if vettorePrezziMedi[i]<max:
        print(vettorePrezziMedi[i])
        discesa=True
    else:
        discesa=False
        break
    i+=1
if discesa:
    print("Discesa")
max=vettorePrezziMedi[len(vettorePrezziMedi)-1]
print(max)
salita=False
i=primaP
print(i)
print(vettorePrezziMedi[i])
while i < secP+primaP-1:
    if vettorePrezziMedi[i]<max:
        print(vettorePrezziMedi[i])
        salita=True
    else:
        salita=False
        break
    i+=1
if salita:
    print("salita")
if discesa==True and salita==True:
    print("Possibile tazza")
else:
    print("Tazza non trovata")

import matplotlib.pyplot as plt
x=[]
for i in range(len(vettorePrezziMedi)):
    x.append(i)
plt.plot(x, vettorePrezziMedi, marker = "o", color = 'red')
plt.show()


PYTHON?

Usare Python perchè si può fare qualsiasi cosa, grazie ai suoi moduli e alla sua portabilità.
Software open source adatto a qualsiasi tipo di sviluppo.

PYTHON - DECIDERE I DECIMALI IN MODO DINAMICO

Abbiamo visto come decidere i decimali dopo la virgola tramite l'uso :
"{0:.2f}".format(variabile)
in una stringa.
A volte però può essere comodo avere una decisione dinamica dei decimali.
Ecco la soluzione:

import sys
import modulo

modulo.controllo(sys.argv)
risultato=modulo.calc(float(sys.argv[1]),sys.argv[2],float(sys.argv[3]))
#definiamo la precisione dei decimali dopo la virgola in modo dinamico
#costruzione delle stringa
dec="{0:."+str(sys.argv[4])+"f}"
#somma della stringa alla stringa in print e il .format(risultato)
print("= "+dec.format(risultato))
Puoi scaricare il listato e il modulo modulo.py da questo LINK.

FLOAT - DECIMALI IN ORDINE E NON A GREGGE IN PYTHON

Il numero reale FLOAT in output è molto libero, ma se vogliamo avere un output pulito ?
Ecco risolto:

''' Decimali limitati dopo la virgola nei numeri float '''
a=23.4
b=17.3
c=a/b
print ("Risultato:",c)
#2 cifre dopo la virgola
print ("Risultato: {0:.2f}".format(float(c)))
#5 cifre dopo la virgola
print ("Risultato: {0:.5f}".format(float(c)))

sabato 28 marzo 2020

PYTHON SU WINDOWS

Per utilizzare Python su windows ho installato anaconda: link per il download ANACONDA.
Anacondo ci permette di utilizzare Python e il comando pip su windows.
Si può programmare in python utilizzando anche blocco note, ma con listati lunghi non è molto comodo.
Io utilizzo ATOM qui il download :Atom

FARE UNA LISTA VUOTA CON PYTHON

Ecco qui come si crea una lista vuota e come si aggiungono elementi alla lista:

a = [] #ho creato la lista vuota a
a.append(1) #ho appeso ad a il primo elemento
a.append(2) #ho appeso ad a il secondo elemento
print (a[0]) #stampo a video gli elementi di a
print (a[1])