FundsAccount.cs 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242
  1. using Muchinfo.MTPClient.Data.Enums;
  2. using Muchinfo.MTPClient.Data.Helper;
  3. using Muchinfo.MTPClient.Resources;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Windows;
  8. using System.Windows.Media;
  9. namespace Muchinfo.MTPClient.Data.Model.Account
  10. {
  11. using GalaSoft.MvvmLight;
  12. /// <summary>
  13. /// 资金账号类
  14. /// </summary>
  15. public class FundsAccount : ObservableObject
  16. {
  17. #region 字段备注
  18. //AccountId 账户id
  19. //TradeStatus 交易状态
  20. //Currency 币种
  21. //IsMain 是否母账户
  22. //ParentAccountID 所属母账户
  23. //TAAccountType 内、外部
  24. //RelationMainAccountID 关联账户
  25. //Balance 期初余额
  26. //CurrentBalance 期末余额
  27. //UsedMargin 占用保证金
  28. //FreezeMargin 冻结保证金
  29. //OtherFreezeMargin 其他冻结保证金
  30. //FreezeCharge 手续费冻结
  31. //MortgageCredit 授信金额
  32. //OtherCredit 其他授信金额
  33. //OutAmountFreeze 出金冻结
  34. //OutAmount 今日出金
  35. //InAmount 今日入金
  36. //PayCharge 今日手续费支出
  37. //ClosePL 今日平仓盈亏
  38. //CreditIncrease 今日授信增加
  39. //CreditDecrease 今日授信减少
  40. //OtherCreditIncrease 今日其他授信增加
  41. //OtherCreditDecrease 今日其他授信减少
  42. //TransferAmount 今日划转金额
  43. //OtherPay 其他支出
  44. //OtherIncome 其他收入
  45. //OutThreshold 出金阀值
  46. #endregion
  47. public FundsAccount()
  48. {
  49. }
  50. //市值=最新价*数量*合约单位
  51. //净值=期末余额+市值+浮动盈亏-授信金额-其他授信金额;
  52. //可用=净值-市值-占用-冻结-其他冻结-手续费冻结-出金冻结;
  53. //风险率=【占用/(净值-市值)】或【(净值-市值)/占用】;
  54. //冻结=做市冻结+竞价冻结+混合冻结+发售冻结+交割冻结+挂牌冻结+出金冻结
  55. private const int c_figures = 2;
  56. #region 业务服务属性
  57. ///
  58. /// <summary>
  59. /// 可用保证金
  60. /// </summary>
  61. public decimal AvailMargin
  62. {
  63. get
  64. {
  65. //账户总浮动盈亏为负: =期末余额+总浮动盈亏-占用-冻结-其它冻结-手续费冻结-出金冻结
  66. //账户总浮动盈亏为正 且 113 = 0 =期末余额-占用-冻结-其它冻结-手续费冻结-出金冻结
  67. //账户总浮动盈亏为正 且 113 = 1 =期末余额+总浮动盈亏-占用-冻结-其它冻结-手续费冻结-出金冻结
  68. //*系统参数”113“(当日浮动盈利是否可用) 0:不可用 1:可用
  69. var pl = FloatPL;
  70. if (pl > 0 && !FloatAvaliabelFlag) pl = 0;
  71. var avail = CurrentBalance + pl - (UsedMargin + FreezeMargin + OtherFreezeMargin + FreezeCharge + OutAmountFreeze);
  72. return Math.Round(avail, c_figures, MidpointRounding.AwayFromZero);
  73. }
  74. }
  75. public string AvailMarginDisplay
  76. {
  77. get
  78. {
  79. var value = AvailMargin;
  80. return value.ToString("N" + c_figures);
  81. //if (value > 0) return value.ToString("N" + c_figures);
  82. //return "0.00";
  83. }
  84. }
  85. /// <summary>
  86. /// 期初余额
  87. /// </summary>
  88. private decimal _balance;
  89. /// <summary>
  90. /// 期初余额
  91. /// </summary>
  92. [PropertyDisc("balance")]
  93. public decimal Balance
  94. {
  95. get
  96. {
  97. return _balance;
  98. }
  99. set
  100. {
  101. Set(() => Balance, ref _balance, value);
  102. RaisePropertyChanged(() => CurrentNetWorth);
  103. RaisePropertyChanged(() => CurrentNetWorthDisplay);
  104. RaisePropertyChanged(() => AvailMargin);
  105. RaisePropertyChanged(() => AvailMarginDisplay);
  106. }
  107. }
  108. /// <summary>
  109. /// 期初余额
  110. /// </summary>
  111. public string BalanceDisplay
  112. {
  113. get
  114. {
  115. return Balance.ToString("N" + c_figures);
  116. }
  117. }
  118. public string CurrentBalanceDisplay
  119. {
  120. get
  121. {
  122. return CurrentBalance.ToString("N" + c_figures);
  123. }
  124. }
  125. /// <summary>
  126. /// 平仓盈亏
  127. /// </summary>
  128. private decimal _closePL;
  129. /// <summary>
  130. /// 平仓盈亏
  131. /// </summary>
  132. [PropertyDisc("ClosePL")]
  133. public decimal ClosePL
  134. {
  135. get
  136. {
  137. return _closePL;
  138. }
  139. set
  140. {
  141. Set(() => ClosePL, ref _closePL, value);
  142. RaisePropertyChanged(() => ClosePLDisplay);
  143. RaisePropertyChanged(() => ClosePLBrush);
  144. }
  145. }
  146. /// <summary>
  147. /// 账户币种
  148. /// </summary>
  149. private string _currency;
  150. /// <summary>
  151. /// 账户币种
  152. /// </summary>
  153. public string Currency
  154. {
  155. get
  156. {
  157. if (string.IsNullOrEmpty(_currency))
  158. {
  159. return "RMB";
  160. }
  161. return _currency;
  162. }
  163. set { Set(() => Currency, ref _currency, value); }
  164. }
  165. /// <summary>
  166. /// 期末余额
  167. /// </summary>
  168. private decimal _currentBalance;
  169. /// <summary>
  170. /// 期末余额
  171. /// </summary>
  172. [PropertyDisc("currentBalance")]
  173. public decimal CurrentBalance
  174. {
  175. get
  176. {
  177. return _currentBalance;
  178. }
  179. set
  180. {
  181. Set(() => CurrentBalance, ref _currentBalance, value);
  182. RaisePropertyChanged(() => CurrentNetWorth);
  183. RaisePropertyChanged(() => CurrentNetWorthDisplay);
  184. RaisePropertyChanged(() => AvailMargin);
  185. RaisePropertyChanged(() => AvailMarginDisplay);
  186. RaisePropertyChanged(() => RiskRatioDisplay);
  187. }
  188. }
  189. /// <summary>
  190. /// 期末净值
  191. /// </summary>
  192. private decimal _currentNetWorth;
  193. /// <summary>
  194. /// 风控净值(期末净值)
  195. /// </summary>
  196. // [PropertyDisc("currentNetworth")]
  197. public decimal CurrentNetWorth
  198. {
  199. get
  200. {
  201. //净值 = 期末余额+浮动盈亏 = 占用+可用+冻结保证金+外部冻结+出金冻结+交收冻结+期间冻结金额 (旧的)
  202. //return Math.Round(CurrentBalance + FloatPL, c_figures, MidpointRounding.AwayFromZero);
  203. //#35141与风控确认,风控计算净值时减掉了部分冻结的资金,现在客户端作同步:
  204. //仅全额模式时
  205. //净值=期末余额+市值- 出金冻结 - 交易费用冻结 - 发售冻结 - 交收冻结 - 摘牌冻结 - 托管冻结 - 挂牌冻结;
  206. //无风险率
  207. //仅保证金模式时
  208. //净值=期末余额+浮动盈亏- 出金冻结 - 交易费用冻结 - 发售冻结 - 交收冻结 - 摘牌冻结 - 托管冻结 - 挂牌冻结;
  209. //风险率=【占用/净值】 或 【净值/占用】;
  210. //即有全额又有保证金时
  211. //净值=期末余额+市值+浮动盈亏- 出金冻结 - 交易费用冻结 - 发售冻结 - 交收冻结 - 摘牌冻结 - 托管冻结 - 挂牌冻结;
  212. //风险率=【占用/(净值-市值)】或【(净值-市值)/占用】
  213. // var v = Math.Round(CurrentBalance + FloatPL - OutAmountFreeze - IMFreezeMargin - DeliveryFreeze - DepositFreeze - DelistingFREEZE - ListingFREEZE - Trade_FEEFREEZE, c_figures, MidpointRounding.AwayFromZero);
  214. // 错误 #90740 权益不减出金冻结
  215. var v = Math.Round(CurrentBalance + FloatPL - IMFreezeMargin - DeliveryFreeze - DepositFreeze - DelistingFREEZE - ListingFREEZE - Trade_FEEFREEZE, c_figures, MidpointRounding.AwayFromZero);
  216. return v;
  217. }
  218. }
  219. public string CurrentNetWorthDisplay
  220. {
  221. get
  222. {
  223. //净值 = 期末余额+浮动盈亏 = 占用+可用+冻结保证金+外部冻结+出金冻结+交收冻结+期间冻结金额
  224. var value = CurrentNetWorth;
  225. RaisePropertyChanged(() => SumCurrentNetWorthDisplay); //更新总净值
  226. return value.ToString("N" + c_figures);
  227. //if (value > 0) return value.ToString("N" + c_figures);
  228. //return "0.00";
  229. }
  230. }
  231. private decimal _payNetWorth;
  232. /// <summary>
  233. /// 全额市值
  234. /// </summary>
  235. public decimal PayNetWorth
  236. {
  237. get
  238. {
  239. return _payNetWorth;
  240. }
  241. set
  242. {
  243. Set(() => PayNetWorth, ref _payNetWorth, value);
  244. RaisePropertyChanged(() => SumCurrentNetWorthDisplay); //更新总净值
  245. RaisePropertyChanged(() => PayNetWorthDisplay); //全额市值格式化
  246. }
  247. }
  248. /// <summary>
  249. /// 全额市值格式化
  250. /// </summary>
  251. public string PayNetWorthDisplay
  252. {
  253. get
  254. {
  255. return (PayNetWorth).ToString("N" + c_figures);
  256. }
  257. }
  258. /// <summary>
  259. /// 净值(总净值=风控净值+市值) 期末余额+市值+浮动盈亏;
  260. /// </summary>
  261. public decimal SumCurrentNetWorth
  262. {
  263. get
  264. {
  265. return (PayNetWorth + CurrentNetWorth);
  266. }
  267. }
  268. public string SumCurrentNetWorthDisplay
  269. {
  270. get
  271. {
  272. return SumCurrentNetWorth.ToString("N" + c_figures);
  273. }
  274. }
  275. /// <summary>
  276. /// 冻结保证金
  277. /// </summary>
  278. private decimal _freezeMargin;
  279. /// <summary>
  280. /// 冻结保证金
  281. /// </summary>
  282. [PropertyDisc("freezeMargin")]
  283. public decimal FreezeMargin
  284. {
  285. get
  286. {
  287. return _freezeMargin;
  288. }
  289. set
  290. {
  291. Set(() => FreezeMargin, ref _freezeMargin, value);
  292. RaisePropertyChanged(() => SumFreezeMarginDisplay);
  293. }
  294. }
  295. private decimal _deliveryFreeze;
  296. /// <summary>
  297. /// 交收冻结保证金
  298. /// </summary>
  299. [PropertyDisc("DELIVERYFREEZE")]
  300. public decimal DeliveryFreeze
  301. {
  302. get
  303. {
  304. return _deliveryFreeze;
  305. }
  306. set
  307. {
  308. _deliveryFreeze = value;
  309. }
  310. }
  311. private decimal _outMouneyThreshold;
  312. /// <summary>
  313. /// 出金阀值
  314. ///
  315. /// </summary>
  316. [PropertyDisc("outMoneyThreshold")]
  317. public decimal OutThreshold
  318. {
  319. get
  320. {
  321. return _outMouneyThreshold;
  322. }
  323. set
  324. {
  325. _outMouneyThreshold = value;
  326. }
  327. }
  328. /// <summary>
  329. /// 入金金额
  330. /// </summary>
  331. private decimal _inAmount;
  332. /// <summary>
  333. /// 入金金额
  334. /// </summary>
  335. [PropertyDisc("inAmount")]
  336. public decimal InAmount
  337. {
  338. get
  339. {
  340. return _inAmount;
  341. }
  342. set
  343. {
  344. Set(() => InAmount, ref _inAmount, value);
  345. RaisePropertyChanged(()=>InAmountDisplay);
  346. }
  347. }
  348. /// <summary>
  349. /// 最高利用保证金
  350. /// </summary>
  351. private decimal _maxUsedMargin;
  352. /// <summary>
  353. /// 最高利用保证金
  354. /// </summary>
  355. public decimal MaxUsedMargin
  356. {
  357. get { return _maxUsedMargin; }
  358. set { Set(() => MaxUsedMargin, ref _maxUsedMargin, value); }
  359. }
  360. /// <summary>
  361. /// 期初净值
  362. /// </summary>
  363. private decimal _netWorth;
  364. /// <summary>
  365. /// 期初净值
  366. /// </summary>
  367. [PropertyDisc("networth")]
  368. public decimal NetWorth
  369. {
  370. get { return _netWorth; }
  371. set { Set(() => NetWorth, ref _netWorth, value); }
  372. }
  373. /// <summary>
  374. /// 出金金额
  375. /// </summary>
  376. private decimal _outAmount;
  377. /// <summary>
  378. /// 出金金额
  379. /// </summary>
  380. [PropertyDisc("outAmount")]
  381. public decimal OutAmount
  382. {
  383. get
  384. {
  385. return _outAmount;
  386. }
  387. set
  388. {
  389. Set(() => OutAmount, ref _outAmount, value);
  390. RaisePropertyChanged(()=>OutAmountDisplay);
  391. }
  392. }
  393. /// <summary>
  394. /// 结算盈亏
  395. /// </summary>
  396. private decimal _reckonPL;
  397. /// <summary>
  398. /// 结算盈亏
  399. /// </summary>
  400. [PropertyDisc("reckonPL")]
  401. public decimal ReckonPL
  402. {
  403. get
  404. {
  405. return _reckonPL;
  406. }
  407. set { Set(() => ReckonPL, ref _reckonPL, value); }
  408. }
  409. /// <summary>
  410. /// 当前银行利率
  411. /// </summary>
  412. public decimal BankRate { get; set; }
  413. //浮动盈亏
  414. private decimal _floatPL;
  415. /// <summary>
  416. /// 浮动盈亏(不包括全额)
  417. /// </summary>
  418. public decimal FloatPL
  419. {
  420. get
  421. {
  422. return _floatPL;
  423. }
  424. set
  425. {
  426. Set(() => FloatPL, ref _floatPL, value);
  427. RaisePropertyChanged(() => CurrentNetWorth);
  428. RaisePropertyChanged(() => CurrentNetWorthDisplay);
  429. RaisePropertyChanged(() => AvailMargin);
  430. RaisePropertyChanged(() => AvailMarginDisplay);
  431. RaisePropertyChanged(() => RiskRatioDisplay);
  432. RaisePropertyChanged(() => BalanceDisplay);
  433. if (this.TradeAccount != null)
  434. {
  435. RaisePropertyChanged(() => this.TradeAccount.FundsUsageRate);
  436. }
  437. RaisePropertyChanged(() => FloatPLBrush);
  438. RaisePropertyChanged(()=>FloatPLDisplay);
  439. RaisePropertyChanged(() => SumCurrentNetWorthDisplay); //更新总净值
  440. }
  441. }
  442. /// <summary>
  443. /// 可用资金
  444. /// </summary>
  445. public decimal AvailAmount { get; set; }
  446. public Brush FloatPLBrush
  447. {
  448. get
  449. {
  450. try
  451. {
  452. if (_floatPL == 0)
  453. {
  454. return ResourceHelper.GetFromResource<Brush>("AccountTextForeground");
  455. }
  456. else if (_floatPL > 0)
  457. {
  458. return ResourceHelper.GetFromResource<Brush>("QuoteAscBrush");
  459. }
  460. else
  461. {
  462. return ResourceHelper.GetFromResource<Brush>("QuoteDecBrush");
  463. }
  464. }
  465. catch
  466. {
  467. return null;
  468. }
  469. }
  470. }
  471. //全额盈亏
  472. private decimal _payFloatPL;
  473. /// <summary>
  474. /// 全额盈亏
  475. /// </summary>
  476. public decimal PayFloatPL
  477. {
  478. get
  479. {
  480. return _payFloatPL;
  481. }
  482. set
  483. {
  484. Set(() => PayFloatPL, ref _payFloatPL, value);
  485. }
  486. }
  487. /// <summary>
  488. /// 手续费
  489. /// </summary>
  490. private decimal _tradeCharge;
  491. /// <summary>
  492. /// 手续费
  493. /// </summary>
  494. public decimal TradeCharge
  495. {
  496. get
  497. {
  498. return _tradeCharge;
  499. }
  500. set { Set(() => TradeCharge, ref _tradeCharge, value); }
  501. }
  502. /// <summary>
  503. /// 资金账号
  504. /// </summary>
  505. [PropertyDisc("accountId")]
  506. public ulong AccountId { get; set; }
  507. /// <summary>
  508. /// 交易状态
  509. /// </summary>
  510. public uint TradeStatus { get; set; }
  511. /// <summary>
  512. /// 是否母账户
  513. /// </summary>
  514. public uint IsMain { get; set; }
  515. /// <summary>
  516. /// 所属母账户
  517. /// </summary>
  518. public ulong ParentAccountID { get; set; }
  519. /// <summary>
  520. /// 内、外部
  521. /// </summary>
  522. public uint TAAccountType { get; set; }
  523. /// <summary>
  524. /// 关联账户
  525. /// </summary>
  526. public ulong RelatedMainAccountID { get; set; }
  527. private decimal _otherFreezeMargin;
  528. /// <summary>
  529. /// 其他冻结保证金
  530. /// </summary>
  531. public decimal OtherFreezeMargin
  532. {
  533. get { return _otherFreezeMargin; }
  534. set
  535. {
  536. Set(() => OtherFreezeMargin, ref _otherFreezeMargin, value);
  537. RaisePropertyChanged(() => SumFreezeMarginDisplay);
  538. }
  539. }
  540. private decimal _freezeCharge;
  541. /// <summary>
  542. /// 手续费冻结
  543. /// </summary>
  544. public decimal FreezeCharge
  545. {
  546. get { return _freezeCharge; }
  547. set
  548. {
  549. Set(() => FreezeCharge, ref _freezeCharge, value);
  550. RaisePropertyChanged(() => FreezeChargeDisplay);
  551. }
  552. }
  553. /// <summary>
  554. /// 授信金额
  555. /// </summary>
  556. public decimal MortgageCredit { get; set; }
  557. /// <summary>
  558. /// 其它授信金额
  559. /// </summary>
  560. public decimal OtherCredit { get; set; }
  561. private decimal _payCharge;
  562. /// <summary>
  563. /// 今日手续费支出
  564. /// </summary>
  565. //public decimal PayCharge { get; set; }
  566. public decimal PayCharge
  567. {
  568. get
  569. {
  570. return _payCharge;
  571. }
  572. set
  573. {
  574. Set(() => PayCharge, ref _payCharge, value);
  575. RaisePropertyChanged(() => PayChargeDisplay);
  576. }
  577. }
  578. /// <summary>
  579. /// 今日授信增加
  580. /// </summary>
  581. public decimal CreditIncrease { get; set; }
  582. /// <summary>
  583. /// 今日授信减少
  584. /// </summary>
  585. public decimal CreditDecrease { get; set; }
  586. /// <summary>
  587. /// 今日其它授信增加
  588. /// </summary>
  589. public decimal OtherCreditIncrease { get; set; }
  590. /// <summary>
  591. /// 今日其它授信减少
  592. /// </summary>
  593. public decimal OtherCreditDecrease { get; set; }
  594. /// <summary>
  595. /// 今日划转金额
  596. /// </summary>
  597. public decimal TransferAmount { get; set; }
  598. /// <summary>
  599. /// 其他支出
  600. /// </summary>
  601. public decimal OtherPay { get; set; }
  602. /// <summary>
  603. /// 其他收入
  604. /// </summary>
  605. public decimal OtherIncome { get; set; }
  606. /// <summary>
  607. /// 占用保证金
  608. /// </summary>
  609. private decimal _usedMargin;
  610. /// <summary>
  611. /// 占用保证金
  612. /// </summary>
  613. [PropertyDisc("usedMargin")]
  614. public decimal UsedMargin
  615. {
  616. get
  617. {
  618. return _usedMargin;
  619. }
  620. set
  621. {
  622. Set(() => UsedMargin, ref _usedMargin, value);
  623. }
  624. }
  625. /// <summary>
  626. /// 发售冻结保证金
  627. /// </summary>
  628. [PropertyDisc("IMFREEZEMARGIN")]
  629. public decimal IMFreezeMargin { get; set; }
  630. /// <summary>
  631. /// 混合冻结保证金
  632. /// </summary>
  633. [PropertyDisc("XMFREEZEMARGIN")]
  634. public decimal XMFreezeMargin { get; set; }
  635. /// <summary>
  636. /// OTC冻结保证金
  637. /// </summary>
  638. [PropertyDisc("MMFREEZEMARGIN")]
  639. public decimal MMFreezeMargin { get; set; }
  640. /// <summary>
  641. /// 竞价冻结保证金
  642. /// </summary>
  643. [PropertyDisc("BMFREEZEMARGIN")]
  644. public decimal BMFreezeMargin { get; set; }
  645. /// <summary>
  646. /// 外部冻结
  647. /// </summary>
  648. [PropertyDisc("OTRFREEZE")]
  649. public decimal OTRFreezeMargin { get; set; }
  650. /// <summary>
  651. /// OTC占用保证金
  652. /// </summary>
  653. [PropertyDisc("MMUSEDMARGIN")]
  654. public decimal MMUsedMargin { get; set; }
  655. /// <summary>
  656. /// 混合占用保证金
  657. /// </summary>
  658. [PropertyDisc("XMUSEDMARGIN")]
  659. public decimal XMUsedMargin { get; set; }
  660. /// <summary>
  661. /// 竞价占用保证金
  662. /// </summary>
  663. [PropertyDisc("BMUSEDMARGIN")]
  664. public decimal BMUsedMargin { get; set; }
  665. /// <summary>
  666. /// 发售手续费
  667. /// </summary>
  668. [PropertyDisc("IMTRADEFEE")]
  669. public decimal IMTradeFee { get; set; }
  670. /// <summary>
  671. /// 混合手续费
  672. /// </summary>
  673. [PropertyDisc("XMTRADEFEE")]
  674. public decimal XMTradeFee { get; set; }
  675. /// <summary>
  676. /// 即期手续费
  677. /// </summary>
  678. [PropertyDisc("MMTRADEFEE")]
  679. public decimal MMTradeFee { get; set; }
  680. /// <summary>
  681. /// 竞价手续费
  682. /// </summary>
  683. [PropertyDisc("BMTRADEFEE")]
  684. public decimal BMTradeFee { get; set; }
  685. /// <summary>
  686. /// 账号所属机构角色
  687. /// </summary>
  688. [PropertyDisc("AreaRoles")]
  689. public int AreaRoles { get; set; }
  690. /// <summary>
  691. /// 挂牌手续费
  692. /// </summary>
  693. [PropertyDisc("ListingFee")]
  694. public decimal ListingFee { get; set; }
  695. /// <summary>
  696. /// 摘牌手续费
  697. /// </summary>
  698. [PropertyDisc("DelistingFee")]
  699. public decimal DelistingFee { get; set; }
  700. /// <summary>
  701. /// 摘牌冻结
  702. /// </summary>
  703. [PropertyDisc("DelistingFREEZE")]
  704. public decimal DelistingFREEZE { get; set; }
  705. /// <summary>
  706. /// 挂牌冻结
  707. /// </summary>
  708. [PropertyDisc("ListingFREEZE")]
  709. public decimal ListingFREEZE { get; set; }
  710. /// <summary>
  711. /// 托管冻结
  712. /// </summary>
  713. [PropertyDisc("DepositFreeze")]
  714. public decimal DepositFreeze { get; set; }
  715. private decimal _SumFreezeMargin = decimal.Zero;
  716. /// <summary>
  717. /// 总冻结保证金
  718. /// </summary>
  719. public decimal SumFreezeMargin
  720. {
  721. get
  722. {
  723. //return TASumFreezeMargin + OTRFreezeMargin + OutAmountFreeze;
  724. //MTP2.0变更字段
  725. return FreezeMargin + OtherFreezeMargin + OutAmountFreeze;
  726. }
  727. }
  728. /// <summary>
  729. /// 总冻结保证金格式化
  730. /// </summary>
  731. public string SumFreezeMarginDisplay
  732. {
  733. get
  734. {
  735. return SumFreezeMargin.ToString("N" + c_figures);
  736. }
  737. }
  738. /// <summary>
  739. /// 总交易手续费
  740. /// </summary>
  741. public decimal SumTradeFee
  742. {
  743. get
  744. {
  745. return XMTradeFee + IMTradeFee + MMTradeFee + BMTradeFee;
  746. }
  747. }
  748. /// <summary>
  749. ///
  750. /// </summary>
  751. public string UsedMarginDisplay
  752. {
  753. get
  754. {
  755. return UsedMargin.ToString("N" + c_figures);
  756. }
  757. }
  758. /// <summary>
  759. /// (会员风控) 风险率
  760. /// </summary>
  761. public decimal RiskRatio
  762. {
  763. get
  764. {
  765. decimal rate = -100;
  766. switch (TradeAccount.RiskRatioCalcMode)
  767. {
  768. case eRiskRateMode.WORTHOCCUPY:
  769. if (UsedMargin == 0)
  770. {
  771. return 0;
  772. }
  773. rate=(CurrentNetWorth / UsedMargin);
  774. break;
  775. default:
  776. if (CurrentNetWorth == 0)
  777. {
  778. return 0;
  779. }
  780. rate=(UsedMargin / CurrentNetWorth);
  781. break;
  782. }
  783. if (rate < 0)
  784. {
  785. rate = -100;
  786. }
  787. return rate;
  788. }
  789. }
  790. /// <summary>
  791. /// 风险率
  792. /// </summary>
  793. public string RiskRatioDisplay
  794. {
  795. get
  796. {
  797. if (TradeAccount == null)
  798. {
  799. return "--";
  800. }
  801. decimal rate = -100;
  802. switch (TradeAccount.RiskRatioCalcMode)
  803. {
  804. case eRiskRateMode.WORTHOCCUPY:
  805. if (UsedMargin == 0)
  806. {
  807. return "--";
  808. }
  809. rate= (CurrentNetWorth / UsedMargin) ;
  810. break;
  811. default:
  812. if (CurrentNetWorth == 0)
  813. {
  814. return "--";
  815. }
  816. rate= (UsedMargin / CurrentNetWorth) ;
  817. break;
  818. }
  819. if (rate < 0)
  820. {
  821. return (-100).ToString("P2");
  822. }
  823. return rate.ToString("P2");
  824. }
  825. }
  826. /// <summary>
  827. /// 调整
  828. /// </summary>
  829. public decimal Adjust { get; set; }
  830. private decimal _outAmountFreeze;
  831. /// <summary>
  832. /// 出金冻结保证金
  833. /// </summary>
  834. [PropertyDisc("OutMoneyFreeze")]
  835. public decimal OutAmountFreeze
  836. {
  837. get
  838. {
  839. return _outAmountFreeze;
  840. }
  841. set
  842. {
  843. Set(() => OutAmountFreeze, ref _outAmountFreeze, value);
  844. RaisePropertyChanged(() => SumFreezeMarginDisplay);
  845. }
  846. }
  847. /// <summary>
  848. /// 最大合约价格
  849. /// </summary>
  850. [PropertyDisc("maxAgreeAmount")]
  851. public decimal MaxAgreeAmount
  852. {
  853. get;
  854. set;
  855. }
  856. #endregion Properties
  857. /// <summary>
  858. /// 所属交易账号
  859. /// </summary>
  860. public TradeAccount TradeAccount { get; set; }
  861. /// <summary>
  862. /// 显示用户状态
  863. /// </summary>
  864. public string AccountStatusDisplay
  865. {
  866. get
  867. {
  868. return AccountStatus.Discription();
  869. }
  870. }
  871. /// <summary>
  872. /// 会员证件类型
  873. /// </summary>
  874. public eCardType CardType { get; set; }
  875. /// <summary>
  876. /// 会员证件号码
  877. /// </summary>
  878. public string CardNum { get; set; }
  879. public override string ToString()
  880. {
  881. string strbuff = Client_Resource.Domain_Account + this.AccountId + Client_Resource.Domain_AvailableFunds +
  882. this.AvailMargin + Client_Resource.Domain_RiskRatio + this.RiskRatioDisplay;
  883. return strbuff;
  884. }
  885. /// <summary>
  886. /// 冻结保证金(总冻结)(数据库查询不包括出金冻结)
  887. /// </summary>
  888. [PropertyDisc("TASumFreezeMargin")]
  889. public decimal TASumFreezeMargin
  890. {
  891. get;
  892. set;
  893. }
  894. /// <summary>
  895. /// 仓单冲抵最低保证金
  896. /// </summary>
  897. [PropertyDisc("mincurrentbalance")]
  898. public decimal MincurrentBalance
  899. {
  900. get;
  901. set;
  902. }
  903. /// <summary>
  904. /// 人工冻结
  905. /// </summary>
  906. [PropertyDisc("ManualFreeze")]
  907. public decimal ManualFreeze { get; set; }
  908. /// <summary>
  909. /// 当天入金是否可出 0:不可出 1:可出
  910. /// </summary>
  911. [PropertyDisc("IsAllowInMoney")]
  912. public int IsAllowInMoney
  913. {
  914. get;
  915. set;
  916. }
  917. /// <summary>
  918. /// 交易费用冻结
  919. /// </summary>
  920. [PropertyDisc("Trade_FEEFREEZE")]
  921. public decimal Trade_FEEFREEZE { get; set; }
  922. // public eAccountStatus AccountStatus { get; set; }
  923. private eAccountStatus _accountStatus;
  924. /// <summary>
  925. /// 账号状态
  926. /// </summary>
  927. [PropertyDisc("accountstatus")]
  928. public eAccountStatus AccountStatus
  929. {
  930. get
  931. {
  932. return _accountStatus;
  933. }
  934. set
  935. {
  936. _accountStatus = value;
  937. }
  938. }
  939. /// <summary>
  940. /// Gets or sets the currency identifier.
  941. /// </summary>
  942. /// <value>The currency identifier.</value>
  943. public uint CurrencyID { get; set; }
  944. /// <summary>
  945. /// 冻结手续费
  946. /// </summary>
  947. /// <value>The freeze charge display.</value>
  948. public string FreezeChargeDisplay
  949. {
  950. get
  951. {
  952. return FreezeCharge.ToString("N" + c_figures);
  953. }
  954. }
  955. /// <summary>
  956. /// 入金
  957. /// </summary>
  958. /// <value>The freeze charge display.</value>
  959. public string InAmountDisplay
  960. {
  961. get
  962. {
  963. return InAmount.ToString("N" + c_figures);
  964. }
  965. }
  966. /// <summary>
  967. /// 出金
  968. /// </summary>
  969. /// <value>The freeze charge display.</value>
  970. public string OutAmountDisplay
  971. {
  972. get
  973. {
  974. return OutAmount.ToString("N" + c_figures);
  975. }
  976. }
  977. /// <summary>
  978. /// Gets the close pl display.
  979. /// </summary>
  980. /// <value>The close pl display.</value>
  981. public string ClosePLDisplay
  982. {
  983. get
  984. {
  985. return ClosePL.ToString("N" + c_figures);
  986. }
  987. }
  988. /// <summary>
  989. /// Gets the float pl display.
  990. /// </summary>
  991. /// <value>The float pl display.</value>
  992. public string FloatPLDisplay
  993. {
  994. get
  995. {
  996. return FloatPL.ToString("N" + c_figures);
  997. }
  998. }
  999. /// <summary>
  1000. /// Gets the pay charge display.
  1001. /// </summary>
  1002. /// <value>The pay charge display.</value>
  1003. public string PayChargeDisplay
  1004. {
  1005. get
  1006. {
  1007. return PayCharge.ToString("N" + c_figures);
  1008. }
  1009. }
  1010. /// <summary>
  1011. /// Gets the freeze margin display.
  1012. /// </summary>
  1013. /// <value>The freeze margin display.</value>
  1014. public string FreezeMarginDisplay
  1015. {
  1016. get
  1017. {
  1018. return FreezeMargin.ToString("N" + c_figures);
  1019. }
  1020. }
  1021. /// <summary>
  1022. /// Gets the close pl brush.
  1023. /// </summary>
  1024. /// <value>The close pl brush.</value>
  1025. public Brush ClosePLBrush
  1026. {
  1027. get
  1028. {
  1029. try
  1030. {
  1031. if (_closePL == 0)
  1032. {
  1033. return ResourceHelper.GetFromResource<Brush>("AccountTextForeground");
  1034. }
  1035. else if (_closePL > 0)
  1036. {
  1037. return ResourceHelper.GetFromResource<Brush>("QuoteAscBrush");
  1038. }
  1039. else
  1040. {
  1041. return ResourceHelper.GetFromResource<Brush>("QuoteDecBrush");
  1042. }
  1043. }
  1044. catch
  1045. {
  1046. return null;
  1047. }
  1048. }
  1049. }
  1050. private bool _floatAvaliabelFlag;
  1051. public bool FloatAvaliabelFlag
  1052. {
  1053. get
  1054. {
  1055. return _floatAvaliabelFlag;
  1056. }
  1057. set
  1058. {
  1059. Set(() => FloatAvaliabelFlag, ref _floatAvaliabelFlag, value);
  1060. RaisePropertyChanged(() => AvailMarginDisplay);
  1061. }
  1062. }
  1063. }
  1064. }