яж деньгами на тел. рублей 700 скину!
а зачем не употребляете
Здравствуйте, к сожалению столько Ваших трудов, и времени пропали зря, то что получилось совершенно не соответствует задумке.
//+------------------------------------------------------------------+
//| DayFractal.mq4 |
//| Copyright 2015, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
//--- Inputs
extern double Lots = 0.1; // лот
extern int StopLoss = 500; // лось
extern int TakeProfit = 500; // язь
extern int Slip = 30; // реквот
extern int Step = 1000; // высота этажа
extern int BarsCount = 100; // баров для расчета
extern int LevelsCount = 5; // число этажей
extern int Magic = 123; // магик
datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int FractalsOnLevel(int type,double p1,double p2)
{
int k=0;
double fup=0,fdn=0;
for(int i=2; i<BarsCount; i++)
{
fup=iFractals(NULL,0,MODE_UPPER,i);
if(fup!=0 && fup>p1 && fup<p2)
{
if(type==0 || type==1)
{
k++;
}
}
fdn=iFractals(NULL,0,MODE_LOWER,i);
if(fdn!=0 && fdn>p1 && fdn<p2)
{
if(type==0 || type==2)
{
k++;
}
}
}
return(k);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double UpLevels(int count,int step)
{
double level=0;
level=NormalizeDouble(Close[0],2)+count*step*Point;
return(level);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double DnLevels(int count,int step)
{
double level=0;
level=NormalizeDouble(Close[0],2)-count*step*Point;
return(level);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutTrendLine(string name,datetime time1,datetime time2,double price)
{
ObjectCreate(0,name,OBJ_TREND,0,time1,price,time2,price);
//--- установим цвет линии
ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим стиль отображения линии
ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);
//--- установим толщину линии
ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,true);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CountTrades()
{
int count=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
int r=0;
double sl=0,tp=0;
int up=FractalsOnLevel(1,DnLevels(1,Step),UpLevels(0,Step));
int dn=FractalsOnLevel(2,DnLevels(1,Step),UpLevels(0,Step));
for(int i=0; i<=LevelsCount; i++)
{
PutTrendLine("LineUP"+IntegerToString(i),Time[BarsCount],Time[0],UpLevels(i,1000));
PutTrendLine("LineDN"+IntegerToString(i),Time[BarsCount],Time[0],DnLevels(i,1000));
}
if(t!=Time[0])
{
if(CountTrades()<1)
{
//--- sell conditions
if(up>dn)
{
if(StopLoss>0) sl=NormalizeDouble(Bid+StopLoss*Point,Digits);
if(TakeProfit>0) tp=NormalizeDouble(Bid-TakeProfit*Point,Digits);
r=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sl,tp,"",Magic,0,Red);
t=Time[0];
return;
}
//--- buy conditions
if(dn>up)
{
if(StopLoss>0) sl=NormalizeDouble(Ask-StopLoss*Point,Digits);
if(TakeProfit>0) tp=NormalizeDouble(Ask+TakeProfit*Point,Digits);
r=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,sl,tp,"",Magic,0,Blue);
t=Time[0];
return;
}
}
}
//---
Comment("\n Верхних фракталов: ",FractalsOnLevel(1,DnLevels(1,Step),UpLevels(0,Step)),
"\n Нижних фракталов: ",FractalsOnLevel(2,DnLevels(1,Step),UpLevels(0,Step)),
"\n Всего фракталов: ",FractalsOnLevel(0,DnLevels(1,Step),UpLevels(0,Step)),
"\n Верхний уровень этажа: ",UpLevels(0,Step),
"\n Нижний уровень этажа: ",DnLevels(1,Step));
}
//+------------------------------------------------------------------+
Нет это всё не то что нужно, у меня и так там уровней всяких полно так ещё и этот своих десяток нарисует.
//+----------------------------------------------------------------------------+
//| i-Sessions.mq4 |
//| |
//| Ким Игорь В. aka KimIV |
//| http://www.kimiv.ru |
//| |
//+----------------------------------------------------------------------------+
#property copyright "Ким Игорь В. aka KimIV"
#property link "http://www.kimiv.ru"
#property indicator_chart_window
//------- Внешние параметры индикатора ----------------------------------------+
extern int NumberOfDays = 5; // Количество дней
extern string AsiaBegin = "01:00"; // Открытие азиатской сессии
extern string AsiaEnd = "10:00"; // Закрытие азиатской сессии
extern color AsiaColor = Goldenrod; // Цвет азиатской сессии
extern string EurBegin = "07:00"; // Открытие европейской сессии
extern string EurEnd = "16:00"; // Закрытие европейской сессии
extern color EurColor = Tan; // Цвет европейской сессии
extern string USABegin = "14:00"; // Открытие американской сессии
extern string USAEnd = "23:00"; // Закрытие американской сессии
extern color USAColor = Pink; // Цвет американской сессии
extern int Style = 2; // Стиль линий объектов
extern bool FillBack = True; // Заливать объекты
extern bool ShowPrice = True; // Показывать ценовые уровни
extern bool ShowRect = False; // Показывать объекты
extern color clFont = Blue; // Цвет шрифта
extern int SizeFont = 8; // Размер шрифта
extern int OffSet = 10; // Смещение
//+----------------------------------------------------------------------------+
//| Custom indicator initialization function |
//+----------------------------------------------------------------------------+
void init()
{
DeleteObjects();
if(ShowRect)
{
for(int i=0; i<NumberOfDays; i++)
{
CreateObjects("AS"+i,AsiaColor);
CreateObjects("EU"+i,EurColor);
CreateObjects("US"+i,USAColor);
}
}
Comment("");
}
//+----------------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+----------------------------------------------------------------------------+
void deinit()
{
DeleteObjects();
Comment("");
}
//+----------------------------------------------------------------------------+
//| Создание объектов индикатора |
//| Параметры: |
//| no - наименование объекта |
//| cl - цвет объекта |
//+----------------------------------------------------------------------------+
void CreateObjects(string no,color cl)
{
ObjectCreate(no,OBJ_RECTANGLE,0,0,0,0,0);
ObjectSet(no,OBJPROP_STYLE,Style);
ObjectSet(no,OBJPROP_COLOR,cl);
ObjectSet(no,OBJPROP_BACK,FillBack);
}
//+----------------------------------------------------------------------------+
//| Удаление объектов индикатора |
//+----------------------------------------------------------------------------+
void DeleteObjects()
{
for(int i=0; i<NumberOfDays; i++)
{
ObjectDelete("AS"+i);
ObjectDelete("EU"+i);
ObjectDelete("US"+i);
}
ObjectDelete("ASup");
ObjectDelete("ASdn");
ObjectDelete("EUup");
ObjectDelete("EUdn");
ObjectDelete("USup");
ObjectDelete("USdn");
}
//+----------------------------------------------------------------------------+
//| Custom indicator iteration function |
//+----------------------------------------------------------------------------+
void start()
{
datetime dt=CurTime();
for(int i=0; i<NumberOfDays; i++)
{
if(ShowPrice && i==0)
{
DrawPrices(dt,"AS",AsiaBegin,AsiaEnd);
DrawPrices(dt,"EU",EurBegin,EurEnd);
DrawPrices(dt,"US",USABegin,USAEnd);
}
DrawObjects(dt,"AS"+i,AsiaBegin,AsiaEnd);
DrawObjects(dt,"EU"+i,EurBegin,EurEnd);
DrawObjects(dt,"US"+i,USABegin,USAEnd);
dt-=24*60*60;
while(TimeDayOfWeek(dt)<1 || TimeDayOfWeek(dt)>5) dt-=24*60*60;
}
}
//+----------------------------------------------------------------------------+
//| Прорисовка объектов на графике |
//| Параметры: |
//| dt - дата торгового дня |
//| no - наименование объекта |
//| tb - время начала сессии |
//| te - время окончания сессии |
//+----------------------------------------------------------------------------+
void DrawObjects(datetime dt,string no,string tb,string te)
{
datetime t1,t2;
double p1,p2;
int b1,b2;
t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb);
t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te);
b1=iBarShift(NULL, 0, t1);
b2=iBarShift(NULL, 0, t2);
p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2+1, b2)];
p2=Low [Lowest (NULL, 0, MODE_LOW , b1-b2+1, b2)];
ObjectSet(no,OBJPROP_TIME1,t1);
ObjectSet(no,OBJPROP_PRICE1,p1);
ObjectSet(no,OBJPROP_TIME2,t2);
ObjectSet(no,OBJPROP_PRICE2,p2);
}
//+----------------------------------------------------------------------------+
//| Прорисовка ценовых меток на графике |
//| Параметры: |
//| dt - дата торгового дня |
//| no - наименование объекта |
//| tb - время начала сессии |
//| te - время окончания сессии |
//+----------------------------------------------------------------------------+
void DrawPrices(datetime dt,string no,string tb,string te)
{
datetime t1,t2;
double p1,p2;
int b1,b2;
t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb);
t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te);
b1=iBarShift(NULL, 0, t1);
b2=iBarShift(NULL, 0, t2);
p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2, b2)];
p2=Low [Lowest (NULL, 0, MODE_LOW , b1-b2, b2)];
if(ObjectFind(no+"up")<0) ObjectCreate(no+"up",OBJ_TEXT,0,0,0);
ObjectSet(no+"up",OBJPROP_TIME1,t2);
ObjectSet(no+"up",OBJPROP_PRICE1,p1+(OffSet+SizeFont)*Point);
ObjectSet(no+"up",OBJPROP_COLOR,clFont);
ObjectSet(no+"up",OBJPROP_FONTSIZE,SizeFont);
ObjectSetText(no+"up",DoubleToStr(p1+Ask-Bid,Digits));
if(ObjectFind(no+"dn")<0) ObjectCreate(no+"dn",OBJ_TEXT,0,0,0);
ObjectSet(no+"dn",OBJPROP_TIME1,t2);
ObjectSet(no+"dn",OBJPROP_PRICE1,p2-OffSet*Point);
ObjectSet(no+"dn",OBJPROP_COLOR,clFont);
ObjectSet(no+"dn",OBJPROP_FONTSIZE,SizeFont);
ObjectSetText(no+"dn",DoubleToStr(p2,Digits));
}
//+----------------------------------------------------------------------------+
Вот посидел над своей стратегией и решил что мне не хватает ещё одного индикатора
Быстрое преобразование Фурье
Алгоритм проводит быстрое преобразование Фурье комплексной
функции, заданной nn отсчетами на действительной оси.
Вам остается только добавить свои условия.
AM2