Ejemplo n.º 1
0
def return_rest2acc(Order, AccumSumToSell):
    Account2Sell = get_account(user=Order.user, currency=Order.currency1)
    add_trans2(Account2Sell,
               AccumSumToSell,
               Order,
               "deal_return")
    system_notify(order_return_unused(Order, Account2Sell.currency(), AccumSumToSell), Order.user)
Ejemplo n.º 2
0
def return_rest2acc(Order, AccumSumToSell):
           Account2Sell  = get_account(Order.user, Order.currency1)
           add_trans(Order.transit_1, 
           AccumSumToSell, 
           Order.currency1,
           Account2Sell,
           Order,
           "deal_return")
           system_notify( order_return_unused( Order, AccumSumToSell ), Order.user )  
Ejemplo n.º 3
0
def return_rest2acc(Order, AccumSumToSell):
           Account2Sell  = get_account(Order.user, Order.currency1)
           add_trans(Order.transit_1, 
           AccumSumToSell, 
           Order.currency1,
           Account2Sell,
           Order,
           "deal_return")
           system_notify( order_return_unused( Order, AccumSumToSell ), Order.user )  
Ejemplo n.º 4
0
def finish_create_order(TradePair, SumToBuy, AccumSumToSell, Order):
    ##base currency
    if Order.currency1 == TradePair.currency_on:

        if AccumSumToSell < TradePair.min_trade_base:
            system_notify(order_finish(Order), Order.user)
            return 0
        else:
            return SumToBuy
    else:
        if SumToBuy < TradePair.min_trade_base:
            system_notify(order_finish(Order), Order.user)
            return 0
        else:
            return SumToBuy
Ejemplo n.º 5
0
def finish_create_order(TradePair, SumToBuy, AccumSumToSell, Order):
          ##base currency
          if Order.currency1 == TradePair.currency_on : 
                 
                if AccumSumToSell < TradePair.min_trade_base :                        
                        system_notify(order_finish(Order), Order.user)
                        return 0
                else:
                        return SumToBuy
          else:   
                if SumToBuy < TradePair.min_trade_base :
                        system_notify(order_finish(Order), Order.user)
                        return 0
                else:
                        return SumToBuy   
Ejemplo n.º 6
0
def finish_create_order(TradePair, SumToBuy, Order):
          ##base currency
          if Order.currency1 == TradePair.currency_on : 
                 
                if SumToBuy <= TradePair.min_trade_base :                        
                        system_notify(order_finish(Order), Order.user)
                        return 0
                else:
                        return SumToBuy
          else:   
                FromSumToBuy  =  Order.sum1 / Order.price 
                if FromSumToBuy <= TradePair.min_trade_base :
                        system_notify(order_finish(Order), Order.user)
                        return 0
                else:
                        return SumToBuy   
Ejemplo n.º 7
0
def process_small_orders( TradePairUrl ): 
         CurrentTradePair =  TradePairs.objects.get(url_title = TradePairUrl) 
         for item in Orders.objects.filter(trade_pair = CurrentTradePair, status="processing"):
             if item.currency1 == CurrentTradePair.currency_on : 
                 
                if item.sum1 < CurrentTradePair.min_trade_base :                        
                        system_notify(order_finish(item), item.user)
                        return_rest2acc(item, item.sum1)
                        item.sum1  = 0
                        item.status = "processed"
                        item.save()
             else:   
               
                if item.sum2 < CurrentTradePair.min_trade_base :
                        system_notify(order_finish(item), item.user)
                        return_rest2acc(item, item.sum1)
                        item.sum1  = 0
                        item.status = "processed"
                        item.save()
