extern double lot1 = 0; //рабочий лот
extern double lot2 = 0; //лот 1-го отложенного ордера
extern double lot3 = 0; //лот 2-го отложенного ордера
extern double lot4 = 0; //лот 3-го отложенного ордера
extern double lot5 = 0; //лот 4-го отложенного ордера
extern int Stop_Loss = 0; //стоп лосс
extern int Take_Profit = 0; //тейк профит
extern int Open_Level = 0; //уровень отдаления от цены, на котором ставим отложенный ордер
extern int slippage = 2; //уровень допустимого реквота
extern int MagicNumber = 0; //магическое число ордеров
int tiсket1=0, ticket2=0, ticket3=0, ticket4=0, ticket5=0;
int init()
{
Comment("Старт советника ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
return(0);
}
int start()
{
double SLbuy=0, SLsell=0,TPbuy=0,TPsell=0;
double Spread=Ask-Bid;
double Pending_By=Ask+Open_Level*Point;
double Pending_Sell=Bid-Open_Level*Point;
if(Stop_Loss>0) {SLbuy=Ask-Stop_Loss*Point-Spread; SLsell=Bid+Stop_Loss*Point+Spread;}
if(Take_Profit>0) {TPbuy=Ask+Take_Profit*Point; TPsell=Bid-Take_Profit*Point;}
int count=OrdersTotal(); // объявление переменной колличества ордеров
//-------------------------Старт цикла. Открытие 1-го и 2-го отрдеров ------------
if(count==0) tiсket1=OrderSend (Symbol(), OP_SELL, lot1, Bid, slippage,
SLsell, TPsell, "LLL_1_Sell", MagicNumber, 0, Red);
if(count==0) ticket2=OrderSend (Symbol(), OP_BUYSTOP, lot2, Pending_By, slippage,
SLbuy+Open_Level*Point, TPbuy+Open_Level*Point, "LLL_1_Bystop", MagicNumber, 0, Blue);
//-------------------------удаление несработавших отложенных ордеров----------------------
for(int i=0; i<count; i++) // цикл пересчета открытых ордеров
{
bool res=OrderSelect(i, SELECT_BY_POS); // выбор ордера по позиции
if (res)
{
int ticket=OrderTicket();
if (count==1) OrderDelete(ticket); // удаление несработавших отложенных ордеров
}
}
//---------------------------открытие 2-го отложенного ордера------------------------------
bool res1=OrderSelect(ticket2, SELECT_BY_TICKET); // выбор 1-го отложенного ордера
if (res1)
{
int type=OrderType(); // проверка состояния 1-го отложенного ордера
if (type==0&&ticket3==0) ticket3=OrderSend (Symbol(), OP_SELLSTOP, lot3,
Pending_Sell+Spread, slippage, SLsell-Open_Level*Point, TPsell-Open_Level*Point, "LLL_1_Selltop", MagicNumber, 0, Yellow);
//открытие 2-го отложенного ордера
}
//---------------------------открытие 3-го отложенного ордера------------------------------
bool res2=OrderSelect(ticket3, SELECT_BY_TICKET); // выбор 2-го отложенного ордера
if (res2)
{
int type2=OrderType(); // проверка состояния 2-го отложенного ордера
if(type2==1&&ticket4==0) ticket4=OrderSend (Symbol(), OP_BUYSTOP, lot4, Pending_By-Spread, slippage,
SLbuy+Open_Level*Point-Spread, TPbuy+Open_Level*Point-Spread, "LLL_2_Bystop", MagicNumber, 0, Green);
//открытие 3-го отложенного ордера
}
//---------------------------открытие 4-го отложенного ордера------------------------------
bool res3=OrderSelect(ticket4, SELECT_BY_TICKET); // выбор 3-го отложенного ордера
if (res3)
{
int type3=OrderType(); // проверка состояния 3-го отложенного ордера
if (type3==0&&ticket5==0) ticket5=OrderSend (Symbol(), OP_SELLSTOP, lot5,
Pending_Sell+Spread, slippage, SLsell-Open_Level*Point, TPsell-Open_Level*Point, "LLL_2_Selltop", MagicNumber, 0, White);
//открытие 4-го отложенного ордера
}
return(0);
}
хелп... как правильно прописать расчет максимума и минимума за определенный период часового времени и открытие при пробое... :question:
int _Hour_=8;
double Maximum=iHigh(NULL,PERIOD_H1,iHighest(NULL,PERIOD_H1,MODE_HIGH,_Hour_,1));
double Minimum=iLow(NULL,PERIOD_H1,iLowest(NULL,PERIOD_H1,MODE_LOW,_Hour_,1));
TimeCurrent() это время прихода последнего тика.Прошу не пинать, только изучаю mql4, возник вопрос:
функция TimeCurrent() и значение массива Time[0] с индексом 0, разве не должны быть близкими по значению??? если эти значения в секундах, то разница между ними у меня составляет почти 16 часов, это нормально???
Это что, попытка рассчитать среднее время бара? В любом случае это некорректно. Время идёт всегда, а в выходные баров нет. Да и дыры в истори не учтены.Хорошо, а подсчет времени одного бара в секундах (TimeCurrent() - Time[Bars-1])/Bars
так корректно?
Спасибо, с этим вроде разобрался. Но все равно МТ4 не работает так как я хочу)))) вот например нужно найти свечку, которая была месяц назад
я делаю так:
i=Bars-1;
while (Time < (TimeCurrent()-60*60*24*30))
{
i--;
}
дальше смотрим что получилось
Alert(Time - TimeCurrent());
и видим число 2032226 на М1, это получается 23 с половиной суток. Такое впечатление, что терминал выдает число с потолка. И плюс ко всему это число еще и разное на разных таймфреймах. Какой то рандом блин....
P.S. историю котировок не забыл подгрузить
Ордера в истории находятся в порядке времени закрытия.Ugar!Помоги пожалуйста,заклинило,не могу сообразить.Мне нужно выставить лимитный ордер по цене открытия,последней закрытой позиции по профиту.
У меня не получается,ума не хватает.
Спасибо!Завтра попробую,сегодня уже ступор.Я пробовал прицепить Кимовские функции "Возвращает флаг закрытия последней позиции по тейку" и "Возвращает цену открытия последней закрытой позиций" не получилось.Ордера в истории находятся в порядке времени закрытия.
Перебирай в цикле исторические ордера от последнего к первому. Проверяй как закрылся ордер, если ордер закрылся не по тейку переходи к следующему по continue. Если по тейку то извлекай цену открытия по OrderOpenPrice и прерывай перебор break.
Далее устанавливай ордер по этой цене, не забудь предварительно её нормировать.
Естественно, перед этим всем надо убедиться что открытый ордер закрылся и что отложенный ордер ещё не установлен. Например переребором не исторических ордеров.
Если есть элементарные знания языка, всё что я здесь нацарапал будет понятно. А если нет то лучше обратиться к программисту.
Попробуй как скрипт вот такой код.
Может лыжи не едут потому что на асфальте?Все равно лыжи не едут. Точнее поехали но не полностью. Предложенный код работает на всех графиках кроме М1, тоесть кроме того графика, где подгружена история котировок. Выдает дату, далекую от нужной. хотя при жестком указании номера свечки, их можно прочитать (получается все свечки доступны). По идее должно работать:fa:
всем еще раз прет,
вот создаю индюк и вот хотел спросить как правильно записать патерн "молот"
у меня вышло так - ((C>O)&&(O<H)&&(C<H)&&(O==L)&&(O1<O)&&(C>H1))
нужно указание в пипсах наверно..., а то у меня бар на хз сколько уходит (вверх или низ) и фиксирует полот
Вроде нормально работает:
А потом такая фигня: