Доработка ботов (советников, индикаторов) vol. 2

YurMih

Новичок форума
Добрый день, уважаемые программисты.

Прошу посмотреть индикатор - не ставится, "зараза", на терминал.
Заранее благодарю...
 

Вложения

  • _!MT4 CURRENCY POWER.mq4
    9,6 КБ · Просмотры: 23

Геша5

ỔχστĦиҜ Ħ₳ ҦթტФИŢ
Привет!
Проверь, должно работать)
Привет,спасибо за труды,но не работает!

Мне не нужен трал,про трал ничего не писал.
Мне надо просто настройку по бу
1) BU true/false
2) BULevel 35 (автоопределение по знакам)это обычные пункты а не пипсы 350
3) BUSize 2 (автоопределение по знакам)так же пункты а не пипсы
ну и если не затруднит добавить что бы ручная поза,открытая по инструменту где стоит сов,так же сопровождалась до ТП и БУ так же по этой ручной позе было.
Спасибо)
 

Дитрий

Прохожий
помогите подправить советника пожалуста

в нем оставить как есть только чтоб выставлял отложки на максимуме и минимуме за интервале с 9:00 до 12:00 а остальное оставить как есть без изменений ! при много благодарен буду )



[C
 

Вложения

  • TTTTTTTTTTTTTTTT222222222.mq4
    18,7 КБ · Просмотры: 51

MrGreen86

Гуру форума

MrGreen86

Гуру форума
Привет,спасибо за труды,но не работает!

Мне не нужен трал,про трал ничего не писал.
Мне надо просто настройку по бу
1) BU true/false
2) BULevel 35 (автоопределение по знакам)это обычные пункты а не пипсы 350
3) BUSize 2 (автоопределение по знакам)так же пункты а не пипсы
ну и если не затруднит добавить что бы ручная поза,открытая по инструменту где стоит сов,так же сопровождалась до ТП и БУ так же по этой ручной позе было.
Спасибо)
в начале настроек есть опция watch_hand_orders. если true - будет ставить такой же ТП на ордера открытые в ручную и без убыток на них тоже будет действовать.
настройки без убытка сделал такие как вы просили.
Посмотреть вложение ULTRON-3.1.2 mod.mq4
 

Sergey BAwenko

Интересующийся
Здравствуйте УВАЖАЕМЫЕ ПРОГРАММИСТЫ прошу вашей помощи подправить данный советник.

1.Открытие ордеров автоматически.
2.При достижении + открывает ордер в туже сторону с начальным лотом.
3.При достижении - переворачивает ордер (открывает ордер в сторону в которую был получен - ).



Посмотреть вложение Nevalyashka_MartinGeil (1).mq4 :please:
 

Манат

Прохожий
Здравствуйте, уважаемые участники форума!
Если не сложно, помогите пожалуйста начинающему трейдеру разобраться с советником. Советник сеточник, должен выставлять отложенные ордера выше и ниже цены в настоящее время, далее по мере срабатывания отложенных ордеров, после достижения определенного уровня профита, выставляется стоп-лосс.
Проблема состоит в том, что советник выставляет бесконечное количество отложенных ордеров даже на одном и том же уровне цены, хотя по условию, отложенный ордер должен выставляться в случае отсутствия ордера (отложенного или рыночного) на данном ценовом уровне. В качестве флага наличия ордера применил функцию ExistPosByPrice(), найденную в сети. Но это тоже не помогло.
Заранее спасибо.

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict

extern double Lots = 0.01;
extern int Magic = 12345;
extern int Slippage = 30;
extern int Lots_Step = 50;
extern int Profit_Dist = 50;
extern int Profit_Dist_Step = 20;
extern int TryCount = 10;


double price_1, price_2;

double buy_up_1, buy_up_2, buy_up_3, buy_down_1, buy_down_2, buy_down_3, sell_up_1, sell_up_2, sell_up_3, sell_down_1, sell_down_2, sell_down_3;
double buy_lots, sell_lots, sl;

