Vorchunozavr Опубликовано 1 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 октября, 2013 Всем привет! И спасибо за Спасибо!Сам учусь, так что если не ответил - ответа пока не знаю ;) уважаемые форумчане. написал эксперт на основе внешнего индикатора... на валютных парах работает, а на золоте или нефти выдает OrderSend error 131 ... в чем может быть причина ??? 131 - неправильный объём (мелкий лот?). Нужно узнать минимальный объём разрешённый по инструменту и шаг: MarketInfo(Symbol(), MODE_MINLOT)MarketInfo(Symbol(), MODE_LOTSTEP) Уважаемый Vorchunozavr спасибо за код,еще такое дело. Как дополнить бота что бы при достижении первого тейк профита ордер переводился в без убыток,а дальше тралился как есть ? Поможете буду очень признателен !!! Прилагаю код. BU_1, во внешние переменные и в проверку на Digits.Добавил две функции. Спойлер //+------------------------------------------------------------------+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); BU_Buy(); //--- Переводим в БУ } 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); BU_Sell(); //--- Переводим в БУ } if ((OrderOpenPrice() - Ask)/Point >= Profit_2 && OrderLots() > Lots - LotsClose*2) OrderClose(OrderTicket(), LotsClose, Ask, Slippage); } } } } }}//+------------------------------------------------------------------+int BU_Buy(){ 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())/Point >= Profit_1 && OrderLots() == Lots - LotsClose) { Sl = NormalizeDouble(OrderOpenPrice() + BU_1*Point, Digits); if (OrderStopLoss() != Sl && OrderStopLoss() OrderModify(OrderTicket(), OrderOpenPrice(), Sl, OrderTakeProfit(),0); } } } } } return(0);}//+------------------------------------------------------------------+int BU_Sell(){ for (int i=0; i { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_SELL) { if ((OrderOpenPrice() - Ask)/Point >= Profit_1 && OrderLots() == Lots - LotsClose) { Sl = NormalizeDouble(OrderOpenPrice() - BU_1*Point, Digits); if (OrderStopLoss() != Sl && OrderStopLoss() > Sl) OrderModify(OrderTicket(), OrderOpenPrice(), Sl, OrderTakeProfit(),0); } } } } } return(0);}//+------------------------------------------------------------------+ Если кто-то знает, как сделать проще, буду рад увидеть. Добавлено: 01-10-2013 08:11:33 if(Bid >=price + Step * Point) Так чтоли? Да, так.А почему void GetSignal()?Нам же нужно значение Signal.Лучше int GetSignal() & return(Signal). Спойлер int 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 - == Окончание блока ============================================================= return(Signal);} Изменено 1 октября, 2013 пользователем Vorchunozavr Ссылка на сообщение Поделиться на другие сайты More sharing options...
Semarql Опубликовано 1 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 октября, 2013 В целях закрепления материала на внешнем индюке, взял внешний индюк на пересечение стохастика, если буфер 1 продавать если 0 покупать, только кого с кем сравнивать не пойму, в уроке индюк был на графике, а этот просто стрелки рисует....double Sell = iCustom ( Symbol(), 0, "Stochastic_Cross_Alert", KPeriod, DPeriod, Slowing, MA_Method, PriceField, OverBoughtLevel, OverSoldLevel, show_KD_cross, show_K_OBOScross, show_D_OBOScross, 1, 0 ); double Buy = iCustom ( Symbol(), 0, "Stochastic_Cross_Alert", KPeriod, DPeriod, Slowing, MA_Method, PriceField, OverBoughtLevel, OverSoldLevel, show_KD_cross, show_K_OBOScross, show_D_OBOScross, 0, 0 ); Ссылка на сообщение Поделиться на другие сайты More sharing options...
v Опубликовано 1 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 октября, 2013 Подскажите пожалуйста, условие else В = 0, будет выполняться для if (А > Б ) = 1 ? if (А > Б ) В = 1; else { if (А Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 1 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 октября, 2013 Подскажите пожалуйста, условие else В = 0, будет выполняться для if (А > Б ) = 1 ? if (А > Б ) В = 1; else { if (А Спойлер if (А > Б ) { В = 1;}else if (А { В = -1;}else //-- Если А = Б ?{ В = 0 ;} Изменено 1 октября, 2013 пользователем Vorchunozavr Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 1 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 октября, 2013 Уважаемый Vorchunozavr Спасибо за код,буду пробовать оптимизировать его.В общем на тесте вроде бы дает положительный результат с натяжкой и на демку поставлю,посмотрим чего с этого получится !!! :d :d :d Ссылка на сообщение Поделиться на другие сайты More sharing options...
v Опубликовано 1 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 октября, 2013 Подскажите пожалуйста, условие else В = 0, будет выполняться для if (А > Б ) = 1 ? if (А > Б ) В = 1; else { if (А Спойлер if (А > Б ) { В = 1;}else if (А { В = -1;}else //-- Если А = Б ?{ В = 0 ;} Да, if (А = Б) B = 0;Пробую оптимизировать, как в учебнике Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 1 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 октября, 2013 vБудет работать и Ваше и моё, просто я более наглядно нарисовал...Уважаемый Vorchunozavr Спасибо за код,буду пробовать оптимизировать его.В общем на тесте вроде бы дает положительный результат с натяжкой и на демку поставлю,посмотрим чего с этого получится !!! :d :d :d Пожалуйста :)На счёт оптимизации: Надо смотреть приносит-ли пользу частичное закрытие и перевод в БУ, ведь стоп мы получаем в полном объёме, а прибыль ограничиваем... Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 2 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 октября, 2013 Я вот только не понял,функцию трелинга можно выкинуть из кода совсем получается.В общем мне нужно при достижении определенного количества пунктов закрылась часть ордера и перевелась в без убыток,при закрытии второй части,стоп лосс переводился на место закрытия первой части.Как то так.Сегодня смотрел его на тесторе,пока еще не понял как он работает. :d Там все в куче,запутался на прочь,хоть содись и все заново переписывай. Ссылка на сообщение Поделиться на другие сайты More sharing options...
1070007 Опубликовано 2 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 октября, 2013 Здравствуйте. Спасибо за отличные уроки. Домашнее задание test2_dz.mq4test2_dz.ex4test3_dz2.ex4test3_dz2.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 3 октября, 2013 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 октября, 2013 Всем привет! :)Некоторые жаловались, что после урока №1, второй урок оказался гораздо сложней, и так и не смогли двигаться дальше.Итак, готовится к выходу урок № 1.5 У кого-то остались вопросы после просмотра урока №2 ?Постараюсь ответить на Ваши вопросы в уроке № "Полтора" :) Добавлено: 03-10-2013 09:26:33Здравствуйте. Спасибо за отличные уроки. Домашнее задание Я посмотрел решение задания №3Итак, по пунктам: Цитата 1. закрытие рыночных ордеров происходило не на противоположной границе канала, а на средней линии. С этим всё в порядке. Цитата 2. Добавить в советник сигналы индикатора «Стохастик» и совместить с сигналами индикатора «ТМА». Тут почти всё в порядке, за исключением того, что я бы сделал не так...Проверил бы не одно значение а два, и сравнивал бы их между собой для начала, т.е. идёт-ли повышение или понижение значения, а не просто "выше", "ниже"...3. выше/ниже границ каналов поставить страховочные стоп-ордера на некотором расстоянии от рыночных ордеров, дабы компенсировать убытки при возможных потерях от рыночных ордеров (с обязательной установкой SL, TP).Тут Вы ставите лимитники, а я просил ставить стоп-ордера для страховки... Изменено 3 октября, 2013 пользователем xbms 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Semarql Опубликовано 3 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 октября, 2013 не удаляются рыночные ордера:"OrderDelete error 4108" Неверный номер тикета Спойлер extern double Lot = 0.01;extern double LotPerc = 0.01;extern double RiskEquity = 0.7;extern double StopLoss = 20;extern double TakeProfit = 30;extern int BarCount = 10;extern double Multi = 2;extern int TimeBegin = 5;extern int TimeEnd = 19;extern double Slipagge = 3;extern double Step = 10;extern int magic = 1123111;double OpenPriceBuy, OpenPriceSell, minprice, maxprice, NewLot, SL, TP; int ticket;//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init(){ if (Digits == 3 || Digits == 5) { Slipagge *= 10; Step *= 10; StopLoss *= 10; TakeProfit *= 10; } return(0);}//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit() {//----//---- return(0); }//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start(){//+------------------------------------------------------------------+if ( TimeEnd == TimeHour(TimeCurrent()) ) { DeleteOrders(); }//+------------------------------------------------------------------+double x, y, z; x = AccountBalance()*RiskEquity; y = AccountEquity (); z = AccountEquity ()/AccountBalance()*100; Comment (z); if (y { for (int trade = OrdersTotal() - 1; trade >= 0; trade--) { OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == magic) { if (OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), Bid, Slipagge, Blue); if (OrderType() == OP_SELL ) OrderClose(OrderTicket(), OrderLots(), Ask, Slipagge, Red ); } } }//+------------------------------------------------------------------+NewLot = AccountBalance()*LotPerc/1000; if ( NewLot //+------------------------------------------------------------------+ //minprice = NormalizeDouble ( GetMinPrice ()-Step*Point, Digits ); //maxprice = NormalizeDouble ( GetMaxPrice ()+Step*Point, Digits ); OpenPriceSell = NormalizeDouble ( GetOpenPrice()-Step*Point, Digits ); OpenPriceBuy = NormalizeDouble ( GetOpenPrice()+Step*Point, Digits ); { if ( TimeBegin = TimeHour(TimeCurrent()) && CountBuy() == 0 && CountSell() == 0 ) { SL = NormalizeDouble (OpenPriceSell + StopLoss * Point, Digits); TP = NormalizeDouble (OpenPriceSell - TakeProfit * Point, Digits); ticket = OrderSend (Symbol(), OP_SELL, NewLot, OpenPriceSell, Slipagge, 0, 0, "0", magic, 0, Red ); if (ticket > 0) { if ( OrderSelect ( ticket, SELECT_BY_TICKET, MODE_TRADES ) == true ) { OrderModify ( ticket, OrderOpenPrice(), SL, TP, 0 ); } } SL = NormalizeDouble (OpenPriceBuy - StopLoss * Point, Digits); TP = NormalizeDouble (OpenPriceBuy + TakeProfit * Point, Digits); ticket = OrderSend (Symbol(), OP_BUY, NewLot, OpenPriceBuy, Slipagge, 0, 0, "0", magic, 0, Blue ); if (ticket > 0) { if ( OrderSelect ( ticket, SELECT_BY_TICKET, MODE_TRADES ) == true ) { OrderModify ( ticket, OrderOpenPrice(), SL, TP, 0 ); } } } } return(0);}//+------------------------------------------------------------------+//| expert function |//+------------------------------------------------------------------+double GetMinPrice(){ double dLow = 1000000, dPrice ; for (int i=1; i { dPrice = iLow(Symbol(), 0, i); if (dPrice dLow = dPrice; } return (dLow);}//+------------------------------------------------------------------+double GetMaxPrice(){ double dHigh = 0, dPrice ; for (int i=1; i { dPrice = iHigh(Symbol(), 0, i); if (dPrice > dHigh) dHigh = dPrice; } return (dHigh);}//+------------------------------------------------------------------+double GetOpenPrice (){ double open; open = iOpen ( Symbol(), 0, 0 ); return (open);}//+------------------------------------------------------------------+int CountBuy (){ int count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { OrderSelect(trade, SELECT_BY_POS); if (OrderSymbol() == Symbol() && OrderMagicNumber () == magic ) { if(OrderType() == OP_BUY) count++; } } return(count);}//+------------------------------------------------------------------+int CountSell (){ int count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { OrderSelect(trade, SELECT_BY_POS); if (OrderSymbol() == Symbol() && OrderMagicNumber () == magic ) { if(OrderType() == OP_SELL) count++; } } return(count);}//+------------------------------------------------------------------+int CountBuyStop (){ int count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { OrderSelect(trade, SELECT_BY_POS); if (OrderSymbol() == Symbol() && OrderMagicNumber () == magic ) { if(OrderType() == OP_BUYSTOP) count++; } } return(count);}//+------------------------------------------------------------------+int CountSellStop (){ int count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { OrderSelect(trade, SELECT_BY_POS); if (OrderSymbol() == Symbol() && OrderMagicNumber () == magic ) { if(OrderType() == OP_SELLSTOP) count++; } } return(count);}//+------------------------------------------------------------------+void DeleteOrders (){ for ( int trade = OrdersTotal()-1; trade>=0; trade-- ) { OrderSelect ( trade, SELECT_BY_POS, MODE_TRADES ); if (OrderSymbol() == Symbol() && OrderMagicNumber() == magic) { OrderDelete (OrderTicket(), Black ); } }}//+------------------------------------------------------------------+//+------------------------------------------------------------------+ а это вообще не пойму что такое, реквоты в тестере??? "OrderSend error 138" Новые цены Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 3 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 октября, 2013 не удаляются рыночные ордера:"OrderDelete error 4108" Неверный номер тикетаа это вообще не пойму что такое, реквоты в тестере??? "OrderSend error 138" Новые цены Рыночные ордера и не должны удаляться, их можно закрыть (OrderClose). ticket = OrderSend (Symbol(), OP_SELL, NewLot, OpenPriceSell, Slipagge, 0, 0, "0", magic, 0, Red ); Это тоже неправильно - рыночный ордер (OP_BUY и OP_SELL) должен открываться по текущей цене (Ask или Bid). 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Semarql Опубликовано 4 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 октября, 2013 А как правильно записать открытие ордера по рынку на отступ Х от цены открытия свечи? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 4 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 октября, 2013 А как правильно записать открытие ордера по рынку на отступ Х от цены открытия свечи? А зачем по рынку? Чем не устраивают BUY_STOP и SELL_STOP? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Naglaya Опубликовано 4 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 октября, 2013 Здравствуйте, уважаемые! Из-за нехватки времени нет возможности торговать в течение дня, вот и решила написать сову, а тут и видео уроки в тему. Сделала, ошибок нет, но ордера не открываются. Делала на основе индюка ForexTrend. Суть в том, чтобы ордера buy открывались, когда синяя линия выше красной больше, чем на 10 пунктов, а закрывались, когда меньше 10. Ордер sell открывается при тех же условиях, только когда выше красная линия индикатора. SL=TP и не закладываются в пунктах (только не знаю, как это написать). Может, подскажет кто, что изменить? Буду очень благодарна. Индюк и сову прилагаю. 111.mq4ForexTrend~.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Semarql Опубликовано 4 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 октября, 2013 А как правильно записать открытие ордера по рынку на отступ Х от цены открытия свечи? А зачем по рынку? Чем не устраивают BUY_STOP и SELL_STOP? Для понимания механизма MQL4, как то так :) и для борьбы с проскальзываниями наверное... Изменено 4 октября, 2013 пользователем Semarql Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 4 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 октября, 2013 Для понимания механизма MQL4, как то так :) и для борьбы с проскальзываниями наверное... Нужно что-то типа виртуальных BUY_STOP и SELL_STOP?И чтобы они могли скользнуть только на величину указанную в Slippage? Цитата При открытии рыночного ордера (OP_SELL или OP_BUY) в качестве цены открытия могут использоваться только самые последние цены Bid (для продажи) или Ask (для покупки). Т.е., чтобы использовать команду OrderSend, нужно чтобы цена (пришедшая с текущим тиком) совпала с нашей расчётной (+- некоторое значение). Спойлер //-----------------------------------+ if (MathAbs(OpenPriceSell - Bid)/Point) ticket = OrderSend (Symbol(), OP_SELL, NewLot, Bid, Slipagge, 0, 0, "0", magic, 0, Red ); //-----------------------------------+ if (MathAbs(OpenPriceSell - Ask)/Point) ticket = OrderSend (Symbol(), OP_BUY, NewLot, Ask, Slipagge, 0, 0, "0", magic, 0, Blue ); //-----------------------------------+ Теперь наши ордера стали одновременно и стоповыми и лимитными... :-b Abs, во внешние переменные - это и есть то "некоторое значение" в пунктах, которыми мы готовы пожертвовать. Для тестера нужно ставить побольше.Еще, желательно проверить, не находится-ли уже цена выше бая, или ниже села... и решить, надо-ли в этом случае ставить ордера...Добавлено: 04-10-2013 21:36:58Сделала, ошибок нет, но ордера не открываются. Компилятор не покажет ни математические ошибки, ни логические.Первое, что увидел: extern string TimeFrame = "current time frame";PriceHigh = iCustom (Symbol(), 0, "ForexTrend~", TimeFrame, SSP, Kmin, Kmax, CountBars, 0, 0);Если Вам нужен текущий тайм, ставьте 0 и всё:PriceHigh = iCustom (Symbol(), 0, "ForexTrend~", 0, SSP, Kmin, Kmax, CountBars, 0, 0);В справке по iCustom это есть. Цитата SL=TP и не закладываются в пунктах (только не знаю, как это написать). Это я не понял. Спойлер SL = NormalizeDouble(Bid TP = NormalizeDouble(Bid ticket = OrderSend (Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, comment, Magic, 0, Red); if (ticket > 0) { if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true) OrderModify(ticket, OrderOpenPrice(), SL, TP, 0); } Там, где SL и TP, должны быть условия, по которым открывается сделка.Например: if ((PriceHigh - PriceLow)/Point >= 10)А посчитать SL и TP, лучше уже после открытия ордера, перед OrderModify(). И считать относительно OrderOpenPrice().Например: SL = NormalizeDouble(OrderOpenPrice() - StopLoss*Point, Digits); Изменено 4 октября, 2013 пользователем Vorchunozavr Ссылка на сообщение Поделиться на другие сайты More sharing options...
Semarql Опубликовано 5 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 октября, 2013 Цитата Нужно что-то типа виртуальных BUY_STOP и SELL_STOP? Ага, а вообще хочется реализовать такую вещь в советнике_http://www.mql5.com/ru/market/product/380#full_description Изменено 5 октября, 2013 пользователем Semarql Ссылка на сообщение Поделиться на другие сайты More sharing options...
Naglaya Опубликовано 5 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 октября, 2013 Ув. Vorchunozavr, спасибо, первую поправку учла, а дальше просто темный лес! По моей задумке нет фиксированных (в пунктах) SL и TP. Хочется сделать так, чтобы ордера BUY открывались, когда синяя линия индикатора, пересекая красную линию снизу вверх, отдаляется от нее на 10 и более пп. Закрывается же ордер, когда линии сближаются до 10 пп. С ордером SELL та же ситуация, только красная линия вверху. Не знаю, как это прописать. Это моя первая попытка написания советника, опыта ноль. Буду благодарна за любую помощь. Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 5 октября, 2013 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 октября, 2013 Ув. Vorchunozavr, спасибо, первую поправку учла, а дальше просто темный лес! По моей задумке нет фиксированных (в пунктах) SL и TP. Хочется сделать так, чтобы ордера BUY открывались, когда синяя линия индикатора, пересекая красную линию снизу вверх, отдаляется от нее на 10 и более пп. Закрывается же ордер, когда линии сближаются до 10 пп. С ордером SELL та же ситуация, только красная линия вверху. Не знаю, как это прописать. Это моя первая попытка написания советника, опыта ноль. Буду благодарна за любую помощь. На самом деле все просто...Нужно всего-лишь сравнить цены:1. Получить цену от линии индикатора2. Получить текущую цену3. Вычесть одну из другой и привести к пунктам (разделить на Point)4. Сравнить результат с Вашими искомыми пунктами и выполнить нужное действие 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Naglaya Опубликовано 5 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 октября, 2013 Ув. Vorchunozavr, спасибо, первую поправку учла, а дальше просто темный лес! По моей задумке нет фиксированных (в пунктах) SL и TP. Хочется сделать так, чтобы ордера BUY открывались, когда синяя линия индикатора, пересекая красную линию снизу вверх, отдаляется от нее на 10 и более пп. Закрывается же ордер, когда линии сближаются до 10 пп. С ордером SELL та же ситуация, только красная линия вверху. Не знаю, как это прописать. Это моя первая попытка написания советника, опыта ноль. Буду благодарна за любую помощь. На самом деле все просто...Нужно всего-лишь сравнить цены:1. Получить цену от линии индикатора2. Получить текущую цену3. Вычесть одну из другой и привести к пунктам (разделить на Point)4. Сравнить результат с Вашими искомыми пунктами и выполнить нужное действие АААААААААА!!!!!!!!!!! Вынос мозга! В том то и проблема, что есть понимание, как говорится, "на пальцах", но нет понятия КАК это прописать. Представьте, что я первоклашка, а Вы профессор универа. То, что элементарно для Вас, для меня - высшая математика. Ломаю голову, переделываю, но все без толку. Посмотрите, пожалуйста, индюк и сову выкладывала на предыдущей странице. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 5 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 октября, 2013 На самом деле все просто...Нужно всего-лишь сравнить цены:1. Получить цену от линии индикатора2. Получить текущую цену3. Вычесть одну из другой и привести к пунктам (разделить на Point)4. Сравнить результат с Вашими искомыми пунктами и выполнить нужное действие Там индикатор подвальный, немного по другому считать нужно.АААААААААА!!!!!!!!!!! Вынос мозга! В том то и проблема, что есть понимание, как говорится, "на пальцах", но нет понятия КАК это прописать. Представьте, что я первоклашка, а Вы профессор универа. То, что элементарно для Вас, для меня - высшая математика. Ломаю голову, переделываю, но все без толку. Посмотрите, пожалуйста, индюк и сову выкладывала на предыдущей странице. Посмотрите урок № 2 ещё пару раз.xbms прав, там всё очень просто, как раз для первого класса :dКод я написал, если совсем не будет получаться - выложу, дабы Вы голову не сломали :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Naglaya Опубликовано 5 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 октября, 2013 На самом деле все просто...Нужно всего-лишь сравнить цены:1. Получить цену от линии индикатора2. Получить текущую цену3. Вычесть одну из другой и привести к пунктам (разделить на Point)4. Сравнить результат с Вашими искомыми пунктами и выполнить нужное действие Там индикатор подвальный, немного по другому считать нужно.АААААААААА!!!!!!!!!!! Вынос мозга! В том то и проблема, что есть понимание, как говорится, "на пальцах", но нет понятия КАК это прописать. Представьте, что я первоклашка, а Вы профессор универа. То, что элементарно для Вас, для меня - высшая математика. Ломаю голову, переделываю, но все без толку. Посмотрите, пожалуйста, индюк и сову выкладывала на предыдущей странице. Посмотрите урок № 2 ещё пару раз.xbms прав, там всё очень просто, как раз для первого класса :dКод я написал, если совсем не будет получаться - выложу, дабы Вы голову не сломали :) 1. А что значит "подвальный"?2. Сейчас и сяду пересматривать, хотя... такое ощущение, что у меня уже шарики за ролики заехали, посмотрим. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 5 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 октября, 2013 1. А что значит "подвальный"?2. Сейчас и сяду пересматривать, хотя... такое ощущение, что у меня уже шарики за ролики заехали, посмотрим. 1. Индикатор не на графике цены, а в отдельном окне.2. Техзадание - есть: Цитата Хочется сделать так, чтобы ордера BUY открывались, когда синяя линия индикатора, пересекая красную линию снизу вверх, отдаляется от нее на 10 и более пп. Закрывается же ордер, когда линии сближаются до 10 пп. С ордером SELL та же ситуация, только красная линия вверху. ТП и СЛ не нужны, дык зачем Вы их пишете в советник? Убираем.Лучше называть переменные понятными именами. Какие, нафиг, "PriceHigh" и "PriceLow"? Если мы решили работать с линиями, так и пишем BlueLine и RedLine.Ордер нужно открыть (по условию) и закрыть (по условию), значит OrderSend() и OrderClose(). Никаких OrderModify(), тикетов и т.п.Значения индикатора на еновых парах сильно отличаются от обычных пар, так что универсальность советника потребует его усложнения... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Naglaya Опубликовано 6 октября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 октября, 2013 1. А что значит "подвальный"?2. Сейчас и сяду пересматривать, хотя... такое ощущение, что у меня уже шарики за ролики заехали, посмотрим. 1. Индикатор не на графике цены, а в отдельном окне.2. Техзадание - есть: Цитата Хочется сделать так, чтобы ордера BUY открывались, когда синяя линия индикатора, пересекая красную линию снизу вверх, отдаляется от нее на 10 и более пп. Закрывается же ордер, когда линии сближаются до 10 пп. С ордером SELL та же ситуация, только красная линия вверху. ТП и СЛ не нужны, дык зачем Вы их пишете в советник? Убираем.Лучше называть переменные понятными именами. Какие, нафиг, "PriceHigh" и "PriceLow"? Если мы решили работать с линиями, так и пишем BlueLine и RedLine.Ордер нужно открыть (по условию) и закрыть (по условию), значит OrderSend() и OrderClose(). Никаких OrderModify(), тикетов и т.п.Значения индикатора на еновых парах сильно отличаются от обычных пар, так что универсальность советника потребует его усложнения... Понимаю, что знаний ой как недостаточно. Пол ночи проковырялась, но успеха так и не добилась. Видимо, меня уже клинит. Выложите, пожалуйста, код. Сяду за него и не встану, пока не пойму. А по поводу еновых я в курсе. Вообще, хотела потом уже рабочую сову под каждую пару подстроить и в названии указать и пару, т.к. разница ощутима. Очень жду Вашего ответа. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти