input color LevelColor=clrAquamarine;
input int NullDay = 3; //во сколько часов сбрасываем переменную для одного сигнала в день
input int StartBar = 1; //начальная точка фибо
input int EndBar = 5; //конечная точка фибо
напишите коментарии логики, потому что я не вьезжаю… моя головушка совсем диградировала.
//+------------------------------------------------------------------+
//| 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
extern int Step=1000;
extern int BarsCount=100;
extern int LevelsCount=5;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int FractalsOnLevel(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) k++;
fdn=iFractals(NULL,0,MODE_LOWER,i);
if(fdn!=0 && fdn>p1 && fdn<p2) 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);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
int kup=0,kdn=0;
double fup=0,fdn=0;
for(int i=2; i<BarsCount; i++)
{
fup=iFractals(NULL,0,MODE_UPPER,i);
if(fup!=0) kup++;
fdn=iFractals(NULL,0,MODE_LOWER,i);
if(fdn!=0) kdn++;
}
for(int i=1; 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));
}
Comment("\n Верхних фракталов: ",kup,
"\n Нижних фракталов: ",kdn,
"\n Всего фракталов: ",kdn+kup,
"\n На первом этаже: ",FractalsOnLevel(1.06,1.1));
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| BetonFractal.mq4 |
//| Copyright 2015, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property description "Simple expert advisor"
//--- Inputs
extern double Lots = 0.1; // лот
extern int StopLoss = 500; // лось
extern int TakeProfit = 500; // язь
extern int Profit = 500; // язь в рублях
extern int Delta = 100; // расстояние от фрактала
extern int MAPeriod = 12; // период МА
extern int Slip = 30; // проскальзывание
extern int Shift = 2; // сдвиг баров назад
extern int Expiration = 44; // время истечения в часах
extern int Count = 100; // количество открываемых ордеров
extern int Magic = 123; // магик
int t=0;
//+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double AllProfit()
{
double profit=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) profit+=OrderProfit();
}
}
}
return (profit);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CloseAll()
{
bool cl;
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) cl=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Blue);
if(OrderType()==OP_SELL) cl=OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);
if(OrderType()==OP_BUYLIMIT) cl=OrderDelete(OrderTicket());
if(OrderType()==OP_SELLLIMIT) cl=OrderDelete(OrderTicket());
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void ClosePos()
{
double up=iFractals(NULL,0,MODE_UPPER,Shift);
double dn=iFractals(NULL,0,MODE_LOWER,Shift);
double ma=iMA(NULL,0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1);
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)
{
if(up>0 && Bid>ma)
{
CloseAll();
}
}
if(OrderType()==OP_SELL)
{
if(dn>0 && Ask<ma)
{
CloseAll();
}
}
}
}
}
return;
}
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void OpenPos()
{
double up=0,dn=0,ma=0,pr=0,sl=0,tp=0;
int res;
//--- get ind
up=iFractals(NULL,0,MODE_UPPER,Shift);
dn=iFractals(NULL,0,MODE_LOWER,Shift);
ma=iMA(NULL,0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1);
//--- sell conditions
if(up>0 && Bid>ma)
{
pr=NormalizeDouble(up+Delta*Point,Digits);
if(StopLoss>0) sl=NormalizeDouble(pr+StopLoss*Point,Digits);
if(TakeProfit>0) tp=NormalizeDouble(pr-TakeProfit*Point,Digits);
res=OrderSend(Symbol(),3,Lots,pr,Slip,sl,tp,"",Magic,TimeCurrent()+Expiration*3600,Red);
return;
}
//--- buy conditions
if(dn>0 && Ask<ma)
{
pr=NormalizeDouble(dn-Delta*Point,Digits);
if(StopLoss>0) sl=NormalizeDouble(pr-StopLoss*Point,Digits);
if(TakeProfit>0) tp=NormalizeDouble(pr+TakeProfit*Point,Digits);
res=OrderSend(Symbol(),2,Lots,pr,Slip,sl,tp,"",Magic,TimeCurrent()+Expiration*3600,Blue);
return;
}
//---
}
//+------------------------------------------------------------------+
//| OnTick function |
//+------------------------------------------------------------------+
void OnTick()
{
double up=0,dn=0,ma=0;
//--- get ind
up=iFractals(NULL,0,MODE_UPPER,Shift);
dn=iFractals(NULL,0,MODE_LOWER,Shift);
ma=iMA(NULL,0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1);
if(CountTrades()<Count && t!=Time[0])
{
OpenPos();
t=Time[0];
}
if(CountTrades()<1 && ((Close[1]>ma && Close[2]<ma)||(Close[1]<ma && Close[2]>ma))) CloseAll();
if(CountTrades()>0) ClosePos();
if(AllProfit()>Profit) CloseAll();
Comment("\n UP Fractal ",up,
"\n DN Fractal ",dn,
"\n Profit: ",AllProfit());
//---
}
//+------------------------------------------------------------------+
он тянет сетку по уровням верно, но сетка ложится неверно и получается невозможность работать
//+------------------------------------------------------------------+
//| 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
extern int Step=1000;
extern int BarsCount=100;
extern int LevelsCount=5;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int FractalsOnLevel(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) k++;
fdn=iFractals(NULL,0,MODE_LOWER,i);
if(fdn!=0 && fdn>p1 && fdn<p2) k++;
}
return(k);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
int kup=0,kdn=0;
double fup=0,fdn=0;
for(int i=2; i<BarsCount; i++)
{
fup=iFractals(NULL,0,MODE_UPPER,i);
if(fup!=0) kup++;
fdn=iFractals(NULL,0,MODE_LOWER,i);
if(fdn!=0) kdn++;
}
Comment("\n Верхних фракталов: ",kup,
"\n Нижних фракталов: ",kdn,
"\n Всего фракталов: ",kdn+kup,
"\n На первом этаже: ",FractalsOnLevel(1.06,1.1));
}
//+------------------------------------------------------------------+
считать фракталы просто,
Условия для покупок: Цвет индикатора зелёный, параметр Trend Power выше 65%
Условия для продаж: Цвет индикатора красный, параметр Trend Power выше 65%
AM2