rubinstory / BankNoteGenerator

돈 복사기 어플리케이션

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

2021 KAIST 몰입캠프 겨울학기 3주차 프로젝트

한양대학교 컴퓨터소프트웨어학부 박현준, 부산대학교 정보컴퓨터공학부 이준영

금융 문맹을 위한 자동매매 플랫폼, '구스'

Great Observing and Ordering System via Exchange

Period

2022.01.12 ~ 2022.01.18

Contributors

박현준 Dookong

이준영 rubinstory

프로젝트 소개

과제 소개

3주차 과제의 경우 각 조별 자유 프로젝트를 진행하는 것이다. 우리 조의 프로젝트 주제는 아래와 같다.

투자에 미숙한 사람들을 위한 맞춤형 암호화폐 자동매매 어플리케이션

이번 프로젝트는 프론트, 백엔드, 투자 알고리즘 등 총 3개의 파트로 나누어 진행헀다.

트레이딩 모듈

라이브러리

  • ftx - FTX 거래소의 데이터 수신 및 주문 전송
  • apscheduler - 거래소 데이터의 주기적인 업데이트
  • requests - 백엔드 서버로의 데이터 전송
  • pandas - 가격 데이터 분석

트레이딩 로직 A

볼린저 밴드와 캔들 패턴의 수렴발산을 이용한 단타 전략. 가격의 이동평균의 표준편차를 계산하여 순간적인 극값을 도출 후 공매수/공매도하여 수익 창출.

트레이딩 로직 C

RSI와 MACD 지표를 조합하여 매매하는 중단기 스윙 전략. 과매수 구간에 돌입할 때 진입하여 과매수 구간을 이탈할 때 청산하는 방식으로 수익 창출.

Front - End

Communication


이번 프로젝트에서는 서버와의 통신을 REST API를 기반으로 설계했다. 따라서 클라이언트에서도 REST 방식으로 통신을 해야한다.

클라이언트의 경우 iOS 단말기를 대상으로 진행했으며, Dart와 Flutter를 이용해 프로그래밍했다.

@RestApi(baseUrl: "http://192.249.18.201:80/")
abstract class RestClient {
  factory RestClient(Dio dio, {String baseUrl}) = _RestClient;

  @GET('user/{user_id}')
  Future<UserModel> fetchCurrentUser(@Path('user_id') int userId);

  @GET('asset_manage/{user_id}')
  Future<AssetManageModel> fetchAssetManageItem(@Path('user_id') int userId);

  @POST('asset_manage/')
  Future<AssetManageModel> updateAssetManageModel(
    @Body() AssetManageModel assetManageModel,
  );

  @GET('transaction/')
  Future<List<TransactionModel>> fetchTransactionList(
      @Query('user') int userId);
}

REST 통신을 위해 Retrofit 라이브러리를 사용했다.

Design Pattern


이번 프로젝트에서는 사용자 정보 저장을 위한 Django 서버와 거래 관련 정보 조회를 위한 FTX, 총 2군데의 서버와 통신을 해야한다. 따라서 Google에서 권장하는 BLOC 디자인 패턴을 클라이언트에 적용하였다.

BLOC

class UserModel {
  int _id = 0;
  String _firstName = "";
  String _lastName = "";
  String _username = "";

  UserModel.fromJson(Map<String, dynamic> parsedJson) {
    _id = parsedJson['id'];
    _firstName = parsedJson['first_name'];
    _lastName = parsedJson['last_name'];
    _username = parsedJson['username'];
  }

  int get id => _id;
  String get firstName => _firstName;
  String get lastName => _lastName;
  String get fullName => _lastName + _firstName;
  String get username => _username;
}
class UserAPIProvider {
  Future<UserModel> fetchUser(int userId) async {
    final response = RestClient(Dio()).fetchCurrentUser(userId);
    return response;
  }
}
class UserRepository {
  final userAPIProvider = UserAPIProvider();
  Future<UserModel> fetchUser(int userId) => userAPIProvider.fetchUser(userId);
}
class UserBloc {
  final _repository = UserRepository();
  final _userFetcher = PublishSubject<UserModel>();

  Stream<UserModel> get currentUser => _userFetcher.stream;
  fetchCurrentUser() async {
    UserModel userModel = await _repository.fetchUser(CURRENT_USER_ID);
    CURRENT_USER_ID = userModel.id;
    _userFetcher.sink.add(userModel);
  }

  dispose() {
    _userFetcher.close();
  }
}

Main Screen


메인화면에서는 사용자의 자산 현황과 수익률을 조회할 수 있다. 그리고 수익률을 분석하여 시각화한 그래프를 통해 최근 3일간의 투자 현황을 확인할 수 있으며, 배너와 카드뉴스를 통해 추천 받은 정보를 확인할 수 있다.

투자 관련 정보는 모두 FTX 거래소에 요청을 보내 받아오는 정보들이며, 그 이외의 경우 모두 Django 서버로부터 받아오는 정보이다.

Trade Information Screen


투자 정보 조회 화면에서는 사용자가 보유하고 있는 자산 현황과 현재 적용 중인 알고리즘의 종류를 확인할 수 있다. 그리고 사용자의 투자 성향에 대해 간단히 설명해주는 섹션이 있으며, 투자 유형 변경과 거래 내역을 조회할 수 있다.

About

돈 복사기 어플리케이션


Languages

Language:Dart 78.1%Language:Python 18.2%Language:HTML 2.5%Language:Ruby 0.9%Language:Swift 0.3%Language:Kotlin 0.1%Language:Objective-C 0.0%