Статус
Закрыто для дальнейших ответов.

Alto

Интересующийся
Добрый день! Помогите прикрутить к советнику индикатор тренда. Имеем: советник, работающий внутри канала, образованными трендовыми линиями, рисуемыми вручную. Имена линий требуется вводить в советник из внешних параметров. Хотелось бы прикрутить к советнику автоматический индикатор, который сам рисует трендовые линии, перерисовывает их спустя время по ситуации на рынке.
Индикатор такой:

//+------------------------------------------------------------------+
//| ang_AutoCh_HL-v1.mq4 |
//| umbenannt in Autotrendlinien.mq4 |
//| Copyright © 2006, [email protected] |
//+------------------------------------------------------------------+

#property copyright "[email protected]"
//----------------------------------
#property indicator_chart_window
//----------------------------------
extern int Hours = 10;
extern color col = Blue;
//------------------
double lr, lr0, lrp;
double sx, sy, sxy, sx2, aa, bb;
int p, sName, fs;
int f, f0, f1;
double dh, dl, dh_1, dl_1, dh_2, dl_2;
int ai_1, ai_2, bi_1, bi_2;
double hai, lai, dhi, dli, dhm, dlm, ha0, hap, la0, lap;
double price_p1, price_p0, price_p2, price_01, price_00, price_02;
int p1, p0, p2, fp;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
p = Hours*60 / Period();
if(fs == 0)
{
sName = CurTime();
fs = 1;
}
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
ObjectDelete("1" + sName);
ObjectDelete("0" + sName);
ObjectDelete("2" + sName);
}
//+------------------------------------------------------------------+
//| Custom indicator start function |
//+------------------------------------------------------------------+
int start()
{
int i, n;
//----
if(f == 1)
{
p1 = iBarShift(Symbol(), Period(), ObjectGet("1" + sName, OBJPROP_TIME1));
p0 = iBarShift(Symbol(), Period(), ObjectGet("0" + sName, OBJPROP_TIME1));
p2 = iBarShift(Symbol(), Period(), ObjectGet("2" + sName, OBJPROP_TIME1));
if(fp == 0 && p != p1)
{
p = p1;
fp = 1;
}
if(fp == 0 && p != p0)
{
p = p0;
fp = 1;
}
if(fp == 0 && p != p2)
{
p = p2;
fp = 1;
}
}
sx = 0; sy = 0; sxy = 0; sx2 = 0;
//----
for(n = 0; n <= p; n++)
{
sx += n;
sy += Close[n];
sxy += n*Close[n];
sx2 += MathPow(n, 2);
}
aa = (sx*sy - (p + 1)*sxy) / (MathPow(sx, 2) - (p + 1)*sx2);
bb = (sy - aa*sx) / (p + 1);
//----
for(i = 0; i <= p; i++)
{
lr = bb + aa*i;
dh = High - lr;
dl = Low - lr;
//----
if(i < p / 2)
{
if(i == 0)
{
dh_1 = 0.0;
dl_1 = 0.0;
ai_1 = i;
bi_1 = i;
}
//----
if(dh >= dh_1)
{
dh_1 = dh;
ai_1 = i;
}
//----
if(dl <= dl_1)
{
dl_1 = dl;
bi_1 = i;
}
}
//----
if(i >= p / 2)
{
if(i == p / 2)
{
dh_2 = 0.0;
dl_2 = 0.0;
ai_2 = i;
bi_2 = i;
}
if(dh >= dh_2)
{
dh_2 = dh;
ai_2 = i;
}
if(dl <= dl_2)
{
dl_2 = dl;
bi_2 = i;
}
}
}
lr0 = bb;
lrp = bb + aa*(i + p);
//----
if(MathAbs(ai_1 - ai_2) > MathAbs(bi_1 - bi_2))
f=1;
//----
if(MathAbs(ai_1 - ai_2) < MathAbs(bi_1 - bi_2))
f=2;
//----
if(MathAbs(ai_1 - ai_2) == MathAbs(bi_1 - bi_2))
{
if(MathAbs(dh_1 - dh_2) < MathAbs(dl_1 - dl_2))
f=1;
//----
if(MathAbs(dh_1 - dh_2) >= MathAbs(dl_1 - dl_2))
f=2;
}
//----
if(f == 1)
{
for(n = 0; n <= 20; n++)
{
f1 = 0;
//----
for(i = 0; i <= p; i++)
{
hai = High[ai_1]*(i - ai_2) / (ai_1 - ai_2) + High[ai_2]*(i - ai_1) /
(ai_2 - ai_1);
//----
if(i == 0 || i == p / 2)
dhm = 0.0;
//----
if(High - hai > dhm && i < p / 2)
{
ai_1 = i;
f1 = 1;
}
//----
if(High - hai > dhm && i >= p / 2)
{
ai_2 = i;
f1 = 1;
}
}
//----
if(f == 0)
break;
}
//----
for(i = 0; i <= p; i++)
{
hai = High[ai_1]*(i - ai_2) / (ai_1 - ai_2) + High[ai_2]*(i - ai_1) /
(ai_2 - ai_1);
dli = Low - hai;
if(i == 0)
dlm=0.0;
if(dli < dlm)
dlm = dli;
}
ha0 = High[ai_1]*(0 - ai_2) / (ai_1 - ai_2) + High[ai_2]*(0 - ai_1) / (ai_2 - ai_1);
hap = High[ai_1]*(p - ai_2) / (ai_1 - ai_2) + High[ai_2]*(p - ai_1) / (ai_2 - ai_1);
price_p1 = hap;
price_p0 = hap + dlm / 2;
price_p2 = hap + dlm;
price_01 = ha0;
price_00 = ha0 + dlm / 2;
price_02 = ha0 + dlm;
}
if(f == 2)
{
for(n = 0; n <= 20; n++)
{
f1 = 0;
for(i = 0; i <= p; i++)
{
lai = Low[bi_1]*(i - bi_2) / (bi_1 - bi_2) + Low[bi_2]*(i - bi_1) /
(bi_2 - bi_1);
if(i == 0 || i == p / 2)
dlm = 0.0;
if(Low - lai < dlm && i < p / 2)
{
bi_1 = i;
f1 = 1;
}
if(Low - lai < dlm && i >= p / 2)
{
bi_2 = i;
f1 = 1;
}
}
if(f == 0)
break;
}
//----
for(i = 0; i <= p; i++)
{
lai = Low[bi_1]*(i - bi_2) / (bi_1 - bi_2) + Low[bi_2]*(i - bi_1) / (bi_2 - bi_1);
dhi = High - lai;
if(i == 0)
dhm = 0.0;
if(dhi > dhm)
dhm = dhi;
}
la0 = Low[bi_1]*(0 - bi_2) / (bi_1 - bi_2) + Low[bi_2]*(0 - bi_1) / (bi_2 - bi_1);
lap = Low[bi_1]*(p - bi_2) / (bi_1 - bi_2) + Low[bi_2]*(p - bi_1) / (bi_2 - bi_1);
price_p1 = lap;
price_p0 = lap + dhm / 2;
price_p2 = lap + dhm;
price_01 = la0;
price_00 = la0 + dhm / 2;
price_02 = la0 + dhm;
}
ObjectCreate("1" + sName, 2, 0, Time[p], price_p1, Time[0], price_01);
ObjectCreate("0" + sName, 2, 0, Time[p], price_p0, Time[0], price_00);
ObjectCreate("2" + sName, 2, 0, Time[p], price_p2, Time[0], price_02);
ObjectSet("1" + sName, OBJPROP_COLOR, col);
ObjectSet("0" + sName, OBJPROP_COLOR, col);
ObjectSet("0" + sName, OBJPROP_STYLE, STYLE_DOT);
ObjectSet("2" + sName, OBJPROP_COLOR, col);
ObjectSet("1" + sName, OBJPROP_TIME1, Time[p]);
ObjectSet("1" + sName, OBJPROP_PRICE1, price_p1);
ObjectSet("1" + sName, OBJPROP_TIME2, Time[0]);
ObjectSet("1" + sName, OBJPROP_PRICE2, price_01);
ObjectSet("0" + sName, OBJPROP_TIME1, Time[p]);
ObjectSet("0" + sName, OBJPROP_PRICE1, price_p0);
ObjectSet("0" + sName, OBJPROP_TIME2, Time[0]);
ObjectSet("0" + sName, OBJPROP_PRICE2, price_00);
ObjectSet("2" + sName, OBJPROP_TIME1, Time[p]);
ObjectSet("2" + sName, OBJPROP_PRICE1, price_p2);
ObjectSet("2" + sName, OBJPROP_TIME2, Time[0]);
ObjectSet("2" + sName, OBJPROP_PRICE2, price_02);
f = 1; p1 = p; p0 = p; p2 = p; fp = 0;
return(0);
}
//+------------------------------------------------------------------+
 

Alto

Интересующийся
Вот советник:

//+----------------------------------------------------------------------------------------------------------------------+
//| ------------------Прочитать перед компиляцией------------- |
//| Советник работает в канале образованном двумя линиями Name_the_top_line(Имя верхней линии) и Name_of_the_bottom_line|
//| (Имя нижней линии).Если цена находится в верхней половине между линиями, то выставляется Селл, если в нижней |
//| половине, то Бай. Линии рисуются вручную на графике трендовыми линиями, потом переименовываются. |
//| Если переменная Тейкпрофит=0, то ТР выставляется внутри канала, ближе к ордеру чем дальняя линия на 1 пункт + спрэд, |
//| СЛ ставится за дальней линией, на 1 пункт+спрэд, если переменная Тейкпрофит не равна 0, то ТР=Тейкпрофит |
//| Есть встроеный тралл, который переменной UseTrailing можно включить/выключить. |
//| TrailingStop - растояние с которого начинаем тралить, TrailingStep - шаг тралла. |
//| Количество ордеров задается переменной Sum_orders. Так же можно задать обьем лота переменной Lots. |
//+----------------------------------------------------------------------------------------------------------------------+
#property copyright "Игорь Александров"
#property link "[email protected]"

extern string Name_the_top_line="11111"; //Имя верхней линии
extern string Name_of_the_bottom_line="22222"; //Имя нижней линии
extern int Всего_ордеров_на_счете=10;//Кол-во выставляемых ордеров на счете
extern int Всего_ордеров_на_инструменте=10;//Кол-во выставляемых ордеров
extern string Order_Comment = "Поставлен роботом"; //Коментарий для ордера
extern double Lots =1; // Объем лота
extern int Тейкпрофит=10;//Тейкпрофит
//+----------------------------------------------------------------------+
//+ трейлинг-стоп +
extern bool UseTrailing = true; //включение/выключение T-SL
extern int TrailingStop = 35; // Фиксированный размер трала
extern int TrailingStep = 2; // Шаг трала
//+ трейлинг-стоп +
//+----------------------------------------------------------------------+

//+-------------------------------------------------------------------------------------------------------------------+
//| Функция трейлинг стоп лосс |
void T_SL()
{
int i=0;
if(!UseTrailing) return;
for(i=0; i<OrdersTotal(); i++)
{
if(!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
if(OrderSymbol() != Symbol()) continue;
if(OrderType()==OP_BUY)
{
if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(TrailingStop*Point,Digits))
{
if(NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-(TrailingStop+TrailingStep-1)*Point,Digits))
{
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-TrailingStop*Point,Digits), OrderTakeProfit(), 0, CLR_NONE);
}
} //end if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(TrailingStop*Point,Digits))
} //end if(OrderType()==OP_BUY)

if(OrderType()==OP_SELL)
{
if(NormalizeDouble(OrderOpenPrice()-Ask,Digits)>NormalizeDouble(TrailingStop*Point,Digits))
{
if(NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(Ask+(TrailingStop+TrailingStep-1)*Point,Digits))
{
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+TrailingStop*Point,Digits), OrderTakeProfit(), 0, CLR_NONE);
}
} //end if(NormalizeDouble(OrderOpenPrice()-Ask,Digits)>NormalizeDouble(TrailingStop*Point,Digits))
} //end if(OrderType()==OP_SELL)
} //end for(i=0; i<OrdersTotal(); i++)
} //end void T_SL()
//| Конец функции трейлинг стоп лосс |
//+-------------------------------------------------------------------------------------------------------------------+
//-------------------------------------------Стартуем--------------------------------------------------------------
int start()
{
//+------------------------------------------------------------
//| Обьявляем локальные переменные

int Total; //Количество рабочих ордеров открытых данным экспертом
int Total_all ; //Кол-во ордеров на счете
int TotalBuy ; //Кол-во рабочих ордеров Buy
int TotalSell ; //Кол-во рабочих ордеров Sell
int Ticket_Order_Buy; //Тикет открытого ордера Бай
int Ticket_Order_Sell; //Тикет открытого ордера Селл
int STOP_LEVER; //Минимальное растояние для TP и SL

double Lots_Order_Buy; //Объем открытого ордера Бай
double Lots_Order_Sell; //Объем открытого ордера Селл
double tp; //ТР открываемого ордера
double sl; //СЛ открываемого ордера
bool Open_Buy=false; //Флаг открытия ордера Бай
bool Open_Sell=false; //Флаг открытия ордера Селл

//| Конец объявления локальных переменных
//+-----------------------------------------------------------
//----

for(int i = 0; i < OrdersTotal(); i ++) //Выбираем общее кол-во открытых и отложенных ордеров
{
//-----------------Перебираем рабочие ордера-------
if (OrderSelect(i,SELECT_BY_POS)==true) // Если есть следующий рабочий
{ // Анализ ордеров

Total_all++; //Всего ордеров на счете
if(OrderSymbol()!=Symbol()) continue; // Не наш фин. инструм.
Total++; // Счётчик рыночных ордеров установленных данным экспертом
//-------------------------Проверяем ордера Бай----------------
if (OrderType()==OP_BUY) //Перебираем все рабочие ордера BUY
{
TotalBuy ++; // считаем их кол-во
Lots_Order_Buy=OrderLots(); // запоминаем его объем
Ticket_Order_Buy= OrderTicket(); //запоминаем его тикет
}
//---------------------------Проверяем ордера Селл-----------------
if(OrderType() == OP_SELL) //Перебираем все рабочие ордера SELL
{
TotalSell++; // считаем их кол-во
Lots_Order_Sell=OrderLots(); // запоминаем его объем
Ticket_Order_Sell= OrderTicket(); //запоминаем его тикет
}
}//end if (OrderSelect(i,SELECT_BY_POS)==true)
//---------------Конец перебора рабочих ордеров----------------------
}// end for(int i = 0; i < OrdersTotal(); i ++)
//--------------------------------------------------------------------------------------------------------------------------
if((TotalBuy+TotalSell)<Всего_ордеров_на_инструменте&&Total_all<Всего_ордеров_на_счете) //Если рабочих ордеров меньше заданного кол-ва, то считаем дальше
{
//+--------------------------------------------------------------------
//| Определяем торговые критерии и уровень стоп приказов
if(ObjectFind(Name_the_top_line)==-1)return;//Если нет верхней линии выходим из старт
if(ObjectFind(Name_of_the_bottom_line)==-1)return;//Если нет нижней линии выходим из старт
if((ObjectGetValueByShift(Name_the_top_line, 0)-Ask)<0)return;//Если Ask выше верхней линии выходим из старт
if((Bid-ObjectGetValueByShift(Name_of_the_bottom_line, 0))<0)return;//Если Bid ниже нижней линии выходим из старт
int Spread=MarketInfo(Symbol(),MODE_SPREAD);//Запрашиваем спред в пунктах
int STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);//Запрашиваем минимально допустимый уровень стоп-лосса/тейк-профита в пунктах

if((ObjectGetValueByShift(Name_the_top_line, 0)-Ask)>(Bid-ObjectGetValueByShift(Name_of_the_bottom_line, 0)))
{//Если растояние от верхней линии до Аск больше растояния от нижней линии до Бид,то
Open_Buy=true; //поднимаем флаг открытия ордера Бай
tp=ObjectGetValueByShift(Name_the_top_line,0)-(1+Spread)*Point;//Тр ставим ниже цены верхней линии на 1+Spread пунктов
if((tp-Ask)/Point<STOPLEVEL)//Если Тр на расстоянии меньше минимально допустимого, то
{
tp=Ask+STOPLEVEL*Point;//Тр устанавливаем на минимально допустимом расстоянии
}
sl=ObjectGetValueByShift(Name_of_the_bottom_line,0)-(1+Spread)*Point;//СЛ ставим ниже цены нижней линии на 1+Spread пунктов
if((Bid-sl)/Point<STOPLEVEL)//Если СЛ на расстоянии меньше допустимого, то
{
sl=Bid-STOPLEVEL*Point;//СЛ устанавливаем на минимально допустимом расстоянии
}
}//end if((ObjectGetValueByShift(Name_the_top_line, 0)-Ask)>(Bid-ObjectGetValueByShift(Name_of_the_bottom_line, 0)))

if((ObjectGetValueByShift(Name_the_top_line, 0)-Ask)<(Bid-ObjectGetValueByShift(Name_of_the_bottom_line, 0)))
{//Если растояние от верхней линии до Аск меньше растояния от нижней линии до Бид,то
Open_Sell=true; //поднимаем флаг открытия ордера Селл
tp=ObjectGetValueByShift(Name_of_the_bottom_line,0)+(1+Spread)*Point;//Тр ставим выше цены нижней линии на 1+Spread пунктов
if((Bid-tp)/Point<STOPLEVEL)//Если Тр на расстоянии меньше минимально допустимого, то
{
tp=Bid-STOPLEVEL*Point;//Тр устанавливаем на минимально допустимом расстоянии
}
sl=ObjectGetValueByShift(Name_the_top_line,0)+(1+Spread)*Point;//СЛ ставим выше цены верхней линии на 1+Spread пунктов
if((sl-Ask)/Point<STOPLEVEL)//Если СЛ на расстоянии меньше допустимого, то
{
sl=Ask+STOPLEVEL*Point;//СЛ устанавливаем на минимально допустимом расстоянии
}
} //end if((ObjectGetValueByShift(Name_the_top_line, 0)-Ask)<(Bid-ObjectGetValueByShift(Name_of_the_bottom_line, 0)))

//| Конец определения торговых критериев и уровня стоп приказов
//+--------------------------------------------------------------------
}//end if((TotalBuy+TotalSell)<Sum_orders)

//+--------------------------------------------------------------------
//| Установка ордеров
if((TotalBuy+TotalSell)<Всего_ордеров_на_инструменте&&Total_all<Всего_ордеров_на_счете) //Если рабочих ордеров меньше заданного кол-ва, то считаем дальше
{

if(Open_Buy&&!Open_Sell)
{
if(Тейкпрофит>0){
tp=Ask+Тейкпрофит*Point;
if((tp-Ask)/Point<STOPLEVEL)//Если Тр на расстоянии меньше минимально допустимого, то
{
tp=Ask+STOPLEVEL*Point;//Тр устанавливаем на минимально допустимом расстоянии
}
}//end if(Тейкпрофит>0){
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,sl,tp,Order_Comment,0,0,CLR_NONE);
return;
}//end if(Open_Buy&&!Open_Sell)
if(Open_Sell&&!Open_Buy)
{
if(Тейкпрофит>0){
tp=Bid-Тейкпрофит*Point;
if((Bid-tp)/Point<STOPLEVEL)//Если Тр на расстоянии меньше минимально допустимого, то
{
tp=Bid-STOPLEVEL*Point;//Тр устанавливаем на минимально допустимом расстоянии
}
}//end if(Тейкпрофит>0){
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,sl,tp,Order_Comment,0,0,CLR_NONE);
return;
}//end if(Open_Sell&&!Open_Buy)

}//end if((TotalBuy+TotalSell)<Sum_orders)
//| Конец установки ордеров
//+--------------------------------------------------------------------
//----
T_SL();//Обращение к функции трала
return(0);
}//end int start()
//+------------------------------------------------------------------+
 

