if(AutoMM<0) LotSize=Lot();

Умножение не работает. И ещё бы добавить трал, безубыток, и профит. А то советнику нечем закрываться кроме тейк профита отдельно на каждый ордер. И ещё бы сделать закрытие обшим тейк профитом.
можно что бы по одной сделки на сигнал тобишь если пересекает цена ма 200 с верху вниз то на этот сигнал одна сделка следущий ждем другово пересечение или на продажу или на покупку
Дожидаемся нового пересечения ценой 10 ема сверху вниз
Дожидаемся нового пересечения ценой 10 ема снизу вверх
Дожидаемся нового пересечения ценой 10 ема сверху вниз
Дожидаемся нового пересечения ценой 10 ема снизу вверх
//+------------------------------------------------------------------+
//| Dynamic.mq4 |
//| Copyright 2017, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
//--- Inputs
extern double Lots = 0.1; // лот
extern double KLot = 2; // умножение лота
extern double MaxLot = 5; // максимальный лот
extern double StopLoss = 500; // лось
extern double TakeProfit = 500; // язь
extern int StartHour = 0; // час начала торговли
extern int StartMin = 30; // минута начала торговли
extern int EndHour = 23; // час окончания торговли
extern int EndMin = 30; // минута окончания торговли
extern int Shift = 1; // на каком баре сигнал индикатора
extern int Slip = 30; // реквот
extern int Trade = 1; // 2-открытие нескольких поз
extern int Level = 32; // уровень индикатора
extern int Magic = 123; // магик
extern string IndName="TDI Red Green";
extern string s="------------- Настройки TDI Red Green -------------";
extern int RSI_Period = 13; //8-25
extern int RSI_Price = 0; //0-6
extern int Volatility_Band = 34; //20-40
extern int RSI_Price_Line=2;
extern int RSI_Price_Type=0; //0-3
extern int Trade_Signal_Line=7;
extern int Trade_Signal_Type=0; //0-3
datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
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;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OpenPos()
{
double green1=iCustom(NULL,0,IndName,RSI_Period,RSI_Price,Volatility_Band,RSI_Price_Line,RSI_Price_Type,Trade_Signal_Line,Trade_Signal_Type,4,Shift);
double red1=iCustom(NULL,0,IndName,RSI_Period,RSI_Price,Volatility_Band,RSI_Price_Line,RSI_Price_Type,Trade_Signal_Line,Trade_Signal_Type,5,Shift);
double green2=iCustom(NULL,0,IndName,RSI_Period,RSI_Price,Volatility_Band,RSI_Price_Line,RSI_Price_Type,Trade_Signal_Line,Trade_Signal_Type,4,Shift+1);
double red2=iCustom(NULL,0,IndName,RSI_Period,RSI_Price,Volatility_Band,RSI_Price_Line,RSI_Price_Type,Trade_Signal_Line,Trade_Signal_Type,5,Shift+1);
double ma=iMA(NULL,0,200,0,1,0,Shift);
//--- sell
if(red1>Level && green1<red1 && green2>red2 && Bid<ma)
{
PutOrder(1,Bid);
}
//--- buy conditions
if(red1<100-Level && green1>red1 && green2<red2 && Bid>ma)
{
PutOrder(0,Ask);
}
//---
}
//+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double Lot()
{
double lot=Lots;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderProfit()<0)
{
lot=OrderLots()*KLot;
}
break;
}
}
}
if(lot>MaxLot)lot=Lots;
return(lot);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0,int mb=0,int he=0,int me=0)
{
datetime db, de; // Время начала и окончания работы
int hc; // Часы текущего времени торгового сервера
db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)hb+":"+(string)mb);
de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)he+":"+(string)me);
hc=TimeHour(TimeCurrent());
if(db>=de)
{
if(hc>=he) de+=24*60*60; else db-=24*60*60;
}
if(TimeCurrent()>=db && TimeCurrent()<=de) return(True);
else return(False);
}
//+------------------------------------------------------------------+
//| OnTick function |
//+------------------------------------------------------------------+
void OnTick()
{
double green=iCustom(NULL,0,IndName,4,Shift);
double red=iCustom(NULL,0,IndName,5,Shift);
if(t!=Time[0] && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin))
{
if(Trade>1) OpenPos();
if(CountTrades()<1 && Trade==1) OpenPos();
t=Time[0];
}
Comment("\n Red: ",red,
"\n Green: ",green);
//---
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| StopLines.mq4 |
//| Copyright 2017, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
//--- Inputs
extern double Lots = 0.1; // лот
extern double Koef = 2; // коэффициент для тейка
extern int StopLoss = 300; // лось
extern int TakeProfit = 600; // язь
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
extern string NameLine="SL";
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Comment("");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
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,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OpenPos()
{
if(WindowPriceOnDropped()<Ask)
{
PutOrder(0,Ask);
if(StopLoss>0) PutHLine("SL",Bid-StopLoss*Point,Red);
if(TakeProfit>0) PutHLine("TP",Bid+TakeProfit*Point,Blue);
}
if(WindowPriceOnDropped()>Bid)
{
PutOrder(1,Bid);
if(StopLoss>0) PutHLine("SL",Bid+StopLoss*Point,Red);
if(TakeProfit>0) PutHLine("TP",Bid-TakeProfit*Point,Blue);
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double FindLevel(string name)
{
double lev=0;
for(int i=0;i<ObjectsTotal();i++)
{
if(ObjectName(i)==name) lev=ObjectGetDouble(0,name,OBJPROP_PRICE);
}
return(lev);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutHLine(string name,double price,color clr)
{
ObjectDelete(0,name);
ObjectCreate(0,name,OBJ_HLINE,0,0,price);
//--- установим цвет линии
ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии
ObjectSetInteger(0,name,OBJPROP_STYLE,0);
//--- установим толщину линии
ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void Mode()
{
bool m;
double sl=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
sl=MathAbs(OrderOpenPrice()-NormalizeDouble(FindLevel("SL"),Digits));
if(OrderType()==OP_BUY)
{
if(OrderStopLoss()!=NormalizeDouble(FindLevel("SL"),Digits))
{
m=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(FindLevel("SL"),Digits),NormalizeDouble(OrderOpenPrice()+sl*Koef,Digits),0,Yellow);
PutHLine("TP",NormalizeDouble(OrderOpenPrice()+sl*Koef,Digits),Blue);
return;
}
}
if(OrderType()==OP_SELL)
{
if(OrderStopLoss()!=NormalizeDouble(FindLevel("SL"),Digits))
{
m=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(FindLevel("SL"),Digits),NormalizeDouble(OrderOpenPrice()-sl*Koef,Digits),0,Yellow);
PutHLine("TP",NormalizeDouble(OrderOpenPrice()-sl*Koef,Digits),Blue);
return;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
Mode();
if(CountTrades()<1) OpenPos();
Comment("\n SL: ",FindLevel("SL"),
"\n TP: ",FindLevel("TP"));
}
//+------------------------------------------------------------------+
//| ChartEvent function |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
//--- если это события клика мышки на графике
if(id==CHARTEVENT_CLICK)
{
//--- подготовим переменные
int x =(int)lparam;
int y =(int)dparam;
datetime dt =0;
double price =0;
int window=0;
//--- преобразуем координаты X и Y в терминах дата/время
if(ChartXYToTimePrice(0,x,y,window,dt,price))
{
if(StopLoss==0) PutHLine("SL",price,Red);
ChartRedraw(0);
}
}
}
//+------------------------------------------------------------------+
extern double Koef = 2; // коэффициент для тейка
//+------------------------------------------------------------------+
//| IgrunLock.mq4 |
//| Copyright 2017, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
//--- Inputs
extern double Lots = 1; // лот
extern int StopLoss = 120; // лось
extern int TakeProfit = 180; // язь
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Comment("");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
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,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
//| Профит всех ордеров по типу ордера |
//+------------------------------------------------------------------+
double AllProfit(int ot=-1)
{
double pr=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==0 && (ot==0 || ot==-1))
{
pr+=OrderProfit()+OrderCommission()+OrderSwap();
}
if(OrderType()==1 && (ot==1 || ot==-1))
{
pr+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}
return(pr);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
{
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()==0 && (ot==0 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
}
if(OrderType()==1 && (ot==1 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
}
}
}
}
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(CountTrades()<1)
{
PutOrder(0,Ask);
PutOrder(1,Bid);
}
//if(CountTrades()<2) CloseAll();
Comment("\n AllProfit: ",AllProfit(),
"\n Buy Profit: ",AllProfit(0),
"\n Sell Profit: ",AllProfit(1));
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Zigmund.mq4 |
//| Copyright 2017, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
//--- Inputs
extern double Lots = 0.1; // лот
extern int StopLoss = 300; // лось
extern int TakeProfit = 600; // язь
extern int Delta = 50; // расстояние до экстремума
extern int Gamma = 50; // длина луча
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
double z=0;
datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Comment("");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
{
int r=0;
color clr=Green;
double sl=0,tp=0;
double zz0 = ZZPrice(0);
double zz1 = ZZPrice(1);
double zz2 = ZZPrice(2);
if(type==1 || type==3 || type==5)
{
clr=Red;
if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits); else sl=zz1;
if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits); else tp=price-MathAbs(price-zz1)*2;
}
if(type==0 || type==2 || type==4)
{
clr=Blue;
if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits); else sl=zz2;
if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits); else tp=price+MathAbs(price-zz1)*2;
}
r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу |
//+------------------------------------------------------------------+
int CountOrders(int type)
{
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()==type) count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| Удаление отложенных ордеров |
//+------------------------------------------------------------------+
void DelOrder()
{
bool del;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()>1) del=OrderDelete(OrderTicket());
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double ZZPrice(int ne=0)
{
double zz;
int i,k=iBars(NULL,0),ke=0;
for(i=1; i<k; i++)
{
zz=iCustom(NULL,0,"ZigZag",12,5,3,0,i);
if(zz!=0)
{
ke++;
if(ke>ne) return(zz);
}
}
return(0);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double max=0,min=0;
double zz0 = ZZPrice(0);
double zz1 = ZZPrice(1);
double zz2 = ZZPrice(2);
double gamma = MathAbs(zz0-zz1)/Point;
double delta = MathAbs(zz0-zz2)/Point;
if(zz1>zz2) {max=zz1;min=zz2;}
if(zz1<zz2) {max=zz2;min=zz1;}
if(t!=Time[0])
{
if(z!=zz1) DelOrder();
if(CountTrades()<1)
{
if((zz0>zz1 && zz0<zz2) || (zz0<zz1 && zz0>zz2))
{
if(gamma>Gamma && delta>Delta)
{
if(CountOrders(4)<1) PutOrder(4,max);
if(CountOrders(5)<1) PutOrder(5,min);
}
}
}
z=zz1;
t=Time[0];
}
Comment("\n zz0: ",ZZPrice(0),
"\n zz1: ",ZZPrice(1),
"\n zz2: ",ZZPrice(2));
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Zigmund.mq4 |
//| Copyright 2017, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
//--- Inputs
extern double Lots = 0.1; // лот
extern int StopLoss = 300; // лось
extern int TakeProfit = 600; // язь
extern int Delta = 50; // расстояние до экстремума
extern int Gamma = 50; // длина луча
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
double z=0;
datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Comment("");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
{
int r=0;
color clr=Green;
double sl=0,tp=0;
double zz0 = ZZPrice(0);
double zz1 = ZZPrice(1);
double zz2 = ZZPrice(2);
if(type==1 || type==3 || type==5)
{
clr=Red;
if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits); else sl=zz2;
if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits); else tp=price-MathAbs(zz0-zz1)*2;
}
if(type==0 || type==2 || type==4)
{
clr=Blue;
if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits); else sl=zz2;
if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits); else tp=price+MathAbs(zz0-zz1)*2;
}
r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу |
//+------------------------------------------------------------------+
int CountOrders(int type=-1)
{
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()==type || (OrderType()>=0 && type==-1)) count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| Удаление отложенных ордеров |
//+------------------------------------------------------------------+
void DelOrder()
{
bool del;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()>1) del=OrderDelete(OrderTicket());
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double ZZPrice(int ne=0)
{
double zz;
int i,k=iBars(NULL,0),ke=0;
for(i=1; i<k; i++)
{
zz=iCustom(NULL,0,"ZigZag",12,5,3,0,i);
if(zz!=0)
{
ke++;
if(ke>ne) return(zz);
}
}
Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
return(0);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double max=0,min=0;
double zz0 = ZZPrice(0);
double zz1 = ZZPrice(1);
double zz2 = ZZPrice(2);
double gamma = MathAbs(zz0-zz1)/Point;
double delta = MathAbs(zz0-zz2)/Point;
if(zz1>zz2) {max=zz1;min=zz2;}
if(zz1<zz2) {max=zz2;min=zz1;}
if(t!=Time[0])
{
if(z!=zz1) DelOrder();
if(CountTrades()<1)
{
if((zz0>zz1 && zz0<zz2) || (zz0<zz1 && zz0>zz2))
{
if(gamma>Gamma && delta>Delta)
{
if(CountOrders(4)<1) PutOrder(4,max);
if(CountOrders(5)<1) PutOrder(5,min);
}
}
}
z=zz1;
t=Time[0];
}
Comment("\n zz0: ",ZZPrice(0),
"\n zz1: ",ZZPrice(1),
"\n zz2: ",ZZPrice(2));
}
//+------------------------------------------------------------------+
AM2