Скажите, а установка тейкпрофита в самой позиции принципиально не хотите?
Не по теме вопроса, но важно.
У Вас с iMA проблема. Это не функция возвращающая среднее значение, это функция инстанцирующая индикатор и возвращающая его хендл (числовое значение области памяти по которому можно обратиться к индикатору). Подробнее тут: https://www.mql5.com/ru/docs/indicators/ima
Нужно использовать CopyBuffer для получения его значения (https://www.mql5.com/ru/docs/series/copybuffer) и iMA вызывать лишь раз в OnInit а зендл возвращенный запоминать в глобальную переменную типа int.
У Вас с iMA проблема. Это не функция возвращающая среднее значение, это функция инстанцирующая индикатор и возвращающая его хендл (числовое значение области памяти по которому можно обратиться к индикатору). Подробнее тут: https://www.mql5.com/ru/docs/indicators/ima
Нужно использовать CopyBuffer для получения его значения (https://www.mql5.com/ru/docs/series/copybuffer) и iMA вызывать лишь раз в OnInit а зендл возвращенный запоминать в глобальную переменную типа int.
Документация по MQL5: Технические индикаторы / iMA
- www.mql5.com
//| Demo_iMA.mq5 | //| Copyright 2011, MetaQuotes Software Corp. | //| https://www.mql5.com | //| Перечисление способов создания хэндла | Creation type=Call_iMA; ...
https://docs.mql4.com/ru/trading/ordersend
OrderSend - Торговые функции - Справочник MQL4
- docs.mql4.com
[in] Цвет открывающей стрелки на графике. Если параметр отсутствует или его значение равно CLR_NONE, то открывающая стрелка не отображается на графике. При открытии рыночного ордера (OP_SELL или OP_BUY) в качестве цены открытия могут использоваться только самые последние цены Bid (для продажи) или Ask (для покупки). Если операция проводится по...
Andrey Azatskiy:
Не по теме вопроса, но важно.
Не по теме вопроса, но важно.
У него там код для mql4
Смотрите функцию OrderClose.
OrderClose - Торговые функции - Справочник MQL4
- docs.mql4.com
Возвращает true при успешном завершении функции или false в случае ошибки. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Mihail Marchukajtes:
Скажите, а установка тейкпрофита в самой позиции принципиально не хотите?
Скажите, а установка тейкпрофита в самой позиции принципиально не хотите?
В самой позиции это как?
Речь идёт о торговом советнике. Чтобы по алгоритму он зашел в сделку, а по профиту или стопу вышел.
Профит и стоп должны настраиваться в советнике.
Andrey Azatskiy:
Не по теме вопроса, но важно.
У Вас с iMA проблема. Это не функция возвращающая среднее значение, это функция инстанцирующая индикатор и возвращающая его хендл (числовое значение области памяти по которому можно обратиться к индикатору). Подробнее тут: https://www.mql5.com/ru/docs/indicators/ima
Нужно использовать CopyBuffer для получения его значения (https://www.mql5.com/ru/docs/series/copybuffer) и iMA вызывать лишь раз в OnInit а зендл возвращенный запоминать в глобальную переменную типа int.
Признателен за ответ, однако я не слишком силён в этом.
Не по теме вопроса, но важно.
У Вас с iMA проблема. Это не функция возвращающая среднее значение, это функция инстанцирующая индикатор и возвращающая его хендл (числовое значение области памяти по которому можно обратиться к индикатору). Подробнее тут: https://www.mql5.com/ru/docs/indicators/ima
Нужно использовать CopyBuffer для получения его значения (https://www.mql5.com/ru/docs/series/copybuffer) и iMA вызывать лишь раз в OnInit а зендл возвращенный запоминать в глобальную переменную типа int.
Evgeniy Chumakov:
У него там код для mql4
А для четверки это просто расчет скользяшек, а не вызов индикатора? Если так, то не знал, на MQL4 крайне редко программирую.
Андрей Саган:
Признателен за ответ, однако я не слишком силён в этом.
Признателен за ответ, однако я не слишком силён в этом.
может поможет
//+------------------------------------------------------------------+ //| Stalin Sample.mq4 | //| Copyright 2005-2014, MetaQuotes Software Corp. | //| http://www.mql4.com | //+------------------------------------------------------------------+ #property copyright "2005-2014, MetaQuotes Software Corp." #property link "http://www.mql4.com" //--- Inputs input double Lots = 0.1; // Lot input double MaximumRisk = 0.02; // MaximumRisk input double DecreaseFactor = 3; // DecreaseFactor input double TakeProfit = 500; // Take Profit input double TrailingStop = 300; // Trailing Stop input string short_name = "Stalin"; // Name Indicators input bool InpOnlyOne = false; // Close opposite input bool ObjRevers = false; // Revers //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CheckForClose(void) { double MacdCurrent,SignalCurrent; int cnt,total; //--- if(Bars<100) { Print("bars less than 100"); return; } if(TakeProfit<10) { Print("TakeProfit less than 10"); return; } //--- to simplify the coding and speed up access data are put into internal variables MacdCurrent=iCustom(NULL,0,short_name,MODE_MAIN,1); SignalCurrent=iCustom(NULL,0,short_name,MODE_SIGNAL,1); total=OrdersTotal(); if(total<1) { //--- no opened orders identified if(AccountFreeMargin()<(1000*LotsOptimized())) { Print("We have no money. Free Margin = ",AccountFreeMargin()); return; } } //--- it is important to enter the market correctly, but it is more important to exit it correctly... for(cnt=0; cnt<total; cnt++) { if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)) continue; if(OrderType()<=OP_SELL && // check for opened position OrderSymbol()==Symbol()) // check for symbol { //--- long position is opened if(OrderType()==OP_BUY) { if(!InpOnlyOne) { //--- should it be closed? if((ObjRevers && MacdCurrent<SignalCurrent) || (!ObjRevers && MacdCurrent>SignalCurrent)) { //--- close order and exit if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet)) Print("OrderClose error ",GetLastError()); return; } } //--- check for trailing stop if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) { //--- modify order and exit if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green)) Print("OrderModify error ",GetLastError()); return; } } } } else // go to short position { if(!InpOnlyOne) { //--- should it be closed? if((ObjRevers && MacdCurrent>SignalCurrent) || (!ObjRevers && MacdCurrent<SignalCurrent)) { //--- close order and exit if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet)) Print("OrderClose error ",GetLastError()); return; } } //--- check for trailing stop if(TrailingStop>0) { if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) { //--- modify order and exit if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) Print("OrderModify error ",GetLastError()); return; } } } } } } //--- } //+------------------------------------------------------------------+ //| Calculate open positions | //+------------------------------------------------------------------+ int CalculateCurrentOrders(string symbol) { int buys=0,sells=0; //--- for(int i=-1; i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderSymbol()==Symbol() && OrderMagicNumber()==16384) { if(OrderType()==OP_BUY) buys++; if(OrderType()==OP_SELL) sells++; } } //--- return orders volume if(buys>0) return(buys); else return(-sells); } //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double LotsOptimized() { double lot=Lots; int orders=HistoryTotal(); // history orders total int losses=0; // number of losses orders without a break //--- select lot size lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1); //--- calcuulate number of losses orders without a break if(DecreaseFactor>0) { for(int i=orders-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; } if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue; //--- if(OrderProfit()>0) break; if(OrderProfit()<0) losses++; } if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1); } //--- return lot size if(lot<0.1) lot=0.1; return(lot); } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void CheckForOpen() { double MacdCurrent,SignalCurrent; int res; //--- go trading only for first tiks of new bar if(Volume[0]>1) return; //--- get Moving Average MacdCurrent=iCustom(NULL,0,short_name,MODE_MAIN,1); SignalCurrent=iCustom(NULL,0,short_name,MODE_SIGNAL,1); //--- sell conditions if((ObjRevers && MacdCurrent<SignalCurrent) || (!ObjRevers && MacdCurrent>SignalCurrent)) { res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,Bid-TakeProfit*Point,"",16384,0,Red); return; } //--- buy conditions if((ObjRevers && MacdCurrent>SignalCurrent) || (!ObjRevers && MacdCurrent<SignalCurrent)) { res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,Ask+TakeProfit*Point,"",16384,0,Green); return; } //--- } //+------------------------------------------------------------------+ //| OnTick function | //+------------------------------------------------------------------+ void OnTick() { //--- check for history and trading if(Bars<100 || IsTradeAllowed()==false) return; //--- calculate open orders by current symbol if(CalculateCurrentOrders(Symbol())==0) CheckForOpen(); CheckForClose(); //--- } //+------------------------------------------------------------------+
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Доброго дня!
Есть намерение в Советнике сделать закрытие сделки по тейк профиту
Каким образом это прописать в Советнике?
Открытие сделки:
А как закрыть по тейкпрофиту?
Check for close order conditions