HiTrader
Зарегистрирован: 29.11.2009
Сообщения: 9
|
Код: |
/*Модуль анализа дневных графиков*/
//Строим свечной график
Plot(C,"Close",1,64);
//Строим ЕМА
Plot(EMA(C,5),"EMA5",colorRed);
Plot(EMA(C,10),"EMA10",colorBlue);
//DateTime();
//------------------------------------------------------------------------------------------------------------------------------------
//1. Определяем направление тренда
//1.1. Определяем аптренд
CloseOverEMA = C > EMA(C,5) AND C > EMA(C,10);
EMA1_Over_EMA2 = EMA(C,5) > EMA(C,10);
UpADX = ADX(5) > (Ref(ADX(5),-1)) AND ADX(5) > 16;
Uptrend = CloseOverEMA AND EMA1_Over_EMA2 AND UpADX;
//1.2. Определяем даунтренд
CloseUnderEMA = C < EMA(C,5) AND C < EMA(C,10);
EMA1_Under_EMA2 = EMA(C,5) < EMA(C,10);
DownADX = ADX(5) > (Ref(ADX(5),-1)) AND ADX(5) > 16;
Downtrend = CloseUnderEMA AND EMA1_Under_EMA2 AND DownADX;
//1.3. Определяем текущий тренд
TotalTrend = Uptrend + 2 * Downtrend;
/* Значения текущего тренда
0-флэт, коррекция, ни аптренд, ни даунтренд
1-аптренд
2-даунтренд
3-и аптренд, и даунтренд, невозможная ситуация
*/
if(Status("action") == actionCommentary)
{
printf("1. Текущее состояние рынка:\n");
printf(WriteIf(TotalTrend == 0, "Флэт", WriteIf(TotalTrend==1, "Аптренд", "Даунтренд")));
}
//------------------------------------------------------------------------------------------------------------------------------------
//2. Определяем уровни поддержки/сопротивления
//LB= Param("Look Back Periods",10,1,30,1);
LB=5;
R=ValueWhen(Cross(MA(C,LB),C),HHV(H,LB),1);
S=ValueWhen(Cross(C,MA(C,LB)),LLV(L,LB),1);
Plot (R,"Resz",22,8+16);
Plot (S,"Supp",19,8+16);
if(Status("action") == actionCommentary)
{
printf("\n\n2. Текущий уровень сопротивления:\n%0.2f \n", R);
printf("Текущий уровень поддержки:\n%0.2f \n", S);
}
//------------------------------------------------------------------------------------------------------------------------------------
//3. Строим уровни Фибо
Offset = 3;
Avgmov = Offset*MA(abs(ROC(C,1)),20);
per = LastValue(Avgmov);
x=Cum(1); Range = 0.01;
PS = TroughBars(L,per,1) == 0;
xa = LastValue(ValueWhen(PS,x,1));//x from last trough
Ya = LastValue(ValueWhen(PS,L,1));//y (Low) last trough
PR = PeakBars(H,per,1) == 0;
xb = LastValue(ValueWhen(PR,x,1));//x from last peak
Yb = LastValue(ValueWhen(PR,H,1));//y (High) last peak
UP = xb>xa;//upSwing
DN = xa>xb;//DownSwing
RT23_6 = IIf(UP,yb-(yb-ya)*0.236,IIf(DN,ya+(yb-ya)*0.236,-1e10));
RT38_2 = IIf(UP,yb-(yb-ya)*0.382,IIf(DN,ya+(yb-ya)*0.382,-1e10));
RT50_0 = IIf(UP,yb-(yb-ya)*0.500,IIf(DN,ya+(yb-ya)*0.500,-1e10));
RT61_8 = IIf(UP,yb-(yb-ya)*0.618,IIf(DN,ya+(yb-ya)*0.618,-1e10));
RT78_6 = IIf(UP,yb-(yb-ya)*0.786,IIf(DN,ya+(yb-ya)*0.786,-1e10));
RT= IIf(UP,-100*(yb-L)/(yb-ya),100*(H-ya)/(yb-ya));//Retracement_Value
Plot(IIf(x>xa,ya,-1e10),"Bottom",colorBrown,5);
Plot(IIf(x>xb,yb,-1e10),"Top",colorBrown,5);
xab = IIf(xb>xa,xb,xa);
//Retracements
Plot(IIf(x>=xab+1,RT23_6,-1e10),"23,6% Retr.",colorGreen,5);
Plot(IIf(x>=xab+1,RT38_2,-1e10),"38,2% Retr.",colorBlue,5);
Plot(IIf(x>=xab+1,RT50_0,-1e10),"50,0% Retr.",colorRed,5);
Plot(IIf(x>=xab+1,RT61_8,-1e10),"61,8% Retr.",colorBlue,5);
Plot(IIf(x>=xab+1,RT78_6,-1e10),"78,6% Retr.",colorGreen,5);
if(Status("action") == actionCommentary)
{
printf("\n3. Текущий уровень коррекции:\n%0.2f", RT);
}
//------------------------------------------------------------------------------------------------------------------------------------
//4. Определяем силу акции
IndexClose = Foreign("MICEX","Close");
IndexOpen = Foreign("MICEX","Open");
SymbolClose = Close;
SymbolOpen = Open;
IndexClose1 = Ref(Foreign("MICEX","Close"),-1);
SymbolClose1 = Ref(Close,-1);
IndexChange = (IndexClose-IndexOpen)/IndexOpen*100;
IndexChange1 = (IndexClose-IndexClose1)/IndexClose1*100;
SymbolChange = (SymbolClose-SymbolOpen)/SymbolOpen*100;
SymbolChange1 = (SymbolClose-SymbolClose1)/SymbolClose1*100;
if(Status("action") == actionCommentary)
{
printf("\n\n4. Относительная сила акции:\n");
printf("Изменение акции за день:\nоткр. закр.\n%0.2f %0.2f", SymbolChange, SymbolChange1);
printf("\nИзменение индекса за день:\nоткр. закр.\n%0.2f %0.2f", IndexChange, IndexChange1);
}
//------------------------------------------------------------------------------------------------------------------------------------
//5. Определяем текущие паттерны
//Определяем параметры двух предыдущих свечей
O1 = Ref(O,-1);O2 = Ref(O,-2);
H1 = Ref(H,-1);H2 = Ref(H,-2);
L1 = Ref(L,-1);L2 = Ref(L,-2);
C1 = Ref(C,-1);C2 = Ref(C,-2);
//Функция идентификации паттернов свечей
function CandlePattern(P)
{
global PatternName;
if (P == 0) { PatternName = "BlackCandle"; Pv = (O>C); }
else if (P == 1) { PatternName = "LongBlackCandle"; Pv = (O>C AND (O-C)/(0.001+H-L)>0.6); }
else if (P == 2) { PatternName = "SmallBlackCandle"; Pv = ((O>C) AND ((H-L)>(3*(O-C)))); }
else if (P == 3) { PatternName = "WhiteCandle"; Pv = (C>O); }
else if (P == 4) { PatternName = "LongWhiteCandle"; Pv = ((C>O) AND ((C-O)/(0.001+H-L)>0.6)); }
else if (P == 5) { PatternName = "SmallWhiteCandle"; Pv = ((C>O) AND ((H-L)>(3*(C-O)))); }
else if (P == 6) { PatternName = "HangingMan"; Pv = (((H-L)>4*abs(O-C)) AND ((C-L)/(0.001+H-L)>= 0.75) AND ((O-L)/(0.001+H-L)>= 0.75)); }
else if (P == 7) { PatternName = "Hammer"; Pv = (((H-L)>3*abs(O-C)) AND ((C-L)/(0.001+H-L)>0.6) AND ((O-L)/(0.001+H-L)>0.6)); }
else if (P == 8) { PatternName = "InvertedHammer"; Pv = (((H-L)>3*abs(O-C)) AND ((H-C)/(0.001+H-L)>0.6) AND ((H-O)/(0.001+H-L)>0.6)); }
else if (P == 9) { PatternName = "ShootingStar"; Pv = (((H-L)>4*abs(O-C)) AND ((H-C)/(0.001+H-L)>= 0.75) AND ((H-O)/(0.001+H-L)>= 0.75)); }
else if (P == 10) { PatternName = "BearishEveningStar"; Pv = ((C2>O2) AND ((C2-O2)/(0.001+H2-L2)>0.6) AND ((H1-L1)>(3*abs(C1-O1))) AND (C2<C1) AND (C2<O1) AND (C<O) AND ((C2+O2)/2)>C); }
else if (P == 11) { PatternName = "DarkCloudCover"; Pv = ((C1>O1) AND ((C1-O1)/(0.001+H1-L1)>0.6) AND (O>H1) AND ((C-L)<0.2*(0.001+H-L)) AND ((C1+O1)/2>C) AND (O>C) AND (C>O1)); }
else if (P == 12) { PatternName = "BearishEngulfing"; Pv = (((O-C)>(C1-O1)) AND O>=C1 AND O1>=C AND O>C AND C1>O1); }
else if (P == 13) { PatternName = "BullishMorningStar"; Pv = ((O2>C2) AND ((O2-C2)/(0.001+H2-L2)>0.6) AND ((H1-L1)>(3*abs(C1-O1))) AND (C2>O1) AND (C2>C1) AND (C>O) AND ((C2+O2)/2<C)); }
else if (P == 14) { PatternName = "BullishEngulfing"; Pv = (((C-O)>(O1-C1)) AND (C>= O1) AND (C1>= O) AND (C>O) AND (O1>C1)); }
else if (P == 15) { PatternName = "BullishHarami"; Pv = ((O1-C1)/(0.001+H1-L1)>0.6 AND C1<O1 AND (H-L)>3*(C-O) AND O<C AND O>=C1 AND C<=O1); }
else if (P == 16) { PatternName = "PiercingLine"; Pv = (C1<O1 AND (C-O)/(0.001+H-L)>0.6 AND O<C AND O<L1 AND (C1+O1)/2<C AND C<O1); }
else if (P == 17) { PatternName = "BearishHarami"; Pv = ((C1-O1)/(0.001+H1-L1)>0.6 AND C1>O1 AND (H-L)>3*(O-C) AND O>C AND O<=C1 AND C>=O1); }
return Pv;
}
PatternNameList = "";
for(Cp=0; Cp<=17; Cp++)
{
VarSet("Pattern"+NumToStr(Cp,1.0),CandlePattern(Cp ));
PatternNameList = PatternNameList +PatternName+",";
}
BI = BarIndex();
SelectedBar = SelectedValue(BI) -BI[0];
PStr="";
for(Cp=0; Cp<=17; Cp++)
{
Temp = VarGet("Pattern"+NumToStr(Cp,1.0));
if(temp[SelectedBar]) Pstr=Pstr+"#"+NumToStr(Cp,1.0)+" - "+StrExtract(PatternNameList,Cp)+"\n";
}
if(Status("action") == actionCommentary)
{
printf("4. Текущие паттерны:\n"+ PStr);
}
//Title = "\nИдентификация паттернов \n"+ Pstr; |
|
|
|