int err, aticket;

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{

return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
price_1 = NormalizeDouble(Bid, 3);
if(Bid - price_1 < 0) // Это добавлено на случай округления в большую сторону
{ // например: 1,20285 округляется как 1,203, а нужно, чтобы
price_1 = price_1 - 0.001; // 1,202
}

buy_up_1 = NormalizeDouble(price_1 + Lots_Step * Point, Digits);
buy_up_2 = NormalizeDouble(buy_up_1 + Lots_Step * Point, Digits);
buy_up_3 = NormalizeDouble(buy_up_2 + Lots_Step * Point, Digits);
buy_down_1 = NormalizeDouble(buy_up_1 - Lots_Step * Point, Digits);
buy_down_2 = NormalizeDouble(buy_down_1 - Lots_Step * Point, Digits);
buy_down_3 = NormalizeDouble(buy_down_2 - Lots_Step * Point, Digits);

sell_up_1 = NormalizeDouble(buy_up_1 + (Lots_Step / 2) * Point, Digits);
sell_up_2 = NormalizeDouble(sell_up_1 + Lots_Step * Point, Digits);
sell_up_3 = NormalizeDouble(sell_up_2 + Lots_Step * Point, Digits);
sell_down_1 = NormalizeDouble(sell_up_1 - Lots_Step * Point, Digits);
sell_down_2 = NormalizeDouble(sell_down_1 - Lots_Step * Point, Digits);
sell_down_1 = NormalizeDouble(sell_down_2 - Lots_Step * Point, Digits);


if(ExistPosByPrice(Symbol(), OP_BUYSTOP, Magic, buy_up_1) == False)
OrderSendX(Symbol(), OP_BUYSTOP, Lots, buy_up_1, Slippage, 0, 0, "", Magic, 0, clrNONE);

if(ExistPosByPrice(Symbol(), OP_BUYSTOP, Magic, buy_up_2) == False)
OrderSendX(Symbol(), OP_BUYSTOP, Lots, buy_up_2, Slippage, 0, 0, "", Magic, 0, clrNONE);

if(ExistPosByPrice(Symbol(), OP_BUYSTOP, Magic, buy_up_3) == False)
OrderSendX(Symbol(), OP_BUYSTOP, Lots, buy_up_3, Slippage, 0, 0, "", Magic, 0, clrNONE);

if(ExistPosByPrice(Symbol(), OP_BUYLIMIT, Magic, buy_down_1) == False)
OrderSendX(Symbol(), OP_BUYLIMIT, Lots, buy_down_1, Slippage, 0, 0, "", Magic, 0, clrNONE);

if(ExistPosByPrice(Symbol(), OP_BUYLIMIT, Magic, buy_down_2) == False)
OrderSendX(Symbol(), OP_BUYLIMIT, Lots, buy_down_2, Slippage, 0, 0, "", Magic, 0, clrNONE);

if(ExistPosByPrice(Symbol(), OP_BUYLIMIT, Magic, buy_down_3) == False)
OrderSendX(Symbol(), OP_BUYLIMIT, Lots, buy_down_3, Slippage, 0, 0, "", Magic, 0, clrNONE);

if(ExistPosByPrice(Symbol(), OP_SELLLIMIT, Magic, sell_up_1) == False)
OrderSendX(Symbol(), OP_SELLLIMIT, Lots, sell_up_1, Slippage, 0, 0, "", Magic, 0, clrNONE);

if(ExistPosByPrice(Symbol(), OP_SELLLIMIT, Magic, sell_up_2) == False)
OrderSendX(Symbol(), OP_SELLLIMIT, Lots, sell_up_2, Slippage, 0, 0, "", Magic, 0, clrNONE);

if(ExistPosByPrice(Symbol(), OP_SELLLIMIT, Magic, sell_up_3) == False)
OrderSendX(Symbol(), OP_SELLLIMIT, Lots, sell_up_3, Slippage, 0, 0, "", Magic, 0, clrNONE);

if(ExistPosByPrice(Symbol(), OP_SELLSTOP, Magic, sell_down_1) == False)
OrderSendX(Symbol(), OP_SELLSTOP, Lots, sell_down_1, Slippage, 0, 0, "", Magic, 0, clrNONE);

if(ExistPosByPrice(Symbol(), OP_SELLSTOP, Magic, sell_down_2) == False)
OrderSendX(Symbol(), OP_SELLSTOP, Lots, sell_down_2, Slippage, 0, 0, "", Magic, 0, clrNONE);

if(ExistPosByPrice(Symbol(), OP_SELLSTOP, Magic, sell_down_3) == False)
OrderSendX(Symbol(), OP_SELLSTOP, Lots, sell_down_3, Slippage, 0, 0, "", Magic, 0, clrNONE);

for(int b = 0; b <= OrdersTotal() - 1; b ++)
{
if(OrderSelect(b, SELECT_BY_POS, MODE_TRADES))
{
if(OrderType() == OP_BUY)
{
if(Bid - OrderOpenPrice() > (Profit_Dist + Profit_Dist_Step) * Point)
{
sl = NormalizeDouble(OrderOpenPrice() + Profit_Dist * Point, Digits);
if(!OrderModifyX(OrderTicket(), OrderOpenPrice(), sl, 0, 0, clrNONE))
Print("Не удалось модифицировать ордер на покупку!");
}
}
if(OrderType() == OP_SELL)
{
if(OrderOpenPrice() - Ask > (Profit_Dist + Profit_Dist_Step) * Point)
{
sl = NormalizeDouble(OrderOpenPrice() - Profit_Dist * Point, Digits);
if(!OrderModifyX(OrderTicket(), OrderOpenPrice(), sl, 0, 0, clrNONE))
Print("Не удалось модифицировать ордер на продажу!");
}
}

}
}

for(int c = 0; c <= OrdersTotal() - 1; c ++)
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if(OrderType() == OP_BUY)
buy_lots = buy_lots + OrderLots();
if(OrderType() == OP_SELL)
sell_lots = sell_lots + OrderLots();
}
}

Comment("buy_lots = ", buy_lots, " sell_lots = ", sell_lots);

return;
}
//+------------------------------------------------------------------+
int OrderSendX(string symbol, // символ
int cmd, // торговая операция
double volume, // количество лотов
double price, // цена
int slippage, // проскальзывание
double stoploss, // stop loss
double takeprofit, // take profit
string comment=NULL, // комментарий
int magic=0, // идентификатор
datetime expiration=0, // срок истечения ордера
color arrow_color=clrNONE // цвет
)
{
err = GetLastError();
err = 0;

bool exit_loop = false;
int cnt = 0;

while(!exit_loop)
{
if(IsTradeAllowed())
{
aticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);
err = GetLastError();
}

switch(err)
{
case ERR_NO_ERROR: exit_loop = true; break;

case ERR_SERVER_BUSY:
case ERR_NO_CONNECTION:
case ERR_INVALID_PRICE:
case ERR_OFF_QUOTES:
case ERR_BROKER_BUSY:
case ERR_TRADE_CONTEXT_BUSY:
case ERR_TRADE_TIMEOUT:
cnt++;
break;

case ERR_PRICE_CHANGED:
case ERR_REQUOTE:
RefreshRates();
continue;

default: exit_loop = true;
break;
} // switch(err)

if (cnt > TryCount)
exit_loop = true;

if(!exit_loop)
{
Sleep(1000);
RefreshRates();
}

if(exit_loop)
{
if(err != ERR_NO_ERROR)
{
Print ("Ошибка: " + IntegerToString(err));
}
}

if (err == ERR_NO_ERROR)
{
if (OrderSelect(aticket, SELECT_BY_TICKET, MODE_TRADES))
return (aticket);
else return (-1);

Print("Ошибка открытия ордера после " + IntegerToString(cnt) + " попыток.");
Print("Ошибка: " + IntegerToString(err));
}

} // while(!exit_loop)
return(-1);
} // OrderSendX()
//+------------------------------------------------------------------+
bool OrderModifyX (int ticket, // номер ордера
double price, // цена открытия
double stoploss, // stop loss
double takeprofit, // take profit
datetime expiration, // время истечения ордера
color arrow_color)
{
if(IsStopped())
{
Print("Ошибка: советник остановлен, IsStopped == true");
return(false);
}

int cnt = 0;

while(!IsTradeAllowed() && cnt <TryCount)
{
Sleep(500);
cnt++;
}

if(!IsTradeAllowed())
{
Print("Ошибка: операция недопустима - IsTradeAllowed() == false.");
return(false);
}

if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
{
string sym = OrderSymbol();
int digits = int (MarketInfo(sym, MODE_DIGITS));

if(digits > 0)
{
price = NormalizeDouble(price, digits);
stoploss = NormalizeDouble(stoploss, digits);
takeprofit = NormalizeDouble(takeprofit, digits);
}
}

err = GetLastError();
err = 0;

bool exit_loop = false;
bool result = false;

while(!exit_loop)
{
result = OrderModify(ticket, price, stoploss, takeprofit, expiration, arrow_color);
err = GetLastError();

if(result == true)
return(true);

switch(err)
{
case ERR_NO_ERROR:
case ERR_NO_RESULT:
exit_loop = true;
break;

case ERR_SERVER_BUSY:
case ERR_NO_CONNECTION:
case ERR_INVALID_PRICE:
case ERR_OFF_QUOTES:
case ERR_BROKER_BUSY:
case ERR_TRADE_CONTEXT_BUSY:
case ERR_TRADE_TIMEOUT:
cnt++;
break;

case ERR_PRICE_CHANGED:
case ERR_REQUOTE:
RefreshRates();
continue;

default: exit_loop = true;
break;

} // switch(err)

if(cnt > TryCount)
exit_loop = true;

if(!exit_loop)
{
Print("Ошибка! Попыток: " + IntegerToString(cnt) + "/" + IntegerToString(TryCount));
Sleep(500);
RefreshRates();
}

if(exit_loop)
{
if(err != ERR_NO_ERROR && err != ERR_NO_RESULT)
Print("Ошибка: " + IntegerToString(err));
}
} // while(!exit_loop)

if(err == ERR_NO_RESULT)
{
return(true);
}

Print("Ошибка модификации после " + IntegerToString(cnt) + " попыток.");

return(false);
} // bool OrderModifyX
//+------------------------------------------------------------------+
bool ExistPosByPrice(string sy, int op, int mn, double pp)
{
double px, py;
int d, i, k=OrdersTotal();

for (i=0; i<k; i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
{
// if (OrderType()==OP_BUY || OrderType()==OP_SELL) // Это условие посчитал не нужным.
// {
if (mn<0 || OrderMagicNumber()==mn)
{
d=MarketInfo(OrderSymbol(), MODE_DIGITS);
px=NormalizeDouble(pp, d);
py=NormalizeDouble(OrderOpenPrice(), d);
if (pp<=0 || px==py)
return(True);
}
// }
}
}
}
return(False);
}
//+------------------------------------------------------------------+
 