clon_tron

Местный знаток
Народ помогите, надо декомпильнуть и вылечить этого индюка.

Это один из индикаторов с этого сайта:

Код:
[URL="http://28bullbear.wordpress.com/"]28bullbear Forex Learner[/URL]


wEDGZ.png
 

Вложения

  • ifc-sideways eliminated+sep.ex4
    10,3 КБ · Просмотры: 213
  • Like
Реакции: fix

alpak

Активный участник
Доброго дня.Можно ли сделать так,чтобы при появлении стрелки (при пересечении машек)срабатывал алерт(звуковой сигнал и всплывающее окно)?
 

Вложения

  • MA_Crossover_Signal.mq4
    3,8 КБ · Просмотры: 64

pereval103

Новичок форума
Увожаемые програмисты

Посмотрите советник в тестере работает , а на реале молчит уже 2 дня ,на forex4you
 

Вложения

  • EA_Pulse_v2.01.rar
    52,5 КБ · Просмотры: 95

grimax

Элитный участник
Народ помогите, надо декомпильнуть и вылечить этого индюка.

Это один из индикаторов с этого сайта:

Код:
[URL="http://28bullbear.wordpress.com/"]28bullbear Forex Learner[/URL]

Должен быть еще dll с этим индикатором, без него не работает. Есть он?
 

strannik-ps

VIP-участник
Уважаемые программисты, к данному индикатору есть возможность добавить настройки периода, или еще что? И если не трудно, то и алерт за одно. На вебмани осталось $5 могу выслать.

Готова.
 
Последнее редактирование:

borobor

Элитный участник
Посмотрите советник в тестере работает , а на реале молчит уже 2 дня ,на forex4you
исправил,в некоторых ДЦ даёт ошибку ,неправыльные стопы,а условия одинаковые,в чём причина невыяснил
 

Вложения

  • e-Pulse v2.mq4
    24,7 КБ · Просмотры: 102

Beast

Почетный гражданин
Можно добавить в этот сов возможность установки отложек не только против тренда, а и ПО тренду?
Трал по общему профиту вроде есть.
 

Вложения

  • Indo Run 1.5.mq4
    70,6 КБ · Просмотры: 71
Статус
Закрыто для дальнейших ответов.
Верх