618 lines
24 KiB
MQL5
618 lines
24 KiB
MQL5
#include "price_speedometer.mqh"
|
|
|
|
void OnStart() {
|
|
test_period_in_ticks_zero_empty_ticks();
|
|
test_period_in_ticks_non_zero_empty_ticks();
|
|
test_period_in_ticks_zero_non_empty_ticks();
|
|
test_period_in_ticks_smaller_than_non_empty_ticks();
|
|
test_period_in_ticks_bigger_than_non_empty_ticks();
|
|
test_period_in_milliseconds_zero_empty_ticks();
|
|
test_period_in_milliseconds_non_zero_empty_ticks();
|
|
test_period_in_milliseconds_zero_non_empty_ticks();
|
|
test_period_in_milliseconds_smaller_than_non_empty_ticks();
|
|
test_period_in_milliseconds_bigger_than_non_empty_ticks();
|
|
test_copy_constructor();
|
|
test_copy_assignment();
|
|
Print("All tests passed.");
|
|
return;
|
|
}
|
|
|
|
void test_period_in_ticks_zero_empty_ticks() {
|
|
const int ticks_capacity = 256;
|
|
const int period_in_ticks = 0;
|
|
const long period_in_milliseconds = 0l;
|
|
Price_speedometer price_speedometer(ticks_capacity, period_in_ticks,
|
|
period_in_milliseconds);
|
|
price_speedometer.calculate_price_speeds();
|
|
price_speedometer.calculate_percents();
|
|
const double input_value_speed_per_ticks = 0.0;
|
|
const double input_value_directional_speed_per_ticks = 0.0;
|
|
const double input_value_percent_per_ticks = 0.0;
|
|
const double output_value_speed_per_ticks =
|
|
price_speedometer.get_speed_per_ticks();
|
|
const double output_value_directional_speed_per_ticks =
|
|
price_speedometer.get_directional_speed_per_ticks();
|
|
const double output_value_percent_per_ticks =
|
|
price_speedometer.get_percent_per_ticks();
|
|
if (output_value_speed_per_ticks != input_value_speed_per_ticks) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
if (output_value_directional_speed_per_ticks !=
|
|
input_value_directional_speed_per_ticks) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
if (output_value_percent_per_ticks != input_value_percent_per_ticks) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
return;
|
|
}
|
|
|
|
void test_period_in_ticks_non_zero_empty_ticks() {
|
|
const int ticks_capacity = 256;
|
|
const int period_in_ticks = 5;
|
|
const long period_in_milliseconds = 0l;
|
|
Price_speedometer price_speedometer(ticks_capacity, period_in_ticks,
|
|
period_in_milliseconds);
|
|
price_speedometer.calculate_price_speeds();
|
|
price_speedometer.calculate_percents();
|
|
const double input_value_speed_per_ticks = 0.0;
|
|
const double input_value_directional_speed_per_ticks = 0.0;
|
|
const double input_value_percent_per_ticks = 0.0;
|
|
const double output_value_speed_per_ticks =
|
|
price_speedometer.get_speed_per_ticks();
|
|
const double output_value_directional_speed_per_ticks =
|
|
price_speedometer.get_directional_speed_per_ticks();
|
|
const double output_value_percent_per_ticks =
|
|
price_speedometer.get_percent_per_ticks();
|
|
if (output_value_speed_per_ticks != input_value_speed_per_ticks) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
if (output_value_directional_speed_per_ticks !=
|
|
input_value_directional_speed_per_ticks) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
if (output_value_percent_per_ticks != input_value_percent_per_ticks) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
return;
|
|
}
|
|
|
|
void test_period_in_ticks_zero_non_empty_ticks() {
|
|
const int ticks_capacity = 256;
|
|
const int period_in_ticks = 0;
|
|
const long period_in_milliseconds = 0l;
|
|
Price_speedometer price_speedometer(ticks_capacity, period_in_ticks,
|
|
period_in_milliseconds);
|
|
const datetime time = 0ul;
|
|
const double bid = 0.0;
|
|
const double ask = 0.0;
|
|
double last = 1.0;
|
|
const ulong volume = 0ul;
|
|
const long time_msc = 1l;
|
|
const uint flags = 0u;
|
|
const double volume_real = 0.0;
|
|
const MqlTick tick_1 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_1);
|
|
last = -2.0;
|
|
const MqlTick tick_2 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_2);
|
|
last = 3.0;
|
|
const MqlTick tick_3 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_3);
|
|
last = -4.0;
|
|
const MqlTick tick_4 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_4);
|
|
last = 5.0;
|
|
const MqlTick tick_5 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_5);
|
|
price_speedometer.calculate_price_speeds();
|
|
price_speedometer.calculate_percents();
|
|
const double input_value_speed_per_ticks = 0.0;
|
|
const double input_value_directional_speed_per_ticks = 0.0;
|
|
const double input_value_percent_per_ticks = 0.0;
|
|
const double output_value_speed_per_ticks =
|
|
price_speedometer.get_speed_per_ticks();
|
|
const double output_value_directional_speed_per_ticks =
|
|
price_speedometer.get_directional_speed_per_ticks();
|
|
const double output_value_percent_per_ticks =
|
|
price_speedometer.get_percent_per_ticks();
|
|
if (output_value_speed_per_ticks != input_value_speed_per_ticks) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
if (output_value_directional_speed_per_ticks !=
|
|
input_value_directional_speed_per_ticks) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
if (output_value_percent_per_ticks != input_value_percent_per_ticks) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
return;
|
|
}
|
|
|
|
void test_period_in_ticks_smaller_than_non_empty_ticks() {
|
|
const int ticks_capacity = 256;
|
|
const int period_in_ticks = 3;
|
|
const long period_in_milliseconds = 0l;
|
|
Price_speedometer price_speedometer(ticks_capacity, period_in_ticks,
|
|
period_in_milliseconds);
|
|
const datetime time = 0ul;
|
|
const double bid = 0.0;
|
|
const double ask = 0.0;
|
|
double last = 1.0;
|
|
const ulong volume = 0ul;
|
|
const long time_msc = 1l;
|
|
const uint flags = 0u;
|
|
const double volume_real = 0.0;
|
|
const MqlTick tick_1 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_1);
|
|
last = -2.0;
|
|
const MqlTick tick_2 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_2);
|
|
last = 3.0;
|
|
const MqlTick tick_3 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_3);
|
|
last = -4.0;
|
|
const MqlTick tick_4 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_4);
|
|
last = 5.0;
|
|
const MqlTick tick_5 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_5);
|
|
price_speedometer.calculate_price_speeds();
|
|
price_speedometer.calculate_percents();
|
|
const double input_value_speed_per_ticks = 16.0;
|
|
const double input_value_directional_speed_per_ticks = 2.0;
|
|
const double input_value_percent_per_ticks = 2.0 / 16.0 * 100.0;
|
|
const double output_value_speed_per_ticks =
|
|
price_speedometer.get_speed_per_ticks();
|
|
const double output_value_directional_speed_per_ticks =
|
|
price_speedometer.get_directional_speed_per_ticks();
|
|
const double output_value_percent_per_ticks =
|
|
price_speedometer.get_percent_per_ticks();
|
|
if (output_value_speed_per_ticks != input_value_speed_per_ticks) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
if (output_value_directional_speed_per_ticks !=
|
|
input_value_directional_speed_per_ticks) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
if (output_value_percent_per_ticks != input_value_percent_per_ticks) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
return;
|
|
}
|
|
|
|
void test_period_in_ticks_bigger_than_non_empty_ticks() {
|
|
const int ticks_capacity = 256;
|
|
const int period_in_ticks = 7;
|
|
const long period_in_milliseconds = 0l;
|
|
Price_speedometer price_speedometer(ticks_capacity, period_in_ticks,
|
|
period_in_milliseconds);
|
|
const datetime time = 0ul;
|
|
const double bid = 0.0;
|
|
const double ask = 0.0;
|
|
double last = 1.0;
|
|
const ulong volume = 0ul;
|
|
const long time_msc = 1l;
|
|
const uint flags = 0u;
|
|
const double volume_real = 0.0;
|
|
const MqlTick tick_1 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_1);
|
|
last = -2.0;
|
|
const MqlTick tick_2 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_2);
|
|
last = 3.0;
|
|
const MqlTick tick_3 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_3);
|
|
last = -4.0;
|
|
const MqlTick tick_4 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_4);
|
|
last = 5.0;
|
|
const MqlTick tick_5 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_5);
|
|
price_speedometer.calculate_price_speeds();
|
|
price_speedometer.calculate_percents();
|
|
const double input_value_speed_per_ticks = 24.0;
|
|
const double input_value_directional_speed_per_ticks = 4.0;
|
|
const double input_value_percent_per_ticks = 4.0 / 24.0 * 100.0;
|
|
const double output_value_speed_per_ticks =
|
|
price_speedometer.get_speed_per_ticks();
|
|
const double output_value_directional_speed_per_ticks =
|
|
price_speedometer.get_directional_speed_per_ticks();
|
|
const double output_value_percent_per_ticks =
|
|
price_speedometer.get_percent_per_ticks();
|
|
if (output_value_speed_per_ticks != input_value_speed_per_ticks) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
if (output_value_directional_speed_per_ticks !=
|
|
input_value_directional_speed_per_ticks) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
if (output_value_percent_per_ticks != input_value_percent_per_ticks) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
return;
|
|
}
|
|
|
|
void test_period_in_milliseconds_zero_empty_ticks() {
|
|
const int ticks_capacity = 256;
|
|
const int period_in_ticks = 0;
|
|
const long period_in_milliseconds = 0l;
|
|
Price_speedometer price_speedometer(ticks_capacity, period_in_ticks,
|
|
period_in_milliseconds);
|
|
price_speedometer.calculate_price_speeds();
|
|
price_speedometer.calculate_percents();
|
|
const double input_value_speed_per_milliseconds = 0.0;
|
|
const double input_value_directional_speed_per_milliseconds = 0.0;
|
|
const double input_value_percent_per_milliseconds = 0.0;
|
|
const double output_value_speed_per_milliseconds =
|
|
price_speedometer.get_speed_per_milliseconds();
|
|
const double output_value_directional_speed_per_milliseconds =
|
|
price_speedometer.get_directional_speed_per_milliseconds();
|
|
const double output_value_percent_per_milliseconds =
|
|
price_speedometer.get_percent_per_milliseconds();
|
|
if (output_value_speed_per_milliseconds !=
|
|
input_value_speed_per_milliseconds) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
if (output_value_directional_speed_per_milliseconds !=
|
|
input_value_directional_speed_per_milliseconds) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
if (output_value_percent_per_milliseconds !=
|
|
input_value_percent_per_milliseconds) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
return;
|
|
}
|
|
|
|
void test_period_in_milliseconds_non_zero_empty_ticks() {
|
|
const int ticks_capacity = 256;
|
|
const int period_in_ticks = 0;
|
|
const long period_in_milliseconds = 5l;
|
|
Price_speedometer price_speedometer(ticks_capacity, period_in_ticks,
|
|
period_in_milliseconds);
|
|
price_speedometer.calculate_price_speeds();
|
|
price_speedometer.calculate_percents();
|
|
const double input_value_speed_per_milliseconds = 0.0;
|
|
const double input_value_directional_speed_per_milliseconds = 0.0;
|
|
const double input_value_percent_per_milliseconds = 0.0;
|
|
const double output_value_speed_per_milliseconds =
|
|
price_speedometer.get_speed_per_milliseconds();
|
|
const double output_value_directional_speed_per_milliseconds =
|
|
price_speedometer.get_directional_speed_per_milliseconds();
|
|
const double output_value_percent_per_milliseconds =
|
|
price_speedometer.get_percent_per_milliseconds();
|
|
if (output_value_speed_per_milliseconds !=
|
|
input_value_speed_per_milliseconds) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
if (output_value_directional_speed_per_milliseconds !=
|
|
input_value_directional_speed_per_milliseconds) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
if (output_value_percent_per_milliseconds !=
|
|
input_value_percent_per_milliseconds) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
return;
|
|
}
|
|
|
|
void test_period_in_milliseconds_zero_non_empty_ticks() {
|
|
const int ticks_capacity = 256;
|
|
const int period_in_ticks = 0;
|
|
const long period_in_milliseconds = 0l;
|
|
Price_speedometer price_speedometer(ticks_capacity, period_in_ticks,
|
|
period_in_milliseconds);
|
|
const datetime time = 0ul;
|
|
const double bid = 0.0;
|
|
const double ask = 0.0;
|
|
double last = 1.0;
|
|
const ulong volume = 0ul;
|
|
long time_msc = 1l;
|
|
const uint flags = 0u;
|
|
const double volume_real = 0.0;
|
|
const MqlTick tick_1 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_1);
|
|
last = -2.0;
|
|
time_msc = 2l;
|
|
const MqlTick tick_2 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_2);
|
|
last = 3.0;
|
|
time_msc = 3l;
|
|
const MqlTick tick_3 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_3);
|
|
last = -4.0;
|
|
time_msc = 4l;
|
|
const MqlTick tick_4 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_4);
|
|
last = 5.0;
|
|
time_msc = 5l;
|
|
const MqlTick tick_5 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_5);
|
|
price_speedometer.calculate_price_speeds();
|
|
price_speedometer.calculate_percents();
|
|
const double input_value_speed_per_milliseconds = 0.0;
|
|
const double input_value_directional_speed_per_milliseconds = 0.0;
|
|
const double input_value_percent_per_milliseconds = 0.0;
|
|
const double output_value_speed_per_milliseconds =
|
|
price_speedometer.get_speed_per_milliseconds();
|
|
const double output_value_directional_speed_per_milliseconds =
|
|
price_speedometer.get_directional_speed_per_milliseconds();
|
|
const double output_value_percent_per_milliseconds =
|
|
price_speedometer.get_percent_per_milliseconds();
|
|
if (output_value_speed_per_milliseconds !=
|
|
input_value_speed_per_milliseconds) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
if (output_value_directional_speed_per_milliseconds !=
|
|
input_value_directional_speed_per_milliseconds) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
if (output_value_percent_per_milliseconds !=
|
|
input_value_percent_per_milliseconds) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
return;
|
|
}
|
|
|
|
void test_period_in_milliseconds_smaller_than_non_empty_ticks() {
|
|
const int ticks_capacity = 256;
|
|
const int period_in_ticks = 0;
|
|
const long period_in_milliseconds = 2l;
|
|
Price_speedometer price_speedometer(ticks_capacity, period_in_ticks,
|
|
period_in_milliseconds);
|
|
const datetime time = 0ul;
|
|
const double bid = 0.0;
|
|
const double ask = 0.0;
|
|
double last = 1.0;
|
|
const ulong volume = 0ul;
|
|
long time_msc = 1l;
|
|
const uint flags = 0u;
|
|
const double volume_real = 0.0;
|
|
const MqlTick tick_1 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_1);
|
|
last = -2.0;
|
|
time_msc = 2l;
|
|
const MqlTick tick_2 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_2);
|
|
last = 3.0;
|
|
time_msc = 3l;
|
|
const MqlTick tick_3 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_3);
|
|
last = -4.0;
|
|
time_msc = 4l;
|
|
const MqlTick tick_4 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_4);
|
|
last = 5.0;
|
|
time_msc = 5l;
|
|
const MqlTick tick_5 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_5);
|
|
price_speedometer.calculate_price_speeds();
|
|
price_speedometer.calculate_percents();
|
|
const double input_value_speed_per_milliseconds = 16.0;
|
|
const double input_value_directional_speed_per_milliseconds = 2.0;
|
|
const double input_value_percent_per_milliseconds = 2.0 / 16.0 * 100.0;
|
|
const double output_value_speed_per_milliseconds =
|
|
price_speedometer.get_speed_per_milliseconds();
|
|
const double output_value_directional_speed_per_milliseconds =
|
|
price_speedometer.get_directional_speed_per_milliseconds();
|
|
const double output_value_percent_per_milliseconds =
|
|
price_speedometer.get_percent_per_milliseconds();
|
|
if (output_value_speed_per_milliseconds !=
|
|
input_value_speed_per_milliseconds) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
if (output_value_directional_speed_per_milliseconds !=
|
|
input_value_directional_speed_per_milliseconds) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
if (output_value_percent_per_milliseconds !=
|
|
input_value_percent_per_milliseconds) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
return;
|
|
}
|
|
|
|
void test_period_in_milliseconds_bigger_than_non_empty_ticks() {
|
|
const int ticks_capacity = 256;
|
|
const int period_in_ticks = 0;
|
|
const long period_in_milliseconds = 8l;
|
|
Price_speedometer price_speedometer(ticks_capacity, period_in_ticks,
|
|
period_in_milliseconds);
|
|
const datetime time = 0ul;
|
|
const double bid = 0.0;
|
|
const double ask = 0.0;
|
|
double last = 1.0;
|
|
const ulong volume = 0ul;
|
|
long time_msc = 1l;
|
|
const uint flags = 0u;
|
|
const double volume_real = 0.0;
|
|
const MqlTick tick_1 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_1);
|
|
last = -2.0;
|
|
time_msc = 2l;
|
|
const MqlTick tick_2 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_2);
|
|
last = 3.0;
|
|
time_msc = 3l;
|
|
const MqlTick tick_3 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_3);
|
|
last = -4.0;
|
|
time_msc = 4l;
|
|
const MqlTick tick_4 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_4);
|
|
last = 5.0;
|
|
time_msc = 5l;
|
|
const MqlTick tick_5 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer.add_tick(tick_5);
|
|
price_speedometer.calculate_price_speeds();
|
|
price_speedometer.calculate_percents();
|
|
const double input_value_speed_per_milliseconds = 24.0;
|
|
const double input_value_directional_speed_per_milliseconds = 4.0;
|
|
const double input_value_percent_per_milliseconds = 4.0 / 24.0 * 100.0;
|
|
const double output_value_speed_per_milliseconds =
|
|
price_speedometer.get_speed_per_milliseconds();
|
|
const double output_value_directional_speed_per_milliseconds =
|
|
price_speedometer.get_directional_speed_per_milliseconds();
|
|
const double output_value_percent_per_milliseconds =
|
|
price_speedometer.get_percent_per_milliseconds();
|
|
if (output_value_speed_per_milliseconds !=
|
|
input_value_speed_per_milliseconds) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
if (output_value_directional_speed_per_milliseconds !=
|
|
input_value_directional_speed_per_milliseconds) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
if (output_value_percent_per_milliseconds !=
|
|
input_value_percent_per_milliseconds) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
return;
|
|
}
|
|
|
|
void test_copy_constructor() {
|
|
const int ticks_capacity = 256;
|
|
const int period_in_ticks = 5;
|
|
const long period_in_milliseconds = 0l;
|
|
Price_speedometer price_speedometer_1(ticks_capacity, period_in_ticks,
|
|
period_in_milliseconds);
|
|
const datetime time = 0ul;
|
|
const double bid = 0.0;
|
|
const double ask = 0.0;
|
|
double last = 1.0;
|
|
const ulong volume = 0ul;
|
|
const long time_msc = 1l;
|
|
const uint flags = 0u;
|
|
const double volume_real = 0.0;
|
|
const MqlTick tick_1 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer_1.add_tick(tick_1);
|
|
last = -2.0;
|
|
const MqlTick tick_2 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer_1.add_tick(tick_2);
|
|
last = 3.0;
|
|
const MqlTick tick_3 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer_1.add_tick(tick_3);
|
|
last = -4.0;
|
|
const MqlTick tick_4 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer_1.add_tick(tick_4);
|
|
last = 5.0;
|
|
const MqlTick tick_5 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer_1.add_tick(tick_5);
|
|
const Price_speedometer price_speedometer_2(price_speedometer_1);
|
|
const double input_value = price_speedometer_1.get_speed_per_ticks();
|
|
const double output_value = price_speedometer_2.get_speed_per_ticks();
|
|
if (output_value != input_value) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
return;
|
|
}
|
|
|
|
void test_copy_assignment() {
|
|
const int ticks_capacity = 256;
|
|
const int period_in_ticks = 5;
|
|
const long period_in_milliseconds = 0l;
|
|
Price_speedometer price_speedometer_1(ticks_capacity, period_in_ticks,
|
|
period_in_milliseconds);
|
|
const datetime time = 0ul;
|
|
const double bid = 0.0;
|
|
const double ask = 0.0;
|
|
double last = 1.0;
|
|
const ulong volume = 0ul;
|
|
const long time_msc = 1l;
|
|
const uint flags = 0u;
|
|
const double volume_real = 0.0;
|
|
const MqlTick tick_1 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer_1.add_tick(tick_1);
|
|
last = -2.0;
|
|
const MqlTick tick_2 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer_1.add_tick(tick_2);
|
|
last = 3.0;
|
|
const MqlTick tick_3 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer_1.add_tick(tick_3);
|
|
last = -4.0;
|
|
const MqlTick tick_4 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer_1.add_tick(tick_4);
|
|
last = 5.0;
|
|
const MqlTick tick_5 = {time, bid, ask, last,
|
|
volume, time_msc, flags, volume_real};
|
|
price_speedometer_1.add_tick(tick_5);
|
|
const Price_speedometer price_speedometer_2 = price_speedometer_1;
|
|
const double input_value = price_speedometer_1.get_speed_per_ticks();
|
|
const double output_value = price_speedometer_2.get_speed_per_ticks();
|
|
if (output_value != input_value) {
|
|
Alert("Test failed in line ", __LINE__, ".");
|
|
ExpertRemove();
|
|
}
|
|
return;
|
|
}
|