Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Запусти агентов на свободном компьютере. Это принесет доход!
alex_999-09
72
alex_999-09 2011.08.19 10:12 
Написал советник по работе с перекрытиями. однако работает через раз..постоянно возникает ошибка в функции OrderSend номер 131...Хотя я не стопов не профитов вообще не ставлю!.Видимо ошибка в самой логике программы, но я не вижу в чем!Помогите пожалуйста...
Файлы:
alex_9_1.mq4 7 kb
ilunga
744
ilunga 2011.08.19 10:23  
Alex_9:
Написал советник по работе с перекрытиями. однако работает через раз..постоянно возникает ошибка в функции OrderSend номер 131...Хотя я не стопов не профитов вообще не ставлю!.Видимо ошибка в самой логике программы, но я не вижу в чем!Помогите пожалуйста...
131 - это не стопы, а объем сделки
ERR_INVALID_TRADE_VOLUME 131 Invalid trade volume.
alex_999-09
72
alex_999-09 2011.08.19 10:26  
ilunga:
131 - это не стопы, а объем сделки
ERR_INVALID_TRADE_VOLUME 131 Invalid trade volume.

Извиняюсь, перепутал, выдает 130 ошибку..
Виктор
Модератор
6560
Виктор 2011.08.19 11:28  
Так Вас читать никто не будет. Хотя бы так сделать.
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
alex_999-09
72
alex_999-09 2011.08.19 11:31  
Да, спасибо...
alex_999-09
72
alex_999-09 2011.08.19 11:32  
Просто я тут недавно, в общем по сути нуб
Alexander
2441
Alexander 2011.08.19 17:06  
Нуб не нуб, а закрутил такую бодягу с ценами, что кроме вас там никто и не разберется. Навскидку - используете одну и туже цену для байстопа и селлстопа.
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий