• Добро пожаловать на инвестиционный форум!

    Во всем многообразии инвестиций трудно разобраться. MMGP станет вашим надежным помощником и путеводителем в мире инвестиций. Только самые последние тренды, передовые технологии и новые возможности. 400 тысяч пользователей уже выбрали нас. Самые актуальные новости, проверенные стратегии и способы заработка. Сюда люди приходят поделиться своим опытом, найти и обсудить новые перспективы. 16 миллионов сообщений, оставленных нашими пользователями, содержат их бесценный опыт и знания. Присоединяйтесь и вы!

    Впрочем, для начала надо зарегистрироваться!
  • 🐑 Моисей водил бесплатно. А мы платим, хотя тоже планируем работать 40 лет! Принимай участие в партнеской программе MMGP
  • 📝 Знаешь буквы и умеешь их компоновать? Платим. Дорого. Бессрочная акция от MMGP: "ОПЛАТА ЗА СООБЩЕНИЯ"

Как сделать что бы сова вместо стоповых ордеров ставила лимитовые?

Гарэгин Диноян

Интересующийся
Регистрация
15.11.2013
Сообщения
15
Реакции
0
Поинты
0.000
Идея советника заключается в том, что стоп ордера дискретно времени перемещаются на заданном расстоянии от текущей цены.
Если цена достаточно резко поползла в одну сторону, то советник просто не успевает переместить ордер и он становится рыночным.
Далее включается тралл ордера.

Мне нужно что б вместо стоповых ордеров сова перемещала лимитовые. Пробовал в коде изменить все op_buystop и op_sellstop поменять на лимитовые=сова воще сдохла и перестала открывать и стоповые. Я не удивился и решил поинтересоваться у профи. Какие ещё параметры надо поменять?
Вот сова:
//+------------------------------------------------------------------+
//| TrailingStopLight.mq4 |
//| Copyright © 2012, Khlystov Vladimir |
//| http://cmillion.narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, [email protected]"
#property link "http://cmillion.narod.ru"
#property show_inputs
//--------------------------------------------------------------------
extern int TimeModify = 30; //кол-во секунд раньше которого запрещено изменять ордер
extern int Step = 10; //расстояние от цены
extern double Lot = 0.1;
extern int Stoploss = 10, //стоплосс, если 0 то не изменяется
Takeprofit = 50; //тейкпрофит, если 0 то не изменяется
extern int TrailingStop = 5; //длинна тралла, если 0 то нет тралла
extern int TrailingStart = 10; //когда включать тралл, например после достижения 40 п прибыл
extern int StepTrall = 2; //шаг тралла - перемещать стоплосс не ближе чем StepTrall
extern int NoLoss = 0, //перевод в безубыток при заданном кол-ве пунктов прибыли, если 0 то нет перевода в безубыток
MinProfitNoLoss = 0; //минимальная прибыль при переводе вбезубыток
extern int TimeStart = 0 , //ограничение времени работы советника
TimeEnd = 24; //не открываем ордера и закрываем отложки если время не между TimeStart и TimeEnd
extern int slippage = 30; //Максимально допустимое отклонение цены для рыночных ордеров (ордеров на покупку или продажу).
extern int Magic = 77; //магик
//extern int Key = 0;
//--------------------------------------------------------------------
int STOPLEVEL,TimeBarB,TimeBarS,AN;
//--------------------------------------------------------------------
int init()
{
AN = AccountNumber();
}
//--------------------------------------------------------------------
int deinit()
{
remove_objects("info");
}
//--------------------------------------------------------------------
int start()
{
if (!IsDemo() && !IsTesting() && 32395!=AN) {info();return;}
if (!IsTradeAllowed())
{
Comment("Торговля запрещена IsTradeAllowed");
return;
}
//---
int TekHour = Hour();
bool Trade;
if ( TimeStart < TimeEnd && TekHour >= TimeStart && TekHour < TimeEnd ) Trade=true;
else
{
if ( TimeStart > TimeEnd && (TekHour >= TimeStart || TekHour < TimeEnd)) Trade=true; //торговля ночью
else Trade=false;
}
if (!Trade)
{
Comment("Торговля запрещена по времени ");
}
//---
STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
double OSL,StLo,PriceB,PriceS,OOP,SL,TP;
int b,s,TicketB,TicketS,OT;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
{
OT = OrderType();
OSL = NormalizeDouble(OrderStopLoss(),Digits);
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
SL=OSL;
if (OT==OP_BUY)
{
b++;
if (OSL<OOP && NoLoss!=0)
{
StLo = NormalizeDouble(OOP+MinProfitNoLoss*Point,Digits);
if (StLo > OSL && StLo <= NormalizeDouble(Bid - STOPLEVEL * Point,Digits)) SL = StLo;
}

if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (Bid - OOP)/Point >= TrailingStart)
{
StLo = NormalizeDouble(Bid - TrailingStop*Point,Digits);
if (StLo>=OOP && StLo > OSL+StepTrall*Point) SL = StLo;
}

if (SL > OSL)
{
if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("Error ",GetLastError()," Order Modify Buy SL ",OSL,"->",SL);
else Print("Order Buy Modify SL ",OSL,"->",SL);
}
}
if (OT==OP_SELL)
{
s++;
if ((OSL>OOP || OSL==0) && NoLoss!=0)
{
StLo = NormalizeDouble(OOP-MinProfitNoLoss*Point,Digits);
if (StLo < OSL || OSL==0 && StLo >= NormalizeDouble(Ask + STOPLEVEL * Point,Digits)) SL = StLo;
}

if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (OOP - Ask)/Point >= TrailingStart)
{
StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits);
if (StLo<=OOP && (StLo < OSL-StepTrall*Point || OSL==0)) SL = StLo;
}

if ((SL < OSL || OSL==0) && SL!=0)
{
if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("Error ",GetLastError()," Order Modify Sell SL ",OSL,"->",SL);
else Print("Order Sell Modify SL ",OSL,"->",SL);
}
}
if (OT==OP_BUYSTOP) {PriceB=OOP; TicketB=OrderTicket();}
if (OT==OP_SELLSTOP) {PriceS=OOP; TicketS=OrderTicket();}
}
}
}
if (TicketS==0 && TicketB>0) {OrderDelete(TicketB);return;}
if (TicketB==0 && TicketS>0) {OrderDelete(TicketS);return;}
if (!Trade)
{
if (b+s==0)
{
if (TicketS+TicketB>0) DeleteAll(-1);
return;
}
}
if (b+TicketB==0 && s==0)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); else TP=0;
if (OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(Ask+Step * Point,Digits),slippage,SL,TP,"news",Magic,0,CLR_NONE)!=-1) TimeBarB=TimeCurrent();
}
if (s+TicketS==0 && b==0)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); else TP=0;
if (OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - Step * Point,Digits),slippage,SL,TP,"news",Magic,0,CLR_NONE)!=-1) TimeBarS=TimeCurrent();
}
if (TicketB!=0)
{
if (TimeBarB<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Ask + Step * Point,Digits)-PriceB)/Point>StepTrall)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); else TP=0;
if (OrderModify(TicketB,NormalizeDouble(Ask + Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarB=TimeCurrent();
}
}
if (TicketS!=0)
{
if (TimeBarS<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Bid - Step * Point,Digits)-PriceS)/Point>StepTrall)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); else TP=0;
if (OrderModify(TicketS,NormalizeDouble(Bid - Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarS=TimeCurrent();
}
}
}
//--------------------------------------------------------------------
bool DeleteAll(int tip)
{
bool error=true;
int err,nn,OT,OMN;
while(true)
{
for (int j = OrdersTotal()-1; j >= 0; j--)
{
if (OrderSelect(j, SELECT_BY_POS))
{
OMN = OrderMagicNumber();
if (OrderSymbol() == Symbol() && Magic==OrderMagicNumber())
{
OT = OrderType();
if (OT>1 && (OT==tip || tip==-1)) OrderDelete(OrderTicket());
}
}
}
break;
}
return(1);
}
//-------------------------------------------------------------------
bool info()
{
DrawLABELinfo("infofon01",0,100,100,200,"Webdings",White,"g");
DrawLABELinfo("infofon02",0,100,280,200,"Webdings",White,"g");
DrawLABELinfo("infofon03",0,323,100,200,"Webdings",White,"g");
DrawLABELinfo("infofon04",0,323,280,200,"Webdings",White,"g");
int Y=110;
DrawLABELinfo("infos"+Y, 0,110,Y,16,"Arial",Red,"Демо версия советника!");Y+=30;
DrawLABELinfo("infos"+Y, 0,110,Y,11,"Arial",Black,"Возможна работа на демо счете или в тестере");Y+=20;
DrawLABELinfo("infos"+Y, 0,110,Y,11,"Arial",Black,"Для работы на реале нужно ввести ключ (числовой код в поле Key)");Y+=20;
DrawLABELinfo("infos"+Y, 0,110,Y,11,"Arial",Black,"Ключ привязан к определенному номеру торгового счета.");Y+=30;
DrawLABELinfo("infos"+Y, 0,110,Y,11,"Arial",Red,"Для получения бесплатного ключа Вы можете открыть счет в");Y+=20;
DrawLABELinfo("infos"+Y, 0,110,Y,11,"Arial",Red,"дц InstaForex и зарегистрировать счет на rebate по ссылке:");Y+=20;
DrawLABELinfo("infos"+Y, 0,110,Y,11,"Arial",Blue,"http://www.getforexrebate.com/ru/register.php?id=3021023");Y+=20;
DrawLABELinfo("infos"+Y, 0,110,Y,11,"Arial",Red,"При этом Вы будете получать 1,5 $ с каждого лота себе на счет!,");Y+=30;
DrawLABELinfo("infos"+Y, 0,110,Y,11,"Arial",Red,"Или открыть счет в InstaForex с партнерским кодом BWAO");Y+=20;
DrawLABELinfo("infos"+Y, 0,110,Y,11,"Arial",Red,"ссылка для открытия счета:");
DrawLABELinfo("infos1"+Y, 0,313,Y,11,"Arial",Blue,"http://instaforex.com/ru/?x=openaccaunt");Y+=20;
DrawLABELinfo("infos"+Y, 0,110,Y,11,"Arial",Red,"При этом Вы сможете бесплатно получить ключи ко всем");Y+=20;
DrawLABELinfo("infos"+Y, 0,110,Y,11,"Arial",Red,"советникам из ссылки:");
DrawLABELinfo("infos1"+Y, 0,270,Y,11,"Arial",Blue,"http://cmillion.ru/ru/_setki.php");Y+=20;
DrawLABELinfo("infos"+Y, 0,110,Y,11,"Arial",Red,"Если у Вас другой брокер, то оплатите 50$ (1500руб)");
DrawLABELinfo("infos"+Y, 0,110,Y,11,"Arial",Red,"Способы оплаты:");
DrawLABELinfo("infos1"+Y, 0,235,Y,11,"Arial",Blue,"http://cmillion.narod.ru/info5.html");Y+=30;
DrawLABELinfo("infos"+Y, 0,110,Y,11,"Arial",Black,"После этого отправьте номер Вашего торгового счета");
DrawLABELinfo("infos1"+Y, 0,482,Y,11,"Arial",Blue,AccountNumber());Y+=20;
DrawLABELinfo("infos"+Y, 0,110,Y,11,"Arial",Black,"на почтовый ящик [email protected]");Y+=20;
DrawLABELinfo("infos"+Y, 0,110,Y,11,"Arial",Black,"В письме укажите реквизиты оплаты или способ регистрации счета.");Y+=20;
DrawLABELinfo("infos"+Y, 0,110,Y,11,"Arial",Black,"В ответном письме Вы получите ключ который Вы должны ввести");Y+=20;
DrawLABELinfo("infos"+Y, 0,110,Y,11,"Arial",Black,"в параметрах советника в поле KEY");Y+=30;
DrawLABELinfo("infos"+Y, 0,110,Y,11,"Arial",Red,"Открыть демо счет:");
DrawLABELinfo("infos1"+Y, 0,250,Y,11,"Arial",Blue,"http://instaforex.com/ru/?x=openaccaunt");
}
//--------------------------------------------------------------------
void DrawLABELinfo(string name, int CORNER, int X, int Y, int font_size, string font_name, color clr, string Name)
{
ObjectCreate(name, OBJ_LABEL, 0, 0, 0);
ObjectSet(name, OBJPROP_CORNER, CORNER);
ObjectSet(Name, OBJPROP_COLOR, clr);
ObjectSet(Name, OBJPROP_BACK, false);
ObjectSet(name, OBJPROP_XDISTANCE, X);
ObjectSet(name, OBJPROP_YDISTANCE, Y);
ObjectSetText(name,Name,font_size,font_name,clr);
}
//+------------------------------------------------------------------+
int remove_objects(string PreName)
{
for(int k=ObjectsTotal()-1; k>=0; k--)
{
string Obj_Name=ObjectName(k);
string Head=StringSubstr(Obj_Name,0,StringLen(PreName));

if (Head==PreName)
{
ObjectDelete(Obj_Name);
}
}
Comment("");
return(0);
}
//--------------------------------------------------------------------+
 

Ponomarenko Roman

ТОП-МАСТЕР
Регистрация
01.08.2009
Сообщения
5,381
Реакции
1,972
Поинты
0.000
"Мне нужно что б вместо стоповых ордеров сова перемещала лимитовые. Пробовал в коде изменить все op_buystop и op_sellstop поменять на лимитовые=сова воще сдохла и перестала открывать и стоповые." = Учебник MQl4 Вам в помощь! на пальцах долго объяснять, т.к. Вы же даже не знает по какой цене buystop/buylimit должны открываться...
 

Гарэгин Диноян

Интересующийся
Регистрация
15.11.2013
Сообщения
15
Реакции
0
Поинты
0.000
Первая строчка этого поста Вам в помощь, там написано на каком расстоянии от текущей цены должны открываться buystop/buylimit.
 

Alex235

Профессионал
Регистрация
28.10.2011
Сообщения
1,075
Реакции
809
Поинты
0.000
Мне нужно что б вместо стоповых ордеров сова перемещала лимитовые.
А какой в этом смысл вообще?? Если в случае со стоповыми ордерами на пробой ещё есть какая-то логика (хотя в реальность это сливная стратегия), то открыватся на резком пробое против рынка - это вообще противоречит здравому смыслу и самой идеи стратегии совы.
Первая строчка этого поста Вам в помощь, там написано на каком расстоянии от текущей цены должны открываться buystop/buylimit.
Думаю Роман имел ввиду не расстояние от цены, а положение стоповых и лимитных ордеров относительно рынка в МТ4.
 

Гарэгин Диноян

Интересующийся
Регистрация
15.11.2013
Сообщения
15
Реакции
0
Поинты
0.000
Как это понимать: положение стоповых и лимитных ордеров относительно рынка? Он мне пишет: "Вы же даже не знает по какой цене buystop/buylimit должны открываться..." Какой смысл от этого вопроса мне не понятно
 

Alex235

Профессионал
Регистрация
28.10.2011
Сообщения
1,075
Реакции
809
Поинты
0.000
Как это понимать: положение стоповых и лимитных ордеров относительно рынка? Он мне пишет: "Вы же даже не знает по какой цене buystop/buylimit должны открываться..." Какой смысл от этого вопроса мне не понятно
Если коротко: выше рынка может быть только бай стоп или селл лимит, ниже рынка селл стоп или бай лимит. Всё остальное как раз из этого вытекает.
 
Регистрация
10.04.2011
Сообщения
2,217
Реакции
1,182
Поинты
0.000
Гарэгин Диноян, а, может, все-таки хоть что-нибудь для начала почитаете-поизучаете, как советовали Вам ранее и я, и модератор bvn, а потом уже полезете в код советников.
Alex235 Вам все правильно написал.
Я так понимаю, что Вы все время ищете грааль, который будет ковать вам деньги, т.е. ищите кнопку "бабло", не понимая при этом, что и как работает. Поверьте мне, тысячи людей искали и ищут эту кнопку на форекс точно с таким же подходом как и Вы. Итог у всех один.
Вот данные для Вашего "грааля":
Sell Stop - исполнение в тот момент, когда цена Bid в потоке котировок станет равной или меньшей уровня ордера;
Buy Stop - исполнение в тот момент, когда цена Ask в потоке котировок станет равной или большей уровня ордера;
Sell Limit - исполнение в тот момент, когда цена Bid в потоке котировок станет равной или большей уровня ордера;
Buy Limit - помещается в очередь на исполнение в тот момент, когда цена Ask в потоке котировок станет равной или меньшей уровня ордера;
Take Profit - по открытой позиции на покупку, когда цена Bid в потоке котировок станет равной или большей уровня ордера;
Stop Loss - по открытой позиции на покупку, когда цена Bid в потоке котировок станет равной или меньшей уровня ордера;
Take Profit - по открытой позиции на продажу, когда цена Ask в потоке котировок станет равной или меньшей уровня ордера;
Stop Loss - по открытой позиции на продажу, когда цена Ask в потоке котировок станет равной или большей уровня ордера.
Как я понимаю, сова перемещает отложенники за ценой, ловя импульс. Изменив тип отложенников на Sell Limit и Buy Limit сова будет открывать ордера против этого импульса. А какой в этом смысл? Более того, скажу что она будет сливатором и при этих типах отложенников, и при "стоковых". Загонит счет в такую просадку, что мало не покажется. Вход в сделку кроме импульса ничем не аргументирован. Это путь к сливу.
Зарабатывает на подобных системах только тот, кто их пишет, потому что продает их или отдает по партнерке. Это т.н. "околофорексный лохотрон", в котором развиты продажа сеточников, мартингейлов и прочих "эффективных граалей".
 
Последнее редактирование:

Гарэгин Диноян

Интересующийся
Регистрация
15.11.2013
Сообщения
15
Реакции
0
Поинты
0.000
Дело в том что на практике цена чаще отскакивает после импульса за исключением тех моментов когда очень важные новости.. Странно как то новостной же советник..

добавлено через 9 минут
Если коротко: выше рынка может быть только бай стоп или селл лимит, ниже рынка селл стоп или бай лимит. Всё остальное как раз из этого вытекает.

Понять не могу причину по которой Вы решили что я не знаю что такое отложки. Вы пишите: "Думаю Роман имел ввиду не расстояние от цены, а положение стоповых и лимитных ордеров относительно рынка в МТ4." Для меня до сих пор остаётся тайной что по Вашему имел ввиду Роман когда писал мне: "Вы же даже не знает по какой цене buystop/buylimit должны открываться..." В чём прикол объясните!! Как это я не знаю? может я что то не догоняю? но о какой цене идёт реч?? ордера перемещаются с заданым шагом и всё единственное что их отличает это проскальзование
 
Последнее редактирование:

Alex235

Профессионал
Регистрация
28.10.2011
Сообщения
1,075
Реакции
809
Поинты
0.000
ордера перемещаются с заданым шагом и всё единственное что их отличает это проскальзование
Нет, не только проскальзование. Уже писал, что их отличает кроме него. Если Вы просто изменили OP_BUYSTOP на OP_BUYLIMIT то сов пытатся поставить его выше рынка (аск + степ), что невозможно в принципе.
 

Ponomarenko Roman

ТОП-МАСТЕР
Регистрация
01.08.2009
Сообщения
5,381
Реакции
1,972
Поинты
0.000
Если коротко: выше рынка может быть только бай стоп или селл лимит, ниже рынка селл стоп или бай лимит. Всё остальное как раз из этого вытекает.
Вы абсолютно правы уважаемый Alex235, товарищ Гарэгин Диноян плохо разбираясь в MQL4, взял бесплатную сову с http://cmillion.narod.ru и хотел получить "Грааль" тупо заменив STOP на LIMIT ордера :crackup: ан не прокатило, т.к. цена открытия ордеров ask/bid по логике открытия ордеров(STOP/LIMIT) абсолютно разные! эту мысль я и пытался донести товарищу Гарэгин Диноян, которые сие не понял, и все грузит форумчан, что бы ему за бесплатно сов "под рихтовали" :biggrin2:

сам то я использую софт от Кима (www.kimiv.ru), и взяв его тралл, можно прекрасно руками доработать(использую строчки кода Кима) ставить STOP ордера по сигналу индюка, а потом их передвигать за ценой, на предмет отката цена от Экстремума :wink2:

https://mmgp.com/showthread.php?t=118363 Вам в помощь товарищ Гарэгин Диноян
 

Гарэгин Диноян

Интересующийся
Регистрация
15.11.2013
Сообщения
15
Реакции
0
Поинты
0.000
Нет, не только проскальзование. Уже писал, что их отличает кроме него. Если Вы просто изменили OP_BUYSTOP на OP_BUYLIMIT то сов пытатся поставить его выше рынка (аск + степ), что невозможно в принципе.

Нужно аск на бид поменять?
 

Alex235

Профессионал
Регистрация
28.10.2011
Сообщения
1,075
Реакции
809
Поинты
0.000
Сверху Снизу