//+------------------------------------------------------------------+
//| stop_level0.mq4 |
//| (c)kukan |
//| http://www.kukan.ru |
//+------------------------------------------------------------------+
#property copyright "(c)kukan"
#property link "http://www.kukan.ru"
//27 ìàðòà 2006 ã.
//íà èäåþ ñîçäàíèÿ ýòîãî èíäèêàòîðà íàòîëêíóë íå÷àéíî ïîëó÷èâøèéñÿ èíäèêàòîð
//many_line_2, êîòîðûé ïîêàçûâàåò òðàåêòîðèþ 50-òè ïðîöåíòíîé êîððåêöèè.
//äàííûé èíäèêàòîð ñîâìåùàåò â ñåáå 4 îäèíàêîâûõ èíäèêàòîðà ñ ðàçíûìè íàñòðîéêàìè
//
//ïðèíöèï ðàáîòû ñëåäóþùèé.... åñëè öåíà ïåðåñåêàåò 50-ïðîöåíòíóþ êîððåêöèþ,
//òî ëèíèÿ ïåðåñêàêèâàåò íà 50-ïðîöåíòíóþ êîððåêöèþ îò òîãî äâèæåíèÿ êîòîðîå ïåðåñåêëî.
//åñëè öåíà óøëà äàëüøå ÷åì íà "max_reset"
//
//äîïèñóþ 29 ìàðòà äîìà..... áîëåþ ÷óòü ïðîñòóäèôèëèñîì :)
//
//çàêàí÷èâàþ ïåðâûé âàðèàíò, ïîïðèñìàòðèâàþñü ê íåìó.... íàñòðîéêàìè ïîèãðàþñü....
//ïîñìîòðþ ÷òî ìîæíî óëó÷øèòü....
//
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 DarkOrange //
#property indicator_color2 Goldenrod //
#property indicator_color3 DarkGoldenrod //
#property indicator_color4 Sienna //
//---- input parameters
#define qty_line 4 //êîëè÷åñòâî ëèíèé èíäèêîòîðà
extern int mix_ampli_0=25; //ìèíèìàëüíàÿ àìïëèòóäà äëÿ îïðåäåëåíèÿ ýêñòðåìóìà
extern int max_ampli_0=60; //ìàêñèìàëüíàÿ àìïëèòóäà -><-
extern bool line_0_yes=true; //ðèñîâàòü èëè íåò
extern int mix_ampli_1=40;
extern int max_ampli_1=100;
extern bool line_1_yes=true;
extern int mix_ampli_2=50;
extern int max_ampli_2=140;
extern bool line_2_yes=true;
extern int mix_ampli_3=60;
extern int max_ampli_3=180;
extern bool line_3_yes=true;
//
extern bool spread_yes=true; //ó÷èòûâàòü ñïðåä
extern bool fl_ofset=true; //ñìåùåíèå íà ïèïñ ââåðõ êàæäîé ëèíèè äëÿ óäîáñòâà âèçóàëèçàöèè
extern bool corr_or_lsp=false; //ëèíèÿ ðèñóåò êîððåêöèþ èëè óðîâåíü ñòîïà
extern bool fl_price_level=true; //ðèñîâàòü îáüåêòû öåíû óðîâíåé
//
extern int limit_bars=30000; //îãðàíè÷åíèå íà êîëëè÷åñòâî ñ÷èòàåìûõ áàðîâ
//àêòóàëüíî äëÿ òåõ ó êîãî â òåðìèíàëàõ î÷åíü áîëüøàÿ èñòîðèÿ
int ampli[qty_line]; //àìïëèòóäû ôèêñàöèè ýêñòðåìóìà
int ext_hl[qty_line]; //òåêóùèé ýêñòðåìóì 0-ëîó 1-õàé
bool corr_50_valid[qty_line]; //ñîâïàäåíèå öåíû ëèíèè ñ ðåàëüíîé êîððåêöèåé
double price_max[qty_line],price_min[qty_line]; //öåíû ìåæäó êîòîðûìè èäåò êîððåêöèÿ
double corr_50[qty_line]; //50% êîðååêöèÿ
double level_stop[qty_line]; //óðîâåíü ñòîïà
int i,ia=0;
int spread; //çíà÷åíè ñïðåäà â ïóíêòàõ
//èíäèêàòîðíûå áóôåðà
double ind_buffer1[];
double ind_buffer2[];
double ind_buffer3[];
double ind_buffer4[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexBuffer(0,ind_buffer1);
SetIndexBuffer(1,ind_buffer2);
SetIndexBuffer(2,ind_buffer3);
SetIndexBuffer(3,ind_buffer4);
//
ArrayInitialize(ind_buffer1,EMPTY_VALUE);
ArrayInitialize(ind_buffer2,EMPTY_VALUE);
ArrayInitialize(ind_buffer3,EMPTY_VALUE);
ArrayInitialize(ind_buffer4,EMPTY_VALUE);
//
spread=0;
if (spread_yes) spread=MarketInfo("EURUSD",MODE_SPREAD);
if (Bars-1>limit_bars) i=limit_bars;
else i=Bars-1;
ArrayInitialize(price_max,High[i]+spread*Point);
ArrayInitialize(price_min,Low[i]);
ArrayInitialize(corr_50_valid,false);
//
//èíèöèàëèçàöèÿ ïàðàìåòðà ôèêñàöèè ýêñòðåìóìà
ampli[0]=mix_ampli_0;
ampli[1]=mix_ampli_1;
ampli[2]=mix_ampli_2;
ampli[3]=mix_ampli_3;
//
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
i=Bars-counted_bars-1;
//
if (i>1 && false)
{//ïðîïóùåíî êàêîåòî êîëè÷åñòâî áàðîâ (áîëüøå îäíîãî) íóæíî ïåðåñ÷èòàòü
//âåñü èíäèêàòîð, ÷òîá ýòîò ôðàãìåíò ðàáîòàë íóæíî óáðàòü false â if
init();
}
if (i>limit_bars) i=limit_bars; //åñëè áàðîâ áîëüøå limit_bars, òî áóäåì ñ÷èòàòü limit_bars, à òî òÿæåëî
#define ofset_vg 0
while(i>=0)
{
if (corr_or_lsp)
{
//........................................................
if (!calc_extr(0,i,max_ampli_0,mix_ampli_0) && line_0_yes)
{
ind_buffer1[i]=corr_50[0]+(ofset_vg+0)*Point*fl_ofset;
}
if (!calc_extr(1,i,max_ampli_1,mix_ampli_1) && line_1_yes)
{
ind_buffer2[i]=corr_50[1]+(ofset_vg+1)*Point*fl_ofset;
}
if (!calc_extr(2,i,max_ampli_2,mix_ampli_2) && line_2_yes)
{
ind_buffer3[i]=corr_50[2]+(ofset_vg+2)*Point*fl_ofset;
}
if (!calc_extr(3,i,max_ampli_3,mix_ampli_3) && line_3_yes)
{
ind_buffer4[i]=corr_50[3]+(ofset_vg+3)*Point*fl_ofset;
}
//........................................................
}
else
{
//........................................................
if (!calc_extr(0,i,max_ampli_0,mix_ampli_0) && line_0_yes)
{
ind_buffer1[i]=level_stop[0]+(ofset_vg+0)*Point*fl_ofset;
}
if (!calc_extr(1,i,max_ampli_1,mix_ampli_1) && line_1_yes)
{
ind_buffer2[i]=level_stop[1]+(ofset_vg+1)*Point*fl_ofset;
}
if (!calc_extr(2,i,max_ampli_2,mix_ampli_2) && line_2_yes)
{
ind_buffer3[i]=level_stop[2]+(ofset_vg+2)*Point*fl_ofset;
}
if (!calc_extr(3,i,max_ampli_3,mix_ampli_3) && line_3_yes)
{
ind_buffer4[i]=level_stop[3]+(ofset_vg+3)*Point*fl_ofset;
}
//........................................................
}
//
i--;
}
//----
return(0);
}
//+------------------------------------------------------------------+
//ãëàâíàÿ ïðîöåäó îáñëóæèâàíèÿ ïåðåïèñîâàíèé ýêñòðåìóìîâ
//âõîäíîé ïàðàìåòð íîìåð ðàñ÷åòà,íîìåð áàðà, ìàêñèìàëüíûé àìïëèòóäà è ìèíèìàëüíàÿ
//ïðîöåäóðà âîçâðàùàåò ïåðåâîðîò ëèíèè
bool calc_extr(int number, int n_bars,int max_aml,int min_aml)
{
//_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+
//ðàñ÷åò ïåðåâîðîòà ëèíèè.... â áàðå êîòîðîì ïåðåïèñàí ýêñòðåìóì íå ìîæåò áûòü ïåðåâîðîòà
//ñîîòâåòâåííî íóæíî âûáèðàòü ïðàâèëüíî òàéì ôðåéì äëÿ ýòîãî èíäèêàòîðà
if (ext_hl[number]==1)
{//âûøå ëèíèè--ñìîòðèì ðîæäåíèå ýêñòðåìóìà
if (Low[n_bars]<=price_max[number]-ampli[number]*Point)
{//ðîæäåí ýêñòðåìóì - ïåðåâîðîò corr_50_valid
price_min[number]=Low[n_bars];
ext_hl[number]=0;
//..........................................
calc_ampli(number,max_aml,min_aml);
//..........................................
return(true);//ïðîèçîøåë ïåðåâîðîò
}
}//îò âûøå ëèíèè
else
{//íèæå ëèíèè
if (High[n_bars]+spread*Point>=price_min[number]+ampli[number]*Point)
{//ðîæäåí ýêñòðåìóì - ïåðåâîðîò corr_50_valid
price_max[number]=High[n_bars]+spread*Point;
ext_hl[number]=1;
//..........................................
calc_ampli(number,max_aml,min_aml);
//..........................................
return(true);//ïðîèçîøåë ïåðåâîðîò
}
}//îò íèæå ëèíèè
//íå áûëî ïåðåâîðîòà
if (High[n_bars]+spread*Point>price_max[number])
{
//ýêñòðåìóì ïåðåïèñàí
price_max[number]=High[n_bars]+spread*Point;
ext_hl[number]=1;
//..........................................
calc_ampli(number,max_aml,min_aml);
//..........................................
}
if (Low[n_bars]<price_min[number])
{
//ýêñòðåìóì ïåðåïèñàí
price_min[number]=Low[n_bars];
ext_hl[number]=0;
//..........................................
calc_ampli(number,max_aml,min_aml);
//..........................................
}
return(false);//íå áûëî ïåðåâîðîòà
}
//+------------------------------------------------------------------+
void calc_ampli(int number,int max_aml,int min_aml)
{
corr_50[number]=(price_max[number]-price_min[number])*0.5+price_min[number];
ampli[number]=MathAbs((price_max[number]-corr_50[number])/Point);
//..........................................
corr_50_valid[number]=true;
if (ampli[number]<min_aml)
{
ampli[number]=min_aml; //ñëèøêîì ìåëêèå äâèæåíèÿ äëÿ ðåàêöèè
corr_50_valid[number]=false;
}
if (ampli[number]>max_aml)
{
ampli[number]=max_aml; //ïåðåñòàëè óøèðÿòüñÿ-îáû÷íûé òðàë-- "ñëèøêîì ìíîãî ïðèáûëè :))"
corr_50_valid[number]=false;
}
//..........................................
if (ext_hl[number]==1) level_stop[number]=price_max[number]-ampli[number]*Point;
else level_stop[number]=price_min[number]+ampli[number]*Point;
}
//+------------------------------------------------------------------+
Comments