Последнее редактирование модератором:

scr1ptograf

Интересующийся
Доработка

Ребят привет. Помогите разобраться и доработать индикатор.

1. Индикатор очень сильно вешает Терминал
2. Нужно прикрутить алерт (см. Скрин)
3. Убрать лишнее (см. Скрин)

И если есть возможность описать суть самого индикатора, на чем основан)
Или возможно есть аналог в инете что бы не замарачиваться, ткните палцем.
 

Вложения

  • Screenshot_1.png
    Screenshot_1.png
    137,2 КБ · Просмотры: 310
  • Screenshot_2.png
    Screenshot_2.png
    112,2 КБ · Просмотры: 236
  • @Partizan DEMARK.mq4
    20,1 КБ · Просмотры: 55

scr1ptograf

Интересующийся
Поручик спасибо за наводку, очень полезную инфу почерпнул. Теперь есть один нюанс, нужен параметр LookBack из предыдущего индикатора что я выложил, запихнуть его в этот более стабильный вариант без глюков. Помогите пожo_o

Или ткните палцем может есть уже такой вариант, я гуглил пол ночи но четно:facepalm:
 

Вложения

  • MAB_TD_Sequential.mq4
    11,1 КБ · Просмотры: 81

Sergey BAwenko

Интересующийся
Здравствуйте УВАЖАЕМЫЕ ПРОГРАММИСТЫ прошу вашей помощи подправить данный советник.

1.Открытие ордеров автоматически.
2.При достижении + открывает ордер в туже сторону с начальным лотом.
3.При достижении - переворачивает ордер (открывает ордер в сторону в которую был получен - ).



Посмотреть вложение Nevalyashka_MartinGeil (1).mq4 o_o:please:
 

crokus

Местный житель
уважаемые программисты можно вывести цвет стрелок и их буфера в вкладку индикатора (цвета)
 

Вложения

  • vertex_mod_3.01 alerts9arrows2mtf.mq4
    12,2 КБ · Просмотры: 67

marattmb

Гуру форума
Уважаемые специалисты! Нужна Ваша консультация. Реально ли реализовать мою идею в советник. На скриншоте дивергенция подтверждается канальным подвальным индикатором. Проблема в том, что стандартные индикаторы дивергенций не видят здесь дивергенцию на скриншоте, а она есть и подтверждается канальным подвальным индикатором, после чего можно смело входить в позицию. На больших таймфреймах советник не обязателен, и так увижу. А вот на таймфреймах H4 и ниже советник желателен. Вообщем, подтверждающий канальный индикатор и дивергенция по факту. Как это реализовать?
 

Вложения

  • Подтвержденная дивергенция.png
    Подтвержденная дивергенция.png
    14 КБ · Просмотры: 219

Pammexpert

Местный житель
Уважаемые специалисты! Нужна Ваша консультация. Реально ли реализовать мою идею в советник. На скриншоте дивергенция подтверждается канальным подвальным индикатором. Проблема в том, что стандартные индикаторы дивергенций не видят здесь дивергенцию на скриншоте, а она есть и подтверждается канальным подвальным индикатором, после чего можно смело входить в позицию. На больших таймфреймах советник не обязателен, и так увижу. А вот на таймфреймах H4 и ниже советник желателен. Вообщем, подтверждающий канальный индикатор и дивергенция по факту. Как это реализовать?

Вполне возможно. Но ... для начала нужно подремонтировать канальный индикатор. После компиляции со стриктом - он вообще перестает работать.
 

marattmb

Гуру форума
Вполне возможно. Но ... для начала нужно подремонтировать канальный индикатор. После компиляции со стриктом - он вообще перестает работать.

Есть компилированный, у меня работает.
 

Вложения

  • NEW ABHAFXS TIMING V2.ex4
    8,1 КБ · Просмотры: 52
Верх