Ну всё. ЗАРАБОТАЛО! 7 раз из 7. Ну что могу сказать, Вам Огромное спасибо за по-
мощь и терпение. Надеюсь пообщаемся как нибудь ещё.
void ModifyOrders()
{
double all=0;
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)
{
all+=OrderOpenPrice();
count++;
}
}
}
}
all=NormalizeDouble(all/count,Digits);
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)
{
tp=NormalizeDouble(all+TakeProfit*Point,Digits);
sl=NormalizeDouble(all-StopLoss*Point,Digits);
bool mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Yellow);
}
else
if(OrderType()==OP_SELL)
{
tp=NormalizeDouble(all-TakeProfit*Point,Digits);
sl=NormalizeDouble(all+StopLoss*Point,Digits);
bool mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Yellow);
}
}
}
}
}
//+------------------------------------------------------------------+
void OrderMod()
{
double pr;
int count=0;
bool mod;
datetime expiration = TimeCurrent()+3600*Expiration;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUYSTOP)
{
if((OrderOpenPrice()-Ask)>Delta*Point+Prohod*Point)
{
pr=Ask+Delta*Point+Prohod*Point;
mod=OrderModify(OrderTicket(),pr,OrderStopLoss(),OrderTakeProfit(),0,Blue);
}
}
if(OrderType()==OP_SELLSTOP)
{
if((Bid-OrderOpenPrice())>Delta*Point+Prohod*Point)
{
pr=Bid-Delta*Point-Prohod*Point;
mod=OrderModify(OrderTicket(),pr,OrderStopLoss(),OrderTakeProfit(),0,Red);
}
}
}
}
}
}
//+------------------------------------------------------------------+
int FindOrderType()
{
int oticket, ticketNumber=0,type=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
oticket=OrderTicket();
if(oticket>ticketNumber)
{
ticketNumber=oticket;
type=OrderType();
}
}
}
}
return(type);
}
//+------------------------------------------------------------------+
double FindLastBuyPrice()
{
int oticket, ticketNumber=0;
double oprice=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
{
oticket=OrderTicket();
if(oticket>ticketNumber)
{
ticketNumber=oticket;
oprice=OrderOpenPrice();
}
}
}
}
return(oprice);
}
//+------------------------------------------------------------------+
double FindLastSellPrice()
{
int oticket, ticketNumber=0;
double oprice=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL)
{
oticket=OrderTicket();
if(oticket>ticketNumber)
{
ticketNumber=oticket;
oprice=OrderOpenPrice();
}
}
}
}
return(oprice);
}
//+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
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()==OP_BUYSTOP) del=OrderDelete(OrderTicket());
if (OrderType()==OP_SELLSTOP) del=OrderDelete(OrderTicket());
}
}
}
}
//+------------------------------------------------------------------+
double StepCalc()
{
int count;
double st=0;
count=CountTrades();
for (int i=0;i<=count;i++)
{
st=Step*MathPow(KStep,i);
}
return(st);
}
//+------------------------------------------------------------------+
double FindLastLot()
{
int oticket, ticketNumber=0;
double llot=0;
if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && (OrderType()==OP_BUY || OrderType()==OP_SELL))
{
oticket=OrderTicket();
if(oticket>ticketNumber)
{
ticketNumber=oticket;
llot=OrderLots();
}
}
}
return(llot);
}
//+------------------------------------------------------------------+
bool NewBar()
{
static datetime lastbar = 0;
datetime curbar = Time[0];
if(lastbar!=curbar)
{
lastbar=curbar;
return (true);
}
else
{
return(false);
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| VikasB.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
extern int StopLoss = 190; // стоп лосс ордера
extern int TakeProfit = 50; // тейк профит ордера
extern int Step = 10; // шаг между ордерами
extern int MaxTrades = 10; // количетсво трейдов
extern int Slip = 3; // проскальзывание
extern int StartHour = 0; // начало торговли часы
extern int StartMin = 0; // начало торговли минуты
extern int Expiration = 14; // время истечения ордера
extern int Prohod = 10; // проход цены от уровня открытия первой свечи
extern int Delta = 10; // расстояние от уровня открытия первой свечи для открытия отложки
extern int Magic = 24012015; // магик
extern double Lots = 0.1; // начальный торговый объем
extern double KLot = 1; // коэффициент увеличения объема
extern double KStep = 2; // увеличение шага между ордерами
int ticket,ord=0;
bool trade;
double step,lot,tp,sl,price,open;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
if(Digits==3 || Digits==5)
{
TakeProfit*=10;
StopLoss*=10;
Step*=10;
Slip*=10;
Delta*=10;
Prohod*=10;
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
datetime expiration = TimeCurrent()+3600*Expiration;
if(Hour()==StartHour && Minute()==StartMin && Seconds()==0) open=Close[0];
double delta=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_BUYSTOP)ord++;
if(OrderType()==OP_SELLSTOP)ord++;
}
}
}
if(Hour()==StartHour && Minute()==StartMin && Seconds()==0) trade=true;ord=0;
if(CountTrades()==0 && ord<1 && trade==true)
{
delta=open-Close[0];
if(delta>Prohod*Point)
{
price=open+Delta*Point;
step=Step;
lot=Lots;
ticket=OrderSend(Symbol(),OP_BUYSTOP,lot,price,3,price-StopLoss*Point,price+TakeProfit*Point*0.5,"",Magic,expiration,Blue);
trade=false;
}
}
if(CountTrades()==0 && ord<1 && trade==true)
{
delta=Close[0]-open;
if(delta>Prohod*Point)
{
price=open-Delta*Point;
step=Step;
lot=Lots;
ticket=OrderSend(Symbol(),OP_SELLSTOP,lot,price,3,price+StopLoss*Point,price-TakeProfit*Point*0.5,"",Magic,expiration,Red);
trade=false;
}
}
if(NewBar()==true)
{
if(CountTrades()>0 && CountTrades()<=MaxTrades)
{
int otype = FindOrderType();
if(otype == OP_BUY)
{
price = FindLastBuyPrice();
step=StepCalc();
if((price-Ask)/Point>=step)
{
lot=FindLastLot()*KLot;
ticket=OrderSend(Symbol(),OP_BUY,NormalizeDouble(lot,2),Ask,Slip,0,0,"Buy Order",Magic,0,Blue);
ModifyOrders();
}
}
else if(otype == OP_SELL)
{
price = FindLastSellPrice();
step=StepCalc();
if((Bid-price)/Point>=step)
{
lot=FindLastLot()*KLot;
ticket=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lot,2),Bid,Slip,0,0,"Sell Order",Magic,0,Red);
ModifyOrders();
}
}
}
}
OrderMod();
if(CountTrades()>0)DelOrder();
Comment("\nЦена в ",StartHour," часов: ",open,
"\nШаг: ",StepCalc(),
"\nЛот: ",NormalizeDouble(FindLastLot(),2),
"\nПозиций : ",CountTrades());
}
//+------------------------------------------------------------------+
<code>> выдаёт ошибку превышение по колли- честву символов. Как быть? </code>
vikas