Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Дневной модуль анализа для Amibroker Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
HiTrader



Зарегистрирован: 29.11.2009
Сообщения: 9

СообщениеДобавлено: Вс Мар 20, 2011 8:01 pm Ответить с цитатой Вернуться к началу

Код:
/*Модуль анализа дневных графиков*/
//Строим свечной график
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;
Посмотреть профиль Отправить личное сообщение
HiTrader



Зарегистрирован: 29.11.2009
Сообщения: 9

СообщениеДобавлено: Пн Мар 21, 2011 7:49 pm Ответить с цитатой Вернуться к началу

правой кликай на чарте, далее Edit Formula. Ctrl+A, Del. Далее копируем код и вставляем в очищенный редактор формул, далее Apply Indicator.
Image
Посмотреть профиль Отправить личное сообщение
spitfire



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

СообщениеДобавлено: Ср Мар 23, 2011 10:26 am Ответить с цитатой Вернуться к началу

Полезная вещь, спасибо!
Посмотреть профиль Отправить личное сообщение ICQ Number
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen