




























//+------------------------------------------------------------------+
//| XYZ.mq4 |
//| Copyright 2015, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link "http://www.forexsystems.biz"
#property description "Simple expert advisor"
//--- Inputs
extern double Lots = 0.1; // лот
extern int StopLoss = 500; // лось
extern int TakeProfit = 500; // язь
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
extern string IndicatorProperties="--------------------";
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Comment("");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");
}
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void OpenPos()
{
int r=0;
double sl=0,tp=0;
//--- get Ind
double FGreen=iCustom(Symbol(),0,"Yzyz",0,1);
double FRed=iCustom(Symbol(),0,"Yzyz",1,1);
//--- sell conditions
if(FGreen>FRed)
{
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);
return;
}
//--- buy conditions
if(FRed>FGreen)
{
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);
return;
}
//---
}
//+------------------------------------------------------------------+
//| Check for close order conditions |
//+------------------------------------------------------------------+
void ClosePos()
{
//--- get Ind
double FGreen=iCustom(Symbol(),0,"Yzyz",0,1);
double FRed=iCustom(Symbol(),0,"Yzyz",1,1);
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderMagicNumber()==Magic || OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(FGreen>FRed)
{
bool c=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,White);
}
break;
}
if(OrderType()==OP_SELL)
{
if(FRed>FGreen)
{
c=OrderClose(OrderTicket(),OrderLots(),Ask,Slip,White);
}
break;
}
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
//| OnTick function |
//+------------------------------------------------------------------+
void OnTick()
{
double FGreen=iCustom(Symbol(),0,"Yzyz",0,1);
double FRed=iCustom(Symbol(),0,"Yzyz",1,1);
if(CountTrades()<1) OpenPos();
if(CountTrades()>0) ClosePos();
Comment("\n FGreen: ",FGreen,
"\n FRed: ",FRed);
//---
}
//+------------------------------------------------------------------+
а как прикрутить переменную времени, в моем боте у меня она была! как у вас реализуется данная вещь?
Надеюсь поможете, иначе как я буду тестировать((
Пусть В — последний сформированный бар, В* — предыдущий бар, S и S* — значения индикатора Snake на барах В и В* соответствено, NZ и VZ — нижний и верхний зигзаги на стардантном индикаторе ZigZag, ближайшие слева к бару В.**************************************************************************************** Открыть BUY, если NZ* < NZ и S* < S. Закрыть BUY, если S* >S. Открыть SELL, если VZ* > VZ и S* > S. Закрыть SELL, если S* < S.
//+------------------------------------------------------------------+
//| 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 = 100; // реквот
extern int Step = 1000; // высота этажа
extern int FCount = 5; // количество фракталов
extern int BarsCount = 100; // баров для расчета
extern int LevelsCount = 3; // число этажей
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)
{
ObjectDelete(name);
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,pr=0;
pr=NormalizeDouble(Close[0],2);
int up=FractalsOnLevel(1,pr,pr+Step*Point);
int dn=FractalsOnLevel(2,pr,pr-Step*Point);
for(int i=0; i<=LevelsCount; i++)
{
PutTrendLine("LineUP"+IntegerToString(i),Time[BarsCount],Time[0],UpLevels(i,Step));
PutTrendLine("LineDN"+IntegerToString(i),Time[BarsCount],Time[0],DnLevels(i,Step));
}
if(CountTrades()<1)
{
//--- sell conditions
if(Bid>=pr-Slip*Point && Bid<=pr+Slip*Point)//цена на уровне
{
if(dn>FCount)//фракталов в подвале больше FCount
{
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(Ask>=pr-Slip*Point && Ask<=pr+Slip*Point)//цена на уровне
{
if(up>FCount)//фракталов в подвале больше FCount
{
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 Верхних фракталов на потолке: ",up,
"\n Нижних фракталов в подвале: ",dn,
"\n Потолок: ",pr+Step*Point,
"\n Пол: ",pr,
"\n Подвал: ",pr-Step*Point);
}
//+------------------------------------------------------------------+
Сейчас советник можно использовать для открытия ордеров и простестировать в тестере: www.opentraders.ru/downloads/954/
AM2