Написал советник по работе с перекрытиями. однако работает через раз..постоянно возникает ошибка в функции OrderSend номер 131...Хотя я не стопов не профитов вообще не ставлю!.Видимо ошибка в самой логике программы, но я не вижу в чем!Помогите пожалуйста...
Файлы:
alex_9_1.mq4
7 kb
- Подскажите что в этом советники не так...Никак не могу проблему найти
- Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6.
- Помогите разобраться с функцией PlaySound MQL5 не работает, щелкает и всё.
Alex_9:
Написал советник по работе с перекрытиями. однако работает через раз..постоянно возникает ошибка в функции OrderSend номер 131...Хотя я не стопов не профитов вообще не ставлю!.Видимо ошибка в самой логике программы, но я не вижу в чем!Помогите пожалуйста...
131 - это не стопы, а объем сделкиНаписал советник по работе с перекрытиями. однако работает через раз..постоянно возникает ошибка в функции OrderSend номер 131...Хотя я не стопов не профитов вообще не ставлю!.Видимо ошибка в самой логике программы, но я не вижу в чем!Помогите пожалуйста...
ERR_INVALID_TRADE_VOLUME | 131 | Invalid trade volume. |
ilunga:
131 - это не стопы, а объем сделки
131 - это не стопы, а объем сделки
ERR_INVALID_TRADE_VOLUME | 131 | Invalid trade volume. |
Извиняюсь, перепутал, выдает 130 ошибку..
Так Вас читать никто не будет. Хотя бы так сделать.
extern double Lot=1; extern double Profit=500; extern int decrease=100; extern int TrailingStop=70; extern int StopLoss=350; extern int Maperiod1=10; extern int Maperiod2=25; extern bool Perekrytie=true; int Stop; int deinit(){ ObjectDelete("Liverage"); ObjectDelete("Spead"); ObjectDelete("StopLevel"); ObjectDelete("BALANSE"); ObjectDelete("EQUITY"); return(0); } int start() { ObjectCreate("Liverage", OBJ_LABEL, 0, 0, 0, 0, 0); ObjectSet("Liverage", OBJPROP_CORNER, 2); ObjectSet("Liverage", OBJPROP_YDISTANCE, 15); ObjectSet("Liverage", OBJPROP_XDISTANCE, 10); ObjectSetText("Liverage", "Liverage " + AccountLeverage(), 8, "Tahoma", Yellow); ObjectCreate("Spead", OBJ_LABEL, 0, 0, 0, 0, 0); ObjectSet("Spead", OBJPROP_CORNER, 2); ObjectSet("Spead", OBJPROP_YDISTANCE, 30); ObjectSet("Spead", OBJPROP_XDISTANCE, 10); ObjectSetText("Spead", "Spead " + DoubleToStr((Ask - Bid) / Point, 0), 8, "Tahoma",Yellow ); ObjectCreate("StopLevel", OBJ_LABEL, 0, 0, 0, 0, 0); ObjectSet("StopLevel", OBJPROP_CORNER, 2); ObjectSet("StopLevel", OBJPROP_YDISTANCE, 45); ObjectSet("StopLevel", OBJPROP_XDISTANCE, 10); ObjectSetText("StopLevel", "StopLevel " + DoubleToStr(MarketInfo(Symbol(), MODE_STOPLEVEL),0), 8, "Tahoma",Yellow ); ObjectCreate("BALANSE", OBJ_LABEL, 0, 0, 0, 0, 0); ObjectSet("BALANSE", OBJPROP_CORNER, 2); ObjectSet("BALANSE", OBJPROP_YDISTANCE, 60); ObjectSet("BALANSE", OBJPROP_XDISTANCE, 10); ObjectSetText("BALANSE", "BALANSE " + DoubleToStr(AccountBalance(),2), 8, "Tahoma",Aqua ); ObjectCreate("EQUITY", OBJ_LABEL, 0, 0, 0, 0, 0); ObjectSet("EQUITY", OBJPROP_CORNER, 2); ObjectSet("EQUITY", OBJPROP_YDISTANCE, 75); ObjectSet("EQUITY", OBJPROP_XDISTANCE, 10); ObjectSetText("EQUITY", "EQUITY " + DoubleToStr(AccountEquity(),2),12, "Tahoma",Lime ); if(AccountEquity()<AccountBalance())ObjectSet("EQUITY", OBJPROP_COLOR, Red); if(AccountEquity()>AccountBalance())ObjectSet("EQUITY", OBJPROP_COLOR, Aqua); if(OrdersTotal()==0) OpenPos(); int res2=GlobalVariableGet("Ticket"); OrderSelect(res2,SELECT_BY_TICKET, MODE_TRADES); if(OrderType()>1 && OrderLots()==Lot*2) TralingStop(); if(Perekrytie==false && OrdersTotal()==1) TralingStop(); if(OrderType()<2 && Perekrytie==true) OpenOtlOrders(); if(OrdersTotal()==1 && OrderType()>1) { OrderDelete(res2); } if(OrderLots()>Lot*2 && AccountProfit()>Profit)CloseAllOrders(); return(0); } void OpenPos() { //Открытие позиций---- double max=High[1]; for( int i=1; i<7; i++) { if(High[i]>max) max=High[i]; } double min=Low[1]; for( i=1; i<6; i++) { if(Low[i]<min) min=Low[i]; } double ma1=iMA(NULL,0, Maperiod1,0,1,0,1); double ma2=iMA(NULL,0, Maperiod1,0,1,0,4); double ma3=iMA(NULL,0, Maperiod2,0,1,0,1); double ma4=iMA(NULL,0, Maperiod2,0,1,0,20); Stop=StopLoss; if(Ask<min && ma1<ma2 && ma4>ma3) { RefreshRates(); int res=OrderSend(Symbol(),OP_SELL,Lot, Bid, 0, 0, 0, "....", 1,0,Red); Print(GetLastError()); if(Perekrytie==true && res!=-1) int res2=OrderSend(Symbol(),OP_BUYSTOP,2*Lot,NormalizeDouble(Bid+Stop*Point, Digits), 20, 0, 0, "....", 1,0,Red); double Price= Bid+Stop*Point; GlobalVariableSet("Openprice",Price); double Price2= Bid; GlobalVariableSet("Openprice2",Price2); GlobalVariableSet("Ticket",res2); GlobalVariableSet("Ticket1",res); } if(Bid>max && ma1>ma2 && ma3>ma4) { RefreshRates(); res=OrderSend(Symbol(),OP_BUY,Lot, Ask, 20, 0, 0, "....", 0,0,Red); Print(GetLastError()); if(Perekrytie==true)res2=OrderSend(Symbol(),OP_SELLSTOP,2*Lot,NormalizeDouble( Bid-Stop*Point, Digits), 20, 0, 0, "....", 0,0,Red); Price= Bid-Stop*Point; GlobalVariableSet("Openprice",Price); Price2= Ask; GlobalVariableSet("Openprice2",Price2); GlobalVariableSet("Ticket",res2); GlobalVariableSet("Ticket1",res); } return; } void OpenOtlOrders() { double Prise=GlobalVariableGet("Openprice"); double Prise2=GlobalVariableGet("Openprice2"); int res=GlobalVariableGet("Ticket1"); OrderSelect(res,SELECT_BY_TICKET,MODE_TRADES); if(OrderType()==OP_SELL) { if(MathMod(OrdersTotal(),2)==0) { RefreshRates(); double Price=Prise2; double Prices=Price; double c=OrderSend(Symbol(),OP_SELLSTOP,MathPow(2,OrdersTotal())*Lot, Prices, 10, 0, 0, "...",0,0,Red); GlobalVariableSet("Ticket",c); } if(MathMod(OrdersTotal(),2)==1) { Price=Prise; Prices=Price; c=OrderSend(Symbol(),OP_BUYSTOP,MathPow(2,OrdersTotal())*Lot, Prices, 10, 0,0, "...",0,0,Red); GlobalVariableSet("Ticket",c); } } if(OrderType()==OP_BUY) { if(MathMod(OrdersTotal(),2)==1) { Price=Prise; Prices=Price; c=OrderSend(Symbol(),OP_SELLSTOP,MathPow(2,OrdersTotal())*Lot, Prices, 10, 0, 0, "...",0,0,Red); GlobalVariableSet("Ticket",c); } if(MathMod(OrdersTotal(),2)==0) { Price=Prise2; Prices=Price; c=OrderSend(Symbol(),OP_BUYSTOP,MathPow(2,OrdersTotal())*Lot, Prices, 10, 0,0, "...",0,0,Red); GlobalVariableSet("Ticket",c); } } return; } void CloseAllOrders() { for(int i=0; i<OrdersTotal(); i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if(OrderType()==OP_BUY) bool d=OrderClose(OrderTicket(), OrderLots(),Bid,10,Red); if(OrderType()==OP_SELL)d= OrderClose(OrderTicket(),OrderLots(),Ask,10,Red); } return(0); } void TralingStop() { for(int cnt=0;cnt<OrdersTotal();cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && // check for opened position OrderSymbol()==Symbol()) // check for symbol { if(OrderType()==OP_BUY) // long position is opened { // should it be closed? // check for trailing stop if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green); return(0); } } } } else // go to short position { if(TrailingStop>0) { if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); return(0); } } } } } } return; } //+------------------------------------------------------------------+
Файлы:
alex_9.mq4
7 kb
Да, спасибо...
Просто я тут недавно, в общем по сути нуб
Нуб не нуб, а закрутил такую бодягу с ценами, что кроме вас там никто и не разберется. Навскидку - используете одну и туже цену для байстопа и селлстопа.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь