1440/Period() - подозреваю, что в этой штуке дело. Тут 1440 секунд при делении должно давать количество баров в данном периоде, если есть варианты по красивее, то буду рад узнать.
- Код: выделить все
//+------------------------------------------------------------------+
//| SoveTT.mq4 |
//| MagistrSanich |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "MagistrSanich"
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
enum Stop // Режим
{
Tralling, // Треллинг
NoDamage, // Безубыток
TrallDamage,// Треллинг и безубыток
No // Ничего
};
input double Lots=1.0;// Объем лота
input int Slip=30;// Слип
input int Magic=0;// Магик
input int CoundClose=5;//На какой свече закрывать
input Stop ImagTrall=Tralling;// Режим
input int Distance=100; //Пройденные пункты от цены открытия
input int indent=50; // Отступ от цены открытия
//Глобальные переменные
double price=-1; // Текущая цена
int Ticket= 0;
int count = 0;
datetime timeStop=0;
int timee=Day();
int i=0;
double min,stopLoss,test,dayModify=0;
//+------------------------------------------------------------------+
//| |
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---ACCOUNT_BALANCE
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(timeStop == Time[0]) return;
else timeStop=Time[0];
//-----------------------------------------------------
price=MarketInfo(_Symbol,MODE_BID);
int b = Counter(OP_BUY);
int s = Counter(OP_SELL);
//Открытие ордеров
if(b==0 && s==0)
{
int type=(int) rand()%2;
Ticket=OrderSend(_Symbol,type,Lots,Ask,Slip,0,0,"",Magic,0,clrBlue);
count = 0;
}
//Закрытие ордера
if(Ticket)
{
count++;
if(count==CoundClose)
{
for(i=0;i<OrdersTotal();i++)
{
if(OrderSelect(Ticket,SELECT_BY_TICKET))
{
if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol())
{
if(!OrderClose(Ticket,Lots,price,Slip,clrGreen))
Print("НЕ УДАЛОСЬ ЗАКРЫТЬ ОРДЕР");
Ticket=0;
}
}
}
}
}
//Треллинг
if(timee!=Day() && (b!=0 || s!=0)) { dayModify++; timee=Day();}
if(b==0 && s==0) dayModify=0;
if((ImagTrall==Tralling || ImagTrall==TrallDamage) && dayModify>=2) //dayModify - в какой денб треллить
{
double exs;
if(b==1 && s==0) exs=Low[iLowest(_Symbol,Period(),MODE_LOW,1440/Period(),NULL)];
else exs=High[iLowest(_Symbol,Period(),MODE_HIGH,1440/Period(),NULL)];
for(i=0;i<=OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol())
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),exs,0,0,clrYellow))
Print("Ошибка модификации ",TimeCurrent(),OrderType()," ",OrderOpenPrice()," exs ",exs);
}
}
}
}
//Comment(" Now time= ",time);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int Counter(int type)// ФУНЦИЯ ПОДСЧЕТА ОРДЕРА, РЕАЛЬНО РАБОТАЕТ
{
int n=0;
for(i=0;i<=(OrdersTotal()+1);i++)
if(OrderSelect(i,SELECT_BY_POS)==true)
if(OrderMagicNumber()==Magic)
if(OrderType()==type)
n++;
return n;
}
//+------------------------------------------------------------------+