EA-Setka-2/logic/calc/calc_grid_step.mqh

58 lines
1.7 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 14:50:44 +02:00
#ifndef GRID_STEP_CALC_MQH
#define GRID_STEP_CALC_MQH
#include "../setting.mqh"
class calc_grid_step {
private:
static bool is_lvl1 ( setting_t *settings, int order_count ) {
return settings.grid_level != 0
&& order_count >= settings.grid_level;
}
static bool is_lvl2 ( setting_t *settings, int order_count ) {
return settings.grid_level2 != 0
&& is_lvl1 ( settings, order_count )
&& order_count >= settings.grid_level2;
}
static bool is_lvl3 ( setting_t *settings, int order_count ) {
return settings.grid_level3 != 0
&& is_lvl2 ( settings, order_count )
&& order_count >= settings.grid_level3;
}
public:
static int get ( setting_t *settings, int lvl ) {
int result = settings.grid_step;
if ( settings.grid_stop != 0 && settings.grid_stop < lvl ) {
lvl = settings.grid_stop;
}
// Очень важен порядок проверки условий он сокращается кол-во условий
if ( is_lvl3 ( settings, lvl ) ) {
result = get ( settings, lvl - ( lvl - settings.grid_level3 + 1 ) );
int count = lvl + 1 - settings.grid_level3;
for ( int i = 0; i < count; i++ ) {
result += settings.grid_level3_add_pips;
}
} else if ( is_lvl2 ( settings, lvl ) ) {
result = get ( settings, lvl - ( lvl - settings.grid_level2 + 1 ) );
int count = lvl + 1 - settings.grid_level2;
for ( int i = 0; i < count; i++ ) {
result += settings.grid_level2_add_pips;
}
} else if ( is_lvl1 ( settings, lvl ) ) {
result = settings.grid_step + ( settings.grid_value * ( lvl + 1 - settings.grid_level ) );
}
return result;
}
};
#endif