58 lines
1.7 KiB
MQL5
58 lines
1.7 KiB
MQL5
|
#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
|