Ejemplo n.º 8
0
def buy(Req, Trade_pair):
    FreqKey = "orders" + str(Req.user.id)
    Start = time.time()
    if not check_freq(FreqKey, 3):
        Response = HttpResponse('{"status":false}')
        Response['Content-Type'] = 'application/json'
        return Response

    getcontext().prec = settings.TRANS_PREC
    try:
        Count = Req.REQUEST.get("count")
        Price = Req.REQUEST.get("price")
        Count = Decimal(Count.replace(",", ".").strip())
        Price = Decimal(Price.replace(",", ".").strip())
        Count = to_prec(Count, settings.TRANS_PREC)
        Price = to_prec(Price, settings.TRANS_PREC)

    except:
        Response = HttpResponse(process_mistake(Req, "invalid_params"))
        Response['Content-Type'] = 'application/json'
        return Response

    if Price <= 0:
        Response = HttpResponse(process_mistake(Req, "SumLess0"))
        Response['Content-Type'] = 'application/json'
        return Response

    if Count <= 0:
        Response = HttpResponse(process_mistake(Req, "CountLess0"))
        Response['Content-Type'] = 'application/json'
        return Response

    TradePair = TradePairs.objects.get(url_title=Trade_pair)
    LOCK = "trades" + TradePair.url_title

    if TradePair.min_trade_base > Count:
        Response = HttpResponse(process_mistake(Req, "MinCount"))
        Response['Content-Type'] = 'application/json'
        return Response

    Custom = "0.0005"  # Req.session["deal_comission"]
    Comission = Decimal(Custom)

    CurrencyOnS = Req.REQUEST.get("currency")
    CurrencyBaseS = Req.REQUEST.get("currency1")

    Amnt1 = Price * Count
    Amnt2 = Count

    CurrencyBase = Currency.objects.get(title=CurrencyBaseS)
    CurrencyOn = Currency.objects.get(title=CurrencyOnS)

    TradeLock = my_lock(LOCK)
    order = Orders(user=Req.user,
                   currency1=CurrencyBase,
                   currency2=CurrencyOn,
                   price=Price,
                   sum1_history=Amnt1,
                   sum2_history=Amnt2,
                   sum1=Amnt1,
                   sum2=Amnt2,
                   transit_1=TradePair.transit_from,
                   transit_2=TradePair.transit_on,
                   trade_pair=TradePair,
                   comission=Comission)
    order.save()

    try:
        FromAccount = Accounts.objects.get(user=Req.user,
                                           currency=CurrencyBase)
        add_trans(FromAccount, Amnt1, CurrencyBase, TradePair.transit_from,
                  order, "deposit")
        order.status = "processing"
        order.save()
        system_notify(deposit_funds(order), Req.user)

        ResAuto = make_auto_trade(order, TradePair, order.price, CurrencyBase,
                                  Amnt1, CurrencyOn, Amnt2)

        Response = HttpResponse(process_auto(Req, ResAuto, TradePair))

        my_release(TradeLock)
        Response['Content-Type'] = 'application/json'
        End = time.time()
        measure = OrderTimer(order=order, time_work=str(End - Start))
        measure.save()

        return Response
    except TransError as e:
        order.status = "canceled"
        order.save()
        Status = e.value
        Response = HttpResponse(process_mistake(Req, Status))
        Response['Content-Type'] = 'application/json'
        my_release(TradeLock)

        End = time.time()
        measure = OrderTimer(order=order, time_work=str(End - Start))
        measure.save()

        return Response
Ejemplo n.º 9
0
def process_order(AccountBuyer, ComisBuy, AccumSum, AccumSumToSell, item,
                  Order, TradePair, ComisSell):
    ##TODO move to settings for every user
    ComisPercentSeller = item.comission
    ComisPercentBuyer = Order.comission

    if item.sum1 > AccumSum:
        ## a danger of low overflow
        Diff = AccumSum / item.sum1
        TransSum = item.sum2 * Diff
        #TransSum = AccumSumToSell
        AccountSeller = get_account(item.user, item.currency2)
        add_trans(item.transit_2,
                  TransSum,
                  item.currency2,
                  AccountSeller,
                  item,
                  "deal",
                  Out_order_id=Order.id)

        add_trans(AccountSeller,
                  TransSum * ComisPercentSeller,
                  item.currency2,
                  ComisSell,
                  item,
                  "comission",
                  Out_order_id=Order.id)

        add_trans(item.transit_1,
                  AccumSum,
                  item.currency1,
                  AccountBuyer,
                  item,
                  "deal",
                  Out_order_id=Order.id)

        add_trans(AccountBuyer,
                  AccumSum * ComisPercentBuyer,
                  item.currency1,
                  ComisBuy,
                  Order,
                  "comission",
                  Out_order_id=Order.id)

        ##comission
        item.sum1 = item.sum1 - AccumSum
        item.sum2 = item.sum2 - TransSum
        item.save()
        try:
            system_notify(
                order_description_sell(AccumSum, TransSum, item, TradePair),
                AccountSeller.user)
            system_notify(
                order_description_buy(TransSum, AccumSum, Order, item,
                                      TradePair), AccountBuyer.user)
        except:
            pass

        return (0, AccumSumToSell - TransSum)

    if item.sum1 <= AccumSum:

        TransSum = item.sum2
        NotifySum = item.sum1
        AccountSeller = get_account(item.user, item.currency2)
        add_trans(item.transit_2,
                  TransSum,
                  item.currency2,
                  AccountSeller,
                  item,
                  "deal",
                  Out_order_id=Order.id)

        add_trans(AccountSeller,
                  TransSum * ComisPercentSeller,
                  item.currency2,
                  ComisSell,
                  item,
                  "comission",
                  Out_order_id=Order.id)

        add_trans(item.transit_1,
                  NotifySum,
                  item.currency1,
                  AccountBuyer,
                  item,
                  "deal",
                  Out_order_id=Order.id)

        add_trans(AccountBuyer,
                  NotifySum * ComisPercentBuyer,
                  item.currency1,
                  ComisBuy,
                  Order,
                  "comission",
                  Out_order_id=Order.id)

        ##comission
        item.status = "processed"
        item.sum1 = 0
        item.sum2 = 0
        item.save()

        try:
            system_notify(
                order_description_sell(NotifySum, TransSum, item, TradePair),
                AccountSeller.user)
            system_notify(
                order_description_buy(TransSum, NotifySum, Order, item,
                                      TradePair), AccountBuyer.user)
            system_notify(order_finish(item), AccountSeller.user)
        except:
            pass

        return (AccumSum - NotifySum, AccumSumToSell - TransSum)
Ejemplo n.º 10
0
def buy(Req, Trade_pair):
                FreqKey = "orders" + str(Req.user.id)
                Start = time.time()
                if not check_freq(FreqKey, 3) :
                        Response =   HttpResponse('{"status":false}')
                        Response['Content-Type'] = 'application/json'
                        return Response
                        
                 
                getcontext().prec = settings.TRANS_PREC
                try :
                        Count = Req.REQUEST.get("count")
                        Price = Req.REQUEST.get("price")
                        Count  = Decimal( Count.replace(",",".").strip() )
                        Price  = Decimal( Price.replace(",",".").strip() ) 
                        Count = to_prec(Count, settings.TRANS_PREC )                      
                        Price = to_prec(Price, settings.TRANS_PREC )     
                        
                except:
                        Response =   HttpResponse(process_mistake(Req, "invalid_params"))
                        Response['Content-Type'] = 'application/json'
                        return Response
               
                if Price <= 0:
                        Response =   HttpResponse(process_mistake(Req, "SumLess0"))
                        Response['Content-Type'] = 'application/json'
                        return Response
                        
                if Count<=0:
                        Response =   HttpResponse(process_mistake(Req, "CountLess0"))
                        Response['Content-Type'] = 'application/json'
                        return Response                
                
                TradePair =  TradePairs.objects.get(url_title = Trade_pair) 
                LOCK = "trades" + TradePair.url_title
                
                if TradePair.min_trade_base > Count:
                        Response =   HttpResponse(process_mistake(Req, "MinCount"))
                        Response['Content-Type'] = 'application/json'
                        return Response
                        
                Custom = "0.0005"# Req.session["deal_comission"]    
                Comission = Decimal(Custom)
                
                CurrencyOnS = Req.REQUEST.get("currency") 
                CurrencyBaseS  = Req.REQUEST.get("currency1")
                
                Amnt1 = Price * Count 
                Amnt2 = Count         
                
                
                
                CurrencyBase = Currency.objects.get(title =  CurrencyBaseS )
                CurrencyOn = Currency.objects.get(title =  CurrencyOnS )
                
                TradeLock = my_lock(LOCK)
                order = Orders(user = Req.user,
                                currency1 = CurrencyBase,
                                currency2 = CurrencyOn, 
                                price = Price,
                                sum1_history = Amnt1,
                                sum2_history = Amnt2,
                                sum1 = Amnt1, 
                                sum2 = Amnt2,
                                transit_1 = TradePair.transit_from,
                                transit_2 = TradePair.transit_on,
                                trade_pair = TradePair,
                                comission = Comission
                                )
                order.save()

                try: 
                        FromAccount = Accounts.objects.get(user = Req.user, currency = CurrencyBase)
                        add_trans(FromAccount, Amnt1, CurrencyBase, TradePair.transit_from, order, "deposit")                      
                        order.status = "processing"
                        order.save()
                        system_notify(deposit_funds(order), Req.user)                  
                        
                        ResAuto = make_auto_trade(order, TradePair, order.price, CurrencyBase, Amnt1, CurrencyOn, Amnt2)
                        
                        Response = HttpResponse(process_auto(Req, ResAuto, TradePair))

                        my_release(TradeLock)
                        Response['Content-Type'] = 'application/json'
                        End = time.time()
                        measure = OrderTimer(order = order,time_work = str(End - Start))
                        measure.save()
                        
                        return Response 
                except TransError as e: 
                        order.status = "canceled"
                        order.save()
                        Status = e.value
                        Response =   HttpResponse(process_mistake(Req, Status))
                        Response['Content-Type'] = 'application/json'
                        my_release(TradeLock)
                        
                        End = time.time()
                        measure = OrderTimer(order = order,time_work = str(End - Start))
                        measure.save()
                        
                        return Response 
