Ugar68 372 Share Posted April 5, 2011 Выбираете ордер с помошью функции Orderselect() и сравниваете OrderClosePrice этого ордера с TP или со SL этого же ордера (OrderTakeProfit и OrderStopLoss) Вот и все!!! Так лучше не делать. Ордер может быть закрыт с гэпом. Тогда цена закрытия не будет совпадать ни стейком ни с лосём. Лучше использовать OrderProfit() и смотреть его значение отрицательное или положительное. Многие ДЦ добавляют в комментарий ордера [sl] или [tp] после закрытия. Можно произвести поиск подстроки в комментарии ордера. Вместе с OrderProfit() можно выяснить всё. Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
Pifagor76 13 Share Posted April 5, 2011 День добрый, уважаемые программисты. Есть такой индикатор ATR_the_But. Используется в торговой системе летучая мышь (наверняка о ней слышали). Просьба сделать скрипт, который при запуске на основании этого индикатора выставлял бы отложенные стоповые ордера (на пробой) на N пунктов от уровней, рисуемых индикатором. Если в момент запуска скрипта рисуется красная линии сопротивления (Resistance), то выставляется ордер BuyStop на N пунктов выше этой линии, если же в момент запуска скрипта рисуется синяя линия поддержки (Support), то соответственно выставляется ордер SellStop на N пунктов ниже линии. Поскольку с каждым новым баром линия сдвигается, то и отложенный ордер должен модифицироваться (цена открытия и соответственно TP и SL). В настройках должно быть: объем лота, величина TP и SL, проскальзывания. Надеюсь у кого-нибудь из знатоков MQL найдется свободное время и желание реализовать данный скрипт. Заранее благодарен. С уважением, Андрей. ATR_The_bat.rar Link to post Share on other sites
kazakov.v 189 Share Posted April 5, 2011 День добрый, уважаемые программисты. Есть такой индикатор ATR_the_But. Используется в торговой системе летучая мышь (наверняка о ней слышали)... На Адмирале вроде такой советник был Никому верить нельзя. Мне - можно. Link to post Share on other sites
dimha 0 Share Posted April 5, 2011 можете мне написать советник под индикатор http://s40.radikal.ru/i089/1104/e0/45de6eb17932.jpg Link to post Share on other sites
ALekS81 0 Share Posted April 5, 2011 Ребята- программисты,помогите переделать советник.Советник выставляет стоповые ордера,но не удаляет противоположный при срабатывании одного из ордеров.Помогите сделать так,чтобы при срабатывании (к примеру)ордера baystop, его собрат sellstop удалялся и наоборот.ЗАРАНИЕ БЛАГОДАРЕН!! ! Set2StopOrders.rar Link to post Share on other sites
ceppqq58 1 Share Posted April 5, 2011 Чем например стимулировать?!Да,скажи скока стоит и вперед,но сначала,что ты можешь? Link to post Share on other sites
-Алексей- 27 Share Posted April 6, 2011 можете мне написать советник под индикаторhttp://s40.radikal.ru/i089/1104/e0/45de6eb17932.jpg Ты думаешь что он ставит стрелки во время открытия бара??? Сначала по-наблюдай, убедись, что стрелки ставятся во-время, в чём я очень сомневаюсь. Link to post Share on other sites
ceppqq58 1 Share Posted April 6, 2011 НУ ЧТО ГОСПОДА ПРОГРАМИСТЫ,НИКОГО ТАК И НЕТ...КТОНТЬ ВОЗМЁТ ЕЩЁ ТЗ В ДОБРЫЕ РУКИ???ИЛИ К КИТАЙЦАМ ОБРАЩАТЬСЯ? ТЕХЗАД.rar Link to post Share on other sites
Sevrer 26 Share Posted April 6, 2011 НУ ЧТО ГОСПОДА ПРОГРАМИСТЫ,НИКОГО ТАК И НЕТ...КТОНТЬ ВОЗМЁТ ЕЩЁ ТЗ В ДОБРЫЕ РУКИ???ИЛИ К КИТАЙЦАМ ОБРАЩАТЬСЯ? Молодой человек, если хотите, чтобы на Вас обратили внимание, то Вам просто жизненно необходимо сделать для начала следующие вещи: 1. Выключить CapsLock 2. Выучить русский язык хотя бы на уровне 7-го класса 3. Почитать классическую литературу, чтобы научиться внятно выражать свои мысли 4. Научиться уважать своего собеседника (в том числе и потенциального) PS То, что ты хочешь, в каком-то виде есть у меня, НО! Тебе я даже предлагать не буду, такого клиента как ты, надо обходить за 1000 верст. Удачи с китайцами. 3 Link to post Share on other sites
expforex2 99 Share Posted April 6, 2011 Молодой человек, если хотите, чтобы на Вас обратили внимание, то Вам просто жизненно необходимо сделать для начала следующие вещи:1. Выключить CapsLock 2. Выучить русский язык хотя бы на уровне 7-го класса 3. Почитать классическую литературу, чтобы научиться внятно выражать свои мысли 4. Научиться уважать своего собеседника (в том числе и потенциального) PS То, что ты хочешь, в каком-то виде есть у меня, НО! Тебе я даже предлагать не буду, такого клиента как ты, надо обходить за 1000 верст. Удачи с китайцами. :-) Ищите программиста? могу помочь.. Link to post Share on other sites
Pifagor76 13 Share Posted April 6, 2011 На Адмирале вроде такой советник был Да, на форуме Адмирала я просил Скриптонга написать советника с использованием данного индикатора и модифицированного ZZ. Советник был им создан в несколько иной интерпретации. На данный момент торгую вручную на пробой уровней, используя некоторые фильтры для входа, но приходится постоянно вручную модифицировать отложенные стоповые ордера. Хотелось бы автоматизировать этот момент. Спасибо за внимание. С уважением, Андрей Link to post Share on other sites
baronel 1 Share Posted April 6, 2011 здрасте ....может кто посмотрит в чем моя ошибка???? компилятор пишет что не хватает левой скобки....дисбаланс видите-ли....но где...никак не могу понять //------------------------------------ /* Описание: .. выставляет ордера на High и Low предыдущей свечи. Рыночные, по цене High-buy, по цене Low-sell. Настройки: */ extern int TP = 13;//TakeProfit ордеров. extern int SL = 17;//StopLoss ордеров. extern double lot = 0.1;//объём позиций. extern int Magic_Number = 1;//уникальный идентификатор эксперта. int init(){ return(0);} int deinit(){ return(0);} int start() { if(Orders_Total_by_type(OP_BUY, Magic_Number, Symbol() == 0 )||if(Orders_Total_by_type(OP_SELL, Magic_Number, Symbol() == 0 ) { // Здесь установим ордера if(Ask >= iHigh(Symbol(),Period(),1) ) open_active(Symbol(),OP_BUY,lot,iHigh(Symbol(),Period(),1)+Ask,3,iHigh(Symbol(),Period(),1) - SL*Point,iHigh(Symbol(),Period(),1) + TP*Point,NULL,Magic_Number,0,CLR_NONE); if( Bid <=iLow(Symbol(),Period(),1) ) open_active(Symbol(),OP_SELL,lot,iLow(Symbol(),Period(),1),3,iLow(Symbol(),Period(),1) + Ask + SL*Point,iLow(Symbol(),Period(),1) - TP*Point,NULL,Magic_Number,0,CLR_NONE); } return(0); } //---- Возвращает количество ордеров указанного типа ордеров ----// int Orders_Total_by_type(int type, int mn, string sym) { int num_orders=0; for(int i= OrdersTotal()-1;i>=0;i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if( OrderMagicNumber() == mn && type == OrderType() && sym == OrderSymbol() ) num_orders++; } return(num_orders); } //+------------------------------------------------------------------+ //открытие ордеров по типу int open_active(string symbol,int type,double lot=0.1,int sl=0,int tp=0,string co="", int mag=0) { int isOpened = 0; int try = 0; double TP,SL; RefreshRates(); if(type==0) { TP=Ask+tp*Point; SL=Bid-sl*Point; if(tp==0)TP=0; if(sl==0)SL=0; isOpened = OrderSend(symbol,type,lot,MarketInfo(symbol,MODE_ASK),3,SL,TP,co,mag); } if(type==1) { TP=Bid-tp*Point; SL=Ask+sl*Point; if(tp==0)TP=0; if(sl==0)SL=0; isOpened = OrderSend(symbol,type,lot,MarketInfo(symbol,MODE_BID),3,SL,TP,co,mag); } Sleep(500); while(isOpened<0) { RefreshRates(); try++; if(type==0) { TP=Ask+tp*Point; SL=Bid-sl*Point; if(tp==0)TP=0; if(sl==0)SL=0; isOpened = OrderSend(symbol,type,lot,MarketInfo(symbol,MODE_ASK),3,SL,TP,co,mag); } if(type==1) { TP=Bid-tp*Point; SL=Ask+sl*Point; if(tp==0)TP=0; if(sl==0)SL=0; isOpened = OrderSend(symbol,type,lot,MarketInfo(symbol,MODE_BID),3,SL,TP,co,mag); } if(try > 5) break; if(isOpened>=0)break; Sleep(500); } if(isOpened<0) Alert("Ордер не открыт, ошибка :", GetLastError()); return (isOpened); } //--------------- а может тут проблемы посерьёзней а я не вижу ...помогите пожалуйста.... ёжику выйти из тумана Link to post Share on other sites
kazakov.v 189 Share Posted April 6, 2011 здрасте ....может кто посмотрит в чем моя ошибка???? компилятор пишет что не хватает левой скобки....дисбаланс видите-ли....но где...никак не могу понять //------------------------------------ if(Orders_Total_by_type(OP_BUY, Magic_Number, Symbol() == 0 )||if(Orders_Total_by_type(OP_SELL, Magic_Number, Symbol() == 0 ) Явный косяк Дальше не смотрел Никому верить нельзя. Мне - можно. Link to post Share on other sites
baronel 1 Share Posted April 6, 2011 (edited) if(Orders_Total_by_type(OP_BUY, Magic_Number, Symbol() == 0 )||if(Orders_Total_by_type(OP_SELL, Magic_Number, Symbol() == 0 ) Явный косяк Дальше не смотрел так лучше? int start() { if(Orders_Total_by_type(OP_BUY, Magic_Number, Symbol() == 0 ) { // Здесь установим ордера if(Ask >= iHigh(Symbol(),Period(),1) ) open_active(Symbol(),OP_BUY,lot,iHigh(Symbol(),Period(),1)+Ask,3,iHigh(Symbol(),Period(),1) - SL*Point,iHigh(Symbol(),Period(),1) + TP*Point,NULL,Magic_Number,0,CLR_NONE); } if(Orders_Total_by_type(OP_SELL, Magic_Number, Symbol() == 0 ) { if( Bid <=iLow(Symbol(),Period(),1) ) open_active(Symbol(),OP_SELL,lot,iLow(Symbol(),Period(),1),3,iLow(Symbol(),Period(),1) + Ask + SL*Point,iLow(Symbol(),Period(),1) - TP*Point,NULL,Magic_Number,0,CLR_NONE); } return(0); } Edited April 6, 2011 by baronel Link to post Share on other sites
baronel 1 Share Posted April 6, 2011 (edited) ...меня больше интересует проблема со скобкой при компиляции Edited April 6, 2011 by baronel Link to post Share on other sites
Roger 18 Share Posted April 6, 2011 так лучше? int start() { if(Orders_Total_by_type(OP_BUY, Magic_Number, Symbol() == 0 ) if(Orders_Total_by_type(OP_SELL, Magic_Number, Symbol() == 0 ) Ну, так ты посчитай количество скобок именно здесь. Link to post Share on other sites
baronel 1 Share Posted April 6, 2011 Ну, так ты посчитай количество скобок именно здесь. если ставить так. int start() { if(Orders_Total_by_type(OP_BUY, Magic_Number, Symbol() == 0 ) if(Orders_Total_by_type(OP_SELL, Magic_Number, Symbol() == 0 ) } ....проблема остается..... Link to post Share on other sites
ceppqq58 1 Share Posted April 6, 2011 (edited) :-)СпасибО,приму к сведению.пишу крупно, потому што мне так удобно.русский,с литературой я прогуливал, но матиматика была любимым предметом. И еще в пятом классе меня научили, что два минуса дают плюс.Кто хочет,выделиться я знаю,из курса высшей социологии,это не комне.А вот за то, што у вас есть подобный вариант,спасибо.Значит его ктото использует и никто, и нигде его не хаит.То что мне его ктонть собирет,это однозначно и я небыл , и не стану крысятничать, а раздам нуждающимся .Для этого у меня приготовлена веточка в соцсетях(где?в личку). И заодно по форумам других ДЦ(Я патриот) ,освободить несколько голов от распрекрасных индикаторов,к аналов,фраткалофф и тому подобных выкрутасов.Так поступил бы любой китаец(и патриот любой страны)Всем удачи. Edited April 6, 2011 by ceppqq58 Link to post Share on other sites
olnikt 0 Share Posted April 6, 2011 ...меня больше интересует проблема со скобкой при компиляции if(Orders_Total_by_type(OP_BUY, Magic_Number, Symbol() == 0 ) - забыли закрыть скобку в параметрах функции. Надо if (Orders_Total_by_type(OP_BUY, Magic_Number, Symbol()) == 0 ) Бесплатно автоматизирую торговые системы с подтверждённым положительным результатом торговли от трёх месяцев. С уважением,olnikt Link to post Share on other sites
SimpleW 0 Share Posted April 6, 2011 (edited) Здравствуйте. Я бы хотел поэкспериментировать с советник по 2-ум среднескользящим... Но из-за кривых рук не могу прописоть в него код, чтобы после закрытия сделки по тейкпрофиту или стоплоссу Открывался новый ордер с начала следующей свечи после закрытия позиции. Вот сам советник http://fayloobmennik.net/524571 Может кто-нибудь может помочь ? Заранее благодарен! Edited April 6, 2011 by SimpleW Link to post Share on other sites
baronel 1 Share Posted April 6, 2011 if(Orders_Total_by_type(OP_BUY, Magic_Number, Symbol() == 0 ) - забыли закрыть скобку в параметрах функции. Надо if (Orders_Total_by_type(OP_BUY, Magic_Number, Symbol()) == 0 ) ....спасибо исправил...но проблема осталась Link to post Share on other sites
Roger 18 Share Posted April 6, 2011 ....спасибо исправил...но проблема осталась Совет, чтобы в дальнейшем не задавать подобные глупые вопросы, делаем так - закомментируй в блоке старт все строки кроме первой и дави "компил". Если все нормально, отпускаем следующую строку. Скобки отпускаем парно. Когда вылезает ошибка, анализируем строчку. Все!!! Link to post Share on other sites
RUBICON 36 Share Posted April 6, 2011 (edited) здрасте а может тут проблемы посерьёзней а я не вижу ...помогите пожалуйста.... ёжику выйти из тумана Ёбжiки мну ооочень нрацца!!! Они с..ка веселые.:-D extern int TP = 13; //TakeProfit ордеров. extern int SL = 17; //StopLoss ордеров. extern double lot = 0.1; //объём позиций. extern int Magic_Number = 1; //уникальный идентификатор эксперта. int open_active; int start() { if(Orders_Total_by_type(OP_BUY, Magic_Number, Symbol()) == 0 ||Orders_Total_by_type(OP_SELL, Magic_Number, Symbol()) == 0 ) {// Здесь установим ордера if(Ask >= iHigh(Symbol(),Period(),1) ) open_active(Symbol(),OP_BUY,lot,iHigh(Symbol(),Period(),1)-SL*Point,iHigh(Symbol(),Period(),1)+TP*Point,NULL,Magic_Number); if( Bid <=iLow(Symbol(),Period(),1) ) open_active(Symbol(),OP_SELL,lot,iLow(Symbol(),Period(),1)+Ask+SL*Point,iLow(Symbol(),Period(),1)-TP*Point, NULL,Magic_Number); } return(0); } //---- Возвращает количество ордеров указанного типа ордеров ----// int Orders_Total_by_type(int type, int mn, string sym) { int num_orders=0; for(int i= OrdersTotal()-1;i>=0;i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderMagicNumber() == mn && type == OrderType()&& sym == OrderSymbol() ) num_orders++; } return(num_orders); } //+------------------------------------------------------------------+ //открытие ордеров по типу int open_active(string symbol,int type,double lot=0.1,int sl=0,int tp=0,string co="", int mag=0) { int isOpened = 0; int try = 0; double TP,SL; RefreshRates(); if(type==0) { TP=Ask+tp*Point; SL=Bid-sl*Point; if(tp==0)TP=0; if(sl==0)SL=0; isOpened = OrderSend(symbol,type,lot,MarketInfo(symbol,MODE_ASK),3,SL,TP,co,mag); } if(type==1) { TP=Bid-tp*Point; SL=Ask+sl*Point; if(tp==0)TP=0; if(sl==0)SL=0; isOpened = OrderSend(symbol,type,lot,MarketInfo(symbol,MODE_BID),3,SL,TP,co,mag); } Sleep(500); while(isOpened<0) { RefreshRates(); try++; if(type==0) { TP=Ask+tp*Point; SL=Bid-sl*Point; if(tp==0)TP=0; if(sl==0)SL=0; isOpened = OrderSend(symbol,type,lot,MarketInfo(symbol,MODE_ASK),3,SL,TP,co,mag); } if(type==1) { TP=Bid-tp*Point; SL=Ask+sl*Point; if(tp==0)TP=0; if(sl==0)SL=0; isOpened = OrderSend(symbol,type,lot,MarketInfo(symbol,MODE_BID),3,SL,TP,co,mag); } if(try > 5) break; if(isOpened>=0)break; Sleep(500); } if(isOpened<0) Alert("Ордер не открыт, ошибка :", GetLastError()); return (isOpened); } P.S. Основная проблема в передаче параметров функциям. Edited April 6, 2011 by RUBICON Умное лицо - это еще не признак ума господа. ........................Все глупости на земле делаются именно с этим выражением лица. .............................................................................................................Улыбайтесь, господа, улыбайтесь!!! ...............................................................................................................................................................(Тот самый Мюнхгаузен.) Link to post Share on other sites
baronel 1 Share Posted April 6, 2011 ...всем спасибо за содействие...нашел причину.....не судите ...да несудимы будете...а помогите просящему...укажите правильную дорогу если знаете....не всем быть умным ....тем более что программирование для меня это новая тема...а то как-то форум вроде про язык программирования....после некоторых ответов...появляется чувство что лучше ....вообще не спрашивать ......а топтаться на одном месте пока подошвы не протру....учебник по MQL дает скудные знания...так что многое оттуда непонятно....там же не предусмотрены все случаи....короче ещё раз спасибо тем кто отозвался !!!!!!!!!!!!!!!!!! Link to post Share on other sites
Recommended Posts