from datetime import datetime from rest_framework.views import APIView from rest_framework.generics import ( ListAPIView, RetrieveUpdateDestroyAPIView, CreateAPIView, ) from rest_framework.response import Response from .models import SourceCode, Backtest, Strategy from .serializers import ( SourceCodeSerializer, BacktestSerializer, StrategySerializer, StrategyDetailSerializer, UserSerializer, ) from .tasks import add, backtest class CeleryTestView(APIView): """Celery Test""" def get(self, request, format=None): result = add.delay(1, 2).get() return Response({"result": result}) class BacktestView(APIView): """异步回测""" def get(self, request, id, format=None): strategy_id = id if strategy_id: strategy_obj = Strategy.objects.get(id=strategy_id) code_text = strategy_obj.source_code.code_text backtest.delay( strategy_id=strategy_id, code_text=code_text, class_name="DoubleMaStrategy", vt_symbol="IF88.CFFEX", interval="1m", start_date=datetime(2016, 1, 1), end_date=datetime(2019, 1, 1), rate=3.0 / 10000, slippage=0.2, size=300, pricetick=0.2, capital=1_000_000, ) return Response({"status": "Process"}) return Response({"status": "Error"}) class CurrentUserAPIView(APIView): """当前登录用户""" def get(self, request, format=None): serializer = UserSerializer(request.user) return Response(serializer.data) class StrategyCreateAPIView(CreateAPIView): """创建策略""" queryset = SourceCode.objects.all() serializer_class = StrategyDetailSerializer class StrategyUpdateAPIView(RetrieveUpdateDestroyAPIView): """查询,修改,删除Strategy详情""" queryset = Strategy.objects.all() serializer_class = StrategyDetailSerializer lookup_field = "id" class BacktestUpdateAPIView(RetrieveUpdateDestroyAPIView): """查询,修改,删除Backtest详情""" queryset = Backtest.objects.all() serializer_class = BacktestSerializer lookup_field = "id" class SourceCodeView(APIView): """根据code查询代码""" serializer_class = SourceCodeSerializer def get_queryset(self): id = self.request.id return Strategy.objects.filter(source_code=id) # Create your views here. class StrategyListView(ListAPIView): """ 策略列表 """ queryset = Strategy.objects.all() serializer_class = StrategySerializer class BacktestListView(ListAPIView): """ 回测列表 """ queryset = Backtest.objects.all() serializer_class = BacktestSerializer