Ejemplo n.º 11
0
def process_order(AccountBuyer, ComisBuy, AccumSum, AccumSumToSell,  item, Order, TradePair, ComisSell ):
        ##TODO move to settings for every user 
        ComisPercentSeller =  item.comission
        ComisPercentBuyer =  Order.comission

        if item.sum1 > AccumSum :
            ## a danger of low overflow    
            Diff =  AccumSum / item.sum1
            TransSum   = item.sum2*Diff 
            #TransSum = AccumSumToSell
            AccountSeller = get_account(item.user, item.currency2)
            add_trans(item.transit_2,
                      TransSum,
                      item.currency2,
                      AccountSeller,
                      item,
                      "deal",
                      Out_order_id = Order.id
                      )          
            
            add_trans(AccountSeller ,
                      TransSum*ComisPercentSeller,
                      item.currency2,
                      ComisSell,
                      item,
                      "comission",
                      Out_order_id = Order.id
                      )
            
                
            add_trans(item.transit_1,
                      AccumSum,
                      item.currency1,
                      AccountBuyer,
                      item,
                      "deal",
                      Out_order_id = Order.id
                      )
           
            add_trans(AccountBuyer,
                      AccumSum*ComisPercentBuyer,
                      item.currency1,
                      ComisBuy,
                      Order,
                      "comission",
                      Out_order_id = Order.id)           
            
            ##comission
            item.sum1  = item.sum1 - AccumSum
            item.sum2  = item.sum2 - TransSum
            item.save()  
            try:
                system_notify(order_description_sell(AccumSum, TransSum, item, TradePair), AccountSeller.user)  
                system_notify(order_description_buy(TransSum, AccumSum,  Order, item,  TradePair), AccountBuyer.user)
            except :
                pass

            return (0, AccumSumToSell - TransSum )
    
        if item.sum1 <= AccumSum :            
                
            TransSum   = item.sum2  
            NotifySum = item.sum1    
            AccountSeller = get_account(item.user, item.currency2)
            add_trans(item.transit_2,
                      TransSum,
                      item.currency2,
                      AccountSeller,
                      item,
                      "deal",
                      Out_order_id = Order.id)
            
            
            add_trans(AccountSeller ,
                      TransSum*ComisPercentSeller,
                      item.currency2,
                      ComisSell,
                      item,
                      "comission",
                      Out_order_id = Order.id)  
            

            add_trans(item.transit_1,
                      NotifySum,
                      item.currency1,
                      AccountBuyer,
                      item,
                     "deal",
                     Out_order_id = Order.id)
            
            add_trans(AccountBuyer,
                      NotifySum*ComisPercentBuyer,
                      item.currency1,
                      ComisBuy,
                      Order,
                     "comission",
                     Out_order_id = Order.id)
          

            ##comission            
            item.status = "processed"
            item.sum1  = 0
            item.sum2  = 0
            item.save()  
            
            try :
                system_notify(order_description_sell(NotifySum, TransSum, item, TradePair), AccountSeller.user)  
                system_notify(order_description_buy(TransSum,  NotifySum,  Order, item, TradePair), AccountBuyer.user)            
                system_notify(order_finish(item), AccountSeller.user)  
            except :
                pass
                     
            return  (AccumSum - NotifySum, AccumSumToSell - TransSum )                                 
Ejemplo n.º 12
0
def buy(Req, Trade_pair):
           
                getcontext().prec = settings.TRANS_PREC
                try :
                        Count = Req.REQUEST.get("count")
                        Price = Req.REQUEST.get("price")
                        Count  = Decimal( Count.replace(",",".").strip() )
                        Price  = Decimal( Price.replace(",",".").strip() ) 
                        Count = to_prec(Count, settings.TRANS_PREC )                      
                        Price = to_prec(Price, settings.TRANS_PREC )     
                        
                except:
                        Response =   HttpResponse(process_mistake(Req, "invalid_params"))
                        Response['Content-Type'] = 'application/json'
                        return Response
               
                if Price <= 0:
                        Response =   HttpResponse(process_mistake(Req, "SumLess0"))
                        Response['Content-Type'] = 'application/json'
                        return Response
                        
                if Count<=0:
                        Response =   HttpResponse(process_mistake(Req, "CountLess0"))
                        Response['Content-Type'] = 'application/json'
                        return Response                
                
                TradePair =  TradePairs.objects.get(url_title = Trade_pair) 
              
                if TradePair.min_trade_base > Count:
                        Response =   HttpResponse(process_mistake(Req, "MinCount"))
                        Response['Content-Type'] = 'application/json'
                        return Response
                
                
                CurrencyOnS = Req.REQUEST.get("currency") 
                CurrencyBaseS  = Req.REQUEST.get("currency1")
                
                Amnt1 = Price * Count 
                Amnt2 = Count         
                
                
                
                CurrencyBase = Currency.objects.get(title =  CurrencyBaseS )
                CurrencyOn = Currency.objects.get(title =  CurrencyOnS )
                
                
                order = Orders(user = Req.user,
                                currency1 = CurrencyBase,
                                currency2 = CurrencyOn, 
                                price = Price,
                                sum1_history = Amnt1,
                                sum2_history = Amnt2,
                                sum1 = Amnt1, 
                                sum2 = Amnt2,
                                transit_1 = TradePair.transit_from,
                                transit_2 = TradePair.transit_on,
                                trade_pair = TradePair
                                )
                order.save()

                try: 
                        FromAccount = Accounts.objects.get(user = Req.user, currency = CurrencyBase)
                        add_trans(FromAccount, Amnt1, CurrencyBase, TradePair.transit_from, order, "deposit")                      
                        order.status = "processing"
                        order.save()
                        system_notify(deposit_funds(order), Req.user)                  
                        
                        ResAuto = make_auto_trade(order, TradePair, order.price, CurrencyBase, Amnt1, CurrencyOn, Amnt2)
                        
                        Response = HttpResponse(process_auto(Req, ResAuto, TradePair))

                        Response['Content-Type'] = 'application/json'
                        return Response 
                except TransError as e: 
                        order.status = "canceled"
                        order.save()
                        Status = e.value
                        Response =   HttpResponse(process_mistake(Req, Status))
                        Response['Content-Type'] = 'application/json'
                        return Response 
Ejemplo n.º 13
0
def system_notify_async(Msg, User):
    system_notify(Msg, User)