Esempio n. 1
0
    def start(self):

        #      int pos = Bars - counted_bars;
        #      double MinMax_Svice[2];
        MinMax_Svíce = Cena(přesnost=self._info['DIGITS'])

        #    while(pos > 0)
        #   {
        for data in data_z_csv(self._csv_soubor):

            self.data = data

            #            print('BAR {} {}'.format(data['BAR'],  data['OPEN TIME']))

            #            if data['BAR'] == 18686:
            #                print('DEBUGUJU')

            MinMax_Svíce[BUY] = data['HIGHT'] + self.spred_v_pointech
            MinMax_Svíce[SELL] = data['LOW']

            self._přepočítám_profit_při_otevření()

            self.znamení_sklizně = self.imam_znameni_ke_sklizni()
            #            assert self.znamení_sklizně == data['znamení sklizně']

            #            sklizeň
            if self.znamení_sklizně:
                if self.imam_profit():
                    self.zavru_vse_pri_otevreni_svice()

            self.da_li_seju = self._da_li_třeba_zaset()
            assert self.da_li_seju == data['da li seju']

            #            setba
            if self.da_li_seju:
                #print('TOZ SEJU')
                self.ohrada[BUY] = data[
                    'OPEN'] + self.odstup_v_pointech + self.spred_v_pointech
                self.ohrada[SELL] = data['OPEN'] - self.odstup_v_pointech
                assert self.ohrada[SELL] == data['medvědí ohrada']
                assert self.ohrada[BUY] == data['býčí ohrada']

                self.čekaná[BUY] = self.ohrada[BUY]
                self.čekaná[SELL] = self.ohrada[SELL]

                self.hranice[BUY] = MinMax_Svíce[BUY]
                self.hranice[SELL] = MinMax_Svíce[SELL]
                assert self.hranice[BUY] == data['hranice býka']
                assert self.hranice[SELL] == data['hranice medvěda']

                self.prepocitam_obchody(směrem=BUY)
                self.prepocitam_obchody(směrem=SELL)

#            růst
            for směrem in BUY, SELL:

                if self.hranice[směrem] > 0 and (
                        self.hranice[směrem] -
                        MinMax_Svíce[směrem]) * self.směr[směrem] < 0:
                    self.hranice[směrem] = MinMax_Svíce[směrem]
                    self.prepocitam_obchody(směrem)

#        // včíl máme zjištěné koliko obchodů s eběhem svíce otevře
#      // nevíme sice v jakém pořadí, ale nejméně příznivý scénář beru takto
#      // hore počítám, že s eotevřely aj všechny protipozice, takže zisk je o to nižší
#      // a dole naopak počítám s otevřenými všemi horními pozicemi
#      // při zavření je to jasné, tam budou jistě otevřeny horní i dolní pozice
#      prepocitam_profit_na_svici(pos);
            self._přepočítám_profit_na_svíci()

            yield data
    def __iter__(self,  AOSy = []):
        
        for data in data_z_csv(self.zdrojové_csv,  self.mapa_tříd):
            
            if data[OPEN_TIME].timestamp == 0:
                print('Přeskakuji svíčku {} koja nemá ceny'.format(data[BAR]))
                continue
                
            self.data = data
            
#            for aos in AOSy:
#                funkce_události = aos.get('pří_otevření_svíčky',  None)
#                if callable(funkce_události):
#                    funkce_události(self)
                
#            print(data[OPEN])
                
#            print('-' * 44)
#            print('BAR {} {}'.format(data['BAR'],  data['OPEN TIME']))

            if self.počáteční_čas is None:
                self.počáteční_čas = data[OPEN_TIME]
                
            if self.počet_svíček is None:
                self.počet_svíček = data[BAR]
                
            self.konečný_čas = data[OPEN_TIME]
            
            self.zisk_při_otevření = self.obchody.zisk(data[OPEN])
            self.obchody.swapuji(data[OPEN_TIME])
            
            self.samoj_bolšoj_otevřený_zisk[OPEN] = max(self.samoj_bolšoj_otevřený_zisk[OPEN] or 0,  self.zisk_při_otevření)
            self.samaja_bolšaja_otevřená_ztráta[OPEN] = min(self.samaja_bolšaja_otevřená_ztráta[OPEN] or 0,  self.zisk_při_otevření)
            celkový_zisk = self.zisk_při_otevření + self.obchody.uložený_zisk + self.obchody.swap
            self.samoj_bolšoj_celkový_zisk[OPEN] = max(self.samoj_bolšoj_celkový_zisk[OPEN] or 0,  celkový_zisk)
            self.samaja_bolšaja_celková_ztráta[OPEN] = min(self.samaja_bolšaja_celková_ztráta[OPEN] or 0,  celkový_zisk)
            
            self.znamení_sklizně = self.__imam_znameni_ke_sklizni()
#            assert self.znamení_sklizně == data['znamení sklizně']
            
#            sklizeň
            if self.znamení_sklizně is True:
                if self.zisk_při_otevření  + self.obchody.swap > self.info['sklízím při zisku']:
                    self.obchody.zavřu_obchody(čas_zavření = data[OPEN_TIME],  cena_zavření = data[OPEN])
                    self.medvědiště = None
                    self.býčiště = None
                else:
                    umenšeno =  self.obchody.umenším_pozice(čas_zavření = data[OPEN_TIME],  cena_zavření = data[OPEN])
                    if umenšeno:
                        self.medvědiště.přitáhni_k_ceně(data[OPEN])
                        self.býčiště.přitáhni_k_ceně(data[OPEN])
                    
            
            
            self.znamení_setby = self.__da_li_třeba_zaset()
                
            if self.znamení_setby is True:
#                vytáhnu z info
                odstup = self.info['odstup']
                rozestup = self.info['rozestup']
#                dosadím a spočítám
#                self.ohrada = {HORE: data[OPEN] + odstup + spred,  DOLE: data[OPEN] - odstup}
                self.medvědiště = generátor_medvědů(start = data[OPEN],  odstup = odstup,  rozestup = rozestup)
                self.býčiště = generátor_býků(start = data[OPEN],  odstup = odstup, rozestup = rozestup)
                
            for čekaná,  klíč in (self.býčiště,  HIGHT),  (self.medvědiště,  LOW):
                if čekaná is not None:
                    k_ceně = data[klíč]
                    for nová_cena in čekaná(k_ceně):
                        #                    GAP
                        if čekaná < data[OPEN]:
                            if not čekaná < self.předchozí_data[CLOSE]:
                                self.obchody.zruším_obchod_gapem(směrem = čekaná.směrem,  čas = data[OPEN_TIME],  cena = nová_cena,  velikost = self.info['sázím loty'])
                        else:
                            self.obchody.otevřu_nový_obchod(směrem = čekaná.směrem,  cena = nová_cena,  velikost = self.info['sázím loty'],  čas = data[OPEN_TIME])
#                        print('nový obchod z ' + směr,  nová_cena,  čekaná)
            
            
            self.samoj_bolšoj_býk = max(self.samoj_bolšoj_býk or 0, self.obchody.býci.velikost )
            self.samoj_bolšoj_medvěd = max(self.samoj_bolšoj_medvěd or 0,  self.obchody.medvědi.velikost)
            
            velikost_postavení = self.obchody.velikost
            self.samaja_bolšaja_velikost[HORE] = max(self.samaja_bolšaja_velikost[HORE] or 0,  velikost_postavení)
            self.samaja_bolšaja_velikost[DOLE] = min(self.samaja_bolšaja_velikost[DOLE] or 0,  velikost_postavení)
            
            for KLÍČ_NA_CENĚ in HIGHT,  LOW,  CLOSE:
                zisk = self.obchody.zisk(data[KLÍČ_NA_CENĚ])
                self.samoj_bolšoj_otevřený_zisk[KLÍČ_NA_CENĚ] = max(self.samoj_bolšoj_otevřený_zisk[KLÍČ_NA_CENĚ] or 0,  zisk)
                self.samaja_bolšaja_otevřená_ztráta[KLÍČ_NA_CENĚ] = min(self.samaja_bolšaja_otevřená_ztráta[KLÍČ_NA_CENĚ] or 0, zisk)
                celkový_zisk = zisk + self.obchody.uložený_zisk + self.obchody.swap
                self.samoj_bolšoj_celkový_zisk[KLÍČ_NA_CENĚ] = max(self.samoj_bolšoj_celkový_zisk[KLÍČ_NA_CENĚ] or 0,  celkový_zisk)
                self.samaja_bolšaja_celková_ztráta[KLÍČ_NA_CENĚ] = min(self.samaja_bolšaja_celková_ztráta[KLÍČ_NA_CENĚ] or 0,  celkový_zisk)
            
            yield self
            self.předchozí_data = data
    def __iter__(self, AOSy=[]):

        for data in data_z_csv(self.zdrojové_csv, self.mapa_tříd):

            if data[OPEN_TIME].timestamp == 0:
                print('Přeskakuji svíčku {} koja nemá ceny'.format(data[BAR]))
                continue

            self.data = data

            #            for aos in AOSy:
            #                funkce_události = aos.get('pří_otevření_svíčky',  None)
            #                if callable(funkce_události):
            #                    funkce_události(self)

            #            print(data[OPEN])

            #            print('-' * 44)
            #            print('BAR {} {}'.format(data['BAR'],  data['OPEN TIME']))

            if self.počáteční_čas is None:
                self.počáteční_čas = data[OPEN_TIME]

            if self.počet_svíček is None:
                self.počet_svíček = data[BAR]

            self.konečný_čas = data[OPEN_TIME]

            self.zisk_při_otevření = self.obchody.zisk(data[OPEN])
            self.obchody.swapuji(data[OPEN_TIME])

            self.samoj_bolšoj_otevřený_zisk[OPEN] = max(
                self.samoj_bolšoj_otevřený_zisk[OPEN] or 0,
                self.zisk_při_otevření)
            self.samaja_bolšaja_otevřená_ztráta[OPEN] = min(
                self.samaja_bolšaja_otevřená_ztráta[OPEN] or 0,
                self.zisk_při_otevření)
            celkový_zisk = self.zisk_při_otevření + self.obchody.uložený_zisk + self.obchody.swap
            self.samoj_bolšoj_celkový_zisk[OPEN] = max(
                self.samoj_bolšoj_celkový_zisk[OPEN] or 0, celkový_zisk)
            self.samaja_bolšaja_celková_ztráta[OPEN] = min(
                self.samaja_bolšaja_celková_ztráta[OPEN] or 0, celkový_zisk)

            self.znamení_sklizně = self.__imam_znameni_ke_sklizni()
            #            assert self.znamení_sklizně == data['znamení sklizně']

            #            sklizeň
            if self.znamení_sklizně is True:
                if self.zisk_při_otevření + self.obchody.swap > self.info[
                        'sklízím při zisku']:
                    self.obchody.zavřu_obchody(čas_zavření=data[OPEN_TIME],
                                               cena_zavření=data[OPEN])
                    self.medvědiště = None
                    self.býčiště = None
                else:
                    umenšeno = self.obchody.umenším_pozice(
                        čas_zavření=data[OPEN_TIME], cena_zavření=data[OPEN])
                    if umenšeno:
                        self.medvědiště.přitáhni_k_ceně(data[OPEN])
                        self.býčiště.přitáhni_k_ceně(data[OPEN])

            self.znamení_setby = self.__da_li_třeba_zaset()

            if self.znamení_setby is True:
                #                vytáhnu z info
                odstup = self.info['odstup']
                rozestup = self.info['rozestup']
                #                dosadím a spočítám
                #                self.ohrada = {HORE: data[OPEN] + odstup + spred,  DOLE: data[OPEN] - odstup}
                self.medvědiště = generátor_medvědů(start=data[OPEN],
                                                    odstup=odstup,
                                                    rozestup=rozestup)
                self.býčiště = generátor_býků(start=data[OPEN],
                                              odstup=odstup,
                                              rozestup=rozestup)

            for čekaná, klíč in (self.býčiště, HIGHT), (self.medvědiště, LOW):
                if čekaná is not None:
                    k_ceně = data[klíč]
                    for nová_cena in čekaná(k_ceně):
                        #                    GAP
                        if čekaná < data[OPEN]:
                            if not čekaná < self.předchozí_data[CLOSE]:
                                self.obchody.zruším_obchod_gapem(
                                    směrem=čekaná.směrem,
                                    čas=data[OPEN_TIME],
                                    cena=nová_cena,
                                    velikost=self.info['sázím loty'])
                        else:
                            self.obchody.otevřu_nový_obchod(
                                směrem=čekaná.směrem,
                                cena=nová_cena,
                                velikost=self.info['sázím loty'],
                                čas=data[OPEN_TIME])


#                        print('nový obchod z ' + směr,  nová_cena,  čekaná)

            self.samoj_bolšoj_býk = max(self.samoj_bolšoj_býk or 0,
                                        self.obchody.býci.velikost)
            self.samoj_bolšoj_medvěd = max(self.samoj_bolšoj_medvěd or 0,
                                           self.obchody.medvědi.velikost)

            velikost_postavení = self.obchody.velikost
            self.samaja_bolšaja_velikost[HORE] = max(
                self.samaja_bolšaja_velikost[HORE] or 0, velikost_postavení)
            self.samaja_bolšaja_velikost[DOLE] = min(
                self.samaja_bolšaja_velikost[DOLE] or 0, velikost_postavení)

            for KLÍČ_NA_CENĚ in HIGHT, LOW, CLOSE:
                zisk = self.obchody.zisk(data[KLÍČ_NA_CENĚ])
                self.samoj_bolšoj_otevřený_zisk[KLÍČ_NA_CENĚ] = max(
                    self.samoj_bolšoj_otevřený_zisk[KLÍČ_NA_CENĚ] or 0, zisk)
                self.samaja_bolšaja_otevřená_ztráta[KLÍČ_NA_CENĚ] = min(
                    self.samaja_bolšaja_otevřená_ztráta[KLÍČ_NA_CENĚ] or 0,
                    zisk)
                celkový_zisk = zisk + self.obchody.uložený_zisk + self.obchody.swap
                self.samoj_bolšoj_celkový_zisk[KLÍČ_NA_CENĚ] = max(
                    self.samoj_bolšoj_celkový_zisk[KLÍČ_NA_CENĚ] or 0,
                    celkový_zisk)
                self.samaja_bolšaja_celková_ztráta[KLÍČ_NA_CENĚ] = min(
                    self.samaja_bolšaja_celková_ztráta[KLÍČ_NA_CENĚ] or 0,
                    celkový_zisk)

            yield self
            self.předchozí_data = data
    def start(self):
        
#      int pos = Bars - counted_bars;
#      double MinMax_Svice[2];
        MinMax_Svíce = Cena(přesnost = self._info['DIGITS'])
        
        
    #    while(pos > 0)
    #   {
        for data in data_z_csv(self._csv_soubor):
            
            self.data = data
            
#            print('BAR {} {}'.format(data['BAR'],  data['OPEN TIME']))
            
#            if data['BAR'] == 18686:
#                print('DEBUGUJU')

            MinMax_Svíce[BUY] = data['HIGHT'] + self.spred_v_pointech
            MinMax_Svíce[SELL] = data['LOW']

            self._přepočítám_profit_při_otevření()

            self.znamení_sklizně = self.imam_znameni_ke_sklizni()
#            assert self.znamení_sklizně == data['znamení sklizně']
            
#            sklizeň
            if self.znamení_sklizně:
                if self.imam_profit():
                    self.zavru_vse_pri_otevreni_svice()
                    

            self.da_li_seju = self._da_li_třeba_zaset()
            assert self.da_li_seju == data['da li seju']
   
#            setba
            if self.da_li_seju:
                #print('TOZ SEJU')
                self.ohrada[BUY] = data['OPEN'] + self.odstup_v_pointech + self.spred_v_pointech
                self.ohrada[SELL] = data['OPEN'] - self.odstup_v_pointech
                assert self.ohrada[SELL]  == data['medvědí ohrada']
                assert self.ohrada[BUY] == data['býčí ohrada']
    
                self.čekaná[BUY] = self.ohrada[BUY]
                self.čekaná[SELL] = self.ohrada[SELL]
    
                self.hranice[BUY] = MinMax_Svíce[BUY] 
                self.hranice[SELL] = MinMax_Svíce[SELL] 
                assert self.hranice[BUY] == data['hranice býka']
                assert self.hranice[SELL] == data['hranice medvěda']
    
                self.prepocitam_obchody(směrem = BUY)
                self.prepocitam_obchody(směrem = SELL)
    
#            růst
            for směrem in BUY,  SELL:
                
                if self.hranice[směrem] > 0 and (self.hranice[směrem] - MinMax_Svíce[směrem] ) * self.směr[směrem] < 0:
                    self.hranice[směrem] = MinMax_Svíce[směrem]
                    self.prepocitam_obchody(směrem)


#        // včíl máme zjištěné koliko obchodů s eběhem svíce otevře
#      // nevíme sice v jakém pořadí, ale nejméně příznivý scénář beru takto
#      // hore počítám, že s eotevřely aj všechny protipozice, takže zisk je o to nižší
#      // a dole naopak počítám s otevřenými všemi horními pozicemi
#      // při zavření je to jasné, tam budou jistě otevřeny horní i dolní pozice
#      prepocitam_profit_na_svici(pos);
            self._přepočítám_profit_na_svíci()

            yield data
    def __iter__(self, AOSy=[]):

        první_svíčka = True

        for data in data_z_csv(self.zdrojové_csv, self.mapa_tříd):

            if data[OPEN_TIME].timestamp == 0:
                print("Přeskakuji svíčku {} koja nemá otevírací dobu".format(data[BAR]))
                continue

            if data[OPEN].prodej == 0:
                print("Přeskakuji svíčku {} koja nemá ceny".format(data[BAR]))
                continue

            if data[BB_MAIN].prodej == 0:
                print("Přeskakuji svíčku {} koja nemá bb indikátor".format(data[BAR]))
                continue

            self.data = data

            #            for aos in AOSy:
            #                funkce_události = aos.get('pří_otevření_svíčky',  None)
            #                if callable(funkce_události):
            #                    funkce_události(self)

            #            print(data[OPEN])

            #            print('-' * 44)
            #            print('BAR {} {}'.format(data['BAR'],  data['OPEN TIME']))

            #            print('*'*44)
            #            print(data[BAR],  data[OPEN_TIME],  data[OPEN])
            #            print('-'*44)

            if první_svíčka is True:
                self.statistika.na_první_svíčce()
                první_svíčka = False

            self.obchody.swapuji(data[OPEN_TIME])

            self.statistika.pří_otevření_svíčky()
            zisk_při_otevření = self.statistika.zisk_při_otevření

            self.znamení_sklizně = self.__imam_znameni_ke_sklizni()

            #            sklizeň
            if self.znamení_sklizně is True:
                if zisk_při_otevření + self.obchody.swap > self.info["sklízím při zisku"]:
                    print("-" * 44)
                    print("sklízím při dosažení zisku")
                    self.obchody.zavřu_obchody(čas_zavření=data[OPEN_TIME], cena_zavření=data[OPEN])
            #                    self.medvědiště = None
            #                    self.býčiště = None
            #                else:
            #                    umenšeno =  self.obchody.umenším_pozice(čas_zavření = data[OPEN_TIME],  cena_zavření = data[OPEN])
            #                    if umenšeno:
            #                        self.medvědiště.přitáhni_k_ceně(data[OPEN])
            #                        self.býčiště.přitáhni_k_ceně(data[OPEN])

            #            if self.znamení_setby is True:
            #                vytáhnu z info
            odstup = self.info["odstup"]
            rozestup = self.info["rozestup"]
            bb_hore = data[BB_HORE]
            bb_main = data[BB_MAIN]
            bb_dole = data[BB_DOLE]

            open = data[OPEN]
            hight = data[HIGHT]
            low = data[LOW]

            #            nejprve zadám objednávky
            for cena in generuji_býky(od_ceny=bb_hore.prodej, k_ceně=hight.nákup + rozestup, rozestup=rozestup):
                if cena in self.býci.keys():
                    continue

                protiobchod = self.medvědi.get(cena + rozestup, None)
                if protiobchod is not None:
                    protiobchod.stoploss(cena)
                else:
                    self.čekám_hore.append(cena)

            for cena in generuji_medvědy(od_ceny=bb_dole.prodej, k_ceně=low.prodej - rozestup, rozestup=rozestup):
                if cena in self.medvědi.keys():
                    continue

                protiobchod = self.býci.get(cena - rozestup, None)
                if protiobchod is not None:
                    protiobchod.stoploss(cena)
                else:
                    self.čekám_dole.append(cena)

            #            pak zavřu stoplosy
            self.obchody.zavřu_stoplos(od_ceny=low, k_ceně=hight)

            #             a otevřu
            for cena in generuji_býky(od_ceny=open.nákup, k_ceně=hight.nákup, rozestup=rozestup):
                if cena in self.čekám_hore:
                    self.obchody.otevřu_nový_obchod(
                        směrem=HORE, cena=cena, velikost=self.info["sázím loty"], čas=data[OPEN_TIME]
                    )
                    self.čekám_hore.remove(cena)

            for cena in generuji_medvědy(od_ceny=open.prodej, k_ceně=low.prodej, rozestup=rozestup):
                if cena in self.čekám_dole:
                    self.obchody.otevřu_nový_obchod(
                        směrem=DOLE, cena=cena, velikost=self.info["sázím loty"], čas=data[OPEN_TIME]
                    )
                    self.čekám_dole.remove(cena)

            self.statistika.pří_zavření_svíčky()

            yield self
            self.předchozí_data = data