#979

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

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

#980

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

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

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

#982

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

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

#983

Ну да, всё правильно. А что возвращать - сами решайте...

#984

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


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

ticket2 Я кстати вынес в глобальные или внешние переменные, не помню как правильно сказать )

Изменено 30 июня, 2015 пользователем Алексей7779000

#985

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

#986

Есть вроде простая функция трала:
//+------------------------------------------------------------------+
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(). Получаеться она работает так, Открываеться сетка ордеров, Допустим Селл, и цена пошла вниз куда нам и надо, сработывает трал для самого последнего ордера, а все остальные не модифицируються, как только этот последний ордер закрываеться по стопу, начинаеться трал теперь ПРЕдпоследнего ордера, и т.д.
А надо чтобы трал модифицировал сразу все ордера, и после срабатывания стопа закрывалась вся сетка. Очень надеюсь на вашу помощь.

#987

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



}
}
}
}
}
#988

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

Adjustable_MA.mq410 скач.

#989


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




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

Adjustable_MA.ex413 скач.
Adjustable_MA.mq420 скач.

Изменено 6 декабря, 2017 пользователем Pavel888

#990

При компиляции выдает предупреждения ( скрин в приложениях). :-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

#991

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

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

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

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

#992

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

#993

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

Копируй input в заголовки (к внешним переменным extern)
вычисление workTime перед проверкой условий на вход
#994

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

p_s_3MA_Trall_NoLoss.mq419 скач.

#995

Вставил так:

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()
Ошибки нет но на работу советника не повлияло.
Может проще выложить советника и на примере покажете? спасибо

#996

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

#997

Большое спасибо за помощь. :)

Сова.mq413 скач.

#998

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

Сова.mq422 скач.

#999

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

e-CloseByLossOrProfit.mq411 скач.
e-CloseByProfit.mq410 скач.

#1001

К сожалению советник живет своей жизнью и открывает сделки в любое время...

#1002


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




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

p_s_3MA_Trall_NoLoss2.mq419 скач.

Изменено 6 декабря, 2017 пользователем Pavel888

#1003

День добрый.
Хотелось бы позаниматься с этим:
/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.mq417 скач.

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

Перейти к списку тем
Форум · 2.0.20260627.0025