
Файл в базе: www.opentraders.ru/downloads/539/
kipjatok001, у тебя уже столько советников! создается ощущение, что море! хотя бы по предыдущим результаты тестирования выложил бы.
ticket=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lot,2),Ask,Slip,0,0,«Sell Order»,Magic,0,Red);
Надо ASK поменять на BID. А то он не усредняет в селл.
extern int MaxTrades = 10; // количетсво трейдов
extern double KLot = 2; // коэффициент увеличения объема
extern double KStep = 2; // увеличение шага между ордерами
//+------------------------------------------------------------------+
//| Vikas.mq4 |
//| Copyright 2014, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, 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 EndHour = 11; // час окончания торговой сессии
extern int CountHour = 8; // длительность торговой сессии
extern int Expiration = 14; // время истечения ордера
extern int Delta = 100; // расстояние от вершин
extern int Magic = 21122014; // магик
extern double Lots = 0.1; // торговый объем
extern double KLot = 1; // коэффициент увеличения объема
extern double KStep = 10; // увеличение шага между ордерами
int ticket;
double step,lot,tp,sl,price;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
if(Digits==3 || Digits==5)
{
TakeProfit*=10;
StopLoss*=10;
Step*=10;
Slip*=10;
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
int b=0,s=0;
datetime expiration = TimeCurrent()+3600*Expiration;
double up=iHigh(Symbol(),PERIOD_H1,iHighest(NULL,0,MODE_HIGH,CountHour,1));
double dn=iLow(Symbol(),PERIOD_H1,iLowest(NULL,0,MODE_LOW,CountHour,1));
double delta=up-dn;
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)b++;
if(OrderType()==OP_SELLSTOP)s++;
}
}
}
if(CountTrades()==0 && Hour()==EndHour && Ask<up && b<1)
{
price=up+Delta*Point;
step=Step;
lot=Lots;
ticket=OrderSend(Symbol(),OP_BUYSTOP,lot,price,3,price-StopLoss*Point,price+TakeProfit*Point,"",Magic,expiration,Blue);
}
if(CountTrades()==0 && Hour()==EndHour && Bid>dn && s<1)
{
price=dn-Delta*Point;
step=Step;
lot=Lots;
ticket=OrderSend(Symbol(),OP_SELLSTOP,lot,price,3,price+StopLoss*Point,price-TakeProfit*Point,"",Magic,expiration,Red);
}
if(CountTrades()>0 && CountTrades()<=MaxTrades)
{
int otype = FindOrderType();
if(otype == OP_BUY)
{
price = FindLastBuyPrice();
if((price-Ask)/Point>=step)
{
ticket=OrderSend(Symbol(),OP_BUY,NormalizeDouble(lot,2),Ask,Slip,0,0,"Buy Order",Magic,0,Blue);
ModifyOrders();
lot=lot*KLot;
step=step*KStep;
}
}
else if(otype == OP_SELL)
{
price = FindLastSellPrice();
if((Bid-price)/Point>=step)
{
ticket=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lot,2),Ask,Slip,0,0,"Sell Order",Magic,0,Red);
ModifyOrders();
lot=lot*KLot;
step=step*KStep;
}
}
}
if(CountTrades()>0)DelOrder();
Comment("\nШаг: ",step,
"\nЛот: ",NormalizeDouble(lot,2),
"\nПозиций : ",CountTrades());
}
//+------------------------------------------------------------------+
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);
}
}
}
}
}
//+------------------------------------------------------------------+
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());
}
}
}
}
//+------------------------------------------------------------------+
extern double Price = 1.30000; // цена около которой шлем СМС
extern int Delta = 5; // расстояние до цены
Обновил советник в базе: www.opentraders.ru/downloads/539/
AM2