//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int BuyDualSignal()
{
int sig=0;
for(int i=1;i<=ShiftSig;i++)
{
double BBBlue=iCustom(NULL,0,IndName1,Length,Deviation,0,Shift);
double BBRed2=iCustom(NULL,0,IndName1,Length,Deviation,1,Shift+1);
double BBRedI2=iCustom(NULL,0,IndName1,Length,Deviation,1,Shift+i);
double OzyRed2=iCustom(NULL,0,IndName2,Period_1,Period_2,1,Shift+1);
double BBBlueI=iCustom(NULL,0,IndName1,Length,Deviation,0,i);
double OzyBlue=iCustom(NULL,0,IndName2,Period_1,Period_2,0,Shift);
double OzyBlueI=iCustom(NULL,0,IndName2,Period_1,Period_2,0,Shift+i);
double OzyRedI2=iCustom(NULL,0,IndName2,Period_1,Period_2,1,Shift+1+i);
if(BBBlue>0 && BBRed2>0 && OzyBlueI>0 && OzyRedI2) {sig=1;break;}
if(OzyBlue>0 && OzyRed2>0 && BBBlueI>0 && BBRedI2) {sig=1;break;}
}
return(sig);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int SellDualSignal()
{
int sig=0;
for(int i=1;i<=ShiftSig;i++)
{
double BBBlue2=iCustom(NULL,0,IndName1,Length,Deviation,0,Shift+1);
double BBRed=iCustom(NULL,0,IndName1,Length,Deviation,1,Shift);
double BBRed2=iCustom(NULL,0,IndName1,Length,Deviation,1,Shift+1);
double BBRedI=iCustom(NULL,0,IndName1,Length,Deviation,1,Shift+i);
double BBRedI2=iCustom(NULL,0,IndName1,Length,Deviation,1,Shift+i);
double OzyRed2=iCustom(NULL,0,IndName2,Period_1,Period_2,1,Shift+1);
double BBBlueI=iCustom(NULL,0,IndName1,Length,Deviation,0,i);
double BBBlueI2=iCustom(NULL,0,IndName1,Length,Deviation,0,Shift+1+i);
double OzyBlue=iCustom(NULL,0,IndName2,Period_1,Period_2,0,Shift);
double OzyBlueI=iCustom(NULL,0,IndName2,Period_1,Period_2,0,Shift+i);
double OzyBlueI2=iCustom(NULL,0,IndName2,Period_1,Period_2,0,Shift+1+i);
double OzyBlue2=iCustom(NULL,0,IndName2,Period_1,Period_2,0,Shift+1);
double OzyRedI=iCustom(NULL,0,IndName2,Period_1,Period_2,1,Shift+i);
double OzyRed=iCustom(NULL,0,IndName2,Period_1,Period_2,1,Shift);
double OzyRedI2=iCustom(NULL,0,IndName2,Period_1,Period_2,1,Shift+1+i);
if(BBRed>0 && BBBlue2>0 && OzyRedI>0 && OzyBlueI2) {sig=1;break;}
if(OzyRed>0 && OzyBlue2>0 && BBRedI>0 && BBBlueI2) {sig=1;break;}
}
return(sig);
}
//+------------------------------------------------------------------+
//| 3MA.mq4 |
//| Copyright 2016, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link "http://www.forexsystems.biz"
#property description "Martin expert advisor"
extern int StopLoss = 1200; // лось
extern int TakeProfit = 1400; // язь
extern int Delta1 = 100; // минимальное расстояние от машки до закрытия
extern int Delta2 = 100; // максимальное расстояние от машки до закрытия
extern int Points = 100; // сколько добавляем к тейку
extern int Count = 5; // количество ордеров
extern int Slip = 50; // реквот
extern int StartHour = 0; // час начала торговли
extern int StartMin = 30; // минута начала торговли
extern int EndHour = 23; // час окончания торговли
extern int EndMin = 30; // минута окончания торговли
extern int MA1Period = 11; // период МА1
extern int MA1Mode = 0; // 0-SMA
extern int MA1Price = 0; // 0-Close
extern int MA2Period = 22; // период МА1
extern int MA2Mode = 0; // 0-SMA
extern int MA2Price = 0; // 0-Close
extern int MA3Period = 33; // период МА1
extern int MA3Mode = 0; // 0-SMA
extern int MA3Price = 0; // 0-Close
extern int MA4Period = 44; // период МА1
extern int MA4Mode = 0; // 0-SMA
extern int MA4Price = 0; // 0-Close
extern int MA5Period = 55; // период МА1
extern int MA5Mode = 0; // 0-SMA
extern int MA5Price = 0; // 0-Close
extern int MA6Period = 66; // период МА1
extern int MA6Mode = 0; // 0-SMA
extern int MA6Price = 0; // 0-Close
extern int MA7Period = 77; // период МА1
extern int MA7Mode = 0; // 0-SMA
extern int MA7Price = 0; // 0-Close
extern int MA8Period = 88; // период МА1
extern int MA8Mode = 0; // 0-SMA
extern int MA8Price = 0; // 0-Close
extern int MA9Period = 99; // период МА1
extern int MA9Mode = 0; // 0-SMA
extern int MA9Price = 0; // 0-Close
extern int Magic = 123; // магик
extern double Lots = 0.1; // лот
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutOrder(int type,double price,int c)
{
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+Points*c)*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+Points*c)*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);
}
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void OpenPos()
{
int i=0;
double ma1=iMA(NULL,0,MA1Period,0,MA1Mode,MA1Price,1);
double ma2=iMA(NULL,0,MA2Period,0,MA2Mode,MA2Price,1);
double ma3=iMA(NULL,0,MA3Period,0,MA3Mode,MA3Price,1);
double ma4=iMA(NULL,0,MA4Period,0,MA4Mode,MA4Price,1);
double ma5=iMA(NULL,0,MA5Period,0,MA5Mode,MA5Price,1);
double ma6=iMA(NULL,0,MA6Period,0,MA6Mode,MA6Price,1);
double ma7=iMA(NULL,0,MA7Period,0,MA7Mode,MA7Price,1);
double ma8=iMA(NULL,0,MA8Period,0,MA8Mode,MA8Price,1);
double ma9=iMA(NULL,0,MA9Period,0,MA9Mode,MA9Price,1);
//---- buy
if(Close[1]-ma1>Delta1*Point && Close[1]-ma1<Delta2*Point && ma1>ma2 && ma2>ma3 && ma3>ma4 && ma4>ma5 && ma5>ma6 && ma6>ma7)
{
for(i=0;i<Count;i++)
{
PutOrder(0,Ask,i);
}
}
//---- sell
if(ma1-Close[1]>Delta1*Point && ma1-Close[1]<Delta2*Point && ma1<ma2 && ma2<ma3 && ma3<ma4 && ma4<ma5 && ma5<ma6 && ma6<ma7)
{
for(i=0;i<Count;i++)
{
PutOrder(1,Bid,i);
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void ClosePos()
{
double ma1=iMA(NULL,0,MA1Period,0,MA1Mode,MA1Price,1);
double ma2=iMA(NULL,0,MA2Period,0,MA2Mode,MA2Price,1);
double ma3=iMA(NULL,0,MA3Period,0,MA3Mode,MA3Price,1);
double ma4=iMA(NULL,0,MA4Period,0,MA4Mode,MA4Price,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(ma1-Close[1]>Delta1*Point && ma1-Close[1]<Delta2*Point && ma1<ma2 && ma2<ma3 && ma3<ma4)
{
if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slip,White))
Print("OrderClose error ",GetLastError());
}
}
if(OrderType()==OP_SELL)
{
if(Close[1]-ma1>Delta1*Point && Close[1]-ma1<Delta2*Point && ma1>ma2 && ma2>ma3 && ma3>ma4)
{
if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slip,White))
Print("OrderClose error ",GetLastError());
}
}
}
}
}
}
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 30.04.2009 |
//| Описание : Возвращает флаг разрешения торговли по времени. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| hb - часы времени начала торговли |
//| mb - минуты времени начала торговли |
//| he - часы времени окончания торговли |
//| me - минуты времени окончания торговли |
//+----------------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
//| Start function |
//+------------------------------------------------------------------+
void OnTick()
{
if(CountTrades()<1 && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin))
{
OpenPos();
}
else ClosePos();
}
//+------------------------------------------------------------------+
Там, чуток, не так выходит. В тестере, первый ордер закрывается, как положено, а следующий, после удачно закрытого первого, модифицирует t/p правильно, но закрывает не по t/p, а по профиту, в валюте депозита, а он общий, для всей серии ордеров. Поэтому в т.з. (п.1), я и оговаривал, отдельный профит, для первого ордера.
//+------------------------------------------------------------------+
//| 3MA.mq4 |
//| Copyright 2016, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link "http://www.forexsystems.biz"
#property description "Martin expert advisor"
extern int StopLoss = 1200; // лось
extern int TakeProfit = 1400; // язь
extern int Delta1 = 100; // минимальное расстояние от машки до закрытия
extern int Delta2 = 100; // максимальное расстояние от машки до закрытия
extern int Points = 100; // сколько добавляем к тейку
extern int Count = 5; // количество ордеров
extern int Slip = 50; // реквот
extern int StartHour = 0; // час начала торговли
extern int StartMin = 30; // минута начала торговли
extern int EndHour = 23; // час окончания торговли
extern int EndMin = 30; // минута окончания торговли
extern int MA1Period = 11; // период МА1
extern int MA1Mode = 0; // 0-SMA
extern int MA1Price = 0; // 0-Close
extern int MA2Period = 22; // период МА1
extern int MA2Mode = 0; // 0-SMA
extern int MA2Price = 0; // 0-Close
extern int MA3Period = 33; // период МА1
extern int MA3Mode = 0; // 0-SMA
extern int MA3Price = 0; // 0-Close
extern int MA4Period = 44; // период МА1
extern int MA4Mode = 0; // 0-SMA
extern int MA4Price = 0; // 0-Close
extern int MA5Period = 55; // период МА1
extern int MA5Mode = 0; // 0-SMA
extern int MA5Price = 0; // 0-Close
extern int MA6Period = 66; // период МА1
extern int MA6Mode = 0; // 0-SMA
extern int MA6Price = 0; // 0-Close
extern int MA7Period = 77; // период МА1
extern int MA7Mode = 0; // 0-SMA
extern int MA7Price = 0; // 0-Close
extern int MA8Period = 88; // период МА1
extern int MA8Mode = 0; // 0-SMA
extern int MA8Price = 0; // 0-Close
extern int MA9Period = 99; // период МА1
extern int MA9Mode = 0; // 0-SMA
extern int MA9Price = 0; // 0-Close
extern int Magic = 123; // магик
extern double Lots = 0.1; // лот
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutOrder(int type,double price,int c)
{
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+Points*c)*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+Points*c)*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);
}
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void OpenPos()
{
int i=0;
double ma1=iMA(NULL,0,MA1Period,0,MA1Mode,MA1Price,1);
double ma2=iMA(NULL,0,MA2Period,0,MA2Mode,MA2Price,1);
double ma3=iMA(NULL,0,MA3Period,0,MA3Mode,MA3Price,1);
double ma4=iMA(NULL,0,MA4Period,0,MA4Mode,MA4Price,1);
double ma5=iMA(NULL,0,MA5Period,0,MA5Mode,MA5Price,1);
double ma6=iMA(NULL,0,MA6Period,0,MA6Mode,MA6Price,1);
double ma7=iMA(NULL,0,MA7Period,0,MA7Mode,MA7Price,1);
double ma8=iMA(NULL,0,MA8Period,0,MA8Mode,MA8Price,1);
double ma9=iMA(NULL,0,MA9Period,0,MA9Mode,MA9Price,1);
//---- buy
if(Close[1]-ma1>Delta1*Point && Close[1]-ma1<Delta2*Point && ma1>ma2 && ma2>ma3 && ma3>ma4 && ma4>ma5 && ma5>ma6 && ma6>ma7)
{
for(i=0;i<Count;i++)
{
PutOrder(0,Ask,i);
}
}
//---- sell
if(ma1-Close[1]>Delta1*Point && ma1-Close[1]<Delta2*Point && ma1<ma2 && ma2<ma3 && ma3<ma4 && ma4<ma5 && ma5<ma6 && ma6<ma7)
{
for(i=0;i<Count;i++)
{
PutOrder(1,Bid,i);
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void ClosePos()
{
double ma1=iMA(NULL,0,MA1Period,0,MA1Mode,MA1Price,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(ma1-Close[1]>Delta1*Point && ma1-Close[1]<Delta2*Point)
{
if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slip,White))
Print("OrderClose error ",GetLastError());
}
}
if(OrderType()==OP_SELL)
{
if(Close[1]-ma1>Delta1*Point && Close[1]-ma1<Delta2*Point)
{
if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slip,White))
Print("OrderClose error ",GetLastError());
}
}
}
}
}
}
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 30.04.2009 |
//| Описание : Возвращает флаг разрешения торговли по времени. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| hb - часы времени начала торговли |
//| mb - минуты времени начала торговли |
//| he - часы времени окончания торговли |
//| me - минуты времени окончания торговли |
//+----------------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
//| Start function |
//+------------------------------------------------------------------+
void OnTick()
{
if(CountTrades()<1 && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin))
{
OpenPos();
}
else ClosePos();
}
//+------------------------------------------------------------------+
ENUM_MA_METHOD
Идентификатор
Значение
Описание
MODE_SMA
0
Простое усреднение
MODE_EMA
1
Экспоненциальное усреднение
MODE_SMMA
2
Сглаженное усреднение
MODE_LWMA
3
Линейно-взвешенное усреднение
ENUM_APPLIED_PRICE
Константа
Значение
Описание
PRICE_CLOSE
0
Цена закрытия
PRICE_OPEN
1
Цена открытия
PRICE_HIGH
2
Максимальная за период цена
PRICE_LOW
3
Минимальная за период цена
PRICE_MEDIAN
4
Медианная цена, (high+low)/2
PRICE_TYPICAL
5
Типичная цена, (high+low+close)/3
PRICE_WEIGHTED
6
Взвешенная цена закрытия, (high+low+close+close)/4
//+------------------------------------------------------------------+
//| 3MA.mq4 |
//| Copyright 2016, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link "http://www.forexsystems.biz"
#property description "Martin expert advisor"
extern int StopLoss = 1200; // лось
extern int TakeProfit = 1400; // язь
extern int Delta1 = 100; // минимальное расстояние от машки до закрытия
extern int Delta2 = 100; // максимальное расстояние от машки до закрытия
extern int Points = 100; // сколько добавляем к тейку
extern int Count = 5; // количество ордеров
extern int Slip = 50; // реквот
extern int StartHour = 0; // час начала торговли
extern int StartMin = 30; // минута начала торговли
extern int EndHour = 23; // час окончания торговли
extern int EndMin = 30; // минута окончания торговли
extern int MA1Period = 11; // период МА1
extern int MA1Mode = 0; // 0-SMA
extern int MA1Price = 0; // 0-Close
extern int MA2Period = 22; // период МА1
extern int MA2Mode = 0; // 0-SMA
extern int MA2Price = 0; // 0-Close
extern int MA3Period = 33; // период МА1
extern int MA3Mode = 0; // 0-SMA
extern int MA3Price = 0; // 0-Close
extern int MA4Period = 44; // период МА1
extern int MA4Mode = 0; // 0-SMA
extern int MA4Price = 0; // 0-Close
extern int MA5Period = 55; // период МА1
extern int MA5Mode = 0; // 0-SMA
extern int MA5Price = 0; // 0-Close
extern int MA6Period = 66; // период МА1
extern int MA6Mode = 0; // 0-SMA
extern int MA6Price = 0; // 0-Close
extern int MA7Period = 77; // период МА1
extern int MA7Mode = 0; // 0-SMA
extern int MA7Price = 0; // 0-Close
extern int MA8Period = 88; // период МА1
extern int MA8Mode = 0; // 0-SMA
extern int MA8Price = 0; // 0-Close
extern int MA9Period = 99; // период МА1
extern int MA9Mode = 0; // 0-SMA
extern int MA9Price = 0; // 0-Close
extern int Magic = 123; // магик
extern double Lots = 0.1; // лот
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutOrder(int type,double price,int c)
{
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+Points*c)*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+Points*c)*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);
}
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void OpenPos()
{
int i=0;
double ma1=iMA(NULL,0,MA1Period,0,MA1Mode,MA1Price,1);
double ma2=iMA(NULL,0,MA2Period,0,MA2Mode,MA2Price,1);
double ma3=iMA(NULL,0,MA3Period,0,MA3Mode,MA3Price,1);
double ma4=iMA(NULL,0,MA4Period,0,MA4Mode,MA4Price,1);
double ma5=iMA(NULL,0,MA5Period,0,MA5Mode,MA5Price,1);
double ma6=iMA(NULL,0,MA6Period,0,MA6Mode,MA6Price,1);
double ma7=iMA(NULL,0,MA7Period,0,MA7Mode,MA7Price,1);
double ma8=iMA(NULL,0,MA8Period,0,MA8Mode,MA8Price,1);
double ma9=iMA(NULL,0,MA9Period,0,MA9Mode,MA9Price,1);
//---- buy
if(Close[1]-ma1>Delta1*Point && Close[1]-ma1<Delta2*Point)
{
for(i=0;i<Count;i++)
{
PutOrder(0,Ask,i);
}
}
//---- sell
if(ma1-Close[1]>Delta1*Point && ma1-Close[1]<Delta2*Point)
{
for(i=0;i<Count;i++)
{
PutOrder(1,Bid,i);
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void ClosePos()
{
double ma1=iMA(NULL,0,MA1Period,0,MA1Mode,MA1Price,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(ma1-Close[1]>Delta1*Point && ma1-Close[1]<Delta2*Point)
{
if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slip,White))
Print("OrderClose error ",GetLastError());
}
}
if(OrderType()==OP_SELL)
{
if(Close[1]-ma1>Delta1*Point && Close[1]-ma1<Delta2*Point)
{
if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slip,White))
Print("OrderClose error ",GetLastError());
}
}
}
}
}
}
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 30.04.2009 |
//| Описание : Возвращает флаг разрешения торговли по времени. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| hb - часы времени начала торговли |
//| mb - минуты времени начала торговли |
//| he - часы времени окончания торговли |
//| me - минуты времени окончания торговли |
//+----------------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
//| Start function |
//+------------------------------------------------------------------+
void OnTick()
{
if(CountTrades()<1 && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin))
{
OpenPos();
}
else ClosePos();
}
//+------------------------------------------------------------------+
AM2