This specialized technical indicator is designed to measure and visualize market "speed" and "sentiment" on a minute-by-minute basis. Rather than looking at standard price trends like moving averages, this tool focuses on the relationship between price movement and trading volume to identify significant shifts in momentum.
The Core Logic
The indicator operates on a fundamental principle: identifying instances where high activity creates a definitive trend. It looks for specific "stretched" bars where the intensity of the movement outweighs the amount of volume being traded.
Here is how the underlying logic functions:
- Measuring Relative Speed: The tool calculates the distance between the highest and lowest prices reached during a single minute. It then divides this distance by the total trading volume for that same period.
- Determining Directional Sentiment: It checks whether the price ended higher or lower than where it started within that minute. This provides the "direction" of the move (Bullish or Bearish).
- Visualizing the Intensity: By combining these factors, the indicator produces a value that represents the speed of the market. A high positive value suggests aggressive buying pressure, while a high negative value indicates aggressive selling pressure.
Practical Application
The logic is specifically designed to react to high-impact events, such as news releases, where price action often becomes volatile and rapid.
- Identifying Trends: When the "speed" reaches a certain threshold alongside significant volume, it suggests that one side of the market (the buyers or the sellers) has gained enough dominance to establish a trend.
- Trading Signals: Traders use these spikes to identify when a move is "stretched" enough to be actionable. For example, if the speed is high and the price closed higher than it opened, it signals a potential buy opportunity; conversely, a high speed with a lower close suggests a sell opportunity.
In summary, this script acts as a momentum sensor. It filters out "noisy" market movements to highlight moments where significant force—represented by both speed and volume—is driving the price in a specific direction.
// ---------------------------------------------------------------------------
// Èíäèêàòîð ñêîðîñòè íà ìèíóòêàõ ïî ìåòîäå Gorillych-à
// http://articles.mql4.com/ru/212
//
// Àâòîòîðãîâëÿ, ìíå êàæåòñÿ, ïðèçâàíà â ïåðâóþ î÷åðåäü çàñòàâèòü ìàøèíó
// äåëàòü òî, ÷åãî íåâîçìîæíî äîáèòüñÿ ðó÷íîé òîðãîâëåé: ñòàáèëüíîñòü,
// ïñèõîëîãè÷åñêàÿ óñòîé÷èâîñòü, áûñòðîòà ðåàêöèè íà ñèòóàöèþ,
// íåîãðàíè÷åííàÿ âûíîñëèâîñòü è ò.ï.
// Ïðèâåäó ïðèìåð. Íà ÷åìïèîíàòå 2006 ãîäà ó ìåíÿ ó÷àñòâîâàë ýêñïåðò, ó
// êîòîðîãî îñíîâíûì, íàâåðíîå, äîñòîèíñòâîì áûëî, ÷òî îí ìåòîäàìè
// òåõíè÷åñêîãî àíàëèçà ìîã òîðãîâàòü íà íîâîñòÿõ. Ïðè òîì, ÷òî åãî
// ïî-îïðåäåëåíèþ íåâîçìîæíî áûëî òåñòèðîâàòü íà èñòîðèè íà ÷åìïèîíàòå îí
// ïåðâîå âðåìÿ ïîêàçûâàë óäèâèòåëüíî õîðîøèå ðåçóëüòàòû. Íà åãî
// îêîí÷àòåëüíîì ðåçóëüòàòå ñêàçàëèñü åù¸ íåêîòîðûå äîïîëíèòåëüíûå îøèáî÷íûå
// èäåè â àëãîðèòìå åãî ðàáîòû.
// Íå áóäó ïðèâîäèòü âåñü êîä ýêñïåðòà, íî îñíîâíîé èäååé åãî áûë ðàñ÷åò
// íåêîåãî çíà÷åíèÿ Pv=(h-l)/Point/v; âíóòðè ìèíóòíîãî áàðà. È åñëè ýòî
// çíà÷åíèå ïðåâûøàëî 0,33 è îäíîâðåìåííî îáúåì ïðåâûøàë 12 (ïûòàëñÿ íàéòè
// ýòè çíà÷åíèÿ ïðè òåñòèðîâàíèè EURUSD) òî îòêðûâàëàñü ñäåëêà.
// Åñëè C>O BUY, åñëè C<O SELL. SL=50. TS=95.
// Íà ñëîâàõ èäåÿ áûëà â òîì, ÷òî åñòü íåêîòîðûå áàðû, ïîêàçûâàþùèå
// ñàíòèìåíò ïîñëåäóþùåãî äâèæåíèÿ. Êîãäà, íàïðèìåð, áûêè ïðåâîñõîäÿò
// ìåäâåäåé. Îáúåì, âëîæåííûé â áàð íà÷èíàåò åãî ðàñòÿãèâàòü, è ïðè
// äîñòàòî÷íîì ïîðîãîâîì îáúåìå ïîÿâëÿåòñÿ òðåíä.
// Â ñòàòüå íà ïðèâåäåííîì ïåðâîì ãðàôèêå âèäåí áàð íîâîñòåé.
// Òàê åãî ìîæíî òîðãîâàòü ïîäîáíûì ìåòîäîì â îáå ñòîðîíû, óäà÷íî
// ïîäîáðàâ SL è ÒS.
// ---------------------------------------------------------------------------
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 C'0,255,0'
#property indicator_minimum -20
#property indicator_maximum 20
#property indicator_style1 0
#property indicator_level1 0
double value[];
int init() {
IndicatorDigits(3);
IndicatorShortName("Gorillych");
if(!SetIndexBuffer(0, value)) {
Alert("SetIndexBuffer() FAILED");
}
return(0);
}
int start() {
int i, left = Bars - IndicatorCounted();
for(i = 0; i < left; i++) {
value[i] = ((High[i] - Low[i]) / Point / Volume[i]) *
misc_sign(Close[i] - Open[i]);
}
return(0);
}
// Âîçâðàùàåò çíàê ÷èñëà (-1;0;1)
int misc_sign(double value) {
if(value > 0) {
return(1);
} else if(value < 0) {
return(-1);
}
return(0);
}
Comments