Нужна помощь!

 

Всем привет! Написал советника, видимо криво. Потому что тест делать не хочет, выдает ошибки, хотя и был нормально скомпиллирован. Вот его код. Помогите кто чем можт, пожалуйста!

// Численные значения для M5
extern double TakeProfit = 200; // TP для открываемого ордера
extern double StopLoss = 300; // SL для открываемого ордера
extern double PeriodK = 5; //
extern double PeriodD = 3; //
extern double Zamedlenie = 3;
extern double LowSignalLine = 20;
extern double UpSignalLine = 80;
extern double LotsOptimized = 0.5; // Оптимальный размер лота
extern double Level = 200; // Уровень отложенного ордера

double Stoch1;
double Stoch2;
int res;
int prevtime;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----

//---- рассчитываем индикатор Стохастик

Stoch1 = iStochastic(Symbol(),0,PeriodK, PeriodD, Zamedlenie,MODE_SMA,1,MODE_MAIN,1);

Stoch2 = iStochastic(Symbol(),0,PeriodK, PeriodD, Zamedlenie,MODE_SMA,1,MODE_MAIN,2);

//---- Условие продажи

if(Stoch2>=UpSignalLine && Stoch1<UpSignalLine)

res = OrderSend( Symbol(), OP_SELLSTOP, LotsOptimized, Bid-Level*Point, 0, Bid-Level*Point+StopLoss*Point, Bid-Level*Point+TakeProfit*Point, "", 0, 0, CLR_NONE);

return;

//---- Условие покупки

if(Stoch2<=LowSignalLine && Stoch1>LowSignalLine)

res = OrderSend( Symbol(), OP_BUYSTOP, LotsOptimized, Ask+Level*Point, 0, Ask+Level*Point-StopLoss*Point, Ask+Level*Point+TakeProfit*Point, "", 0, 0, CLR_NONE);

return;


}

return;

 
Файлы:
t.mq4  9 kb
 
Спасибо большое! И ещё вопросик: как к нему прикрутить условие, при котором отложенники будут удаляться по истечении какого-то времени?
 
Спасибо большое! И ещё вопросик: как к нему прикрутить условие, при котором отложенники будут удаляться по истечении какого-то времени?
 
Спасибо большое! И ещё вопросик: как к нему прикрутить условие, при котором отложенники будут удаляться по истечении какого-то времени?
 
ilushkin >>:
Спасибо большое! И ещё вопросик: как к нему прикрутить условие, при котором отложенники будут удаляться по истечении какого-то времени?
int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE) 

Где expiration - Срок истечения отложенного ордера. Т.е. ордер будет удален когда expiration>=текущего времени. Тип expiration - datetime.

 
чтоб в коде было меньше ошибок пользуйся этим! (Полезные функции от KimIV 'Полезные функции от KimIV')
 
skdon, мне надо, чтобы ордер удалялся не в определенный час, а через n минут после открытия
 
ilushkin >>:
мне надо, чтобы ордер удалялся не в определенный час, а через n минут после открытия
Вычислить время экспирации можно например так:
extern int ExpirationMinutes = 25;      // Ордер будет удалён через 25 минут

datetime TimeExpir = TimeCurrent() + ExpirationMinutes * 60:
OrderSend(Symbol(), 0, 0.1, 1.5555, 5, 0, 0, NULL, 0, TimeExpir, CLR_NONE);
 
ilushkin >>:
skdon, мне надо, чтобы ордер удалялся не в определенный час, а через n минут после открытия
extern int    DeleteAfter_Minutes=6;

CloseTime=TimeToStr(StrToTime(TimeCurrent( ))+DeleteAfter_Minutes*60);

OrderSend(Symbol(),OP_BUY,1,Ask,3,Bid-25*Point,Ask+25*Point,"My order #"+counter,16384,CloseTime,Green);
 
Спасибо за помощь! Но он делает какой-то левый тест. Открываются только лонги и в огромных количествах. Может, я неправильно описал пересечение стохастиком сигнальных линий?
Причина обращения: