denis77515 Опубликовано 12 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 сентября, 2013 Уважаемый Vorchunozavr , куда эту строчку воткнуть ? Я его накорябал с готовых рабочих советников, и благодоря урокам,но пока еще не могу уловить как самостоятельно написать то или иное условие.По этому прошу помощи,мне увидеть надо что я сделал не правильно или не дописал. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 12 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 сентября, 2013 denis77515 Спойлер //+------------------------------------------------------------------+void Tralling(){ for (int i=0; i { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY) { if(Bid - OrderOpenPrice() > TrallingStop * Point) { if(OrderStopLoss() { Sl = NormalizeDouble(Bid - TrallingStop * Point,Digits); if(OrderStopLoss() !=Sl) OrderModify(OrderTicket(),OrderOpenPrice(),Sl,OrderTakeProfit(),0); //-- Здесь } } } if(OrderType() == OP_SELL) { if(Ask - OrderOpenPrice() > TrallingStop * Point) { if(OrderStopLoss() > Ask+(TrallingStop + TrallingStep) * Point) { Sl = NormalizeDouble(Ask + TrallingStop * Point,Digits); if(OrderStopLoss() !=Sl) OrderModify(OrderTicket(),OrderOpenPrice(),Sl,OrderTakeProfit(),0); //-- и здесь } } } } } }} //+------------------------------------------------------------------+ Программе нужно сказать, что мы тейк профит оставляем прежний, т.е. - OrderTakeProfit(). Если поставить 0, она TP уберёт, потому: Цитата исчезает тейк профит Ссылка на сообщение Поделиться на другие сайты More sharing options...
ss1975 Опубликовано 12 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 сентября, 2013 А есть возможность и время если не затруднит написать простенький советник сигнальщик? Чтоб сигналил на втором баре при изменении тренда. Даже есть образец только индикатор поменять надо. trend.jpgMA_Gudok.mq4Trend~.mq4 Изменено 12 сентября, 2013 пользователем ss1975 Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 12 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 сентября, 2013 Уважаемый Vorchunozavr Спасибо за код. Еще просьба посмотри почему он ордера не удаляет в указанное время ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 12 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 сентября, 2013 denis77515По коду: если пришло время и если имеем 2 ордера, один бай или селл, другой отложенный, то отложенник должен удалиться.А зачем мы проверяем количество ордеров? И если рыночный закрылся по профиту или СЛ?Если нам нужно просто удалить ордера, лучше без лишних условий: время пришло и мэджик наш - удаляем (в конце второго урока это есть). :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
turu Опубликовано 17 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 сентября, 2013 Здравствуйте xbms. Если уроки по программированию ещё не закончены, то хочу предложить написать очень полезный индикатор. Это будет индикатор определения флета. Этот индикатор может быть использован для исследования рынка, а также для более точного входа в рынок при трендовых стратегиях. Мы задаём всего два переменных параметра, это ширина флета и величина выхода цены в пунктах из канала флета, при которой будем считать данный флет законченным. Такой участок флета должен быть графически отмечен на графике и иметь информацию о том, сколько раз цена сходила от стенки до стенки канала. Это на истории. Текущий флет также должен быть выделен графически и иметь информацию о количестве уже пройденных колен. Этот индикатор нам поможет выявить на истории такие закономерности появления флета заданной ширины, как время, уровни, частоту, количество колен, оптимальную ширину и т.д. Измерение текущего флета позволит войти в рынок на несколько колен позже по известной цене и направлению.С уважением turu. Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 19 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 сентября, 2013 Доброго времени, господа программисты.Помогите разобраться с таким делом при тестировании в журнале выдает OrderModify error 130 еще бывает ошибка 4108 и последние что я увидел это OrderModify error 1.Посмотрите код,помогите исправить этот недостаток ПЛИЗ ;) Добавлено: 19-09-2013 17:21:01Вот еще что забыл описать,когда присходит модификация,например на бай,то стоп лосс тянет как положенно вверх,то на оборот опускает вниз одного и того же ордера.Отсюда и шибки я так понимаю,помогите разобраться с ним !!!Test_21.mq4 Изменено 19 сентября, 2013 пользователем denis77515 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 19 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 сентября, 2013 denis77515if((maxprice+Ask)/Point > MarketInfo(Symbol(),MODE_SPREAD)) OrderSend(Symbol(),OP_BUYSTOP,Lots,maxprice,Slippage,Sl,TP,"",Magic,0,Blue); (maxprice+Ask)/Point - Это очень много и условие будет выполняться всегда.(1,3560+1,3530)/0,0001=Для SellStop тоже неправильно.Трал:У машины с интуицией туговато и условия if(OrderStopLoss() !=Sl) недостаточно. Если нам не нужно, чтобы СЛ снижался (для Бай), значит надо написать, что новый СЛ должен быть выше старого. И текущая цена не должна быть слишком близко... Спойлер //+------------------------------------------------------------------+ void Tralling(){ for (int i=0; i { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY) Sl = NormalizeDouble(GetMinPrice() - Indent * Point,Digits); { if(OrderStopLoss() !=Sl && OrderStopLoss() MarketInfo(Symbol(),MODE_SPREAD)*2) OrderModify(OrderTicket(),OrderOpenPrice(),Sl,OrderTakeProfit(),0); } if(OrderType() == OP_SELL) Sl = NormalizeDouble(GetMaxPrice() + Indent * Point,Digits); { if(OrderStopLoss() !=Sl && OrderStopLoss() > Sl && (Sl - Ask)/Point > MarketInfo(Symbol(),MODE_SPREAD)*2) OrderModify(OrderTicket(),OrderOpenPrice(),Sl,OrderTakeProfit(),0); } } } }} //+------------------------------------------------------------------+ Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 20 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 сентября, 2013 Спасибо за трелинг,а как это исправить.Вернее правильно написать ?if((maxprice+Ask)/Point > MarketInfo(Symbol(),MODE_SPREAD)) OrderSend(Symbol(),OP_BUYSTOP,Lots,maxprice,Slippage,Sl,TP,"",Magic,0,Blue); Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 20 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 20 сентября, 2013 denis77515Старайтесь писать комментарии к функциям, условиям и т.п. Например:if((maxprice+Ask)/Point > MarketInfo(Symbol(),MODE_SPREAD)) // Проверяем где находится текущая цена относительно // нашего BUYSTOP, если цена выше или слишком // близко (уровень спреда) - ордер не установится. OrderSend(Symbol(),OP_BUYSTOP,Lots,maxprice,Slippage,Sl,TP,"",Magic,0,Blue); Написано почти правильно, только для BUYSTOP надо if(Ask ,а для SELLSTOP if((Bid > minprice + MarketInfo(Symbol(),MODE_SPREAD)*2*Point). Изменено 20 сентября, 2013 пользователем Vorchunozavr Ссылка на сообщение Поделиться на другие сайты More sharing options...
yasd810 Опубликовано 21 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 сентября, 2013 Привет всем уважаемым форумчанамПрошу помочь, есть сетка ордеров, в которой имеются рыночные разнонаправленные ордераПокажите пример, как написать цикл, с помощью которого необходимо найти ближайший к последнему открытому ордеру того же направления прибыльный ордер и модифицировать его, установив стоплосс на уровне его открытия (то есть безубыток) Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 22 сентября, 2013 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 сентября, 2013 Привет всем уважаемым форумчанамПрошу помочь, есть сетка ордеров, в которой имеются рыночные разнонаправленные ордераПокажите пример, как написать цикл, с помощью которого необходимо найти ближайший к последнему открытому ордеру того же направления прибыльный ордер и модифицировать его, установив стоплосс на уровне его открытия (то есть безубыток) Привет!Рекомендую заглянуть сюда: http://tradelikeapro.ru/izuchaem-mql-urok-n-2-tsiklyi-funktsii-i-ordera-v-sovetnike/а ещё лучше, просмотреть весь цикл уроков... времени отнимет не так много, а знаний получите вполне приличных... Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 23 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 сентября, 2013 Спасибо Vorchunozavr за подсказку,еще такая вещь как научить советника закрывать ордер частями,например достиг опоределенного количества пунктов,закрыл часть,достиг еще,опять закрыл,а третья часть либо стопу,либо тейку закроется.научите,покажите люди ????? :d Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 23 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 сентября, 2013 denis77515Написать могу, научить - сложнее :)Обычный OrderClose, только вписать какой объём закрываешь.Лучше оформить как функцию.Во внешние переменные LotsClose, Profit_1, Profit_2 (Если Lots=0,1, то LotsClose=0,03. Профиты в пунктах, если есть проверка на знаки, то их тоже множим...) Спойлер //+------------------------------------------------------------------+void PartClose(){ for(int i = OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderLots() { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY) { if ((Bid - OrderOpenPrice())/Point >= Profit_1 && OrderLots() > Lots - LotsClose) OrderClose(OrderTicket(), LotsClose, Bid, Slippage); if ((Bid - OrderOpenPrice())/Point >= Profit_2 && OrderLots() > Lots - LotsClose*2) OrderClose(OrderTicket(), LotsClose, Bid, Slippage); } if (OrderType() == OP_SELL) { if ((OrderOpenPrice() - Ask)/Point >= Profit_1 && OrderLots() > Lots - LotsClose) OrderClose(OrderTicket(), LotsClose, Ask, Slippage); if ((OrderOpenPrice() - Ask)/Point >= Profit_2 && OrderLots() > Lots - LotsClose*2) OrderClose(OrderTicket(), LotsClose, Ask, Slippage); } } } } }}//+------------------------------------------------------------------+ Не проверял.... Ссылка на сообщение Поделиться на другие сайты More sharing options...
sleturin Опубликовано 25 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 сентября, 2013 Вопрос уважаемым программистам. Как заставить советник торговать на offline М2 графике ренко (график генерируется индикатором RenkoLiveChart v2.1) ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
andrei22 Опубликовано 25 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 сентября, 2013 [quote Привет Серега.Прежде хочу поблагодарить тебя и всю вашу команду за ваши труды.Уроки несомненно полезные, но мне кажется , что надо немного добавить примеров , например пример на пересечении скользящих средних, пример для стрелочных индикаторов, и потом как их совместить и создать условие для входа от нескольких индикаторов, то есть сделать, что-то наподобие шаблонов, чтобы в них потом можно было бы вписывать только параметры индикаторов.Я новичок в этом деле но мне кажется такому варианту были бы рады многие начинаюсчие трейдеры которые хотят создать свой советник. Но а теперь хочу обратится за помощью, никак не могу найти в чем ошибка .Из твоих уроков Сергей я взял код для советника построенный на индикаторе ТМА и решил к нему дабавить мартин, результат такой , что на покупку работает идеально , а вот на продажу почему то открываются ордера с каждым тиком нннннннн-количество штук пока не исчерпает весь депозит если нетрудно не сможешь помочь с этой проблемой , вот код //+------------------------------------------------------------------+//+------------------------------------------------------------------+//| TMA.mq4 |//| //+------------------------------------------------------------------+#property copyright "Copyright 2013, MetaQuotes Software Corp."#property link "extern double Lots = 0.1;extern int TakeProfit = 10; extern int StopLose = 100; extern int Slippage = 5;extern string comment = "TMA BOT";extern int Megic = 111;extern string Indi = "Данные индикатора";extern string TimeFrame = "current time frame";extern int HalfLength = 34;extern int Price = PRICE_CLOSE;extern double ATRMultiplier = 1.0;extern int ATRPeriod = 100;extern bool Interpolate = true;extern int Step = 10;extern double Multiplier = 1;double PriceHigh, PriceLow, SL, TP, price, lastlot;int ticket;//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init(){ if (Digits == 3 || Digits == 5) { TakeProfit *= 10; Step *= 10; Slippage *= 10; StopLose *= 10; } return(0);}//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit(){ return(0);}//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start(){ PriceHigh = iCustom(Symbol(), 0, "TMA with Distances" , TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0); PriceLow = iCustom(Symbol(), 0, "TMA with Distances" , TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0); if (Bid >= PriceHigh && CountSell() == 0) { SL = NormalizeDouble(Bid + StopLose * Point, Digits); TP = NormalizeDouble(Bid - TakeProfit * Point, Digits); ticket = OrderSend (Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, comment, Megic, 0, Red); if (ticket > 0) { if(OrderSelect ( ticket, SELECT_BY_TICKET, MODE_TRADES) == true) OrderModify (ticket, OrderOpenPrice(), SL, TP, 0); } } if (Ask { SL = NormalizeDouble(Ask - StopLose * Point, Digits); TP = NormalizeDouble(Ask + TakeProfit * Point, Digits); ticket = OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, comment, Megic, 0, Blue); if (ticket > 0) { if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true) OrderModify (ticket, OrderOpenPrice(), SL, TP, 0); }} else { int order_type = FindLastOrderType(); if (order_type == OP_BUY) { price = FindLastPrice(OP_BUY); if(Ask { lastlot = FindLastLots(OP_BUY); lastlot = NormalizeDouble(lastlot * Multiplier, 2); ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slippage, 0, 0, "", Megic, 0, Blue); if (ticket > 0) ModifyOrders(OP_BUY); } } else if (order_type == OP_SELL) { price = FindLastPrice(OP_SELL); if(Bid { lastlot = FindLastLots(OP_SELL); lastlot = NormalizeDouble (lastlot * Multiplier, 2); ticket = OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, 0, "", Megic, 0, Red); if (ticket > 0) ModifyOrders(OP_SELL); } } } return(0); } //+------------------------------------------------------------------+ int CountSell(){ int Count = 0; for(int trade = OrdersTotal()-1; trade >= 0; trade--) { OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol() == Symbol()&& OrderMagicNumber() == Megic) { if (OrderType() == OP_SELL) Count ++; } } return(Count); } //+------------------------------------------------------------------+int CountBuy(){ int Count = 0; for(int trade = OrdersTotal()-1; trade >= 0; trade--) { OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol() == Symbol()&& OrderMagicNumber() == Megic) { if (OrderType() == OP_BUY) Count++; } } return(Count); } //+------------------------------------------------------------------+//+-----------------------------------------------------------------void ModifyOrders(int otype){ double avgprice = 0, order_lots = 0; price = 0; for (int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Megic && OrderType() == otype) { price += OrderOpenPrice() * OrderLots(); order_lots += OrderLots(); } } } avgprice = NormalizeDouble(price / order_lots, Digits); if (otype == OP_BUY) TP = NormalizeDouble(avgprice + TakeProfit*Point, Digits); if (otype == OP_SELL) TP = NormalizeDouble(avgprice -TakeProfit*Point, Digits); for (i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Megic && OrderType() == otype) OrderModify(OrderTicket(),OrderOpenPrice(), 0, TP, 0, Red); } } return(avgprice); } //+------------------------------------------------------------------+ double FindLastPrice(int otype){ double oldopenprice; int oldticket; ticket = 0; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Megic && OrderType() == otype) { oldticket = OrderTicket(); if(oldticket > ticket) { oldopenprice = OrderOpenPrice(); ticket = oldticket; } } } } return(oldopenprice); } //+------------------------------------------------------------------+ double FindLastLots(int otype){ double oldlots; int oldticket; ticket = 0; for(int i = OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Megic && OrderType() == otype) { oldticket = OrderTicket(); if(oldticket > ticket) { oldlots = OrderLots(); ticket = oldticket; } } } } return(oldlots); } //+------------------------------------------------------------------+ int FindLastOrderType(){ for (int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Megic) return(OrderType()); } } return(-1);} //+------------------------------------------------------------------+ int CountTrades(){ int count = 0; for (int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Megic) count++; } } return(count);} 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Cerebellum Опубликовано 25 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 сентября, 2013 надо немного добавить примеров , например пример на пересечении скользящих средних, пример для стрелочных индикаторов, и потом как их совместить и создать условие для входа от нескольких индикаторов, то есть сделать, что-то наподобие шаблонов, чтобы в них потом можно было бы вписывать только параметры индикаторов. Присоединяюсь. На каком-то сайте даже встречал подобную идею создания некоего "конструктора", но она, похоже, на нашла развития.Было бы удобно иметь "кирпичики" из разных функций, чтобы из них можно было "собирать" советник.andrei22 И еще неплохо было бы спрятать код под спойлер. ;)А то неудобно читать и цитировать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
andrei22 Опубликовано 25 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 сентября, 2013 andrei22 И еще неплохо было бы спрятать код под спойлер. ;)А то неудобно читать и цитировать.а как его спрятать , где инструкция лежит? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 25 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 сентября, 2013 andrei22Инструкция там: http://tlap.com/forum/forum-trade-like-a-pro/14/bolshoe-faq-po-forumu/2421Ошибка в условии:if(Bid Ссылка на сообщение Поделиться на другие сайты More sharing options...
Semarql Опубликовано 25 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 сентября, 2013 Подскажите, возможно ли использовать внешние скрипты в советнике через Include или как либо еще, чтоб постоянно код не писать скинул ссылку на действие и все? Изменено 25 сентября, 2013 пользователем Semarql Ссылка на сообщение Поделиться на другие сайты More sharing options...
andrei22 Опубликовано 25 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 сентября, 2013 Ошибка в условии:Большое спасибо!!!Добавлено: 27-09-2013 16:59:48denis77515Здравствуйте. Вы вчера помогли мне найти ошибку в моем коде и все заработало спасибо. Кстате получился очень крутой робот (круче чем "Авто профит" и " Илан") за 3 дня на тестере эти роботы заработали примерно по 30$ со 100 $ c лотом в 0,01, а мой робот смог приодалеть рубеж в 202 $ но для полного успеха не хватает одной детали. Может сможете помочь мне немного изменить код? Там надо сделать чтобы он открывал позиции не по индикатору ТМА , а после каждого закрытого бара, то-есть если ордер закрывается по тейк профиту , то после закрытия бара открывается следуюсщий ну подробности позже. Так как? Изменено 27 сентября, 2013 пользователем andrei22 Ссылка на сообщение Поделиться на другие сайты More sharing options...
ss1975 Опубликовано 27 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 сентября, 2013 andrei22Инструкция там: http://tlap.com/forum/forum-trade-like-a-pro/14/bolshoe-faq-po-forumu/2421Ошибка в условии: if(Bid А что не так, ни как не пойму( если не трудно укажите.Добавлено: 28-09-2013 01:26:39if(Bid >=price + Step * Point) Так чтоли?Добавлено: 28-09-2013 01:32:52Вот в упор не пойму, как сделать закрытие по обратному изменению цвета индикатора. Спойлер //+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start(){ if(CountTrades() == 0) { GetSignal(); if (Signal > 0 ) { ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, " ", Magic, 0, Blue); if(ticket > 0) { TP = NormalizeDouble(Ask + TakeProfit * Point, Digits); OrderModify(ticket, OrderOpenPrice(), 0, TP, 0); } } if (Signal { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, " ", Magic, 0, Red); if(ticket > 0) { TP = NormalizeDouble(Bid - TakeProfit * Point, Digits); OrderModify(ticket, OrderOpenPrice(), 0, TP, 0); } } } if(CountTrades() > 0 && CountTrades() { int order_type = FindLastOrderType(); if(order_type == OP_BUY) { price = FindLastPrice(OP_BUY); if(Ask { lastlot = FindLastLots(OP_BUY); if (lastlot lastlot = NormalizeDouble(lastlot * Multipler, 2); ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slippage, 0, 0, "", Magic,0, Blue); if(ticket > 0) ModifyOrders(OP_BUY); } } if (order_type == OP_SELL) { price = FindLastPrice(OP_SELL); if(Bid >= price + Step * Point) { lastlot = FindLastLots(OP_SELL); if (lastlot lastlot = NormalizeDouble(lastlot * Multipler, 2); ticket = OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, 0, "", Magic,0, Red); } if(ticket > 0) ModifyOrders(OP_SELL); } } /* if(TotalLoss() { for (int i=OrdersTotal()-1; i >= 0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true) { if (OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black); if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black); } } } } */ return(0);}//+------------------------------------------------------------------+void GetSignal(){ Signal = 0;// - 1 - == Получение показаний индикатора ============================================== double main1 = iCustom(NULL, 0, "Trend", 0, 1); double main2 = iCustom(NULL, 0, "Trend", 0, 2); double sign1 = iCustom(NULL, 0, "Trend", 1, 1); double sign2 = iCustom(NULL, 0, "Trend", 1, 2);// - 1 - == Окончание блока =============================================================// - 2 - == Генерация сигнала покупки =================================================== if (main1 != EMPTY_VALUE && main2 != EMPTY_VALUE// Линия сменила цвет с красного на.. && sign1 == EMPTY_VALUE && sign2 != EMPTY_VALUE)// ..голубой Signal = 1; // - 2 - == Окончание блока =============================================================// - 3 - == Генерация сигнала продажи =================================================== if (sign1 != EMPTY_VALUE && sign2 != EMPTY_VALUE// Линия сменила цвет с голубого на.. && main1 == EMPTY_VALUE && main2 != EMPTY_VALUE)// .. красный Signal = -1; // - 3 - == Окончание блока =============================================================} ставлю эту строчку Спойлер if (Signal { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true) { if (OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black);}}} начинает плодить сделки и и закрывать Изменено 28 сентября, 2013 пользователем ss1975 Ссылка на сообщение Поделиться на другие сайты More sharing options...
andrei22 Опубликовано 28 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 сентября, 2013 Ошибку я уже исправил, все работает! Только хотелось бы изменить условия для входа , чтобы сделка открывалась после каждого бара, то есть пока сделка на SELL находится в просадке и траллится мартином , то сделки на BUY компенсируют убытки от просадки. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Zaruba Опубликовано 30 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 сентября, 2013 уважаемые форумчане. написал эксперт на основе внешнего индикатора... на валютных парах работает, а на золоте или нефти выдает OrderSend error 131 ... в чем может быть причина ??? Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 30 сентября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 сентября, 2013 Уважаемый Vorchunozavr спасибо за код,еще такое дело. Как дополнить бота что бы при достижении первого тейк профита ордер переводился в без убыток,а дальше тралился как есть ? Поможете буду очень признателен !!! Прилагаю код. Test_20.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти