Всех с новым годом!)
Прошу написать советник.
Логика;
ПОКУПКА
1)бЫСТРАЯ МА ПЕРЕСЕКАЕТ МЕДЛЕННУЮ ВВЕРХ
2)ПРИ ПРОБОЕ БЛИЖАЙШЕГО LOW ФРАКТАЛА ОТРЫВАЕТСЯ ПОКУПКА
ПРОДАЖА
СООТВЕТСВЕННО НАОБОРОТ
Сопровождение;
Если цена проходит после первого ордера определённое количество пунктов(вынести в настройки), при переписывании минимума(при Sell) марсимума(при buy) предыдущей свечи, открыввется усредняющий ордер, таким объемом, что в 13 пунктов перекрывает убыток по первому ордеру + 2 пункта прибыль.
Если цена движется дальше, то отркывается 3 ордер, по такому же принципу.(соответсвенно убыток 2ух ордеров)
<
Будет возможность, сделайте, чтобы он мог работать в 2 направлениях одновременно.
Заранее спасибо)
Комментарии (8)
35 AM2 Сообщений: 16663 - Андрей
5 ilyask Автор Сообщений: 22
И так лично ни разу не сталкивавшийся с программированием, решил таки прошерстить материал по этому поводу.И вот несколько бессоных ночей спустя(4),3 донорских робота(аля понять логику), и море перелапаченной информации, удалось родить сие творение.
Андрей хочу попросить вас глянуть, почему он зачастую выдает ошибку модификации ордера (либо 130 либо 1),
А также добавьте фильтр(никак не смог сам разобраться), если на дневке образовалось бычье поглощение, с этого момента рассматриваем только покупки, если медвежье, то только продажи.
Прошу не ругать за коряво написанный код
<code>//+------------------------------------------------------------------+ //| 3.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict input double Lots=0.01; input int Tp =1000; input int Magik=1001012; extern int MA_Fast_Period = 50; extern int MA_Fast_Method = 1; extern int MA_Fast_Price = 5; extern int MA_Slow_Period = 150; extern int MA_Slow_Method = 1; extern int MA_Slow_Price = 5; extern int Sl = 500; extern int Slippage = 3; extern int Step = 600; double price; double pr1=0; double pr2=0; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if ( Digits == 5) { Slippage *= 10; } return (INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { double MA_f_1 = iMA( Symbol(),1440, MA_Fast_Period, 0, MA_Fast_Method, MA_Fast_Price, 1); double MA_s_2 = iMA( Symbol(),1440, MA_Slow_Period, 0, MA_Slow_Method, MA_Slow_Price, 1); static double Upf,Lowf; double Tupf=0,Tlowf=0; int i,k; for(i=1; i<5000; i++) { Tupf=iFractals(Symbol(),0,MODE_UPPER,i); if(Tupf>0) break; } for(k=1; k<5000; k++) { Tlowf=iFractals(Symbol(),0,MODE_LOWER,k); if(Tlowf>0) break; } if(countBuy()== 0 && Ask<Tlowf && Tupf!=Upf && MA_f_1 > MA_s_2) { if (OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-Sl*10*Point,Bid+Tp*10*Point,"",Magik,0,clrDarkBlue) < 1) Print ("Не удалось открыть покупку"); } if(countSell()== 0 && Bid>Tupf && Tlowf!=Lowf && MA_f_1 < MA_s_2) { if (OrderSend(Symbol(),OP_SELL,Lots,Ask,Slippage,Bid+Sl*10*Point,Ask-Tp*10*Point,"",Magik,0,clrRed)< 1) Print("Can not open sell"); } if(countBuy()>=1) { price = FindLastBuyPrice(); if ((price-Ask)>= Step*Point&& Ask>iHigh(NULL,1440,1)) { if (OrderSend(Symbol(),OP_BUY,findorderBuy2lot(),Ask,Slippage,Ask-Sl*10*Point,0,"",Magik,0,clrDarkBlue) < 1) Print ("Не удалось открыть дополнительный ордер на покупку"); ModifiOrders1(); } } if(countSell()>=1 ) { price = FindLastSellPrice(); if((Bid-price)>= Step*Point&& Bid<iLow(NULL,1440,1)) { if (OrderSend(Symbol(),OP_SELL,findorderSell2ot(),Ask,Slippage,Bid+Sl*10*Point,0,"",Magik,0,clrRed) < 1) Print ("Не удалось открыть дополнительный ордер на Продажу"); ModifiOrders2(); } } } //+-----------------------------------------------------------------+ double FindLastBuyPrice() { int oldticket, ticket = 0; double oldopenprice = 0; for (int cnt = OrdersTotal()-1;cnt>=0; cnt --) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik && OrderType() ==OP_BUY) { oldticket = OrderTicket(); if (oldticket > ticket) { ticket = oldticket; oldopenprice = OrderOpenPrice(); } } } } return(oldopenprice); } //+------------------------------------------------------------- double FindLastSellPrice() { int oldticket, ticket = 0; double oldopenprice = 0; for (int cnt = OrdersTotal()-1;cnt>=0; cnt --) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik && OrderType() ==OP_SELL) { oldticket = OrderTicket(); if (oldticket > ticket) { ticket = oldticket; oldopenprice = OrderOpenPrice(); } } } } return(oldopenprice); } //+-Подсчет ордеров-----------------------------------------------------------------+ int countBuy() { int count = 0; for (int trade = OrdersTotal()-1; trade >=0; trade--) { if (OrderSelect(trade,SELECT_BY_POS,MODE_TRADES) == true) { if (OrderSymbol() == Symbol() && OrderMagicNumber()== Magik && OrderType() == OP_BUY) count++; } } return(count); } //+------------------------------------------------------------------+ int countSell() { int count = 0; for (int trade = OrdersTotal()-1; trade >=0; trade--) { if (OrderSelect(trade,SELECT_BY_POS,MODE_TRADES) == true) { if (OrderSymbol() == Symbol() && OrderMagicNumber()== Magik && OrderType() == OP_SELL) count++; } } return(count); } //+----------------убыток по ордеру-------------------------------------------------+ double OP() { double pr=0; for (int cnt = OrdersTotal()-1;cnt>=0; cnt --) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik) { if(OrderType() ==OP_BUY) { pr+=OrderProfit(); } }}} return(pr); } double OP1() { double pr=0; for (int cnt = OrdersTotal()-1;cnt>=0; cnt --) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik ) { if(OrderType() ==OP_SELL) { pr+=OrderProfit(); } }}} return(pr); } //+----------------лот для 2 ордера покупки-------------------------------------------------+ double findorderBuy2lot() { double LoT1=0; for (int cnt = OrdersTotal()-1;cnt>=0; cnt --) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik && OrderType() ==OP_BUY) { LoT1=OP()/-100/2; }}} return (LoT1); } //+----------------лот для 2 ордера покупки-------------------------------------------------+ double findorderSell2ot() { double LoT2=0; for (int cnt = OrdersTotal()-1;cnt>=0; cnt --) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik && OrderType() ==OP_SELL) { LoT2=OP1()/-100/2; }}} return (LoT2); } //+---------------Модификацияbuy-------------------------------------------------+ void ModifiOrders1() {double ModPrice; for (int cnt = OrdersTotal()-1;cnt>=0; cnt --) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik && OrderType() ==OP_BUY) { ModPrice=FindLastBuyPrice()+20*10*Point; for(int i=OrdersTotal()-1; i>=0;i--) { if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol()&& OrderMagicNumber() == Magik&&OrderType() == OP_BUY) { if(OrderModify(OrderTicket(),OrderOpenPrice(),0,ModPrice,NULL,clrDarkBlue)) Print("Ордера модифицированны"); else Print(ModPrice); } }}}} }} //+---------------МодификацияSell-------------------------------------------------+ void ModifiOrders2() { double ModPrice; for (int cnt = OrdersTotal()-1;cnt>=0; cnt --) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik && OrderType() ==OP_SELL) { ModPrice=FindLastSellPrice()-20*10*Point; for(int i=OrdersTotal()-1; i>=0;i--) { if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol()&& OrderMagicNumber() == Magik&&OrderType() == OP_SELL) { if(OrderModify(OrderTicket(),OrderOpenPrice(),0,ModPrice,NULL,clrDarkBlue)) Print("Ордера модифицированны"); else Print(ModPrice); }}}}}}}</code>Редактирован: 13 января 2020, 04:285 ilyask Автор Сообщений: 22
16 cerber04 Сообщений: 409
5 ilyask Автор Сообщений: 22
35 AM2 Сообщений: 16663 - Андрей
2)На Н4 быстрая МА выше медленной
3)На Н1 при пробое лоу фрактала покупаем,(В моем коде мне не удалось избавиться от повторного открытия ордера, нужно чтобы на один сигнал первая сделка открывалась только один раз)
4)Если первая сделка в течении 4 часов не закрылась и болтается в убытке, то тейк переводится к уровню 10 пунктов(если в рынке по типу позиций больше одного ордера, то пропускается данное условие)
Продажа наоборот
ВЫход по тейку или стопу
Собственно все, остальное я сам попробую доделать))
5 ilyask Автор Сообщений: 22
35 AM2 Сообщений: 16663 - Андрей
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий