Перейти к содержанию

Доработка советников: общая тема


Рекомендуемые сообщения

Доработка советников: общая тема Опубликовано

у меня так:
input int StartHour = 4; // Время начала работы
input int EndHour = 22; // Время окончания работы (открытия ордеров)

...
bool workTime = StartHour = StartHour && Hour() Hour() >= StartHour || Hour() if (workTime) Торгуем...

  • Лайк 3
Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 2,5k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Версия с правками. Я немного свернул код, чтобы не перебирались ордера попусту и чтобы проверка красной/синей зоны делалась в одном месте. Прогнал в тесте с настройками по умолчанию. Ожидаемо лье

Перейти

Нате 1_2_3 _Fraktal.mq4

Перейти

Система маятника, или попрыгунчика, или фиг ее знает как ее еще назвать не намного младше сетки мартингейла. Мы в далеком 2017 писали по ней сов с индикатором на вход: https://tlap.com/forum/labo

Перейти
Доработка советников: общая тема Опубликовано

Написал обычный сеточный советник с мартином, хочу его подредактировать, но не как не могу написать функцию которая возвращала бы ЛОТ ПРЕДПОСЛЕДНЕГО открытого ордера. Мне надо сравнить лот последнего ордера с предпоследним. Функция для поиска последнего ордера есть, как её переделать, чтоб ещё предпоследний был. :-?

double FindLastLots (int otype)
{
double oldlots = 0;
int oldticket;

ticket = 0;
for (int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES ))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype )
{
oldticket = OrderTicket();
if (oldticket > ticket)
{
oldlots = OrderLots();
ticket = oldticket;
}
}
}
}
return(oldlots);
}

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
Алексей7779000 Вам нужно найти ордер по текущей паре и магику, тикет которого меньше тикета последнего, но больше всех остальных.
Делается это за один проход цикла, там, где у Вас сохраняется лот и тикет добавьте:
oldlots2 = oldlots;
ticket2 = ticket;
oldlots = OrderLots();
ticket = oldticket;

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Получается так?

double FindLastLots (int otype)
{
double oldlots = 0, oldlots2 = 0 ; int oldticket;

ticket = 0;
ticket2 = 0; for (int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES ))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype )
{
oldticket = OrderTicket();
if (oldticket > ticket)
{
oldlots2 = oldlots;
ticket2 = ticket;
oldlots = OrderLots();
ticket = oldticket;
}
}
}
}
return(oldlots2); }

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Блин, что то не то, сделал принт и соммент, чтобы посмотреть какой лот функция возвращает там 0.0 . Что то не так (((


Добавлено: 29-06-2015 22:23:03

ticket2 Я кстати вынес в глобальные или внешние переменные, не помню как правильно сказать ) Изменено пользователем Алексей7779000
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Измените направление пересчёта в цикле:
вместо for (int i = OrdersTotal()-1; i>=0; i--)
сделайте for (int i = 0; i

  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Есть вроде простая функция трала:
//+------------------------------------------------------------------+
void Trailing()
{
for(int i =0; i {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if( OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if(OrderType() == OP_BUY)
{
if(Bid - OrderOpenPrice() > TrailingStop * Point)
{
if(OrderStopLoss() {
SL =NormalizeDouble(Bid - TrailingStop * Point, Digits);
if (OrderStopLoss() != SL)
OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0);
}
}
}

if(OrderType() == OP_SELL)
{

if(OrderOpenPrice() - Ask > TrailingStop * Point)
{
if(OrderStopLoss() > Ask +(TrailingStop + TrailingStep) * Point)
{
SL =NormalizeDouble(Ask + TrailingStop * Point, Digits);
if (OrderStopLoss() != SL)
OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0);
}
}

}
}
}
}
}

//+------------------------------------------------------------------+

Мне её надо прикрутить к сеточному советнику, я немного переделал её, чтобы трал срабатывал от последнего ордера, и стоп устанавливался сразу на ВСЕ открытые ордера, но ни хрена не работает.:
//+------------------------------------------------------------------+
void Trailing()
{
double asl = 0;
double asl1 = 0;


asl =NormalizeDouble(Bid - TrailingStop * Point, Digits);
asl1 =NormalizeDouble(Ask + TrailingStop * Point, 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)
{
if(Bid - FindLastBuyPrice() > TrailingStop * Point)
{
if(OrderStopLoss() {
SL = asl;
if (OrderStopLoss() != SL)
OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0);
}
}
}

if(OrderType() == OP_SELL)
{

if(FindLastSellPrice() - Ask > TrailingStop * Point)
{
if((OrderStopLoss() > Ask +(TrailingStop + TrailingStep) * Point) || OrderStopLoss() == 0)
{
SL = asl1;
if (OrderStopLoss() != SL)
OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0);
}
}



}
}
}
}
}

//+------------------------------------------------------------------+

Саму функцию разместил в самом начале кода OnTick(). Получаеться она работает так, Открываеться сетка ордеров, Допустим Селл, и цена пошла вниз куда нам и надо, сработывает трал для самого последнего ордера, а все остальные не модифицируються, как только этот последний ордер закрываеться по стопу, начинаеться трал теперь ПРЕдпоследнего ордера, и т.д.
А надо чтобы трал модифицировал сразу все ордера, и после срабатывания стопа закрывалась вся сетка. Очень надеюсь на вашу помощь.

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

void Trailing()
{
double asl = 0;
double asl1 = 0;


asl =NormalizeDouble(Bid - TrailingStop * Point, Digits);
asl1 =NormalizeDouble(Ask + TrailingStop * Point, Digits);

for(int i = OrdersTotal()-1; i>=0; i--)
{
int j;
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if( OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if(OrderType() == OP_BUY)
{
if(Bid - FindLastBuyPrice() > TrailingStop * Point)
{
if(OrderStopLoss() {
SL = asl;
for(j=i; j>=0; j--)
if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY && OrderStopLoss() != SL)
OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0);
break;
}
}
}

if(OrderType() == OP_SELL)
{

if(FindLastSellPrice() - Ask > TrailingStop * Point)
{
if((OrderStopLoss() > Ask +(TrailingStop + TrailingStep) * Point) || OrderStopLoss() == 0)
{
SL = asl1;
for(j=i; j>=0; j--)
if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL && OrderStopLoss() != SL)
OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0);
break;
}
}



}
}
}
}
}
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Заранее извиняюсь, может не туда и не то!
Добрый день или вечер, нужна помощь, допилить советник,т.е. добавить туда еще несколько функций, пробовал сам не получается! Не хватает навыков((
Добавить необходимо количество открываемых ордеров желательно переменное число, или на худой конец 2 ордера, одинаковый СЛ и изменяемый ТП, возможность менять м.номер без танцев с бубнами, заранее спасибо, советник прилагаю!

Adjustable_MA.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано


Заранее извиняюсь, может не туда и не то!
Добрый день или вечер, нужна помощь, допилить советник,т.е. добавить туда еще несколько функций, пробовал сам не получается! Не хватает навыков((
Добавить необходимо количество открываемых ордеров желательно переменное число, или на худой конец 2 ордера, одинаковый СЛ и изменяемый ТП, возможность менять м.номер без танцев с бубнами, заранее спасибо, советник прилагаю!




добавил количество ордеров и вынес мэджик, но не проверял

Adjustable_MA.ex4
Adjustable_MA.mq4

Изменено пользователем Pavel888
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

При компиляции выдает предупреждения ( скрин в приложениях). :-ss


extern double Lots = 0.1;
extern double StopLoss = 50;
extern double Takeprofit = 100;
extern int MovingPeriod1 = 8;
extern int MovingPeriod2 = 21;
extern int Slippage = 3;
extern int Magic = 123;
extern string comment = "Robot";
int ticket;


double Indicator1, Indicator2, SL, TP;
//----------------------------------
//----------------------------------

int OnInit()
{
if (Digits == 3 || Digits == 5);
{
Takeprofit *= 10;
StopLoss *= 10;
Slippage *= 10;
}
return(INIT_SUCCEEDED);
}
//---------------------------------------------------
//---------------------------------------------------

void OnDeinit(const int reason)
{


}
//------------------------------------------------------
//----------------------------------------------------

void OnTick()
{
Indicator1 = iCustom (Symbol(), 0, "Moving Averenges", MovingPeriod1, 0,1);
Indicator2 = iCustom (Symbol(), 0, "Moving Averenges", MovingPeriod2, 0,1);
if(Indicator1 > Indicator2 && CountBuy() == 0)

SL = NormalizeDouble(Ask - StopLoss * Point, Digits);
TP = NormalizeDouble(Ask + Takeprofit * Point, Digits);
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, comment, Magic, 0, 0);
if(ticket > 0)

if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
OrderModify(ticket, OrderOpenPrice(), SL, TP, 0);


if(Indicator1 SL = NormalizeDouble(Bid - StopLoss * Point, Digits);
TP = NormalizeDouble(Bid + Takeprofit * Point, Digits);
ticket = OrderSend(Symbol(), OP_SELL, Lots, Ask, Slippage, 0, 0, comment, Magic, 0, 0);
bool modify1 = OrderModify(ticket, OrderOpenPrice(),SL, TP, 0);

if(ticket > 0)

if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
OrderModify(ticket, OrderOpenPrice(), SL, TP, 0);


}
//+------------------------------------------------------------------+
//---Проверка ордеров
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);


}
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);


}

Предупреждения..png

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Два нюанса, как я понимаю:

1) OrderSelect и OrderModify это функции, которые возвращают значения для дальнейшей проверки.
Соответственно программа видит что Вы не "выцепляете" эти значения
в строках типа (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);)
и подсказывает что Вы этот момент опустили. Но так как у Вас сделано тоже работать будет.

2) empty controlled statement found
Это у Вас If не корректно используется в строке:
if(Indicator1 > Indicator2 && CountBuy() == 0) (для этого условия нет дальнейших действий)

После If там наверное Вы фигурные скобки пропустили

  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Подскажите куда конкретно нужно копировать данные настройки и именно в таком виде?

Копируй input в заголовки (к внешним переменным extern)
вычисление workTime перед проверкой условий на вход
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Доброго времени суток!!!
Смысл такой, если есть у кого советник, который работает на 3-х ма не коряво написанный, алгоритм:
3ма быстрый, средний и медленный;
на покупку быстрая ма пробивает среднюю, при этом обе выше медленной
продажа наоборот.
количество сделок по желанию, чтоб долго не расписывать выложу 1 сову, но алгоритм работы ее я не могу догнать,т.е. количество сделок подходит, есть трал и бу, но по сделкам зевает или открывает при касании быстрой ма -средней
У меня 3 или 4 штуки все написаны руками скотчем приклеенными, если есть у кого норм версии просьба поделиться!!!

p_s_3MA_Trall_NoLoss.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Вставил так:

input int StartHour = 17; // Время начала работы
input int EndHour = 9; // Время окончания работы (открытия ордеров)
extern string Version = "1.00";
extern string _1 = "System Parameters";
extern bool Stealth = TRUE;
extern bool Agressive = TRUE;
extern double GmtOffset = 0.0;
extern bool AutoGmtOffset = TRUE;
extern int S1_Reference = 337733;
extern int S2_Reference = 773377;
extern string ReceiptCode = "";
extern string _2 = "Strategy Parameters";
extern int Slippage = 3;
extern bool SendEmails = FALSE;
extern string _3 = "Order Management";
extern double LotSize = 0.1;
extern string _4 = "Ratio Order Management";
extern double RiskLevel = 0.0;
extern bool RecoveryMode = TRUE;
extern string _5 = "Fixed Ratio Order Management";
extern bool UseFixedRatio = FALSE;
extern double BaseDeposit = 1000.0;
extern double StepRatio = 0.2;
extern bool ReduceLots = FALSE;
bool workTime = StartHour = StartHour && Hour() Hour() >= StartHour || Hour()
Ошибки нет но на работу советника не повлияло.
Может проще выложить советника и на примере покажете? спасибо

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Там где открывает ордера не забыли вставить: if (workTime) Торгуем... ?
Если не получится - вставляй свою сову я допишу.

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Да-уж, сова у Вас не простая...
Пробуйте. Т.к. у меня нет библиотек, то сову не компилировал и не проверял, но должно работать...

Сова.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Коллеги, на нашем сайте была тема TradeManagement, которая содержала ряд простейших советников упрощающих торговлю. Первый советник e-CloseByLossOrProfit выполняет закрытие всех позиций при достижении общего по счёту заданного уровня убытка или прибыли в валюте депозита. Кроме того, этот советник может ещё и удалить отложенные ордера. Второй e-CloseByProfit выполняет закрытие всех позиций при достижении общего по счёту заданного уровня убытка или прибыли в пунктах.
ЗАДАЧА : скопировать функцию удаления отложенных ордеров уз первого советника во второй, т.е. e-CloseByProfit должен удалять отложенные ордера. Ниже исходники.Спасибо.

e-CloseByLossOrProfit.mq4
e-CloseByProfit.mq4

Ссылка на сообщение
Поделиться на другие сайты

  • 2 weeks later...
Доработка советников: общая тема Опубликовано


Доброго времени суток!!!
Смысл такой, если есть у кого советник, который работает на 3-х ма не коряво написанный, алгоритм:
3ма быстрый, средний и медленный;
на покупку быстрая ма пробивает среднюю, при этом обе выше медленной
продажа наоборот.
количество сделок по желанию, чтоб долго не расписывать выложу 1 сову, но алгоритм работы ее я не могу догнать,т.е. количество сделок подходит, есть трал и бу, но по сделкам зевает или открывает при касании быстрой ма -средней
У меня 3 или 4 штуки все написаны руками скотчем приклеенными, если есть у кого норм версии просьба поделиться!!!




Посмотри теперь должна открывать только когда средняя и быстрая МА выше или ниже медленной, если еще актуально.

p_s_3MA_Trall_NoLoss2.mq4

Изменено пользователем Pavel888
  • Лайк 3
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

День добрый.
Хотелось бы позаниматься с этим:
http://tlap.com/forum/sovetniki-foreks/11/sovetnik-quotkalmarquot/7312/?do=findComment&comment=225903

Убрал многолотность и прогнал с настройками "на глазок"

Спойлер



Но для дальнейшей работы желательно добавить тайм-фильтр.
Поэтому просьба:
пожалуйста вставьте вот этот тайм-фильтр:
Спойлер

extern string S1  =             " DayOfWeek Filter";
extern bool monday = true;
extern string monday_open = "20:00";
extern string monday_pause_start = "0";
extern string monday_pause_stop = "0";
extern string monday_close = "23:50";

extern bool tuesday = false;
extern string tuesday_open = "20:00";
extern string tuesday_pause_start = "0";
extern string tuesday_pause_stop = "0";
extern string tuesday_close = "23:50";

extern bool wednesday = true;
extern string wednesday_open = "20:00";
extern string wednesday_pause_start = "0";
extern string wednesday_pause_stop = "0";
extern string wednesday_close = "23:50";

extern bool thursday = true;
extern string thursday_open = "20:00";
extern string thursday_pause_start = "0";
extern string thursday_pause_stop = "0";
extern string thursday_close = "23:50";

extern bool friday = false;
extern string friday_open = "08:30";
extern string friday_pause_start = "15:30";
extern string friday_pause_stop = "17:55";
extern string friday_close = "21:35";

extern bool sunday = false;
extern string sunday_open = "08:30";
extern string sunday_pause_start = "15:30";
extern string sunday_pause_stop = "17:55";
extern string sunday_close = "21:35";

+++++++++++++++++++++++++++++++++++

bool IsTime()
{
switch(DayOfWeek())
{
case 0: {
return(sunday && IsNow(sunday_open,sunday_pause_start,sunday_pause_stop,sunday_close));
break;
}
case 1: {
return(monday && IsNow(monday_open,monday_pause_start,monday_pause_stop,monday_close));
break;
}
case 2: {
return(tuesday && IsNow(tuesday_open,tuesday_pause_start,tuesday_pause_stop,tuesday_close));
break;
}
case 3: {
return(wednesday && IsNow(wednesday_open,wednesday_pause_start,wednesday_pause_stop,wednesday_close));
break;
}
case 4: {
return(thursday && IsNow(thursday_open,thursday_pause_start,thursday_pause_stop,thursday_close));
break;
}
case 5: {
return(friday && IsNow(friday_open,friday_pause_start,friday_pause_stop,friday_close));
break;
}
default:{
return(false);
}
}

}

bool IsNow(string open,string pause_start,string pause_stop,string close)
{
if((pause_start == "0")||((pause_start == open)&&(pause_stop == close)))
{
//no pause
return((TimeCurrent() >= StrToTime(open)) && (TimeCurrent()
}
else // pause
{
return(((TimeCurrent() >= StrToTime(open)) && (TimeCurrent() ((TimeCurrent() >= StrToTime(pause_stop)) && (TimeCurrent() }
return(false);
}

+++++++++++++++++++++++++++++++++++++++++++++++++++++



KalmarSource_1.mq4

Ссылка на сообщение
Поделиться на другие сайты

  • idinesh changed the title to Assae Elite Pro tlap version source code need i have plan convert this mt4 to mt5 and it possible mt4 dll file modified mt5 version
  • Pavel888 pinned this тема

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • ×
    ×
    • Создать...