Решение для мониторинга и отображения дельты для каждого вызова aMarketEVENT события start()
(после получения aMarketQUOTE, также известного как тик)
Во-первых, вам нужен метод для хранения и сохранения значения, которое тем временем становится "старым", прежде чем start()
( ну на самом деле OnTick()
в новый век MQL ) вызывается в следующий раз.
static double
— разумный способ:
static double previousVALUE = EMPTY; // initialised to EMPTY
Далее инициализируйте его в соответствии с последовательной логикой пользовательского индикатора "SS2009_B".
if ( previousVALUE == EMPTY ) {
previousVALUE = iCustom( NULL, // a Symbol
0, // a TimeFRAME
"SS2009_B",
0,
0, // a Buffer# to get value from
1 // step-back one Bar
);
}
Подробнее о синтаксисе см. в документации по MQL4.
double iCustom(
string symbol, // symbol
int timeframe, // timeframe
string name, // path/name of the custom indicator compiled program
... // custom indicator input parameterA (if
... // custom indicator input parameterB (if
... // custom indicator input parameterC (if necessary)
int mode, // line index
int shift // shift
);
Наконец вычислите дельту и отобразите ее в пользовательском интерфейсе и перетасуйте, чтобы подготовиться к следующему звонку.
double currentVALUE = iCustom( NULL, 0, "SS2009_B", 0, 0, 0);
double deltaVALUE = previousVALUE - currentVALUE;
previousVALUE = currentVALUE; // shuffle [1]<-[0] before RET/next call
if ( deltaVALUE > 0 ){
ObjectSetText( "TimeLabel11",
"RESULT: " + NormalizeDouble( deltaVALUE, Digits ) + "|^|",
fsize,
"Courier New",
Yellow // can be deltaVALUE specific too :o)
);
}
if ( deltaVALUE < 0 ){
ObjectSetText( "TimeLabel11",
"RESULT: " + NormalizeDouble( deltaVALUE, Digits ) + "|v|",
fsize,
"Courier New",
Cyan // can be deltaVALUE specific too :o)
);
}
Несколько замечаний о точности чисел с плавающей запятой
Вы можете заметить использование NormalizeDouble()
Это достаточно важный шаг, чтобы избежать проблем со сравнением поплавков.
Если точности стандартных чисел с плавающей запятой ( MQL4 double
) недостаточно, вы можете включить использование чисел повышенной точности в MQL4. Проверьте документацию для этого.
Однако всегда будьте осторожны при сравнении чисел с плавающей запятой.
Наилучшая практика в целях безопасности — использовать как NormalizeDouble()
(в качестве профилактики), так и сравнивать с некоторыми thresholdDELTA
, например if ( MathAbs( floatA - floatB ) < anEqualityTresholdDELTA ){ ... }
, а не if ( floatA == floatB ) {...}
.
person
user3666197
schedule
08.09.2014