- Помогите исправить советника на MQL5
- Помогите с индикатором....Пожалуйста
- Помогите пожалуйста изменить советника .
Помогите пожалуйста реверсировать открывающиеся сделки. Где советник должен открывать sell, нужно чтобы открывал buy и наоборот. За ранее благодарен.
помогите пожалуйста с советником - не правильное открытие ордера (к тейк профиту может не добрать спред, а к стопу добавить) получается при настройках: тейка в 100 пп и стопа в 100пп, ставит стоп 103 и тейк 97
помогите пожалуйста с советником - не правильное открытие ордера (к тейк профиту может не добрать спред, а к стопу добавить) получается при настройках: тейка в 100 пп и стопа в 100пп, ставит стоп 103 и тейк 97
Вы прибавляйте/вычитайте к/от OrderOpenPrice(), и будет точно!
extern int TP = 100; extern int SL = 100; extern double Lots = 0.1; double DecreaseFactor = 2; extern double IK = 2; double GeneralShift = 0; // 0 - незакрытый бар, 1 - закрытый. int slip = 0; extern string Trailing_Funcion = "Main_step_tral"; extern bool tral =false; extern int TrailingStop = 15; // Растояние в пунктах, откуда начнем тралить extern int TrailingStep = 5; // Шаг трала extern double MAGIC = 12345; //+------------------------------------------------------------------+ //| Calculate open positions | //+------------------------------------------------------------------+ int CalculateCurrentOrders(string symbol) { if(tral){ T_SL(); } //---- 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()==MAGIC) { if(OrderType()==OP_BUY) buys++; if(OrderType()==OP_SELL) sells++; } } //---- return orders volume if(buys>0) return(buys); else return(-sells); } //+-------------------------------------------------------------------------------------------------------------------+ //| Функция трейлинг стоп лосс | void T_SL() { int i=0; for(i=0; i<OrdersTotal(); i++) { if(!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue; if(OrderSymbol() != Symbol()) continue; if(OrderMagicNumber()!=MAGIC) continue; if(OrderType()==OP_BUY) { if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(TrailingStop*Point,Digits)) { if(NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-(TrailingStop+TrailingStep-1)*Point,Digits)) { OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-TrailingStop*Point,Digits), OrderTakeProfit(), 0, CLR_NONE); } } //end if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(TrailingStop*Point,Digits)) } //end if(OrderType()==OP_BUY) if(OrderType()==OP_SELL) { if(NormalizeDouble(OrderOpenPrice()-Ask,Digits)>NormalizeDouble(TrailingStop*Point,Digits)) { if(OrderStopLoss()==0 || NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(Ask+(TrailingStop+TrailingStep-1)*Point,Digits)) { OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+TrailingStop*Point,Digits), OrderTakeProfit(), 0, CLR_NONE); } } //end if(NormalizeDouble(OrderOpenPrice()-Ask,Digits)>NormalizeDouble(TrailingStop*Point,Digits)) } //end if(OrderType()==OP_SELL) } //end for(i=0; i<OrdersTotal(); i++) } //end void T_SL() //| Конец функции трейлинг стоп лосс | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| 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=Lots; //---- 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>0) lot=NormalizeDouble(lot*IK,1); if(losses>1) lot=NormalizeDouble(lot*IK,1); if(losses>2) lot=NormalizeDouble(lot*IK,1); if(losses>3) lot=NormalizeDouble(lot*IK,1); if(losses>4) lot=NormalizeDouble(lot*IK,1); if(losses>5) lot=NormalizeDouble(lot*IK,1); if(losses>6) lot=NormalizeDouble(lot*IK,1); if(losses>7) lot=NormalizeDouble(lot*IK,1); if(losses>8) lot=NormalizeDouble(lot*IK,1); if(losses>9) lot=NormalizeDouble(lot*IK,1); if(losses>10) lot=NormalizeDouble(lot*IK,1); if(losses>11) lot=NormalizeDouble(lot*IK,1); if(losses>12) lot=NormalizeDouble(lot*IK,1); if(losses>13) lot=NormalizeDouble(lot*IK,1); if(losses>14) lot=NormalizeDouble(lot*IK,1); if(losses>15) lot=NormalizeDouble(lot*IK,1); if(losses>16) lot=NormalizeDouble(lot*IK,1); if(losses>17) lot=NormalizeDouble(lot*IK,1); if(losses>18) lot=NormalizeDouble(lot*IK,1); if(losses>19) lot=NormalizeDouble(lot*IK,1); if(losses>20) lot=NormalizeDouble(lot*IK,1); if(losses>21) lot=NormalizeDouble(lot*IK,1); if(losses>22) lot=NormalizeDouble(lot*IK,1); if(losses>23) lot=NormalizeDouble(lot*IK,1); } //---- return lot size if(lot<Lots) lot=Lots; ObjectCreate("Copyright", OBJ_LABEL, 0, 0, 0); ObjectSet("Copyright", OBJPROP_CORNER, 3); ObjectSet("Copyright", OBJPROP_XDISTANCE, 5); ObjectSet("Copyright", OBJPROP_YDISTANCE, 5); ObjectSetText("Copyright","Copyright © 2013 http://g\n",12,"Arial",White); Comment("" + "\n" + " робот" + "\n" + "_________________________________________" + "\n" + "\n" + "Плечо: 1:" + DoubleToStr(AccountLeverage(), 0) + "\n" + "Номер счета: " + DoubleToStr(AccountNumber(), 0) + "\n" + "Баланс: " + DoubleToStr(AccountBalance(), 0) + "\n" + "Лот в рынке: " + DoubleToStr(lot,1) + "\n" + "Stop Loss- " + SL + " пунктов" + "\n" + "Take Profit- " + TP + " пунктов" + "\n" + "Привязка ордера: " + DoubleToStr(MAGIC, 0) + "\n" + "_________________________________________"); return(lot); } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void CheckForOpen() { double AC; double AO; int res; //---- go trading only for first tiks of new bar if(Volume[0]>1) return; //---- get Signal's AC=iAC(NULL,0,GeneralShift); AO=iAO(NULL,0,GeneralShift); //---- sell conditions if(iAO(NULL,1,GeneralShift)>iAO(NULL,0,GeneralShift+1)&&iAO(NULL,0,GeneralShift)>0 && iAC(NULL,0,GeneralShift)>iAC(NULL,0,GeneralShift+1)&&iAC(NULL,0,GeneralShift)>0) { res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,slip,Ask+SL*Point,Ask-TP*Point,"Boot",MAGIC,0,Red); return; } //---- buy conditions if(iAO(NULL,0,GeneralShift)<iAO(NULL,0,GeneralShift+1)&&iAO(NULL,0,GeneralShift)<0 &&iAC(NULL,0,GeneralShift)<iAC(NULL,0,GeneralShift+1)&&iAC(NULL,0,GeneralShift)<0) { res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,slip,Ask-SL*Point,Ask+TP*Point,"Boot",MAGIC,0,Blue); return; } //---- } //+------------------------------------------------------------------+ //| Check for close order conditions | //+------------------------------------------------------------------+ void CheckForClose() { double AC; double AO; //---- go trading only for first tiks of new bar if(Volume[0]>1) return; //---- get Moving Average AC=iAC(NULL,0,GeneralShift); AO=iAO(NULL,0,GeneralShift); //---- for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue; //---- check order type if(OrderType()==OP_BUY) { if(TP>=1000.0) OrderClose(OrderTicket(),OrderLots(),Bid,3,White); break; } if(OrderType()==OP_SELL) { if(TP>=1000.0) OrderClose(OrderTicket(),OrderLots(),Ask,3,White); break; } } //---- } //+------------------------------------------------------------------+ //| 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(); else CheckForClose(); //---- } //+------------------------------------------------------------------+
И как эту простынь читать? Для вставления кода пользуйтесь SRC!
Всё понял о чем Вы говорите - вооот добавил код
Всё понял о чем Вы говорите - вооот добавил код
1. Удалите свои посты с "портянками" в обеях ветках!
2. Слиппаж должен быть не меньше 20 для пятизнака для проскальзывания.
3. Вначале открывайте со СтопЛосс 0 и ТейкПрофит 0, а потом модифицируйте, устанавливая их от OrderOpenPrice(), т.к. многие ДЦ не могут всё установить за раз от Аска или Бида при повышенной волатильности!!
Пока всё, попробуйте и посмотрите в журнале, какие ещё ошибки будут!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования