well72 Опубликовано 3 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 мая, 2017 Привет, коллеги!Уперся я в этот Binary Indicator и никак не получается робот по нему. Посмотрите, пожалуйста, почему такая лажа выходит, как на картинке? лажа.jpgUPDOWN_2.mq4Binary_Indicator.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 3 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 мая, 2017 Привет, коллеги!Уперся я в этот Binary Indicator и никак не получается робот по нему. Посмотрите, пожалуйста, почему такая лажа выходит, как на картинке? Добрый день! Один сигнал - одна сделка.Удачных торгов! П.С. Рекомендую пересмотреть алгоритм закрытия ордеров, переменные sellticket и byuticket при перезагрузке терминала обнуляются.UPDOWN_3.mq4 Изменено 3 мая, 2017 пользователем SilverKZ 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
well72 Опубликовано 3 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 мая, 2017 Спасибо за помощь!Если я правильно понял, Вы просто условие для входя взяли не цену выше/ниже сигнала, а просто любое не нулевое значение буфера. Надо будет запомнить такой способ.Кстати, почему-то не все сигналы берет (на скрине)...А насчет этого Вашего пожелания: "П.С. Рекомендую пересмотреть алгоритм закрытия ордеров, переменные sellticket и byuticket при перезагрузке терминала обнуляются." - я пока еще не так хорошо знаю язык, чтобы решить эту задачу. Буду учиться дальше) 12.jpg Ссылка на сообщение Поделиться на другие сайты More sharing options...
sniv Опубликовано 3 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 мая, 2017 Всем привет) Хотел попросить реализовать идею для теста. Смысл прост - если цена колбасится в пределах ~20пп на тф H1 ~6-8 свечей, то она обязательно после этого идет какое-то количество пунктов в одну сторону. Т.е нужно extern'ы тэйка стопа свечей и предела флэта. Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 4 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 мая, 2017 И опять я)Добрый день.Уже оперативка дымится: проблема возникла в советнике, после взятия TP или SL, опять открывает ордер!Не могу придумать условие при котором советник привязывался только ко 2 му бару (после появления сигнала(цвета) от индикатора)или же , если сработал TP или SL он бы ждал нового сигнала, но только при смене сигнала(цвета) индикатора. Slope_+бу.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
ivan100096 Опубликовано 4 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 мая, 2017 Друзья, изучаю MQL4 и решил написать советник для системы Lazy Trader. Советник написан, но некорректно работает. Где ошибки - не знаю. Помогите найти ошибки пожалуйста и дайте обратную связь по коду, который вы видите. Вот правила системы, для которой я писал советник: 1/ В начале недели дожидаемся закрытия первой четырех-часовой свечи.2/ Ставим отложенные ордера Buy Stop и Sell Stop на 20 пунктов выше High и на 20 пунктов ниже Low этой свечи.3/ Стоп-лосс ставится на уровне противоположного ордера. Тейк-профит не ставим. 4/ При достижении ордером прибыли, равной стоп-лоссу, переводим стоп в безубыток (переносим стоп-лосс позиции на цену ее открытия).5/ Второй ордер после активации первого, НЕ УДАЛЯЕМ!6/ В конце недели удаляем / закрываем все ордера, независимо от их прибыли / убытка.Спасибо за помощь:) Вот ссылка на файл с кодом: _https://www.dropbox.com/s/yg38kci83lzqxu7/Lazy_Trader_Expert.mq4?dl=0Вот сам код: extern double Lots = 0.2; extern int Magic = 209784; extern int DayTimeOpen = 4; extern int DayTimeClose = 23; double SL, maxprice, minprice;int ticket; //+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() {//---//--- return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) {//--- }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() { GetPrice(); if (OrderSellCount() == 0 && OrderSellStopCount() == 0) { SL = NormalizeDouble(maxprice + 20*Point, Digits); ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, Bid, 3, 0, SL, "", Magic, 0, Red); if (ticket Print("Ошибка открытия ордера по продажу"); if (TimeHour(TimeCurrent()) == DayTimeClose && DayOfWeek() == 5) { ticket = OrderClose(ticket, Lots, Bid, 3, Red); if (ticket == false) Print("Ордер на продажу не закрыт"); } } if (OrderBuyCount() == 0 && OrderBuyStopCount() == 0) { SL = NormalizeDouble(minprice - 20*Point, Digits); ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, Ask, 3, 0, SL, "", Magic, 0, Blue); if (ticket Print("Ошибка открытия ордера по покупку"); if (TimeHour(TimeCurrent()) == DayTimeClose && DayOfWeek() == 5) { ticket = OrderClose(ticket, Lots, Ask, 3, Blue); if (ticket == false) Print("Ордер на покупку не закрыт"); } } Comment ("MaxPrice:" + DoubleToStr(maxprice,Digits) + "\n" "MinPrice" + DoubleToStr(minprice,Digits)); }//+------------------------------------------------------------------+double GetPrice(){ if (TimeHour(TimeCurrent()) == DayTimeOpen && DayOfWeek() == 1) { minprice = iLow(Symbol(), PERIOD_H4, 0); maxprice = iHigh(Symbol(), PERIOD_H4, 0); } return(maxprice); return(minprice);}int OrderBuyCount(){ int count = 0; for(int i = OrdersTotal()-1; i>=0; i--) if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == Magic && OrderType() == OP_BUY) { count ++; } return(count);}int OrderBuyStopCount(){ int count = 0; for(int i = OrdersTotal()-1; i>=0; i--) if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == Magic && OrderType() == OP_BUYSTOP) { count ++; } return(count);}int OrderSellCount(){ int count = 0; for(int i = OrdersTotal()-1; i>=0; i--) if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == Magic && OrderType() == OP_SELL) { count ++; } return(count);}int OrderSellStopCount(){ int count = 0; for(int i = OrdersTotal()-1; i>=0; i--) if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == Magic && OrderType() == OP_SELLSTOP) { count ++; } return(count);} Изменено 4 мая, 2017 пользователем ivan100096 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 4 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 мая, 2017 Ошибки есть и фактические и логические, вот некоторые:minprice = iLow(Symbol(), PERIOD_H4, 0); - вы берёте лой новой свечи! а надо 1, я бы ставил эксперта на Н4 и писал так: minprice = Low[1]; Это не будет работать:return(maxprice);return(minprice);т.к. первый return возвращает исполнение кода назад. Я думаю можно обойтись здесь без функции GetPrice(), просто перенесите условие в основной код.Закрытие ордера внутри условия на открытие - т.е. если ордеров нет - закрываем в пятницу?, внимательнее здесь: if (OrderBuyCount() == 0 && OrderBuyStopCount() == 0) { if (TimeHour(TimeCurrent()) == DayTimeClose && DayOfWeek() == 5) 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Verass Опубликовано 4 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 мая, 2017 Здраствуйте!Прошу прощения, но скорее всего этот вопрос уже обсуждался но я буду благодарен если ктонибудь всетаки поможет или кинет ссылку на материал.Вопрос : как получить значение закрытия "прошлой" свечи.Грубо говоря такая задача - как можно написать код для выставления стоп ордера выше например хая свечи при условии что ее close бы больше ну скажем МА !?Спасибо. void OnTick(){ PriceMA = iMA(Symbol(), TimeFrame, PeriodMA, 0, MetodMA, Raschet, 1); if (CountBuy() == 0 && PRICE_CLOSE > PriceMA) { OrderBuy = NormalizeDouble(PRICE_HIGH + Filter*Point, Digits); ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, OrderBuy, Slippage, 0, 0, "MA robot", Magic, 0, Red); Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 4 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 мая, 2017 Здраствуйте!Прошу прощения, но скорее всего этот вопрос уже обсуждался но я буду благодарен если ктонибудь всетаки поможет или кинет ссылку на материал.Вопрос : как получить значение закрытия "прошлой" свечи.Грубо говоря такая задача - как можно написать код для выставления стоп ордера выше например хая свечи при условии что ее close бы больше ну скажем МА !?Спасибо. Спойлер void OnTick(){ PriceMA = iMA(Symbol(), TimeFrame, PeriodMA, 0, MetodMA, Raschet, 1); if (CountBuy() == 0 && PRICE_CLOSE > PriceMA) { OrderBuy = NormalizeDouble(PRICE_HIGH + Filter*Point, Digits); ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, OrderBuy, Slippage, 0, 0, "MA robot", Magic, 0, Red); Добрый день!void OnTick(){ PriceMA = iMA(Symbol(), TimeFrame, PeriodMA, 0, MetodMA, Raschet, 1); if (CountBuy() == 0 && Close[1] > PriceMA) { OrderBuy = NormalizeDouble(High[1] + Filter*Point, Digits); ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, OrderBuy, Slippage, 0, 0, "MA robot", Magic, 0, Red); 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 4 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 мая, 2017 Даже если реализовать вот такое условие:"последняя закрытая позиция имеет тип, такой же, какой поступил сигнал, и если эта позиция была закрыта по одному из стоп-приказов, то не открывать позицию."То остается баг в начале(когда только ставишь советник) ордер открывается не в начале тренда! :(( :(( :(( :(( :(( Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 4 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 мая, 2017 или же , если сработал TP или SL он бы ждал нового сигнала, но только при смене сигнала(цвета) индикатора. d1w4m3, при каждом открытии ордера по какому-то сигналу индикатора, просто запоминайте тип этого сигнала в переменную. А при открытии каждого нового ордера прописывайте условие:если текущий сигнал не равен тому, который хранится в переменной, то открывать ордер.А чтобы не было вот этого:То остается баг в начале(когда только ставишь советник) ордер открывается не в начале тренда! Переменной, в которой будете хранить тип последнего сигнала, при объявлении присваивайте значение, которое не будет совпадать ни с одним из возможных сигналов от индикатора. Ссылка на сообщение Поделиться на другие сайты More sharing options...
dipladog Опубликовано 4 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 мая, 2017 Решил для себя написать советника помощника.Пытаюсь торговать по стратегии 20М,для местных это серфинг.Код ниже#property copyright "Copyright 2017, MetaQuotes Software Corp."#property link #property version "1.00"#property strictextern bool TrailingStop=true;int lMA_period = 10;int lMA_method =1;int lMAapplied_price_1=3;int sMA_period = 10;int sMA_method =1;int sMAapplied_price_1=2;double lMApricelong;double sMApriceshort;extern int Delta=5;//+------------------------------------------------------------------+//| TrailingPositions //+------------------------------------------------------------------+int start() { sMApriceshort=NormalizeDouble(iMA(Symbol(),0,sMA_period,0,MODE_EMA,PRICE_HIGH,1),Digits); lMApricelong=NormalizeDouble(iMA(Symbol(),0,lMA_period,0,MODE_EMA,PRICE_LOW,1),Digits); double sl; bool m; int cnt=OrdersTotal(); for(int i=0; i { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==FALSE) break; if(OrderSymbol()==Symbol()) if(OrderType()==OP_BUY) { sl=NormalizeDouble(lMApricelong-Delta*Point,Digits); { if(OrderStopLoss()!=sl) m=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0); } } } if(OrderType()==OP_SELL) { sl=NormalizeDouble(sMApriceshort+Delta*Point,Digits); { if(OrderStopLoss()!=sl) m=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0); } } return(0); }//+------------------------------------------------------------------+Вроде работает на одном из сайтов сказал код сыроватый учите доки вот вся помощь3. Строка if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==FALSE ) break; допустима, но с точки зрения логики и синаксиса избыточна и не совсем корректна.Может поменять на ticket так как торгую на 10 валютных парах тф Н4и поиск ордеров проводить по тикету,4. Условие if(OrderStopLoss()!=sl) некорректно. А как тогда корректно если стоп идёт от ЕМА10? при моих условиях стоп то ставится то удаляется на каждом тике.Так может здесь кто подскажет Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 4 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 мая, 2017 или же , если сработал TP или SL он бы ждал нового сигнала, но только при смене сигнала(цвета) индикатора. d1w4m3, при каждом открытии ордера по какому-то сигналу индикатора, просто запоминайте тип этого сигнала в переменную. А при открытии каждого нового ордера прописывайте условие:если текущий сигнал не равен тому, который хранится в переменной, то открывать ордер.А чтобы не было вот этого:То остается баг в начале(когда только ставишь советник) ордер открывается не в начале тренда! Переменной, в которой будете хранить тип последнего сигнала, при объявлении присваивайте значение, которое не будет совпадать ни с одним из возможных сигналов от индикатора. Я Вам оч благодарен, но как это реализовать в коде?я только дошел до этого//+--Тип последней закрытой позиции----+int GetTypeLastClosePos(string sy="", int mn=-1) { datetime t; int i, k=OrdersHistoryTotal(), r=-1; if (sy=="0") sy=Symbol(); for (i=0; i if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if ((OrderSymbol()==sy || sy=="") && (mn if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (t t=OrderCloseTime(); r=OrderType(); } } } } } return(r);}и встал на проблеме как правильно и где задать)))я конечно понимаю что нет ничего сложного, но 2 й день не соображу)Или дайте хоть видео или литературу почитать на счет этого, а я ток начал этим увлекаться! Изменено 4 мая, 2017 пользователем d1w4m3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 4 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 мая, 2017 d1w4m3, не надо определять тип последней закрытой позиции. Вы покажите то место, где у Вас ордер по сигналу индикатора открывается. Ссылка на сообщение Поделиться на другие сайты More sharing options...
terminal Опубликовано 4 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 мая, 2017 день добрый программированию вообще не обучен :(пожалуйста помогите может найдётся кто добрый с прямыми руками а не как у меня :) и с пару часов свободного временивзял тут на форуме индикатор !3 MarketProfile_VirginpPOCи всё бы хорошо но у него есть две не критичные ошибки declaration of 'StartTime' hides global declaration at line 30 возможно по этому не корректно работает Max_of_days_calculation = 90; // Максимальное количество дней для расчета если -1 вся доступная историяставлю хоть конкретное число, хоть -1 уровни которые не отработали рисует на данный момент только от 24-25 числа прошлого месяца как видно из первого скрина указано 240 дней а показывает не более 20 дней на втором скрине видно не отработанные уровнихотелось бы что бы рисовал не отработанные уровни за указанное количество днейни каких удаление объектов в советниках не включено или разрешено более 240 дней или я что то не правильно понимаю и в индикаторе так всё и должно быть ?заранее спасибо откликнувшимся удачи вам и профита 3_MarketProfile_VirginpPOC.mq4screenshot.jpgscreenshot_1.jpg Изменено 4 мая, 2017 пользователем terminal Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 5 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 мая, 2017 при каждом открытии ордера по какому-то сигналу индикатора, просто запоминайте тип этого сигнала в переменную.Вот в этом вся и проблема я не понимаю где конкретно,в коде это сделать! А потом сравнивать с типом ордера?if(DN_Trend()==true) { if(CountSell() == 0 && Bid { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red); if (ticket > 0) { SL = NormalizeDouble(Bid + StopLoss*Point, Digits); TP = NormalizeDouble(Bid - TakeProfit*Point, Digits); if (OrderSelect(ticket, SELECT_BY_TICKET)) if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0)) Print("Ошибка на продажу"); } { if(OrderSelect(ticket, MODE_TRADES)==true) { s=OrderType(); } } }мммм я точно что то недогоняю походу((( Изменено 5 мая, 2017 пользователем d1w4m3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 5 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 мая, 2017 Вот в этом вся и проблема я не понимаю где конкретно,в коде это сделать! А потом сравнивать с типом ордера? d1w4m3, попробую объяснить схематично, что-бы это также было полезно для остальных обучающихся форумчан. Допустим у вас есть функция, которая генерирует сигналы на покупку и на продажу. Назовем её int TradeSignal(); Предположим, она возвращает два типа сигнала: OP_BUY - покупка, OP_SELL - продажа. Допустим, у Вас в коде есть условие для открытия позиций://покупаемif(CountBuy() == 0 && TradeSignal()==OP_BUY) { ticket = OrderSend(Symbol(), OP_BUY, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red); if (ticket > 0) { } } //продаемif(CountSell() == 0 && TradeSignal()==OP_SELL) { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red); if (ticket > 0) { } } В том виде, как оно написано выше, новый ордер будет открываться каждый раз сразу после закрытия существующей позиции по SL или TP. Но у нас задача в том, чтобы после закрытия рыночного ордера, следующий открывался по сигналу функции TradeSignal(), отличающегося от того, по которому была закрыта последняя позиция. Т.е. если у нас был закрыт рыночный бай-ордер, то после его закрытия мы должны ждать от сигнальной функции только sell-сигнал и входить только в продажи. Для этого, при открытии каждого нового ордера мы будем запоминать сигнал, полученный от функции TradeSignal(). Вот как это будет выглядеть в коде: Спойлер //объявим глобальную переменную, в которую будем запоминать сигнал, по которому был открыт последний ордер//при объявлении переменной присвоим ей значение, которое функция TradeSignal() вернуть не может (например -1). //это делается для того, чтобы первый полученный сигнал был обработан, каким бы он ни был (бай или селл)int LastTradeSignal=-1;//покупаем//если в рынке нет бай-ордеров и пришел сигнал байif(CountBuy() == 0 && TradeSignal()==OP_BUY) { //и если последним был не бай-сигнал if(LastTradeSignal != OP_BUY) { ticket = OrderSend(Symbol(), OP_BUY, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red); if (ticket > 0) { //... //... //... //запомним последний сигнал LastTradeSignal=OP_BUY; } } } //Для селл тоже самое//если в рынке нет селл-ордеров и пришел сигнал селлif(CountSell() == 0 && TradeSignal()==OP_SELL) { //и если последним был не селл-сигнал if(LastTradeSignal != OP_SELL) { //открываем селл-ордер ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red); if (ticket > 0) { //... //... //... //запомним последний сигнал LastTradeSignal=OP_SELL; } } } Это очень упрощенный, схематичный вариант, демонстрирующий то, как можно фильтровать, чередовать сигналы и т.п. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 5 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 мая, 2017 Фухх))Спасибо! Где такому научиться не подскажете литературу?Все разобрался окончательно!Остался баг "Переменной, в которой будете хранить тип последнего сигнала, при объявлении присваивайте значение, которое не будет совпадать ни с одним из возможных сигналов от индикатора"у нас -1 и все равно он в начале открывает?Или есть какая-нибудь возможность привязаться к буферам индикатора, тобишь пока не поступит новый сигнал о смене буфера - не открывать. Добавлено: 05-05-2017 11:26:39Новый_точечный_рисунок.jpg Изменено 5 мая, 2017 пользователем d1w4m3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 5 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 мая, 2017 TradeSignal() мне нужно написать ее, получается?или это как пример для сигналов? Функцию я просто так, для примера придумал. У Вас это может быть функция, или просто текущий сигнал индикатора (например iCustom()). Просто на пальцах попытался объяснить. Фухх))Спасибо! Где такому научиться не подскажете литературу? Обычная документация по MQL4. :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 5 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 мая, 2017 TradeSignal() мне нужно написать ее, получается?или это как пример для сигналов? Функцию я просто так, для примера придумал. У Вас это может быть функция, или просто текущий сигнал индикатора (например iCustom()). Просто на пальцах попытался объяснить. Фухх))Спасибо! Где такому научиться не подскажете литературу? Обычная документация по MQL4. :)if(DN_Trend()==true && LastTradeSignal != OP_SELL){ if(CountSell() == 0 && Bid { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red); if (ticket > 0) { SL = NormalizeDouble(Bid + StopLoss*Point, Digits); TP = NormalizeDouble(Bid - TakeProfit*Point, Digits); if (OrderSelect(ticket, SELECT_BY_TICKET)) if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0)) Print("Ошибка на продажу"); LastTradeSignal=OP_SELL; Добавлено: 05-05-2017 11:56:02Радует одно что я на правильном пути))Ток знаний не хватает пока. Изменено 5 мая, 2017 пользователем d1w4m3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 5 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 мая, 2017 Остался баг "Переменной, в которой будете хранить тип последнего сигнала, при объявлении присваивайте значение, которое не будет совпадать ни с одним из возможных сигналов от индикатора"у нас -1 и все равно он в начале открывает?Или есть какая-нибудь возможность привязаться к буферам индикатора, тобишь пока не поступит новый сигнал о смене буфера - не открывать. Ну правильно, мы специально присваивали -1, чтобы советник открывался на первом же сигнале, независимо от того какой сигнал с индикатора поступит первым. Если нужно ,чтобы первый сигнал пропускался , то присвойте ей (переменной) значение текущего сигнала индикатора в функции OnInit(). Таким образом на этапе инициализации Вы исключите открытие по текущему сигналу при первом запуске советника. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 5 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 мая, 2017 Ну правильно, мы специально присваивали -1, чтобы советник открывался на первом же сигнале, независимо от того какой сигнал с индикатора поступит первым. Если нужно ,чтобы первый сигнал пропускался , то присвойте ей (переменной) значение текущего сигнала индикатора в функции OnInit(). Таким образом на этапе инициализации Вы исключите открытие по текущему сигналу при первом запуске советника.А как я узнаю текущий сигнал от индикатора?Когда я включаю советник то он может быть или бай или сел? Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 5 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 мая, 2017 А как я узнаю текущий сигнал от индикатора?Когда я включаю советник то он может быть или бай или сел? Я так понял, у Вас сигналы приходят из этих функций DN_Trend() и UP_Trend()? Если так, то напишите в OnInit() примерно следующее:if(DN_Trend()==true) LastTradeSignal=OP_SELL;if(UP_Trend()==true) LastTradeSignal=OP_BUY; 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
d1w4m3 Опубликовано 5 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 мая, 2017 Спасибо огромное, это я уже чудить начал))забыл проверитьфуууух Изменено 5 мая, 2017 пользователем d1w4m3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 5 мая, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 мая, 2017 int OnInit(){ LastTradeSignal=0; LastTradeSignal=1;/////////,,только так заработало, только для села В общем Вам нужно перечитать все что я писал выше. Вдумчиво перечитать. Я ответил максимально развернуто, как только возможно. Если хотите выйти на нормальный уровень программирования, то не спешите. Не хватайтесь сразу за непосильные вещи, идите от простого к сложному. Если чего то не понимаете, то делайте шаг назад и заново повторяйте. Вы должны научиться четко понимать что, где и почему пишется в коде. Должны самостоятельно научиться делать логические конструкции.Ну вот что Вы написали здесь? Сначала присваиваете LastTradeSignal=0, а потом тут-же переопределяете значение LastTradeSignal=1. В чем смысл? Я же написал как надо. Где условия, при которых LastTradeSignal принимает то или иное значение? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти