Вместо
поставитьКод:for (i=0; i<k; i--)
а вместоКод:for (i=0; i<k; i++)
поставитьКод:r=OrderType();
Тогда эта функция будет подсчитывать количество закрытых OP_SELLКод:r++;
По идее да но, тогда она, почему-то вообще не делает сделки,
вот код совы с этим условием, может там у меня чтото лишнее образовалось?Спасибо.
PHP:
extern double Lots = 1;
extern int Slippage = 5;
extern string comment = "WT BOT";
extern int Magic = 123;
extern int startHour =10;
extern int endHour =18;
extern int tf_filtr = 60;
extern int takeprofit = 10;
extern int stoploss = 5;
extern string A2 = "--- Параметры индикатора ---";
extern int T3Period = 8;
extern int T3Price = PRICE_CLOSE;
extern double b = 0.618;
extern string TimeFrame = "current time frame";
extern int BarCount = 1500;
//----- Параметры индикаторов -----
extern string A = "--- СИГНАЛЫ ---";
extern bool ByBar = true; //Для побарового режима. При открытии свечи. Иначе - на каждом тике.
extern int SignalBar = 1; //Бар, на котором проверяется сигнал индикатора
double Sig1, Sig2, SL, TP;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if (Digits == 3 || Digits == 5)
{
takeprofit *= 10;
stoploss *= 10;
Slippage *= 10;
}
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
// индикатор в осциллографе
Sig1 = NormalizeDouble(iCustom(Symbol(), 0, "BB_MACD_v1.01", 0, 1), Digits); //лайм
Sig2 = NormalizeDouble(iCustom(Symbol(), 0, "BB_MACD_v1.01", 1, 1), Digits); //магнета
int Sig = Signal();
if((Sig == 1 && High[1] > High[2])&&(Sig1 != EMPTY_VALUE && Sig2 == EMPTY_VALUE) && (CountSell() > 0)) //лайм и есть ордера на продажу. то закрываем
{
for (int i = OrdersTotal ()-1; i >=0; i--)
{
if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true)
{
if (OrderMagicNumber () == Magic && OrderType() == OP_SELL )
OrderClose (OrderTicket(), OrderLots (), Ask, Slippage, Black);
}
}
}
if((Sig == -1 && Low[1] < Low[2])&&( Sig1 == EMPTY_VALUE && Sig2 != EMPTY_VALUE) && (CountBuy() > 0))//магнета и есть ордера на покупку. то закрываем
{
for (i = OrdersTotal ()-1; i >=0; i--)
{
if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true)
{
if (OrderMagicNumber () == Magic && OrderType() == OP_BUY )
OrderClose (OrderTicket(), OrderLots (), Bid, Slippage, Black);
}
}
}
if((Hour()>=startHour && Hour()<endHour)&&(Sig == 1 && High[1] > High[2])&&(Sig1 != EMPTY_VALUE && Sig2 == EMPTY_VALUE) && (CountBuy() == 0)&&(CountBuyHistory ()==0))//лайм и нет ордера на покупку. то открываем
{
SL = NormalizeDouble(Low[1]-stoploss*Point,Digits);
TP = NormalizeDouble(High[1]+takeprofit*Point,Digits);
OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, SL, TP, comment, Magic, 0, Blue);
}
if((Hour()>=startHour && Hour()<endHour)&&(Sig == -1 && Low[1] < Low[2])&&( Sig1 == EMPTY_VALUE && Sig2 != EMPTY_VALUE)&&( CountSell() == 0)&&(CountSellHistory ()==0))//магнета и нет ордера на продажу. то открываем
{
SL = NormalizeDouble(High[1]+stoploss*Point,Digits);
TP = NormalizeDouble(Low[1]-takeprofit*Point,Digits);
OrderSend (Symbol(), OP_SELL, Lots, Bid, Slippage, SL, TP, comment, Magic, 0, Red);
}
return(0);
}
//+------------------------------------------------------------------+
int CountSell ()
{
int count = 0;
for (int trade = OrdersTotal()-1; trade >= 0; trade--)
{
OrderSelect (trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol () == Symbol()&& OrderMagicNumber () == Magic)
{
if (OrderType () == OP_SELL)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
int CountBuy ()
{
int count = 0;
for (int trade = OrdersTotal()-1; trade >= 0; trade--)
{
OrderSelect (trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol () == Symbol()&& OrderMagicNumber () == Magic)
{
if (OrderType () == OP_BUY)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
//T3_08
int Signal()
{
double L1,L2,L1a,L2a;
L1 = iCustom(NULL,0,"T3_08_2Color",T3Period,T3Price,b ,TimeFrame,BarCount,0,SignalBar);
L2 = iCustom(NULL,0,"T3_08_2Color",T3Period,T3Price,b ,TimeFrame,BarCount,1,SignalBar);
L1a = iCustom(NULL,0,"T3_08_2Color",T3Period,T3Price,b ,TimeFrame,BarCount,0,SignalBar+1);
L2a = iCustom(NULL,0,"T3_08_2Color",T3Period,T3Price,b ,TimeFrame,BarCount,1,SignalBar+1);
if(L1 < L2 && L1a < L2a) return(+1);
if(L1 > L2 && L1a > L2a ) return(-1);
return(0);
}
//+------------------------------------------------------------------+
int CountSellHistory ()
{
int i, k=OrdersHistoryTotal()-1, r=-1;
for (i=0; i<k; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol () == Symbol()&& OrderMagicNumber () == Magic)
{
if (OrderType()==OP_SELL)
{
r++;
}
}
}
}
return(r);
}
//+------------------------------------------------------------------+
int CountBuyHistory ()
{
int i, k=OrdersHistoryTotal()-1, r=-1;
for (i=0; i<k; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol () == Symbol()&& OrderMagicNumber () == Magic)
{
if (OrderType()==OP_BUY )
{
r++;
}
}
}
}
return(r);
}
Последнее редактирование: