Новая версия платформы MetaTrader 4 build 1370 - страница 6

 
Artyom Trishkin #:
График баланса за год, а график эквити за месяц?
Вы хотите понять откуда просадка?
Она же по эквити берётся...
Ответ был "Поглядите график эквити"
Я не знаю как получить график баланса без эквити или наоборот.
На первом графике (#43) эквити практически совпадает с балансом. Местами видо зеленое чуть-чуть.
Я взял первый месяц т.к.:
1. Чтобы увидеть эквити в более крупном масштабе
2. Речь шла об абсолютной просадке, которая как я понимаю, просадка ниже уровня начального баланса (депозита). И могла образоваться только в начале периода, т.к. нет убыточных сделок.

 
v_v_pro #:
Ответ был "Поглядите график эквити"
Я не знаю как получить график баланса без эквити или наоборот.
На первом графике (#43) эквити практически совпадает с балансом. Местами видо зеленое чуть-чуть.
Я взял первый месяц т.к.:
1. Чтобы увидеть эквити в более крупном масштабе
2. Речь шла об абсолютной просадке, которая как я понимаю, просадка ниже уровня начального баланса (депозита). И могла образоваться только в начале периода, т.к. нет убыточных сделок.

//+------------------------------------------------------------------+
//|                                               EquityDraw_1.2.mq4 |
//|                                          Copyright © 2022, Drknn |
//|                                                    drknn@mail.ru |
//+------------------------------------------------------------------+

/*
        В тестере стратегий этот индикатор забирает данные из реального или демо счёта
        и как следствие, присоединённый к советнику не работает. Выход оказался один - передавать данные
        из советника в индикатор через переменные глобального уровня терминала.
        
        Для этого нужно в советник внести следующие изменения:
        1. В пользовательские переменные добавить булеву переменную
                extern bool                     UseEquityDraw=true;// Добро отрисовывать кривые эквити и баланса
        2. В блок деинициализации советника добавить следующий код:
                if(UseEquityDraw){
                        GlobalVariableDel("AccBalance");
                        GlobalVariableDel("AccEquity");
                        GlobalVariableDel("AccFreeMargin");
                }
        3. В старт советника добавить следующий код:
                if(UseEquityDraw){
                        GlobalVariableSet("AccBalance",AccountBalance());
                        GlobalVariableSet("AccEquity",AccountEquity());
                        GlobalVariableSet("AccFreeMargin",AccountFreeMargin());
                }
        
*/

#property copyright "Copyright © 2022, Drknn"
#property link      "drknn@mail.ru"
//---- индикатор в отдельном окне
#property indicator_separate_window
//---- число индикаторных буфферов
#property indicator_buffers 3
//---- цвет индикаторных линий
#property indicator_color1 Blue
#property indicator_color2 Green
#property indicator_color3 OrangeRed
//---- толщина индикаторных линий
#property indicator_width1 2
#property indicator_width2 1
#property indicator_width3 1
//---- пользовательские переменные
extern bool Draw_Balance=true;
extern bool Draw_Equity=true;
extern bool Draw_FreeMargin=false;
extern bool     UseOrdersManager=true;// Использовать управление ордерами
extern double   RiskPercent=1.0;// Процент риска балансом или превышения баланса
//---- Индикаторные буфферы
double AccBalance[];
double AccEquity[];
double AccFreeMargin[];
//---- Вспомогательные переменные
string  SMB;
string  GlobalValueName;
int                     Barov;


//+----------------------------------------------------------------------------+
//|  Custom indicator initialization function                                  |
//+----------------------------------------------------------------------------+
int init(){
        if(UseOrdersManager){
                SMB=Symbol();
                GlobalValueName=SMB+"_FiboLSMA_GlobalClose";
                GlobalVariableSet("WaitExitProsadki",0);
                Barov=Bars-2;
        }
        
        SetIndexBuffer(0,AccBalance);
        SetIndexLabel(0,"Balance");
        SetIndexStyle(0,DRAW_LINE);
        
        SetIndexBuffer(1,AccEquity);
        SetIndexLabel(1,"Equity");
        SetIndexStyle(1,DRAW_LINE);
        
        SetIndexBuffer(2,AccFreeMargin);
        SetIndexLabel(2,"Free Margin");
        SetIndexStyle(2,DRAW_LINE);
        
        IndicatorDigits(2);
        
        return(0);
}
//+------------------------------------------------------------------+ 
//| Custor indicator deinitialization function                       | 
//+------------------------------------------------------------------+ 
int deinit(){ 
        GlobalVariableDel("WaitExitProsadki");
        return(0); 
}
//+----------------------------------------------------------------------------+
//|  Custom indicator iteration function                                       |
//+----------------------------------------------------------------------------+
int start(){
        
        if(Draw_Balance){AccBalance[0]=GlobalVariableGet("AccBalance");}
        if(Draw_Equity){AccEquity[0]=GlobalVariableGet("AccEquity");}
        if(Draw_FreeMargin){AccFreeMargin[0]=GlobalVariableGet("AccFreeMargin");}
        
        // ----------- Управление закрытием ордеров ---------------
        if(UseOrdersManager){
                if(GlobalVariableGet("WaitExitProsadki")<1){
                        Proverka();
                }
                else{
                        if(GlobalVariableGet("WaitExitProsadki")>0 && AccEquity[0]>=AccBalance[1] && Barov<Bars){
                                GlobalVariableSet(GlobalValueName,1);
                                GlobalVariableSet("WaitExitProsadki",0);
                                Barov=Bars;
                        }
                }
                
        }
        
        return(0);
}
// =================================================================================================
// =================== Пользовательские подпрограммы ===============================================
// =================================================================================================

void Proverka(){
        if(AccBalance[1]<AccEquity[1]){
                double PercentProfita=100-(AccBalance[1]*100/AccEquity[1]);
                if(PercentProfita>=RiskPercent){
                        GlobalVariableSet("WaitExitProsadki",1);
                }
        }
        // вычисляем насколько процентов уехало вниз эквити
        if(AccBalance[1]>AccEquity[1]){
                double PercentProsadki=100-(AccEquity[1]*100/AccBalance[1]);
                if(PercentProsadki>=RiskPercent){
                        GlobalVariableSet("WaitExitProsadki",1);
                }
        }
}