Skip to content

Instantly share code, notes, and snippets.

@igotit-anything
Last active September 18, 2024 06:50
Show Gist options
  • Save igotit-anything/4fe4e60fae8a4b93ccedd74ee4c430ef to your computer and use it in GitHub Desktop.
Save igotit-anything/4fe4e60fae8a4b93ccedd74ee4c430ef to your computer and use it in GitHub Desktop.
/*
함수 설명: Get_Loss_Spread_USD(double volume_lot)
목적: 거래 종목의 스프레드로 인해 발생하는 USD 손실을 계산. 반환값은 항상 음수.
매개변수: volume_lot - 거래량을 랏 단위로 받음.
포인트 단위 스프레드:
SymbolInfoInteger 함수로 종목의 스프레드를 포인트 단위로 가져옴.
1랏 기준 USD 금액:
SymbolInfoDouble 함수로 가격 1 Tick의 USD 값을 가져옴. 상대 통화의 USD 환율에 따라 변경됨.
Tick 크기 계산:
1 Tick의 크기를 SYMBOL_TRADE_TICK_SIZE로 가져오고, 이를 포인트 단위로 변환.
포인트 단위 금액:
1 포인트가 얼마만큼의 USD 가치인지 계산. 1 Tick이 1 Point가 아닐 수 있음.
스프레드 손실 계산:
거래량(volume_lot), 포인트 단위 USD 금액, 스프레드를 곱해 최종 손실을 USD로 반환.
*/
double CCyD_SymbolOne::Get_Loss_Spread_USD(double volume_lot)
{
double loss_spread_usd=0; // 항상 음수.
// 종목의 스프레드(=Ask-Bid)가 포인트 단위로 반환됨.
// ex. EURGBP 스프레드 12포인트라면
double spread_point = (double)SymbolInfoInteger(m_ccydSymbolName.Meta, SYMBOL_SPREAD);
//중요: 가격 1 Tick 에 해당하는 금액 인데 종목수량 "1랏" 기준의 계좌 결제통화(USD) 단위로 반환됨.
//심볼 상대통화의 USD 시세 변경에 따라 같이 변경되는 값.
double tickValue_1lot_usd = SymbolInfoDouble(m_ccydSymbolName.Meta, SYMBOL_TRADE_TICK_VALUE);
//종목의 1 Tick 의 크기 받기.(예 : 0.00002). 1 tick 이 1 point 아닌 5point 등도 가능.
//1 Tick 을 포인트 단위로 변경.
double ticksize_point = SymbolInfoDouble(m_ccydSymbolName.Meta, SYMBOL_TRADE_TICK_SIZE) //1 tick 의 크기
/ SymbolInfoDouble(m_ccydSymbolName.Meta,SYMBOL_POINT); // 1 point의 크기
// 가격 1포인트에 해당하는 금액. 종목수량 "1랏"기준 달러단위.
double pointValue_1lot_usd = tickValue_1lot_usd * ticksize_point;
loss_spread_usd = -1.0 * volume_lot * pointValue_1lot_usd * spread_point;
return loss_spread_usd;
}
@igotit-anything
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment