А в чем проблема? Берете iMACD + нужные вам индикаторные буферы + ждете пересечение чего-то с чем-то и готово....
то есть вы хотите чтоб кроме этих условий входа были ещё отдельные ордера, которые открываются по индикатору MACD?
sergeev >>:
то есть вы хотите чтоб кроме этих условий входа были ещё отдельные ордера, которые открываются по индикатору MACD?
то есть вы хотите чтоб кроме этих условий входа были ещё отдельные ордера, которые открываются по индикатору MACD?
Да!!!!Нужно чтобы сигнал от MACD открывал ордера, ставил стопы и все. Закрывать ордера не нужно. В оригинале от пересечения МА подается сигнал допустим BUY, если есть открытые ордера - он их закрывает, А мне не нужно закрытия, Все ордера должны закрываться только по стопам. Плюс добавить в оригинал MACD/ Вообщем хочу открытия ордеров независимо от MACD и МА. Проблема в количестве ордеров, в оригинале может быть только один открытый, нужно по три в разную сторону без принудительного закрытия, только по стопам
Вот такой пойдет, поменяйте индюк и все вроде то что вам надо...
//+------------------------------------------------------------------+ //| Moving Average.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #define MAGICMA 20050610 extern string a = "ЛОТ ММ"; extern bool MM=false; // если false - то работает обычный лот, если true - работает ММ extern double Lots = 0.1; // обычный лот extern double balans = 200; // баланс при увеличении которого, следующий лот будет увеличен на лот MaximumRisk При ММ double MaximumRisk = 0.1; // лот прибавляемый к предыдущему при ММ double DecreaseFactor = 3.0; extern double StopLoss = 30.0; extern double TakeProfit = 60.0; extern double MovingPeriod = 12; extern double MovingShift = 6; //+------------------------------------------------------------------+ //| Calculate open positions | //+------------------------------------------------------------------+ int CalculateCurrentOrders(string symbol) { int buys=0,sells=0; //---- for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA) { 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; double minlot = MarketInfo(Symbol(), MODE_MINLOT); double maxlot = MarketInfo(Symbol(), MODE_MAXLOT); if (MM){ int orders = OrdersHistoryTotal(); int losses = 0; lot = NormalizeDouble(AccountFreeMargin() * MaximumRisk / balans, 2); if (DecreaseFactor > 0.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.0) break; if (OrderProfit() < 0.0) losses++; } if (losses > 1) lot = NormalizeDouble(lot - lot * losses / DecreaseFactor, 2); }} if(lot < minlot) lot = minlot; if(lot > maxlot) lot = maxlot; return (lot);} //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void CheckForOpen() { double ma; int res; //---- go trading only for first tiks of new bar if(Volume[0]>1) return; //---- get Moving Average ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0); //---- sell conditions if(Open[1]>ma && Close[1]<ma) { res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red); return; } //---- buy conditions if(Open[1]<ma && Close[1]>ma) { res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"",MAGICMA,0,Blue); return; } //---- } //+------------------------------------------------------------------+ //| Start function | //+------------------------------------------------------------------+ void start() { //---- check for history and trading if(Bars<100 || IsTradeAllowed()==false) return; //---- calculate open orders by current symbol if(CalculateCurrentOrders(Symbol())==0) CheckForOpen(); //---- } //+------------------------------------------------------------------+
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Суть такая: Хочу добавить в этот советник( торгующий на пересечении) ещё индикатор MACD, который подает свой сигнал на продажу и покупку и советник должен параллельно выполнять их. Открытых ордеров BUY не больше трех и SELL тоже трех. Все ордера должны закрываться только по stoploss и takeprofit, а не принудительно советником.