
более подробно на сайте
//+------------------------------------------------------------------+
//| Buzel.mq4 |
//| Copyright 2017, AM2 |
//| http://www.forexsyatems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, AM2"
#property link "http://www.forexsyatems.biz"
#property version "1.00"
#property strict
//--- Inputs
extern double Lots = 0.1; // лот
extern double KLot = 1; // умножение лота
extern double MaxLot = 5; // максимальный лот
extern int StopLoss = 350; // лось
extern int TakeProfit = 200; // язь
extern int Delta = 300; //
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
bool b=1,s=1;
datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Comment("");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
{
int r=0;
color clr=Green;
double sl=0,tp=0;
if(type==1 || type==3 || type==5)
{
clr=Red;
if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits);
if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
}
if(type==0 || type==2 || type==4)
{
clr=Blue;
if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits);
if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
}
r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double Lot()
{
double lot=Lots;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()>0) break;
if(OrderProfit()<0)
{
lot=OrderLots()*KLot;
break;
}
}
}
if(lot>MaxLot)lot=Lots;
return(lot);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
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()<2) count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(t!=Time[0])
{
b=1;s=1;
t=Time[0];
}
if(Open[0]-Bid>Delta*Point && b)
{
PutOrder(0,Ask);b=0;s=1;
}
if(Bid-Open[0]>Delta*Point && s)
{
PutOrder(1,Bid);s=0;b=1;
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Buzel.mq4 |
//| Copyright 2017, AM2 |
//| http://www.forexsyatems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, AM2"
#property link "http://www.forexsyatems.biz"
#property version "1.00"
#property strict
//--- Inputs
extern double Lots = 0.1; // лот
extern double KLot = 1; // умножение лота
extern double MaxLot = 5; // максимальный лот
extern int StopLoss = 350; // лось
extern int TakeProfit = 200; // язь
extern int Delta = 300; //
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
bool b=1,s=1;
datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Comment("");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
{
int r=0;
color clr=Green;
double sl=0,tp=0;
if(type==1 || type==3 || type==5)
{
clr=Red;
if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits);
if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
}
if(type==0 || type==2 || type==4)
{
clr=Blue;
if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits);
if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
}
r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double Lot()
{
double lot=Lots;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()>0) break;
if(OrderProfit()<0)
{
lot=OrderLots()*KLot;
break;
}
}
}
if(lot>MaxLot)lot=Lots;
return(lot);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
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()<2) count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(t!=Time[0])
{
b=1;s=1;
t=Time[0];
}
if(Bid-Open[0]>Delta*Point && b)
{
PutOrder(0,Ask);b=0;
}
if(Open[0]-Bid>Delta*Point && s)
{
PutOrder(1,Bid);s=0;
}
}
//+------------------------------------------------------------------+
А не могли бы прилепить
//+------------------------------------------------------------------+
//| |
//| Copyright © 2000-2007, MetaQuotes Software Corp. |
//| http://www.metaquotes.ru |
//+------------------------------------------------------------------+
/**
* ACD_2.mq4
* Pivot Range and Previous High/Low
**/
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Aqua
#property indicator_color2 Aqua
#property indicator_color3 Aqua
#property indicator_color4 White
#property indicator_color5 White
#property indicator_color6 Red
#property indicator_color7 Green
#property indicator_color8 Orchid
//Input Params
extern string PivotRangeStart="00:30";
extern string PivotRangeEnd="00:30";
extern bool DisplayPivotPoint=true;
extern bool DisplayPreviousHighLow=true;
extern bool DisplayMAs=false;
//----
double Buffer1[];
double Buffer2[];
double Buffer3[];
double Buffer4[];
double Buffer5[];
double Buffer6[];
double Buffer7[];
double Buffer8[];
double pivots[50];
//----
double pivotRangeHigh;
double pivotRangeLow;
double pivotRangeClose;
double pivotPoint;
double pivotDiff;
double pivotTop=0;
double pivotBottom=0;
double pivot14MA;
double pivot30MA;
double pivot50MA;
//----
int openBar;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
SetIndexStyle(0,DRAW_LINE, STYLE_DOT, 1);
SetIndexBuffer(0,Buffer1);
SetIndexLabel(0,"Pivot Point");
SetIndexStyle(1,DRAW_LINE, STYLE_DASH, 1);
SetIndexBuffer(1,Buffer2);
SetIndexLabel(1,"Pivot Range Top");
SetIndexStyle(2,DRAW_LINE, STYLE_DASH, 1);
SetIndexBuffer(2,Buffer3);
SetIndexLabel(2,"Pivot Range Bottom");
SetIndexStyle(3,DRAW_LINE, STYLE_SOLID, 1);
SetIndexBuffer(3,Buffer4);
SetIndexLabel(3,"Previous Day High");
SetIndexStyle(4,DRAW_LINE, STYLE_SOLID, 1);
SetIndexBuffer(4,Buffer5);
SetIndexLabel(4,"Previous Day Low");
SetIndexStyle(5,DRAW_LINE);
SetIndexBuffer(5,Buffer6);
SetIndexLabel(5,"14 MA");
SetIndexStyle(6,DRAW_LINE);
SetIndexBuffer(6,Buffer7);
SetIndexLabel(6,"30 MA");
SetIndexStyle(7,DRAW_LINE);
SetIndexBuffer(7,Buffer8);
SetIndexLabel(7,"50 MA");
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
string barTime="", lastBarTime="";
string barDay="", lastBarDay="";
int closeBar;
//----
for(int i=Bars; i>=0; i--)
{
barTime=TimeToStr(Time[i], TIME_MINUTES);
lastBarTime=TimeToStr(Time[i+1], TIME_MINUTES);
barDay=TimeToStr(Time[i],TIME_DATE);
lastBarDay=TimeToStr(Time[i+1],TIME_DATE);
//need to handle if pivotrangestart/end is 00:00
if ((PivotRangeEnd=="00:00" && barTime>=PivotRangeEnd && barDay>lastBarDay) || (barTime>=PivotRangeEnd && lastBarTime<PivotRangeEnd))
{
closeBar=i + 1;
//----
if (openBar>0)
{
calculatePivotRangeValues(openBar, closeBar);
}
}
if ((PivotRangeStart=="00:00" && barTime>=PivotRangeStart && barDay>lastBarDay) || (barTime>=PivotRangeStart && lastBarTime<PivotRangeStart))
{
openBar=i;
}
if (openBar>0)
{
drawIndicators(i);
}
}
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void calculatePivotRangeValues(int opBar, int closeBar)
{
pivotRangeHigh=High[Highest(NULL, 0, MODE_HIGH, (opBar - closeBar + 1), closeBar)];
pivotRangeLow=Low[Lowest(NULL, 0, MODE_LOW, (opBar - closeBar + 1), closeBar)];
pivotRangeClose=Close[closeBar];
pivotPoint=((pivotRangeHigh + pivotRangeLow)/2);
pivotDiff=MathAbs(((pivotRangeHigh + pivotRangeLow)/2) - pivotPoint);
pivotTop=pivotPoint + pivotDiff;
pivotBottom=pivotPoint - pivotDiff;
//----
if (DisplayMAs) calcPivotMA();
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void calcPivotMA()
{
//create temp array
double pivs[50];
//load new pivot
ArrayCopy(pivs,pivots,1,0,49);
pivs[0]=pivotPoint;
ArrayCopy(pivots, pivs, 0, 0, WHOLE_ARRAY);
//calcMA
double pivSum=0;
int count=ArraySize(pivots);
if (count>=14)
{
for(int p=0; p<count; p++)
{
pivSum+=pivots[p];
//----
if (p==13)
{
pivot14MA=pivSum/14;
}
//----
if (p==29)
{pivot30MA=pivSum/30;}
//----
if (p==49)
{pivot50MA=pivSum/50;}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void drawIndicators(int curBar)
{
if (DisplayPivotPoint) Buffer1[curBar]=pivotPoint;
//----
Buffer2[curBar]=pivotTop;
Buffer3[curBar]=pivotBottom;
//----
if (DisplayPreviousHighLow)
{
Buffer4[curBar]=pivotRangeHigh;
Buffer5[curBar]=pivotRangeLow;
}
if (DisplayMAs)
{
Buffer6[curBar]=pivot14MA;
Buffer7[curBar]=pivot30MA;
Buffer8[curBar]=pivot50MA;
}
}
//+------------------------------------------------------------------+
AM2