//+------------------------------------------------------------------+
//| sesya.mq4 |
//| Moscow_ars |
//| |
//+------------------------------------------------------------------+
#property copyright «buy»
#property link ""
extern double SL_b=500; //б-500;s-750;
extern double TP_b=2500; //б-2500;s-2500
extern double lots=0.10; //начальный лот.
extern int Cikl_b=2; //б-2;s-3; //Время начала зоны разрешения.
extern int Start_time_b=8;//б-8;s-11; //временной период на открытие.
extern double uv_lot_martin=1; //число мартина.
extern int Luft_prokol_b =60; //б-60;s-75 // отступ цены от ключевого уровня.
extern double pauza=2;
extern double b_ma = 10;
extern double b_masdvig= 0;
double ma;
int tip=1;//2-buy;1-sell
int kol_vo_o; //количество ордеров в истории.
double lots_o; //лот после мартина.
//+------------------------------------------------------------------+
// — /
int start()
{
// — / система мартингейла.
kol_vo_o=OrdersHistoryTotal();
if (kol_vo_o==0)
{
lots_o = lots;
}
OrderSelect(kol_vo_o-1,SELECT_BY_POS,MODE_HISTORY);
if(OrderProfit()<0)
{
lots_o=OrderLots()*uv_lot_martin;
}
else
{
lots_o=lots;
}
// — / расчет ближайшего уровня в заданном диапазоне.
double Luft_up1000= NormalizeDouble(Ask,2)+Luft_prokol_b*Point; //округляем цену до 1й фигуры, расчет цены люфта выше уровеня.
double Luft_up500= NormalizeDouble(Ask,2)+0.00500+Luft_prokol_b*Point; //округляем цену до половины фигуры, расчет цены люфта выше уровеня.
double Luft_dw1000= NormalizeDouble(Ask,2)-Luft_prokol_b*Point; //расчет цены люфта ниже уровеня.
double Luft_dw500= NormalizeDouble(Ask,2)-0.00500-Luft_prokol_b*Point;
// — /
// — / Исполняемый модуль.
if (uroven(Luft_dw1000,Luft_up1000)==1)
{
if (OrdersTotal()==0) //если нет открытых и отложенных ордеров.
{
OrderSend(Symbol(),OP_BUY, lots_o, Ask, 3, (Ask — SL_b*Point), (Bid + TP_b*Point), "...", 125, 0, Blue);
}
OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES);
int H_th = TimeHour(OrderOpenTime());
int th = TimeHour(TimeCurrent());
if((OrdersTotal()!=0)&(th-H_th > pauza) )
{
OrderSend(Symbol(),OP_BUY, lots_o, Ask, 3, (Ask — SL_b*Point), (Bid + TP_b*Point), "...", 125, 0, Blue);
}
}
return(0);
}
//+------------------------------------------------------------------+
// — /функция ищет в истории отработку уровней для buy возвращает = 1;
int uroven(double In_dw1000,double In_up1000)
{
if(time_zona(Cikl_b,Start_time_b)==1) //разрешение на торговлю.
{
if(Ask < In_dw1000)// в данный момент цена вошла в нужную временную зону и находится ниже сигнального уровня.
{
int th= TimeHour(TimeCurrent()); //текущий час.
//найти в заданном диапазоне, цену выше сигнального уровня.
for(int time_bars=Cikl_b+1;time_bars<=th;time_bars++) //
{
double history_high =iHigh(NULL,0,th-time_bars); //получаем цену в указанне время,
if(history_high > In_up1000)//если цена бара в указанное время была выше уровня…
{
return(1);
}
}
}
}
}
// — /
//+------------------------------------------------------------------+
// функция считает время разрешения на торговлю.
int time_zona(int Cikl_in,int Start_time_in) //объявление в функции локальных параметров начала и конца зоны.
{
if((TimeHour(TimeCurrent()) > Cikl_in) && (TimeHour(TimeCurrent()) < (Start_time_in+Cikl_in)) ) //берем час от текущего времени и проверяем его на соответствие условию.
return(1); //если успех, вернем 1
return(5); //иначе 5.
}
ars2005tron