Adwizard/Virtual/Money.mqh

85 lines
6.6 KiB
MQL5
Raw Permalink Normal View History

2025-04-11 13:28:40 +03:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| Money.mqh |
//| Copyright 2022-2025, Yuriy Bykov |
//| https://www.mql5.com/ru/users/antekov |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022-2025, Yuriy Bykov"
#property link "https://www.mql5.com/ru/users/antekov"
#property version "1.01"
#include "VirtualOrder.mqh"
//+------------------------------------------------------------------+
//| 07>2K9 :;0AA C?@02;5=8O :0?8B0;>< |
//+------------------------------------------------------------------+
class CMoney {
static double s_depoPart; // A?>;L7C5<0O G0ABL >1I53> 10;0=A0
static double s_fixedBalance; // A?>;L7C5<K9 >1I89 10;0=A
// KG8A;5=85 :>MDD8F85=B0 <0AHB018@>20=8O >1JQ<0 28@BC0;L=>9 ?>78F88
static double Coeff(CVirtualOrder *p_order);
public:
CMoney() = delete; // 0?@5I05< :>=AB@C:B>@
// ?@545;5=85 @0AGQB=>3> @07<5@0 28@BC0;L=>9 ?>78F88
static double Volume(CVirtualOrder *p_order);
// ?@545;5=85 @0AGQB=>9 ?@81K;8 28@BC0;L=>9 ?>78F88
static double Profit(CVirtualOrder *p_order);
// #AB0=>2:0 8 GB5=85 8A?>;L7C5<>9 G0AB8 >1I53> 10;0=A0
static void DepoPart(double p_depoPart) {
s_depoPart = p_depoPart;
}
static double DepoPart() {
return s_depoPart;
}
// #AB0=>2:0 8 GB5=85 8A?>;L7C5<>3> >1I53> 10;0=A0
static void FixedBalance(double p_fixedBalance) {
s_fixedBalance = p_fixedBalance;
}
static double FixedBalance() {
return s_fixedBalance;
}
};
double CMoney::s_depoPart = 1.0;
double CMoney::s_fixedBalance = 0;
//+------------------------------------------------------------------+
//| KG8A;5=85 :>MDD. <0AHB018@>20=8O >1JQ<0 28@BC0;L=>9 ?>78F88 |
//+------------------------------------------------------------------+
double CMoney::Coeff(CVirtualOrder *p_order) {
// 0?@0H8205< =>@<8@>20==K9 10;0=A AB@5B5388 4;O MB>9 28@BC0;L=>9 ?>78F88
double fittedBalance = p_order.FittedBalance();
// A;8 >= @025= 0, B> :>MDD8F85=B <0AHB018@>20=8O @025= 1
if(fittedBalance == 0.0) {
return 1;
}
// =0G5 =0E>48< 25;8G8=C >1I53> 10;0=A0 4;O B>@3>2;8
double totalBalance = s_fixedBalance > 0 ? s_fixedBalance : AccountInfoDouble(ACCOUNT_BALANCE);
// >72@0I05< :>MDD8F85=B <0AHB018@>20=8O >1JQ<0
return totalBalance * s_depoPart / fittedBalance;
}
//+------------------------------------------------------------------+
//| ?@545;5=85 @0AGQB=>3> @07<5@0 28@BC0;L=>9 ?>78F88 |
//+------------------------------------------------------------------+
double CMoney::Volume(CVirtualOrder *p_order) {
return p_order.Volume() * Coeff(p_order);
}
//+------------------------------------------------------------------+
//| ?@545;5=85 @0AGQB=>9 ?@81K;8 28@BC0;L=>9 ?>78F88 |
//+------------------------------------------------------------------+
double CMoney::Profit(CVirtualOrder *p_order) {
return p_order.Profit() * Coeff(p_order);
}
//+------------------------------------------------------------------+